/export/starexec/sandbox2/solver/bin/starexec_run_complexity /export/starexec/sandbox2/benchmark/theBenchmark.xml /export/starexec/sandbox2/output/output_files -------------------------------------------------------------------------------- WORST_CASE(Omega(n^1), O(n^5)) proof of /export/starexec/sandbox2/benchmark/theBenchmark.xml # AProVE Commit ID: 794c25de1cacf0d048858bcd21c9a779e1221865 marcel 20200619 unpublished dirty The Runtime Complexity (innermost) of the given CpxRelTRS could be proven to be BOUNDS(n^1, n^5). (0) CpxRelTRS (1) SInnermostTerminationProof [BOTH CONCRETE BOUNDS(ID, ID), 921 ms] (2) CpxRelTRS (3) RelTrsToWeightedTrsProof [BOTH BOUNDS(ID, ID), 0 ms] (4) CpxWeightedTrs (5) CpxWeightedTrsRenamingProof [BOTH BOUNDS(ID, ID), 0 ms] (6) CpxWeightedTrs (7) TypeInferenceProof [BOTH BOUNDS(ID, ID), 0 ms] (8) CpxTypedWeightedTrs (9) CompletionProof [UPPER BOUND(ID), 0 ms] (10) CpxTypedWeightedCompleteTrs (11) NarrowingProof [BOTH BOUNDS(ID, ID), 1545 ms] (12) CpxTypedWeightedCompleteTrs (13) CpxTypedWeightedTrsToRntsProof [UPPER BOUND(ID), 16 ms] (14) CpxRNTS (15) InliningProof [UPPER BOUND(ID), 5732 ms] (16) CpxRNTS (17) SimplificationProof [BOTH BOUNDS(ID, ID), 25 ms] (18) CpxRNTS (19) CpxRntsAnalysisOrderProof [BOTH BOUNDS(ID, ID), 0 ms] (20) CpxRNTS (21) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (22) CpxRNTS (23) IntTrsBoundProof [UPPER BOUND(ID), 151 ms] (24) CpxRNTS (25) IntTrsBoundProof [UPPER BOUND(ID), 37 ms] (26) CpxRNTS (27) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (28) CpxRNTS (29) IntTrsBoundProof [UPPER BOUND(ID), 100 ms] (30) CpxRNTS (31) IntTrsBoundProof [UPPER BOUND(ID), 53 ms] (32) CpxRNTS (33) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (34) CpxRNTS (35) IntTrsBoundProof [UPPER BOUND(ID), 170 ms] (36) CpxRNTS (37) IntTrsBoundProof [UPPER BOUND(ID), 54 ms] (38) CpxRNTS (39) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (40) CpxRNTS (41) IntTrsBoundProof [UPPER BOUND(ID), 379 ms] (42) CpxRNTS (43) IntTrsBoundProof [UPPER BOUND(ID), 114 ms] (44) CpxRNTS (45) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (46) CpxRNTS (47) IntTrsBoundProof [UPPER BOUND(ID), 140 ms] (48) CpxRNTS (49) IntTrsBoundProof [UPPER BOUND(ID), 64 ms] (50) CpxRNTS (51) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (52) CpxRNTS (53) IntTrsBoundProof [UPPER BOUND(ID), 640 ms] (54) CpxRNTS (55) IntTrsBoundProof [UPPER BOUND(ID), 74 ms] (56) CpxRNTS (57) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (58) CpxRNTS (59) IntTrsBoundProof [UPPER BOUND(ID), 299 ms] (60) CpxRNTS (61) IntTrsBoundProof [UPPER BOUND(ID), 63 ms] (62) CpxRNTS (63) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (64) CpxRNTS (65) IntTrsBoundProof [UPPER BOUND(ID), 391 ms] (66) CpxRNTS (67) IntTrsBoundProof [UPPER BOUND(ID), 104 ms] (68) CpxRNTS (69) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (70) CpxRNTS (71) IntTrsBoundProof [UPPER BOUND(ID), 177 ms] (72) CpxRNTS (73) IntTrsBoundProof [UPPER BOUND(ID), 2 ms] (74) CpxRNTS (75) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (76) CpxRNTS (77) IntTrsBoundProof [UPPER BOUND(ID), 980 ms] (78) CpxRNTS (79) IntTrsBoundProof [UPPER BOUND(ID), 174 ms] (80) CpxRNTS (81) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (82) CpxRNTS (83) IntTrsBoundProof [UPPER BOUND(ID), 219 ms] (84) CpxRNTS (85) IntTrsBoundProof [UPPER BOUND(ID), 62 ms] (86) CpxRNTS (87) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (88) CpxRNTS (89) IntTrsBoundProof [UPPER BOUND(ID), 196 ms] (90) CpxRNTS (91) IntTrsBoundProof [UPPER BOUND(ID), 52 ms] (92) CpxRNTS (93) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (94) CpxRNTS (95) IntTrsBoundProof [UPPER BOUND(ID), 237 ms] (96) CpxRNTS (97) IntTrsBoundProof [UPPER BOUND(ID), 3 ms] (98) CpxRNTS (99) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (100) CpxRNTS (101) IntTrsBoundProof [UPPER BOUND(ID), 545 ms] (102) CpxRNTS (103) IntTrsBoundProof [UPPER BOUND(ID), 137 ms] (104) CpxRNTS (105) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (106) CpxRNTS (107) IntTrsBoundProof [UPPER BOUND(ID), 2138 ms] (108) CpxRNTS (109) IntTrsBoundProof [UPPER BOUND(ID), 332 ms] (110) CpxRNTS (111) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (112) CpxRNTS (113) IntTrsBoundProof [UPPER BOUND(ID), 530 ms] (114) CpxRNTS (115) IntTrsBoundProof [UPPER BOUND(ID), 163 ms] (116) CpxRNTS (117) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (118) CpxRNTS (119) IntTrsBoundProof [UPPER BOUND(ID), 691 ms] (120) CpxRNTS (121) IntTrsBoundProof [UPPER BOUND(ID), 325 ms] (122) CpxRNTS (123) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (124) CpxRNTS (125) IntTrsBoundProof [UPPER BOUND(ID), 594 ms] (126) CpxRNTS (127) IntTrsBoundProof [UPPER BOUND(ID), 5 ms] (128) CpxRNTS (129) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (130) CpxRNTS (131) IntTrsBoundProof [UPPER BOUND(ID), 318 ms] (132) CpxRNTS (133) IntTrsBoundProof [UPPER BOUND(ID), 53 ms] (134) CpxRNTS (135) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (136) CpxRNTS (137) IntTrsBoundProof [UPPER BOUND(ID), 491 ms] (138) CpxRNTS (139) IntTrsBoundProof [UPPER BOUND(ID), 104 ms] (140) CpxRNTS (141) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (142) CpxRNTS (143) IntTrsBoundProof [UPPER BOUND(ID), 189 ms] (144) CpxRNTS (145) IntTrsBoundProof [UPPER BOUND(ID), 0 ms] (146) CpxRNTS (147) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (148) CpxRNTS (149) IntTrsBoundProof [UPPER BOUND(ID), 298 ms] (150) CpxRNTS (151) IntTrsBoundProof [UPPER BOUND(ID), 3 ms] (152) CpxRNTS (153) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (154) CpxRNTS (155) IntTrsBoundProof [UPPER BOUND(ID), 492 ms] (156) CpxRNTS (157) IntTrsBoundProof [UPPER BOUND(ID), 94 ms] (158) CpxRNTS (159) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (160) CpxRNTS (161) IntTrsBoundProof [UPPER BOUND(ID), 258 ms] (162) CpxRNTS (163) IntTrsBoundProof [UPPER BOUND(ID), 32 ms] (164) CpxRNTS (165) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (166) CpxRNTS (167) IntTrsBoundProof [UPPER BOUND(ID), 136 ms] (168) CpxRNTS (169) IntTrsBoundProof [UPPER BOUND(ID), 11 ms] (170) CpxRNTS (171) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (172) CpxRNTS (173) IntTrsBoundProof [UPPER BOUND(ID), 196 ms] (174) CpxRNTS (175) IntTrsBoundProof [UPPER BOUND(ID), 1 ms] (176) CpxRNTS (177) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (178) CpxRNTS (179) IntTrsBoundProof [UPPER BOUND(ID), 809 ms] (180) CpxRNTS (181) IntTrsBoundProof [UPPER BOUND(ID), 62 ms] (182) CpxRNTS (183) ResultPropagationProof [UPPER BOUND(ID), 2 ms] (184) CpxRNTS (185) IntTrsBoundProof [UPPER BOUND(ID), 186 ms] (186) CpxRNTS (187) IntTrsBoundProof [UPPER BOUND(ID), 51 ms] (188) CpxRNTS (189) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (190) CpxRNTS (191) IntTrsBoundProof [UPPER BOUND(ID), 188 ms] (192) CpxRNTS (193) IntTrsBoundProof [UPPER BOUND(ID), 72 ms] (194) CpxRNTS (195) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (196) CpxRNTS (197) IntTrsBoundProof [UPPER BOUND(ID), 296 ms] (198) CpxRNTS (199) IntTrsBoundProof [UPPER BOUND(ID), 72 ms] (200) CpxRNTS (201) ResultPropagationProof [UPPER BOUND(ID), 4 ms] (202) CpxRNTS (203) IntTrsBoundProof [UPPER BOUND(ID), 657 ms] (204) CpxRNTS (205) IntTrsBoundProof [UPPER BOUND(ID), 53 ms] (206) CpxRNTS (207) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (208) CpxRNTS (209) IntTrsBoundProof [UPPER BOUND(ID), 1639 ms] (210) CpxRNTS (211) IntTrsBoundProof [UPPER BOUND(ID), 78 ms] (212) CpxRNTS (213) ResultPropagationProof [UPPER BOUND(ID), 3 ms] (214) CpxRNTS (215) IntTrsBoundProof [UPPER BOUND(ID), 155 ms] (216) CpxRNTS (217) IntTrsBoundProof [UPPER BOUND(ID), 51 ms] (218) CpxRNTS (219) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (220) CpxRNTS (221) IntTrsBoundProof [UPPER BOUND(ID), 346 ms] (222) CpxRNTS (223) IntTrsBoundProof [UPPER BOUND(ID), 83 ms] (224) CpxRNTS (225) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (226) CpxRNTS (227) IntTrsBoundProof [UPPER BOUND(ID), 776 ms] (228) CpxRNTS (229) IntTrsBoundProof [UPPER BOUND(ID), 1 ms] (230) CpxRNTS (231) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (232) CpxRNTS (233) IntTrsBoundProof [UPPER BOUND(ID), 585 ms] (234) CpxRNTS (235) IntTrsBoundProof [UPPER BOUND(ID), 61 ms] (236) CpxRNTS (237) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (238) CpxRNTS (239) IntTrsBoundProof [UPPER BOUND(ID), 217 ms] (240) CpxRNTS (241) IntTrsBoundProof [UPPER BOUND(ID), 53 ms] (242) CpxRNTS (243) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (244) CpxRNTS (245) IntTrsBoundProof [UPPER BOUND(ID), 649 ms] (246) CpxRNTS (247) IntTrsBoundProof [UPPER BOUND(ID), 336 ms] (248) CpxRNTS (249) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (250) CpxRNTS (251) IntTrsBoundProof [UPPER BOUND(ID), 206 ms] (252) CpxRNTS (253) IntTrsBoundProof [UPPER BOUND(ID), 2 ms] (254) CpxRNTS (255) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (256) CpxRNTS (257) IntTrsBoundProof [UPPER BOUND(ID), 997 ms] (258) CpxRNTS (259) IntTrsBoundProof [UPPER BOUND(ID), 72 ms] (260) CpxRNTS (261) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (262) CpxRNTS (263) IntTrsBoundProof [UPPER BOUND(ID), 4235 ms] (264) CpxRNTS (265) IntTrsBoundProof [UPPER BOUND(ID), 626 ms] (266) CpxRNTS (267) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (268) CpxRNTS (269) IntTrsBoundProof [UPPER BOUND(ID), 207 ms] (270) CpxRNTS (271) IntTrsBoundProof [UPPER BOUND(ID), 83 ms] (272) CpxRNTS (273) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (274) CpxRNTS (275) IntTrsBoundProof [UPPER BOUND(ID), 759 ms] (276) CpxRNTS (277) IntTrsBoundProof [UPPER BOUND(ID), 348 ms] (278) CpxRNTS (279) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (280) CpxRNTS (281) IntTrsBoundProof [UPPER BOUND(ID), 616 ms] (282) CpxRNTS (283) IntTrsBoundProof [UPPER BOUND(ID), 2 ms] (284) CpxRNTS (285) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (286) CpxRNTS (287) IntTrsBoundProof [UPPER BOUND(ID), 367 ms] (288) CpxRNTS (289) IntTrsBoundProof [UPPER BOUND(ID), 93 ms] (290) CpxRNTS (291) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (292) CpxRNTS (293) IntTrsBoundProof [UPPER BOUND(ID), 197 ms] (294) CpxRNTS (295) IntTrsBoundProof [UPPER BOUND(ID), 11 ms] (296) CpxRNTS (297) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (298) CpxRNTS (299) IntTrsBoundProof [UPPER BOUND(ID), 115 ms] (300) CpxRNTS (301) IntTrsBoundProof [UPPER BOUND(ID), 61 ms] (302) CpxRNTS (303) ResultPropagationProof [UPPER BOUND(ID), 2 ms] (304) CpxRNTS (305) IntTrsBoundProof [UPPER BOUND(ID), 747 ms] (306) CpxRNTS (307) IntTrsBoundProof [UPPER BOUND(ID), 72 ms] (308) CpxRNTS (309) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (310) CpxRNTS (311) IntTrsBoundProof [UPPER BOUND(ID), 177 ms] (312) CpxRNTS (313) IntTrsBoundProof [UPPER BOUND(ID), 72 ms] (314) CpxRNTS (315) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (316) CpxRNTS (317) IntTrsBoundProof [UPPER BOUND(ID), 477 ms] (318) CpxRNTS (319) IntTrsBoundProof [UPPER BOUND(ID), 83 ms] (320) CpxRNTS (321) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (322) CpxRNTS (323) IntTrsBoundProof [UPPER BOUND(ID), 696 ms] (324) CpxRNTS (325) IntTrsBoundProof [UPPER BOUND(ID), 0 ms] (326) CpxRNTS (327) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (328) CpxRNTS (329) IntTrsBoundProof [UPPER BOUND(ID), 807 ms] (330) CpxRNTS (331) IntTrsBoundProof [UPPER BOUND(ID), 0 ms] (332) CpxRNTS (333) FinalProof [FINISHED, 0 ms] (334) BOUNDS(1, n^5) (335) RelTrsToDecreasingLoopProblemProof [LOWER BOUND(ID), 0 ms] (336) TRS for Loop Detection (337) DecreasingLoopProof [LOWER BOUND(ID), 354 ms] (338) BEST (339) proven lower bound (340) LowerBoundPropagationProof [FINISHED, 0 ms] (341) BOUNDS(n^1, INF) (342) TRS for Loop Detection ---------------------------------------- (0) Obligation: The Runtime Complexity (innermost) of the given CpxRelTRS could be proven to be BOUNDS(n^1, n^5). The TRS R consists of the following rules: #abs(#0) -> #0 #abs(#neg(@x)) -> #pos(@x) #abs(#pos(@x)) -> #pos(@x) #abs(#s(@x)) -> #pos(#s(@x)) #equal(@x, @y) -> #eq(@x, @y) #greater(@x, @y) -> #ckgt(#compare(@x, @y)) #less(@x, @y) -> #cklt(#compare(@x, @y)) *(@x, @y) -> #mult(@x, @y) +(@x, @y) -> #add(@x, @y) -(@x, @y) -> #sub(@x, @y) add(@b1, @b2) -> add'(@b1, @b2, #abs(#0)) add'(@b1, @b2, @r) -> add'#1(@b1, @b2, @r) add'#1(::(@x, @xs), @b2, @r) -> add'#2(@b2, @r, @x, @xs) add'#1(nil, @b2, @r) -> nil add'#2(::(@y, @ys), @r, @x, @xs) -> add'#3(sum(@x, @y, @r), @xs, @ys) add'#2(nil, @r, @x, @xs) -> nil add'#3(tuple#2(@z, @r'), @xs, @ys) -> ::(@z, add'(@xs, @ys, @r')) bitToInt(@b) -> bitToInt'(@b, #abs(#pos(#s(#0)))) bitToInt'(@b, @n) -> bitToInt'#1(@b, @n) bitToInt'#1(::(@x, @xs), @n) -> +(*(@x, @n), bitToInt'(@xs, *(@n, #pos(#s(#s(#0)))))) bitToInt'#1(nil, @n) -> #abs(#0) compare(@b1, @b2) -> compare#1(@b1, @b2) compare#1(::(@x, @xs), @b2) -> compare#2(@b2, @x, @xs) compare#1(nil, @b2) -> #abs(#0) compare#2(::(@y, @ys), @x, @xs) -> compare#3(compare(@xs, @ys), @x, @y) compare#2(nil, @x, @xs) -> #abs(#0) compare#3(@r, @x, @y) -> compare#4(#equal(@r, #0), @r, @x, @y) compare#4(#false, @r, @x, @y) -> @r compare#4(#true, @r, @x, @y) -> compare#5(#less(@x, @y), @x, @y) compare#5(#false, @x, @y) -> compare#6(#greater(@x, @y)) compare#5(#true, @x, @y) -> -(#0, #pos(#s(#0))) compare#6(#false) -> #abs(#0) compare#6(#true) -> #abs(#pos(#s(#0))) diff(@x, @y, @r) -> tuple#2(mod(+(+(@x, @y), @r), #pos(#s(#s(#0)))), diff#1(#less(-(-(@x, @y), @r), #0))) diff#1(#false) -> #abs(#0) diff#1(#true) -> #abs(#pos(#s(#0))) div(@x, @y) -> #div(@x, @y) leq(@b1, @b2) -> #less(compare(@b1, @b2), #pos(#s(#0))) mod(@x, @y) -> -(@x, *(@x, div(@x, @y))) mult(@b1, @b2) -> mult#1(@b1, @b2) mult#1(::(@x, @xs), @b2) -> mult#2(::(#abs(#0), mult(@xs, @b2)), @b2, @x) mult#1(nil, @b2) -> nil mult#2(@zs, @b2, @x) -> mult#3(#equal(@x, #pos(#s(#0))), @b2, @zs) mult#3(#false, @b2, @zs) -> @zs mult#3(#true, @b2, @zs) -> add(@b2, @zs) mult3(@b1, @b2, @b3) -> mult(mult(@b1, @b2), @b2) sub(@b1, @b2) -> sub#1(sub'(@b1, @b2, #abs(#0))) sub#1(tuple#2(@b, @_@1)) -> @b sub'(@b1, @b2, @r) -> sub'#1(@b1, @b2, @r) sub'#1(::(@x, @xs), @b2, @r) -> sub'#2(@b2, @r, @x, @xs) sub'#1(nil, @b2, @r) -> tuple#2(nil, @r) sub'#2(::(@y, @ys), @r, @x, @xs) -> sub'#3(diff(@x, @y, @r), @xs, @ys) sub'#2(nil, @r, @x, @xs) -> tuple#2(nil, @r) sub'#3(tuple#2(@z, @r'), @xs, @ys) -> sub'#4(sub'(@xs, @ys, @r'), @z) sub'#4(tuple#2(@zs, @s), @z) -> tuple#2(sub'#5(#equal(@s, #pos(#s(#0))), @z, @zs), @s) sub'#5(#false, @z, @zs) -> ::(@z, @zs) sub'#5(#true, @z, @zs) -> ::(#abs(#0), @zs) sum(@x, @y, @r) -> sum#1(+(+(@x, @y), @r)) sum#1(@s) -> sum#2(#equal(@s, #0), @s) sum#2(#false, @s) -> sum#3(#equal(@s, #pos(#s(#0))), @s) sum#2(#true, @s) -> tuple#2(#abs(#0), #abs(#0)) sum#3(#false, @s) -> sum#4(#equal(@s, #pos(#s(#s(#0))))) sum#3(#true, @s) -> tuple#2(#abs(#pos(#s(#0))), #abs(#0)) sum#4(#false) -> tuple#2(#abs(#pos(#s(#0))), #abs(#pos(#s(#0)))) sum#4(#true) -> tuple#2(#abs(#0), #abs(#pos(#s(#0)))) The (relative) TRS S consists of the following rules: #add(#0, @y) -> @y #add(#neg(#s(#0)), @y) -> #pred(@y) #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) #add(#pos(#s(#0)), @y) -> #succ(@y) #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) #and(#false, #false) -> #false #and(#false, #true) -> #false #and(#true, #false) -> #false #and(#true, #true) -> #true #ckgt(#EQ) -> #false #ckgt(#GT) -> #true #ckgt(#LT) -> #false #cklt(#EQ) -> #false #cklt(#GT) -> #false #cklt(#LT) -> #true #compare(#0, #0) -> #EQ #compare(#0, #neg(@y)) -> #GT #compare(#0, #pos(@y)) -> #LT #compare(#0, #s(@y)) -> #LT #compare(#neg(@x), #0) -> #LT #compare(#neg(@x), #neg(@y)) -> #compare(@y, @x) #compare(#neg(@x), #pos(@y)) -> #LT #compare(#pos(@x), #0) -> #GT #compare(#pos(@x), #neg(@y)) -> #GT #compare(#pos(@x), #pos(@y)) -> #compare(@x, @y) #compare(#s(@x), #0) -> #GT #compare(#s(@x), #s(@y)) -> #compare(@x, @y) #div(#0, #0) -> #divByZero #div(#0, #neg(@y)) -> #0 #div(#0, #pos(@y)) -> #0 #div(#neg(@x), #0) -> #divByZero #div(#neg(@x), #neg(@y)) -> #pos(#natdiv(@x, @y)) #div(#neg(@x), #pos(@y)) -> #neg(#natdiv(@x, @y)) #div(#pos(@x), #0) -> #divByZero #div(#pos(@x), #neg(@y)) -> #neg(#natdiv(@x, @y)) #div(#pos(@x), #pos(@y)) -> #pos(#natdiv(@x, @y)) #eq(#0, #0) -> #true #eq(#0, #neg(@y)) -> #false #eq(#0, #pos(@y)) -> #false #eq(#0, #s(@y)) -> #false #eq(#neg(@x), #0) -> #false #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y) #eq(#neg(@x), #pos(@y)) -> #false #eq(#pos(@x), #0) -> #false #eq(#pos(@x), #neg(@y)) -> #false #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y) #eq(#s(@x), #0) -> #false #eq(#s(@x), #s(@y)) -> #eq(@x, @y) #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) -> #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) #eq(::(@x_1, @x_2), nil) -> #false #eq(::(@x_1, @x_2), tuple#2(@y_1, @y_2)) -> #false #eq(nil, ::(@y_1, @y_2)) -> #false #eq(nil, nil) -> #true #eq(nil, tuple#2(@y_1, @y_2)) -> #false #eq(tuple#2(@x_1, @x_2), ::(@y_1, @y_2)) -> #false #eq(tuple#2(@x_1, @x_2), nil) -> #false #eq(tuple#2(@x_1, @x_2), tuple#2(@y_1, @y_2)) -> #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) #mult(#0, #0) -> #0 #mult(#0, #neg(@y)) -> #0 #mult(#0, #pos(@y)) -> #0 #mult(#neg(@x), #0) -> #0 #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) #mult(#pos(@x), #0) -> #0 #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) #natdiv(#0, #0) -> #divByZero #natdiv(#s(@x), #s(@y)) -> #s(#natdiv(#natsub(@x, @y), #s(@y))) #natmult(#0, @y) -> #0 #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) #natsub(@x, #0) -> @x #natsub(#s(@x), #s(@y)) -> #natsub(@x, @y) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) #sub(@x, #0) -> @x #sub(@x, #neg(@y)) -> #add(@x, #pos(@y)) #sub(@x, #pos(@y)) -> #add(@x, #neg(@y)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) Rewrite Strategy: INNERMOST ---------------------------------------- (1) SInnermostTerminationProof (BOTH CONCRETE BOUNDS(ID, ID)) proved innermost termination of relative rules ---------------------------------------- (2) Obligation: The Runtime Complexity (innermost) of the given CpxRelTRS could be proven to be BOUNDS(n^1, n^5). The TRS R consists of the following rules: #abs(#0) -> #0 #abs(#neg(@x)) -> #pos(@x) #abs(#pos(@x)) -> #pos(@x) #abs(#s(@x)) -> #pos(#s(@x)) #equal(@x, @y) -> #eq(@x, @y) #greater(@x, @y) -> #ckgt(#compare(@x, @y)) #less(@x, @y) -> #cklt(#compare(@x, @y)) *(@x, @y) -> #mult(@x, @y) +(@x, @y) -> #add(@x, @y) -(@x, @y) -> #sub(@x, @y) add(@b1, @b2) -> add'(@b1, @b2, #abs(#0)) add'(@b1, @b2, @r) -> add'#1(@b1, @b2, @r) add'#1(::(@x, @xs), @b2, @r) -> add'#2(@b2, @r, @x, @xs) add'#1(nil, @b2, @r) -> nil add'#2(::(@y, @ys), @r, @x, @xs) -> add'#3(sum(@x, @y, @r), @xs, @ys) add'#2(nil, @r, @x, @xs) -> nil add'#3(tuple#2(@z, @r'), @xs, @ys) -> ::(@z, add'(@xs, @ys, @r')) bitToInt(@b) -> bitToInt'(@b, #abs(#pos(#s(#0)))) bitToInt'(@b, @n) -> bitToInt'#1(@b, @n) bitToInt'#1(::(@x, @xs), @n) -> +(*(@x, @n), bitToInt'(@xs, *(@n, #pos(#s(#s(#0)))))) bitToInt'#1(nil, @n) -> #abs(#0) compare(@b1, @b2) -> compare#1(@b1, @b2) compare#1(::(@x, @xs), @b2) -> compare#2(@b2, @x, @xs) compare#1(nil, @b2) -> #abs(#0) compare#2(::(@y, @ys), @x, @xs) -> compare#3(compare(@xs, @ys), @x, @y) compare#2(nil, @x, @xs) -> #abs(#0) compare#3(@r, @x, @y) -> compare#4(#equal(@r, #0), @r, @x, @y) compare#4(#false, @r, @x, @y) -> @r compare#4(#true, @r, @x, @y) -> compare#5(#less(@x, @y), @x, @y) compare#5(#false, @x, @y) -> compare#6(#greater(@x, @y)) compare#5(#true, @x, @y) -> -(#0, #pos(#s(#0))) compare#6(#false) -> #abs(#0) compare#6(#true) -> #abs(#pos(#s(#0))) diff(@x, @y, @r) -> tuple#2(mod(+(+(@x, @y), @r), #pos(#s(#s(#0)))), diff#1(#less(-(-(@x, @y), @r), #0))) diff#1(#false) -> #abs(#0) diff#1(#true) -> #abs(#pos(#s(#0))) div(@x, @y) -> #div(@x, @y) leq(@b1, @b2) -> #less(compare(@b1, @b2), #pos(#s(#0))) mod(@x, @y) -> -(@x, *(@x, div(@x, @y))) mult(@b1, @b2) -> mult#1(@b1, @b2) mult#1(::(@x, @xs), @b2) -> mult#2(::(#abs(#0), mult(@xs, @b2)), @b2, @x) mult#1(nil, @b2) -> nil mult#2(@zs, @b2, @x) -> mult#3(#equal(@x, #pos(#s(#0))), @b2, @zs) mult#3(#false, @b2, @zs) -> @zs mult#3(#true, @b2, @zs) -> add(@b2, @zs) mult3(@b1, @b2, @b3) -> mult(mult(@b1, @b2), @b2) sub(@b1, @b2) -> sub#1(sub'(@b1, @b2, #abs(#0))) sub#1(tuple#2(@b, @_@1)) -> @b sub'(@b1, @b2, @r) -> sub'#1(@b1, @b2, @r) sub'#1(::(@x, @xs), @b2, @r) -> sub'#2(@b2, @r, @x, @xs) sub'#1(nil, @b2, @r) -> tuple#2(nil, @r) sub'#2(::(@y, @ys), @r, @x, @xs) -> sub'#3(diff(@x, @y, @r), @xs, @ys) sub'#2(nil, @r, @x, @xs) -> tuple#2(nil, @r) sub'#3(tuple#2(@z, @r'), @xs, @ys) -> sub'#4(sub'(@xs, @ys, @r'), @z) sub'#4(tuple#2(@zs, @s), @z) -> tuple#2(sub'#5(#equal(@s, #pos(#s(#0))), @z, @zs), @s) sub'#5(#false, @z, @zs) -> ::(@z, @zs) sub'#5(#true, @z, @zs) -> ::(#abs(#0), @zs) sum(@x, @y, @r) -> sum#1(+(+(@x, @y), @r)) sum#1(@s) -> sum#2(#equal(@s, #0), @s) sum#2(#false, @s) -> sum#3(#equal(@s, #pos(#s(#0))), @s) sum#2(#true, @s) -> tuple#2(#abs(#0), #abs(#0)) sum#3(#false, @s) -> sum#4(#equal(@s, #pos(#s(#s(#0))))) sum#3(#true, @s) -> tuple#2(#abs(#pos(#s(#0))), #abs(#0)) sum#4(#false) -> tuple#2(#abs(#pos(#s(#0))), #abs(#pos(#s(#0)))) sum#4(#true) -> tuple#2(#abs(#0), #abs(#pos(#s(#0)))) The (relative) TRS S consists of the following rules: #add(#0, @y) -> @y #add(#neg(#s(#0)), @y) -> #pred(@y) #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) #add(#pos(#s(#0)), @y) -> #succ(@y) #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) #and(#false, #false) -> #false #and(#false, #true) -> #false #and(#true, #false) -> #false #and(#true, #true) -> #true #ckgt(#EQ) -> #false #ckgt(#GT) -> #true #ckgt(#LT) -> #false #cklt(#EQ) -> #false #cklt(#GT) -> #false #cklt(#LT) -> #true #compare(#0, #0) -> #EQ #compare(#0, #neg(@y)) -> #GT #compare(#0, #pos(@y)) -> #LT #compare(#0, #s(@y)) -> #LT #compare(#neg(@x), #0) -> #LT #compare(#neg(@x), #neg(@y)) -> #compare(@y, @x) #compare(#neg(@x), #pos(@y)) -> #LT #compare(#pos(@x), #0) -> #GT #compare(#pos(@x), #neg(@y)) -> #GT #compare(#pos(@x), #pos(@y)) -> #compare(@x, @y) #compare(#s(@x), #0) -> #GT #compare(#s(@x), #s(@y)) -> #compare(@x, @y) #div(#0, #0) -> #divByZero #div(#0, #neg(@y)) -> #0 #div(#0, #pos(@y)) -> #0 #div(#neg(@x), #0) -> #divByZero #div(#neg(@x), #neg(@y)) -> #pos(#natdiv(@x, @y)) #div(#neg(@x), #pos(@y)) -> #neg(#natdiv(@x, @y)) #div(#pos(@x), #0) -> #divByZero #div(#pos(@x), #neg(@y)) -> #neg(#natdiv(@x, @y)) #div(#pos(@x), #pos(@y)) -> #pos(#natdiv(@x, @y)) #eq(#0, #0) -> #true #eq(#0, #neg(@y)) -> #false #eq(#0, #pos(@y)) -> #false #eq(#0, #s(@y)) -> #false #eq(#neg(@x), #0) -> #false #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y) #eq(#neg(@x), #pos(@y)) -> #false #eq(#pos(@x), #0) -> #false #eq(#pos(@x), #neg(@y)) -> #false #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y) #eq(#s(@x), #0) -> #false #eq(#s(@x), #s(@y)) -> #eq(@x, @y) #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) -> #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) #eq(::(@x_1, @x_2), nil) -> #false #eq(::(@x_1, @x_2), tuple#2(@y_1, @y_2)) -> #false #eq(nil, ::(@y_1, @y_2)) -> #false #eq(nil, nil) -> #true #eq(nil, tuple#2(@y_1, @y_2)) -> #false #eq(tuple#2(@x_1, @x_2), ::(@y_1, @y_2)) -> #false #eq(tuple#2(@x_1, @x_2), nil) -> #false #eq(tuple#2(@x_1, @x_2), tuple#2(@y_1, @y_2)) -> #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) #mult(#0, #0) -> #0 #mult(#0, #neg(@y)) -> #0 #mult(#0, #pos(@y)) -> #0 #mult(#neg(@x), #0) -> #0 #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) #mult(#pos(@x), #0) -> #0 #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) #natdiv(#0, #0) -> #divByZero #natdiv(#s(@x), #s(@y)) -> #s(#natdiv(#natsub(@x, @y), #s(@y))) #natmult(#0, @y) -> #0 #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) #natsub(@x, #0) -> @x #natsub(#s(@x), #s(@y)) -> #natsub(@x, @y) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) #sub(@x, #0) -> @x #sub(@x, #neg(@y)) -> #add(@x, #pos(@y)) #sub(@x, #pos(@y)) -> #add(@x, #neg(@y)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) Rewrite Strategy: INNERMOST ---------------------------------------- (3) RelTrsToWeightedTrsProof (BOTH BOUNDS(ID, ID)) Transformed relative TRS to weighted TRS ---------------------------------------- (4) Obligation: The Runtime Complexity (innermost) of the given CpxWeightedTrs could be proven to be BOUNDS(1, n^5). The TRS R consists of the following rules: #abs(#0) -> #0 [1] #abs(#neg(@x)) -> #pos(@x) [1] #abs(#pos(@x)) -> #pos(@x) [1] #abs(#s(@x)) -> #pos(#s(@x)) [1] #equal(@x, @y) -> #eq(@x, @y) [1] #greater(@x, @y) -> #ckgt(#compare(@x, @y)) [1] #less(@x, @y) -> #cklt(#compare(@x, @y)) [1] *(@x, @y) -> #mult(@x, @y) [1] +(@x, @y) -> #add(@x, @y) [1] -(@x, @y) -> #sub(@x, @y) [1] add(@b1, @b2) -> add'(@b1, @b2, #abs(#0)) [1] add'(@b1, @b2, @r) -> add'#1(@b1, @b2, @r) [1] add'#1(::(@x, @xs), @b2, @r) -> add'#2(@b2, @r, @x, @xs) [1] add'#1(nil, @b2, @r) -> nil [1] add'#2(::(@y, @ys), @r, @x, @xs) -> add'#3(sum(@x, @y, @r), @xs, @ys) [1] add'#2(nil, @r, @x, @xs) -> nil [1] add'#3(tuple#2(@z, @r'), @xs, @ys) -> ::(@z, add'(@xs, @ys, @r')) [1] bitToInt(@b) -> bitToInt'(@b, #abs(#pos(#s(#0)))) [1] bitToInt'(@b, @n) -> bitToInt'#1(@b, @n) [1] bitToInt'#1(::(@x, @xs), @n) -> +(*(@x, @n), bitToInt'(@xs, *(@n, #pos(#s(#s(#0)))))) [1] bitToInt'#1(nil, @n) -> #abs(#0) [1] compare(@b1, @b2) -> compare#1(@b1, @b2) [1] compare#1(::(@x, @xs), @b2) -> compare#2(@b2, @x, @xs) [1] compare#1(nil, @b2) -> #abs(#0) [1] compare#2(::(@y, @ys), @x, @xs) -> compare#3(compare(@xs, @ys), @x, @y) [1] compare#2(nil, @x, @xs) -> #abs(#0) [1] compare#3(@r, @x, @y) -> compare#4(#equal(@r, #0), @r, @x, @y) [1] compare#4(#false, @r, @x, @y) -> @r [1] compare#4(#true, @r, @x, @y) -> compare#5(#less(@x, @y), @x, @y) [1] compare#5(#false, @x, @y) -> compare#6(#greater(@x, @y)) [1] compare#5(#true, @x, @y) -> -(#0, #pos(#s(#0))) [1] compare#6(#false) -> #abs(#0) [1] compare#6(#true) -> #abs(#pos(#s(#0))) [1] diff(@x, @y, @r) -> tuple#2(mod(+(+(@x, @y), @r), #pos(#s(#s(#0)))), diff#1(#less(-(-(@x, @y), @r), #0))) [1] diff#1(#false) -> #abs(#0) [1] diff#1(#true) -> #abs(#pos(#s(#0))) [1] div(@x, @y) -> #div(@x, @y) [1] leq(@b1, @b2) -> #less(compare(@b1, @b2), #pos(#s(#0))) [1] mod(@x, @y) -> -(@x, *(@x, div(@x, @y))) [1] mult(@b1, @b2) -> mult#1(@b1, @b2) [1] mult#1(::(@x, @xs), @b2) -> mult#2(::(#abs(#0), mult(@xs, @b2)), @b2, @x) [1] mult#1(nil, @b2) -> nil [1] mult#2(@zs, @b2, @x) -> mult#3(#equal(@x, #pos(#s(#0))), @b2, @zs) [1] mult#3(#false, @b2, @zs) -> @zs [1] mult#3(#true, @b2, @zs) -> add(@b2, @zs) [1] mult3(@b1, @b2, @b3) -> mult(mult(@b1, @b2), @b2) [1] sub(@b1, @b2) -> sub#1(sub'(@b1, @b2, #abs(#0))) [1] sub#1(tuple#2(@b, @_@1)) -> @b [1] sub'(@b1, @b2, @r) -> sub'#1(@b1, @b2, @r) [1] sub'#1(::(@x, @xs), @b2, @r) -> sub'#2(@b2, @r, @x, @xs) [1] sub'#1(nil, @b2, @r) -> tuple#2(nil, @r) [1] sub'#2(::(@y, @ys), @r, @x, @xs) -> sub'#3(diff(@x, @y, @r), @xs, @ys) [1] sub'#2(nil, @r, @x, @xs) -> tuple#2(nil, @r) [1] sub'#3(tuple#2(@z, @r'), @xs, @ys) -> sub'#4(sub'(@xs, @ys, @r'), @z) [1] sub'#4(tuple#2(@zs, @s), @z) -> tuple#2(sub'#5(#equal(@s, #pos(#s(#0))), @z, @zs), @s) [1] sub'#5(#false, @z, @zs) -> ::(@z, @zs) [1] sub'#5(#true, @z, @zs) -> ::(#abs(#0), @zs) [1] sum(@x, @y, @r) -> sum#1(+(+(@x, @y), @r)) [1] sum#1(@s) -> sum#2(#equal(@s, #0), @s) [1] sum#2(#false, @s) -> sum#3(#equal(@s, #pos(#s(#0))), @s) [1] sum#2(#true, @s) -> tuple#2(#abs(#0), #abs(#0)) [1] sum#3(#false, @s) -> sum#4(#equal(@s, #pos(#s(#s(#0))))) [1] sum#3(#true, @s) -> tuple#2(#abs(#pos(#s(#0))), #abs(#0)) [1] sum#4(#false) -> tuple#2(#abs(#pos(#s(#0))), #abs(#pos(#s(#0)))) [1] sum#4(#true) -> tuple#2(#abs(#0), #abs(#pos(#s(#0)))) [1] #add(#0, @y) -> @y [0] #add(#neg(#s(#0)), @y) -> #pred(@y) [0] #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) [0] #add(#pos(#s(#0)), @y) -> #succ(@y) [0] #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) [0] #and(#false, #false) -> #false [0] #and(#false, #true) -> #false [0] #and(#true, #false) -> #false [0] #and(#true, #true) -> #true [0] #ckgt(#EQ) -> #false [0] #ckgt(#GT) -> #true [0] #ckgt(#LT) -> #false [0] #cklt(#EQ) -> #false [0] #cklt(#GT) -> #false [0] #cklt(#LT) -> #true [0] #compare(#0, #0) -> #EQ [0] #compare(#0, #neg(@y)) -> #GT [0] #compare(#0, #pos(@y)) -> #LT [0] #compare(#0, #s(@y)) -> #LT [0] #compare(#neg(@x), #0) -> #LT [0] #compare(#neg(@x), #neg(@y)) -> #compare(@y, @x) [0] #compare(#neg(@x), #pos(@y)) -> #LT [0] #compare(#pos(@x), #0) -> #GT [0] #compare(#pos(@x), #neg(@y)) -> #GT [0] #compare(#pos(@x), #pos(@y)) -> #compare(@x, @y) [0] #compare(#s(@x), #0) -> #GT [0] #compare(#s(@x), #s(@y)) -> #compare(@x, @y) [0] #div(#0, #0) -> #divByZero [0] #div(#0, #neg(@y)) -> #0 [0] #div(#0, #pos(@y)) -> #0 [0] #div(#neg(@x), #0) -> #divByZero [0] #div(#neg(@x), #neg(@y)) -> #pos(#natdiv(@x, @y)) [0] #div(#neg(@x), #pos(@y)) -> #neg(#natdiv(@x, @y)) [0] #div(#pos(@x), #0) -> #divByZero [0] #div(#pos(@x), #neg(@y)) -> #neg(#natdiv(@x, @y)) [0] #div(#pos(@x), #pos(@y)) -> #pos(#natdiv(@x, @y)) [0] #eq(#0, #0) -> #true [0] #eq(#0, #neg(@y)) -> #false [0] #eq(#0, #pos(@y)) -> #false [0] #eq(#0, #s(@y)) -> #false [0] #eq(#neg(@x), #0) -> #false [0] #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y) [0] #eq(#neg(@x), #pos(@y)) -> #false [0] #eq(#pos(@x), #0) -> #false [0] #eq(#pos(@x), #neg(@y)) -> #false [0] #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y) [0] #eq(#s(@x), #0) -> #false [0] #eq(#s(@x), #s(@y)) -> #eq(@x, @y) [0] #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) -> #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) [0] #eq(::(@x_1, @x_2), nil) -> #false [0] #eq(::(@x_1, @x_2), tuple#2(@y_1, @y_2)) -> #false [0] #eq(nil, ::(@y_1, @y_2)) -> #false [0] #eq(nil, nil) -> #true [0] #eq(nil, tuple#2(@y_1, @y_2)) -> #false [0] #eq(tuple#2(@x_1, @x_2), ::(@y_1, @y_2)) -> #false [0] #eq(tuple#2(@x_1, @x_2), nil) -> #false [0] #eq(tuple#2(@x_1, @x_2), tuple#2(@y_1, @y_2)) -> #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) [0] #mult(#0, #0) -> #0 [0] #mult(#0, #neg(@y)) -> #0 [0] #mult(#0, #pos(@y)) -> #0 [0] #mult(#neg(@x), #0) -> #0 [0] #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) [0] #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) [0] #mult(#pos(@x), #0) -> #0 [0] #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) [0] #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) [0] #natdiv(#0, #0) -> #divByZero [0] #natdiv(#s(@x), #s(@y)) -> #s(#natdiv(#natsub(@x, @y), #s(@y))) [0] #natmult(#0, @y) -> #0 [0] #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) [0] #natsub(@x, #0) -> @x [0] #natsub(#s(@x), #s(@y)) -> #natsub(@x, @y) [0] #pred(#0) -> #neg(#s(#0)) [0] #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) [0] #pred(#pos(#s(#0))) -> #0 [0] #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) [0] #sub(@x, #0) -> @x [0] #sub(@x, #neg(@y)) -> #add(@x, #pos(@y)) [0] #sub(@x, #pos(@y)) -> #add(@x, #neg(@y)) [0] #succ(#0) -> #pos(#s(#0)) [0] #succ(#neg(#s(#0))) -> #0 [0] #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) [0] #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) [0] Rewrite Strategy: INNERMOST ---------------------------------------- (5) CpxWeightedTrsRenamingProof (BOTH BOUNDS(ID, ID)) Renamed defined symbols to avoid conflicts with arithmetic symbols: * => times + => plus - => minus ---------------------------------------- (6) Obligation: The Runtime Complexity (innermost) of the given CpxWeightedTrs could be proven to be BOUNDS(1, n^5). The TRS R consists of the following rules: #abs(#0) -> #0 [1] #abs(#neg(@x)) -> #pos(@x) [1] #abs(#pos(@x)) -> #pos(@x) [1] #abs(#s(@x)) -> #pos(#s(@x)) [1] #equal(@x, @y) -> #eq(@x, @y) [1] #greater(@x, @y) -> #ckgt(#compare(@x, @y)) [1] #less(@x, @y) -> #cklt(#compare(@x, @y)) [1] times(@x, @y) -> #mult(@x, @y) [1] plus(@x, @y) -> #add(@x, @y) [1] minus(@x, @y) -> #sub(@x, @y) [1] add(@b1, @b2) -> add'(@b1, @b2, #abs(#0)) [1] add'(@b1, @b2, @r) -> add'#1(@b1, @b2, @r) [1] add'#1(::(@x, @xs), @b2, @r) -> add'#2(@b2, @r, @x, @xs) [1] add'#1(nil, @b2, @r) -> nil [1] add'#2(::(@y, @ys), @r, @x, @xs) -> add'#3(sum(@x, @y, @r), @xs, @ys) [1] add'#2(nil, @r, @x, @xs) -> nil [1] add'#3(tuple#2(@z, @r'), @xs, @ys) -> ::(@z, add'(@xs, @ys, @r')) [1] bitToInt(@b) -> bitToInt'(@b, #abs(#pos(#s(#0)))) [1] bitToInt'(@b, @n) -> bitToInt'#1(@b, @n) [1] bitToInt'#1(::(@x, @xs), @n) -> plus(times(@x, @n), bitToInt'(@xs, times(@n, #pos(#s(#s(#0)))))) [1] bitToInt'#1(nil, @n) -> #abs(#0) [1] compare(@b1, @b2) -> compare#1(@b1, @b2) [1] compare#1(::(@x, @xs), @b2) -> compare#2(@b2, @x, @xs) [1] compare#1(nil, @b2) -> #abs(#0) [1] compare#2(::(@y, @ys), @x, @xs) -> compare#3(compare(@xs, @ys), @x, @y) [1] compare#2(nil, @x, @xs) -> #abs(#0) [1] compare#3(@r, @x, @y) -> compare#4(#equal(@r, #0), @r, @x, @y) [1] compare#4(#false, @r, @x, @y) -> @r [1] compare#4(#true, @r, @x, @y) -> compare#5(#less(@x, @y), @x, @y) [1] compare#5(#false, @x, @y) -> compare#6(#greater(@x, @y)) [1] compare#5(#true, @x, @y) -> minus(#0, #pos(#s(#0))) [1] compare#6(#false) -> #abs(#0) [1] compare#6(#true) -> #abs(#pos(#s(#0))) [1] diff(@x, @y, @r) -> tuple#2(mod(plus(plus(@x, @y), @r), #pos(#s(#s(#0)))), diff#1(#less(minus(minus(@x, @y), @r), #0))) [1] diff#1(#false) -> #abs(#0) [1] diff#1(#true) -> #abs(#pos(#s(#0))) [1] div(@x, @y) -> #div(@x, @y) [1] leq(@b1, @b2) -> #less(compare(@b1, @b2), #pos(#s(#0))) [1] mod(@x, @y) -> minus(@x, times(@x, div(@x, @y))) [1] mult(@b1, @b2) -> mult#1(@b1, @b2) [1] mult#1(::(@x, @xs), @b2) -> mult#2(::(#abs(#0), mult(@xs, @b2)), @b2, @x) [1] mult#1(nil, @b2) -> nil [1] mult#2(@zs, @b2, @x) -> mult#3(#equal(@x, #pos(#s(#0))), @b2, @zs) [1] mult#3(#false, @b2, @zs) -> @zs [1] mult#3(#true, @b2, @zs) -> add(@b2, @zs) [1] mult3(@b1, @b2, @b3) -> mult(mult(@b1, @b2), @b2) [1] sub(@b1, @b2) -> sub#1(sub'(@b1, @b2, #abs(#0))) [1] sub#1(tuple#2(@b, @_@1)) -> @b [1] sub'(@b1, @b2, @r) -> sub'#1(@b1, @b2, @r) [1] sub'#1(::(@x, @xs), @b2, @r) -> sub'#2(@b2, @r, @x, @xs) [1] sub'#1(nil, @b2, @r) -> tuple#2(nil, @r) [1] sub'#2(::(@y, @ys), @r, @x, @xs) -> sub'#3(diff(@x, @y, @r), @xs, @ys) [1] sub'#2(nil, @r, @x, @xs) -> tuple#2(nil, @r) [1] sub'#3(tuple#2(@z, @r'), @xs, @ys) -> sub'#4(sub'(@xs, @ys, @r'), @z) [1] sub'#4(tuple#2(@zs, @s), @z) -> tuple#2(sub'#5(#equal(@s, #pos(#s(#0))), @z, @zs), @s) [1] sub'#5(#false, @z, @zs) -> ::(@z, @zs) [1] sub'#5(#true, @z, @zs) -> ::(#abs(#0), @zs) [1] sum(@x, @y, @r) -> sum#1(plus(plus(@x, @y), @r)) [1] sum#1(@s) -> sum#2(#equal(@s, #0), @s) [1] sum#2(#false, @s) -> sum#3(#equal(@s, #pos(#s(#0))), @s) [1] sum#2(#true, @s) -> tuple#2(#abs(#0), #abs(#0)) [1] sum#3(#false, @s) -> sum#4(#equal(@s, #pos(#s(#s(#0))))) [1] sum#3(#true, @s) -> tuple#2(#abs(#pos(#s(#0))), #abs(#0)) [1] sum#4(#false) -> tuple#2(#abs(#pos(#s(#0))), #abs(#pos(#s(#0)))) [1] sum#4(#true) -> tuple#2(#abs(#0), #abs(#pos(#s(#0)))) [1] #add(#0, @y) -> @y [0] #add(#neg(#s(#0)), @y) -> #pred(@y) [0] #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) [0] #add(#pos(#s(#0)), @y) -> #succ(@y) [0] #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) [0] #and(#false, #false) -> #false [0] #and(#false, #true) -> #false [0] #and(#true, #false) -> #false [0] #and(#true, #true) -> #true [0] #ckgt(#EQ) -> #false [0] #ckgt(#GT) -> #true [0] #ckgt(#LT) -> #false [0] #cklt(#EQ) -> #false [0] #cklt(#GT) -> #false [0] #cklt(#LT) -> #true [0] #compare(#0, #0) -> #EQ [0] #compare(#0, #neg(@y)) -> #GT [0] #compare(#0, #pos(@y)) -> #LT [0] #compare(#0, #s(@y)) -> #LT [0] #compare(#neg(@x), #0) -> #LT [0] #compare(#neg(@x), #neg(@y)) -> #compare(@y, @x) [0] #compare(#neg(@x), #pos(@y)) -> #LT [0] #compare(#pos(@x), #0) -> #GT [0] #compare(#pos(@x), #neg(@y)) -> #GT [0] #compare(#pos(@x), #pos(@y)) -> #compare(@x, @y) [0] #compare(#s(@x), #0) -> #GT [0] #compare(#s(@x), #s(@y)) -> #compare(@x, @y) [0] #div(#0, #0) -> #divByZero [0] #div(#0, #neg(@y)) -> #0 [0] #div(#0, #pos(@y)) -> #0 [0] #div(#neg(@x), #0) -> #divByZero [0] #div(#neg(@x), #neg(@y)) -> #pos(#natdiv(@x, @y)) [0] #div(#neg(@x), #pos(@y)) -> #neg(#natdiv(@x, @y)) [0] #div(#pos(@x), #0) -> #divByZero [0] #div(#pos(@x), #neg(@y)) -> #neg(#natdiv(@x, @y)) [0] #div(#pos(@x), #pos(@y)) -> #pos(#natdiv(@x, @y)) [0] #eq(#0, #0) -> #true [0] #eq(#0, #neg(@y)) -> #false [0] #eq(#0, #pos(@y)) -> #false [0] #eq(#0, #s(@y)) -> #false [0] #eq(#neg(@x), #0) -> #false [0] #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y) [0] #eq(#neg(@x), #pos(@y)) -> #false [0] #eq(#pos(@x), #0) -> #false [0] #eq(#pos(@x), #neg(@y)) -> #false [0] #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y) [0] #eq(#s(@x), #0) -> #false [0] #eq(#s(@x), #s(@y)) -> #eq(@x, @y) [0] #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) -> #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) [0] #eq(::(@x_1, @x_2), nil) -> #false [0] #eq(::(@x_1, @x_2), tuple#2(@y_1, @y_2)) -> #false [0] #eq(nil, ::(@y_1, @y_2)) -> #false [0] #eq(nil, nil) -> #true [0] #eq(nil, tuple#2(@y_1, @y_2)) -> #false [0] #eq(tuple#2(@x_1, @x_2), ::(@y_1, @y_2)) -> #false [0] #eq(tuple#2(@x_1, @x_2), nil) -> #false [0] #eq(tuple#2(@x_1, @x_2), tuple#2(@y_1, @y_2)) -> #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) [0] #mult(#0, #0) -> #0 [0] #mult(#0, #neg(@y)) -> #0 [0] #mult(#0, #pos(@y)) -> #0 [0] #mult(#neg(@x), #0) -> #0 [0] #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) [0] #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) [0] #mult(#pos(@x), #0) -> #0 [0] #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) [0] #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) [0] #natdiv(#0, #0) -> #divByZero [0] #natdiv(#s(@x), #s(@y)) -> #s(#natdiv(#natsub(@x, @y), #s(@y))) [0] #natmult(#0, @y) -> #0 [0] #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) [0] #natsub(@x, #0) -> @x [0] #natsub(#s(@x), #s(@y)) -> #natsub(@x, @y) [0] #pred(#0) -> #neg(#s(#0)) [0] #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) [0] #pred(#pos(#s(#0))) -> #0 [0] #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) [0] #sub(@x, #0) -> @x [0] #sub(@x, #neg(@y)) -> #add(@x, #pos(@y)) [0] #sub(@x, #pos(@y)) -> #add(@x, #neg(@y)) [0] #succ(#0) -> #pos(#s(#0)) [0] #succ(#neg(#s(#0))) -> #0 [0] #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) [0] #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) [0] Rewrite Strategy: INNERMOST ---------------------------------------- (7) TypeInferenceProof (BOTH BOUNDS(ID, ID)) Infered types. ---------------------------------------- (8) Obligation: Runtime Complexity Weighted TRS with Types. The TRS R consists of the following rules: #abs(#0) -> #0 [1] #abs(#neg(@x)) -> #pos(@x) [1] #abs(#pos(@x)) -> #pos(@x) [1] #abs(#s(@x)) -> #pos(#s(@x)) [1] #equal(@x, @y) -> #eq(@x, @y) [1] #greater(@x, @y) -> #ckgt(#compare(@x, @y)) [1] #less(@x, @y) -> #cklt(#compare(@x, @y)) [1] times(@x, @y) -> #mult(@x, @y) [1] plus(@x, @y) -> #add(@x, @y) [1] minus(@x, @y) -> #sub(@x, @y) [1] add(@b1, @b2) -> add'(@b1, @b2, #abs(#0)) [1] add'(@b1, @b2, @r) -> add'#1(@b1, @b2, @r) [1] add'#1(::(@x, @xs), @b2, @r) -> add'#2(@b2, @r, @x, @xs) [1] add'#1(nil, @b2, @r) -> nil [1] add'#2(::(@y, @ys), @r, @x, @xs) -> add'#3(sum(@x, @y, @r), @xs, @ys) [1] add'#2(nil, @r, @x, @xs) -> nil [1] add'#3(tuple#2(@z, @r'), @xs, @ys) -> ::(@z, add'(@xs, @ys, @r')) [1] bitToInt(@b) -> bitToInt'(@b, #abs(#pos(#s(#0)))) [1] bitToInt'(@b, @n) -> bitToInt'#1(@b, @n) [1] bitToInt'#1(::(@x, @xs), @n) -> plus(times(@x, @n), bitToInt'(@xs, times(@n, #pos(#s(#s(#0)))))) [1] bitToInt'#1(nil, @n) -> #abs(#0) [1] compare(@b1, @b2) -> compare#1(@b1, @b2) [1] compare#1(::(@x, @xs), @b2) -> compare#2(@b2, @x, @xs) [1] compare#1(nil, @b2) -> #abs(#0) [1] compare#2(::(@y, @ys), @x, @xs) -> compare#3(compare(@xs, @ys), @x, @y) [1] compare#2(nil, @x, @xs) -> #abs(#0) [1] compare#3(@r, @x, @y) -> compare#4(#equal(@r, #0), @r, @x, @y) [1] compare#4(#false, @r, @x, @y) -> @r [1] compare#4(#true, @r, @x, @y) -> compare#5(#less(@x, @y), @x, @y) [1] compare#5(#false, @x, @y) -> compare#6(#greater(@x, @y)) [1] compare#5(#true, @x, @y) -> minus(#0, #pos(#s(#0))) [1] compare#6(#false) -> #abs(#0) [1] compare#6(#true) -> #abs(#pos(#s(#0))) [1] diff(@x, @y, @r) -> tuple#2(mod(plus(plus(@x, @y), @r), #pos(#s(#s(#0)))), diff#1(#less(minus(minus(@x, @y), @r), #0))) [1] diff#1(#false) -> #abs(#0) [1] diff#1(#true) -> #abs(#pos(#s(#0))) [1] div(@x, @y) -> #div(@x, @y) [1] leq(@b1, @b2) -> #less(compare(@b1, @b2), #pos(#s(#0))) [1] mod(@x, @y) -> minus(@x, times(@x, div(@x, @y))) [1] mult(@b1, @b2) -> mult#1(@b1, @b2) [1] mult#1(::(@x, @xs), @b2) -> mult#2(::(#abs(#0), mult(@xs, @b2)), @b2, @x) [1] mult#1(nil, @b2) -> nil [1] mult#2(@zs, @b2, @x) -> mult#3(#equal(@x, #pos(#s(#0))), @b2, @zs) [1] mult#3(#false, @b2, @zs) -> @zs [1] mult#3(#true, @b2, @zs) -> add(@b2, @zs) [1] mult3(@b1, @b2, @b3) -> mult(mult(@b1, @b2), @b2) [1] sub(@b1, @b2) -> sub#1(sub'(@b1, @b2, #abs(#0))) [1] sub#1(tuple#2(@b, @_@1)) -> @b [1] sub'(@b1, @b2, @r) -> sub'#1(@b1, @b2, @r) [1] sub'#1(::(@x, @xs), @b2, @r) -> sub'#2(@b2, @r, @x, @xs) [1] sub'#1(nil, @b2, @r) -> tuple#2(nil, @r) [1] sub'#2(::(@y, @ys), @r, @x, @xs) -> sub'#3(diff(@x, @y, @r), @xs, @ys) [1] sub'#2(nil, @r, @x, @xs) -> tuple#2(nil, @r) [1] sub'#3(tuple#2(@z, @r'), @xs, @ys) -> sub'#4(sub'(@xs, @ys, @r'), @z) [1] sub'#4(tuple#2(@zs, @s), @z) -> tuple#2(sub'#5(#equal(@s, #pos(#s(#0))), @z, @zs), @s) [1] sub'#5(#false, @z, @zs) -> ::(@z, @zs) [1] sub'#5(#true, @z, @zs) -> ::(#abs(#0), @zs) [1] sum(@x, @y, @r) -> sum#1(plus(plus(@x, @y), @r)) [1] sum#1(@s) -> sum#2(#equal(@s, #0), @s) [1] sum#2(#false, @s) -> sum#3(#equal(@s, #pos(#s(#0))), @s) [1] sum#2(#true, @s) -> tuple#2(#abs(#0), #abs(#0)) [1] sum#3(#false, @s) -> sum#4(#equal(@s, #pos(#s(#s(#0))))) [1] sum#3(#true, @s) -> tuple#2(#abs(#pos(#s(#0))), #abs(#0)) [1] sum#4(#false) -> tuple#2(#abs(#pos(#s(#0))), #abs(#pos(#s(#0)))) [1] sum#4(#true) -> tuple#2(#abs(#0), #abs(#pos(#s(#0)))) [1] #add(#0, @y) -> @y [0] #add(#neg(#s(#0)), @y) -> #pred(@y) [0] #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) [0] #add(#pos(#s(#0)), @y) -> #succ(@y) [0] #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) [0] #and(#false, #false) -> #false [0] #and(#false, #true) -> #false [0] #and(#true, #false) -> #false [0] #and(#true, #true) -> #true [0] #ckgt(#EQ) -> #false [0] #ckgt(#GT) -> #true [0] #ckgt(#LT) -> #false [0] #cklt(#EQ) -> #false [0] #cklt(#GT) -> #false [0] #cklt(#LT) -> #true [0] #compare(#0, #0) -> #EQ [0] #compare(#0, #neg(@y)) -> #GT [0] #compare(#0, #pos(@y)) -> #LT [0] #compare(#0, #s(@y)) -> #LT [0] #compare(#neg(@x), #0) -> #LT [0] #compare(#neg(@x), #neg(@y)) -> #compare(@y, @x) [0] #compare(#neg(@x), #pos(@y)) -> #LT [0] #compare(#pos(@x), #0) -> #GT [0] #compare(#pos(@x), #neg(@y)) -> #GT [0] #compare(#pos(@x), #pos(@y)) -> #compare(@x, @y) [0] #compare(#s(@x), #0) -> #GT [0] #compare(#s(@x), #s(@y)) -> #compare(@x, @y) [0] #div(#0, #0) -> #divByZero [0] #div(#0, #neg(@y)) -> #0 [0] #div(#0, #pos(@y)) -> #0 [0] #div(#neg(@x), #0) -> #divByZero [0] #div(#neg(@x), #neg(@y)) -> #pos(#natdiv(@x, @y)) [0] #div(#neg(@x), #pos(@y)) -> #neg(#natdiv(@x, @y)) [0] #div(#pos(@x), #0) -> #divByZero [0] #div(#pos(@x), #neg(@y)) -> #neg(#natdiv(@x, @y)) [0] #div(#pos(@x), #pos(@y)) -> #pos(#natdiv(@x, @y)) [0] #eq(#0, #0) -> #true [0] #eq(#0, #neg(@y)) -> #false [0] #eq(#0, #pos(@y)) -> #false [0] #eq(#0, #s(@y)) -> #false [0] #eq(#neg(@x), #0) -> #false [0] #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y) [0] #eq(#neg(@x), #pos(@y)) -> #false [0] #eq(#pos(@x), #0) -> #false [0] #eq(#pos(@x), #neg(@y)) -> #false [0] #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y) [0] #eq(#s(@x), #0) -> #false [0] #eq(#s(@x), #s(@y)) -> #eq(@x, @y) [0] #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) -> #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) [0] #eq(::(@x_1, @x_2), nil) -> #false [0] #eq(::(@x_1, @x_2), tuple#2(@y_1, @y_2)) -> #false [0] #eq(nil, ::(@y_1, @y_2)) -> #false [0] #eq(nil, nil) -> #true [0] #eq(nil, tuple#2(@y_1, @y_2)) -> #false [0] #eq(tuple#2(@x_1, @x_2), ::(@y_1, @y_2)) -> #false [0] #eq(tuple#2(@x_1, @x_2), nil) -> #false [0] #eq(tuple#2(@x_1, @x_2), tuple#2(@y_1, @y_2)) -> #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) [0] #mult(#0, #0) -> #0 [0] #mult(#0, #neg(@y)) -> #0 [0] #mult(#0, #pos(@y)) -> #0 [0] #mult(#neg(@x), #0) -> #0 [0] #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) [0] #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) [0] #mult(#pos(@x), #0) -> #0 [0] #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) [0] #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) [0] #natdiv(#0, #0) -> #divByZero [0] #natdiv(#s(@x), #s(@y)) -> #s(#natdiv(#natsub(@x, @y), #s(@y))) [0] #natmult(#0, @y) -> #0 [0] #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) [0] #natsub(@x, #0) -> @x [0] #natsub(#s(@x), #s(@y)) -> #natsub(@x, @y) [0] #pred(#0) -> #neg(#s(#0)) [0] #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) [0] #pred(#pos(#s(#0))) -> #0 [0] #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) [0] #sub(@x, #0) -> @x [0] #sub(@x, #neg(@y)) -> #add(@x, #pos(@y)) [0] #sub(@x, #pos(@y)) -> #add(@x, #neg(@y)) [0] #succ(#0) -> #pos(#s(#0)) [0] #succ(#neg(#s(#0))) -> #0 [0] #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) [0] #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) [0] The TRS has the following type information: #abs :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero #0 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero #neg :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero #pos :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero #s :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero #equal :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #false:#true #eq :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #false:#true #greater :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #false:#true #ckgt :: #EQ:#GT:#LT -> #false:#true #compare :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #EQ:#GT:#LT #less :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #false:#true #cklt :: #EQ:#GT:#LT -> #false:#true times :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero #mult :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero plus :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero #add :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero minus :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero #sub :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero add :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero add' :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero add'#1 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero :: :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero add'#2 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero nil :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero add'#3 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero sum :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero tuple#2 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero bitToInt :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero bitToInt' :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero bitToInt'#1 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero compare :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero compare#1 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero compare#2 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero compare#3 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero compare#4 :: #false:#true -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero #false :: #false:#true #true :: #false:#true compare#5 :: #false:#true -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero compare#6 :: #false:#true -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero diff :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero mod :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero diff#1 :: #false:#true -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero div :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero #div :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero leq :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #false:#true mult :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero mult#1 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero mult#2 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero mult#3 :: #false:#true -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero mult3 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> a -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero sub :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero sub#1 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero sub' :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero sub'#1 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero sub'#2 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero sub'#3 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero sub'#4 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero sub'#5 :: #false:#true -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero sum#1 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero sum#2 :: #false:#true -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero sum#3 :: #false:#true -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero sum#4 :: #false:#true -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero #pred :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero #succ :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero #and :: #false:#true -> #false:#true -> #false:#true #EQ :: #EQ:#GT:#LT #GT :: #EQ:#GT:#LT #LT :: #EQ:#GT:#LT #divByZero :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero #natdiv :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero #natmult :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero #natsub :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero Rewrite Strategy: INNERMOST ---------------------------------------- (9) CompletionProof (UPPER BOUND(ID)) The transformation into a RNTS is sound, since: (a) The obligation is a constructor system where every type has a constant constructor, (b) The following defined symbols do not have to be completely defined, as they can never occur inside other defined symbols: bitToInt_1 leq_2 mult3_3 sub_2 sub#1_1 (c) The following functions are completely defined: mult_2 plus_2 #equal_2 #abs_1 times_2 bitToInt'_2 div_2 diff_3 compare_2 #less_2 sum_3 #greater_2 minus_2 sub'_3 bitToInt'#1_2 sum#1_1 sub'#1_3 sum#2_2 mod_2 diff#1_1 compare#1_2 mult#1_2 sub'#2_4 sum#3_2 sum#4_1 mult#2_3 compare#2_3 sub'#3_3 mult#3_3 sub'#4_2 compare#3_3 add_2 sub'#5_3 add'_3 compare#4_4 add'#1_3 compare#5_3 compare#6_1 add'#2_4 add'#3_3 #add_2 #and_2 #ckgt_1 #cklt_1 #compare_2 #div_2 #eq_2 #mult_2 #natdiv_2 #natmult_2 #natsub_2 #pred_1 #sub_2 #succ_1 Due to the following rules being added: #add(v0, v1) -> null_#add [0] #and(v0, v1) -> null_#and [0] #ckgt(v0) -> null_#ckgt [0] #cklt(v0) -> null_#cklt [0] #compare(v0, v1) -> null_#compare [0] #div(v0, v1) -> null_#div [0] #eq(v0, v1) -> null_#eq [0] #mult(v0, v1) -> null_#mult [0] #natdiv(v0, v1) -> null_#natdiv [0] #natmult(v0, v1) -> null_#natmult [0] #natsub(v0, v1) -> null_#natsub [0] #pred(v0) -> null_#pred [0] #sub(v0, v1) -> null_#sub [0] #succ(v0) -> null_#succ [0] #abs(v0) -> null_#abs [0] bitToInt'#1(v0, v1) -> null_bitToInt'#1 [0] sub'#1(v0, v1, v2) -> null_sub'#1 [0] sum#2(v0, v1) -> null_sum#2 [0] diff#1(v0) -> null_diff#1 [0] compare#1(v0, v1) -> null_compare#1 [0] mult#1(v0, v1) -> null_mult#1 [0] sub'#2(v0, v1, v2, v3) -> null_sub'#2 [0] sum#3(v0, v1) -> null_sum#3 [0] sum#4(v0) -> null_sum#4 [0] compare#2(v0, v1, v2) -> null_compare#2 [0] sub'#3(v0, v1, v2) -> null_sub'#3 [0] mult#3(v0, v1, v2) -> null_mult#3 [0] sub'#4(v0, v1) -> null_sub'#4 [0] sub'#5(v0, v1, v2) -> null_sub'#5 [0] compare#4(v0, v1, v2, v3) -> null_compare#4 [0] add'#1(v0, v1, v2) -> null_add'#1 [0] compare#5(v0, v1, v2) -> null_compare#5 [0] compare#6(v0) -> null_compare#6 [0] add'#2(v0, v1, v2, v3) -> null_add'#2 [0] add'#3(v0, v1, v2) -> null_add'#3 [0] And the following fresh constants: null_#add, null_#and, null_#ckgt, null_#cklt, null_#compare, null_#div, null_#eq, null_#mult, null_#natdiv, null_#natmult, null_#natsub, null_#pred, null_#sub, null_#succ, null_#abs, null_bitToInt'#1, null_sub'#1, null_sum#2, null_diff#1, null_compare#1, null_mult#1, null_sub'#2, null_sum#3, null_sum#4, null_compare#2, null_sub'#3, null_mult#3, null_sub'#4, null_sub'#5, null_compare#4, null_add'#1, null_compare#5, null_compare#6, null_add'#2, null_add'#3, const ---------------------------------------- (10) Obligation: Runtime Complexity Weighted TRS where critical functions are completely defined. The underlying TRS is: Runtime Complexity Weighted TRS with Types. The TRS R consists of the following rules: #abs(#0) -> #0 [1] #abs(#neg(@x)) -> #pos(@x) [1] #abs(#pos(@x)) -> #pos(@x) [1] #abs(#s(@x)) -> #pos(#s(@x)) [1] #equal(@x, @y) -> #eq(@x, @y) [1] #greater(@x, @y) -> #ckgt(#compare(@x, @y)) [1] #less(@x, @y) -> #cklt(#compare(@x, @y)) [1] times(@x, @y) -> #mult(@x, @y) [1] plus(@x, @y) -> #add(@x, @y) [1] minus(@x, @y) -> #sub(@x, @y) [1] add(@b1, @b2) -> add'(@b1, @b2, #abs(#0)) [1] add'(@b1, @b2, @r) -> add'#1(@b1, @b2, @r) [1] add'#1(::(@x, @xs), @b2, @r) -> add'#2(@b2, @r, @x, @xs) [1] add'#1(nil, @b2, @r) -> nil [1] add'#2(::(@y, @ys), @r, @x, @xs) -> add'#3(sum(@x, @y, @r), @xs, @ys) [1] add'#2(nil, @r, @x, @xs) -> nil [1] add'#3(tuple#2(@z, @r'), @xs, @ys) -> ::(@z, add'(@xs, @ys, @r')) [1] bitToInt(@b) -> bitToInt'(@b, #abs(#pos(#s(#0)))) [1] bitToInt'(@b, @n) -> bitToInt'#1(@b, @n) [1] bitToInt'#1(::(@x, @xs), @n) -> plus(times(@x, @n), bitToInt'(@xs, times(@n, #pos(#s(#s(#0)))))) [1] bitToInt'#1(nil, @n) -> #abs(#0) [1] compare(@b1, @b2) -> compare#1(@b1, @b2) [1] compare#1(::(@x, @xs), @b2) -> compare#2(@b2, @x, @xs) [1] compare#1(nil, @b2) -> #abs(#0) [1] compare#2(::(@y, @ys), @x, @xs) -> compare#3(compare(@xs, @ys), @x, @y) [1] compare#2(nil, @x, @xs) -> #abs(#0) [1] compare#3(@r, @x, @y) -> compare#4(#equal(@r, #0), @r, @x, @y) [1] compare#4(#false, @r, @x, @y) -> @r [1] compare#4(#true, @r, @x, @y) -> compare#5(#less(@x, @y), @x, @y) [1] compare#5(#false, @x, @y) -> compare#6(#greater(@x, @y)) [1] compare#5(#true, @x, @y) -> minus(#0, #pos(#s(#0))) [1] compare#6(#false) -> #abs(#0) [1] compare#6(#true) -> #abs(#pos(#s(#0))) [1] diff(@x, @y, @r) -> tuple#2(mod(plus(plus(@x, @y), @r), #pos(#s(#s(#0)))), diff#1(#less(minus(minus(@x, @y), @r), #0))) [1] diff#1(#false) -> #abs(#0) [1] diff#1(#true) -> #abs(#pos(#s(#0))) [1] div(@x, @y) -> #div(@x, @y) [1] leq(@b1, @b2) -> #less(compare(@b1, @b2), #pos(#s(#0))) [1] mod(@x, @y) -> minus(@x, times(@x, div(@x, @y))) [1] mult(@b1, @b2) -> mult#1(@b1, @b2) [1] mult#1(::(@x, @xs), @b2) -> mult#2(::(#abs(#0), mult(@xs, @b2)), @b2, @x) [1] mult#1(nil, @b2) -> nil [1] mult#2(@zs, @b2, @x) -> mult#3(#equal(@x, #pos(#s(#0))), @b2, @zs) [1] mult#3(#false, @b2, @zs) -> @zs [1] mult#3(#true, @b2, @zs) -> add(@b2, @zs) [1] mult3(@b1, @b2, @b3) -> mult(mult(@b1, @b2), @b2) [1] sub(@b1, @b2) -> sub#1(sub'(@b1, @b2, #abs(#0))) [1] sub#1(tuple#2(@b, @_@1)) -> @b [1] sub'(@b1, @b2, @r) -> sub'#1(@b1, @b2, @r) [1] sub'#1(::(@x, @xs), @b2, @r) -> sub'#2(@b2, @r, @x, @xs) [1] sub'#1(nil, @b2, @r) -> tuple#2(nil, @r) [1] sub'#2(::(@y, @ys), @r, @x, @xs) -> sub'#3(diff(@x, @y, @r), @xs, @ys) [1] sub'#2(nil, @r, @x, @xs) -> tuple#2(nil, @r) [1] sub'#3(tuple#2(@z, @r'), @xs, @ys) -> sub'#4(sub'(@xs, @ys, @r'), @z) [1] sub'#4(tuple#2(@zs, @s), @z) -> tuple#2(sub'#5(#equal(@s, #pos(#s(#0))), @z, @zs), @s) [1] sub'#5(#false, @z, @zs) -> ::(@z, @zs) [1] sub'#5(#true, @z, @zs) -> ::(#abs(#0), @zs) [1] sum(@x, @y, @r) -> sum#1(plus(plus(@x, @y), @r)) [1] sum#1(@s) -> sum#2(#equal(@s, #0), @s) [1] sum#2(#false, @s) -> sum#3(#equal(@s, #pos(#s(#0))), @s) [1] sum#2(#true, @s) -> tuple#2(#abs(#0), #abs(#0)) [1] sum#3(#false, @s) -> sum#4(#equal(@s, #pos(#s(#s(#0))))) [1] sum#3(#true, @s) -> tuple#2(#abs(#pos(#s(#0))), #abs(#0)) [1] sum#4(#false) -> tuple#2(#abs(#pos(#s(#0))), #abs(#pos(#s(#0)))) [1] sum#4(#true) -> tuple#2(#abs(#0), #abs(#pos(#s(#0)))) [1] #add(#0, @y) -> @y [0] #add(#neg(#s(#0)), @y) -> #pred(@y) [0] #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) [0] #add(#pos(#s(#0)), @y) -> #succ(@y) [0] #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) [0] #and(#false, #false) -> #false [0] #and(#false, #true) -> #false [0] #and(#true, #false) -> #false [0] #and(#true, #true) -> #true [0] #ckgt(#EQ) -> #false [0] #ckgt(#GT) -> #true [0] #ckgt(#LT) -> #false [0] #cklt(#EQ) -> #false [0] #cklt(#GT) -> #false [0] #cklt(#LT) -> #true [0] #compare(#0, #0) -> #EQ [0] #compare(#0, #neg(@y)) -> #GT [0] #compare(#0, #pos(@y)) -> #LT [0] #compare(#0, #s(@y)) -> #LT [0] #compare(#neg(@x), #0) -> #LT [0] #compare(#neg(@x), #neg(@y)) -> #compare(@y, @x) [0] #compare(#neg(@x), #pos(@y)) -> #LT [0] #compare(#pos(@x), #0) -> #GT [0] #compare(#pos(@x), #neg(@y)) -> #GT [0] #compare(#pos(@x), #pos(@y)) -> #compare(@x, @y) [0] #compare(#s(@x), #0) -> #GT [0] #compare(#s(@x), #s(@y)) -> #compare(@x, @y) [0] #div(#0, #0) -> #divByZero [0] #div(#0, #neg(@y)) -> #0 [0] #div(#0, #pos(@y)) -> #0 [0] #div(#neg(@x), #0) -> #divByZero [0] #div(#neg(@x), #neg(@y)) -> #pos(#natdiv(@x, @y)) [0] #div(#neg(@x), #pos(@y)) -> #neg(#natdiv(@x, @y)) [0] #div(#pos(@x), #0) -> #divByZero [0] #div(#pos(@x), #neg(@y)) -> #neg(#natdiv(@x, @y)) [0] #div(#pos(@x), #pos(@y)) -> #pos(#natdiv(@x, @y)) [0] #eq(#0, #0) -> #true [0] #eq(#0, #neg(@y)) -> #false [0] #eq(#0, #pos(@y)) -> #false [0] #eq(#0, #s(@y)) -> #false [0] #eq(#neg(@x), #0) -> #false [0] #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y) [0] #eq(#neg(@x), #pos(@y)) -> #false [0] #eq(#pos(@x), #0) -> #false [0] #eq(#pos(@x), #neg(@y)) -> #false [0] #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y) [0] #eq(#s(@x), #0) -> #false [0] #eq(#s(@x), #s(@y)) -> #eq(@x, @y) [0] #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) -> #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) [0] #eq(::(@x_1, @x_2), nil) -> #false [0] #eq(::(@x_1, @x_2), tuple#2(@y_1, @y_2)) -> #false [0] #eq(nil, ::(@y_1, @y_2)) -> #false [0] #eq(nil, nil) -> #true [0] #eq(nil, tuple#2(@y_1, @y_2)) -> #false [0] #eq(tuple#2(@x_1, @x_2), ::(@y_1, @y_2)) -> #false [0] #eq(tuple#2(@x_1, @x_2), nil) -> #false [0] #eq(tuple#2(@x_1, @x_2), tuple#2(@y_1, @y_2)) -> #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) [0] #mult(#0, #0) -> #0 [0] #mult(#0, #neg(@y)) -> #0 [0] #mult(#0, #pos(@y)) -> #0 [0] #mult(#neg(@x), #0) -> #0 [0] #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) [0] #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) [0] #mult(#pos(@x), #0) -> #0 [0] #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) [0] #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) [0] #natdiv(#0, #0) -> #divByZero [0] #natdiv(#s(@x), #s(@y)) -> #s(#natdiv(#natsub(@x, @y), #s(@y))) [0] #natmult(#0, @y) -> #0 [0] #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) [0] #natsub(@x, #0) -> @x [0] #natsub(#s(@x), #s(@y)) -> #natsub(@x, @y) [0] #pred(#0) -> #neg(#s(#0)) [0] #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) [0] #pred(#pos(#s(#0))) -> #0 [0] #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) [0] #sub(@x, #0) -> @x [0] #sub(@x, #neg(@y)) -> #add(@x, #pos(@y)) [0] #sub(@x, #pos(@y)) -> #add(@x, #neg(@y)) [0] #succ(#0) -> #pos(#s(#0)) [0] #succ(#neg(#s(#0))) -> #0 [0] #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) [0] #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) [0] #add(v0, v1) -> null_#add [0] #and(v0, v1) -> null_#and [0] #ckgt(v0) -> null_#ckgt [0] #cklt(v0) -> null_#cklt [0] #compare(v0, v1) -> null_#compare [0] #div(v0, v1) -> null_#div [0] #eq(v0, v1) -> null_#eq [0] #mult(v0, v1) -> null_#mult [0] #natdiv(v0, v1) -> null_#natdiv [0] #natmult(v0, v1) -> null_#natmult [0] #natsub(v0, v1) -> null_#natsub [0] #pred(v0) -> null_#pred [0] #sub(v0, v1) -> null_#sub [0] #succ(v0) -> null_#succ [0] #abs(v0) -> null_#abs [0] bitToInt'#1(v0, v1) -> null_bitToInt'#1 [0] sub'#1(v0, v1, v2) -> null_sub'#1 [0] sum#2(v0, v1) -> null_sum#2 [0] diff#1(v0) -> null_diff#1 [0] compare#1(v0, v1) -> null_compare#1 [0] mult#1(v0, v1) -> null_mult#1 [0] sub'#2(v0, v1, v2, v3) -> null_sub'#2 [0] sum#3(v0, v1) -> null_sum#3 [0] sum#4(v0) -> null_sum#4 [0] compare#2(v0, v1, v2) -> null_compare#2 [0] sub'#3(v0, v1, v2) -> null_sub'#3 [0] mult#3(v0, v1, v2) -> null_mult#3 [0] sub'#4(v0, v1) -> null_sub'#4 [0] sub'#5(v0, v1, v2) -> null_sub'#5 [0] compare#4(v0, v1, v2, v3) -> null_compare#4 [0] add'#1(v0, v1, v2) -> null_add'#1 [0] compare#5(v0, v1, v2) -> null_compare#5 [0] compare#6(v0) -> null_compare#6 [0] add'#2(v0, v1, v2, v3) -> null_add'#2 [0] add'#3(v0, v1, v2) -> null_add'#3 [0] The TRS has the following type information: #abs :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 #0 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 #neg :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 #pos :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 #s :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 #equal :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #false:#true:null_#and:null_#ckgt:null_#cklt:null_#eq #eq :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #false:#true:null_#and:null_#ckgt:null_#cklt:null_#eq #greater :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #false:#true:null_#and:null_#ckgt:null_#cklt:null_#eq #ckgt :: #EQ:#GT:#LT:null_#compare -> #false:#true:null_#and:null_#ckgt:null_#cklt:null_#eq #compare :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #EQ:#GT:#LT:null_#compare #less :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #false:#true:null_#and:null_#ckgt:null_#cklt:null_#eq #cklt :: #EQ:#GT:#LT:null_#compare -> #false:#true:null_#and:null_#ckgt:null_#cklt:null_#eq times :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 #mult :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 plus :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 #add :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 minus :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 #sub :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 add :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 add' :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 add'#1 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 :: :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 add'#2 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 nil :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 add'#3 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 sum :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 tuple#2 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 bitToInt :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 bitToInt' :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 bitToInt'#1 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 compare :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 compare#1 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 compare#2 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 compare#3 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 compare#4 :: #false:#true:null_#and:null_#ckgt:null_#cklt:null_#eq -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 #false :: #false:#true:null_#and:null_#ckgt:null_#cklt:null_#eq #true :: #false:#true:null_#and:null_#ckgt:null_#cklt:null_#eq compare#5 :: #false:#true:null_#and:null_#ckgt:null_#cklt:null_#eq -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 compare#6 :: #false:#true:null_#and:null_#ckgt:null_#cklt:null_#eq -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 diff :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 mod :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 diff#1 :: #false:#true:null_#and:null_#ckgt:null_#cklt:null_#eq -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 div :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 #div :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 leq :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #false:#true:null_#and:null_#ckgt:null_#cklt:null_#eq mult :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 mult#1 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 mult#2 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 mult#3 :: #false:#true:null_#and:null_#ckgt:null_#cklt:null_#eq -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 mult3 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> a -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 sub :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 sub#1 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 sub' :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 sub'#1 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 sub'#2 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 sub'#3 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 sub'#4 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 sub'#5 :: #false:#true:null_#and:null_#ckgt:null_#cklt:null_#eq -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 sum#1 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 sum#2 :: #false:#true:null_#and:null_#ckgt:null_#cklt:null_#eq -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 sum#3 :: #false:#true:null_#and:null_#ckgt:null_#cklt:null_#eq -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 sum#4 :: #false:#true:null_#and:null_#ckgt:null_#cklt:null_#eq -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 #pred :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 #succ :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 #and :: #false:#true:null_#and:null_#ckgt:null_#cklt:null_#eq -> #false:#true:null_#and:null_#ckgt:null_#cklt:null_#eq -> #false:#true:null_#and:null_#ckgt:null_#cklt:null_#eq #EQ :: #EQ:#GT:#LT:null_#compare #GT :: #EQ:#GT:#LT:null_#compare #LT :: #EQ:#GT:#LT:null_#compare #divByZero :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 #natdiv :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 #natmult :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 #natsub :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 null_#add :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 null_#and :: #false:#true:null_#and:null_#ckgt:null_#cklt:null_#eq null_#ckgt :: #false:#true:null_#and:null_#ckgt:null_#cklt:null_#eq null_#cklt :: #false:#true:null_#and:null_#ckgt:null_#cklt:null_#eq null_#compare :: #EQ:#GT:#LT:null_#compare null_#div :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 null_#eq :: #false:#true:null_#and:null_#ckgt:null_#cklt:null_#eq null_#mult :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 null_#natdiv :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 null_#natmult :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 null_#natsub :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 null_#pred :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 null_#sub :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 null_#succ :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 null_#abs :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 null_bitToInt'#1 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 null_sub'#1 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 null_sum#2 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 null_diff#1 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 null_compare#1 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 null_mult#1 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 null_sub'#2 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 null_sum#3 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 null_sum#4 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 null_compare#2 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 null_sub'#3 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 null_mult#3 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 null_sub'#4 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 null_sub'#5 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 null_compare#4 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 null_add'#1 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 null_compare#5 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 null_compare#6 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 null_add'#2 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 null_add'#3 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 const :: a Rewrite Strategy: INNERMOST ---------------------------------------- (11) NarrowingProof (BOTH BOUNDS(ID, ID)) Narrowed the inner basic terms of all right-hand sides by a single narrowing step. ---------------------------------------- (12) Obligation: Runtime Complexity Weighted TRS where critical functions are completely defined. The underlying TRS is: Runtime Complexity Weighted TRS with Types. The TRS R consists of the following rules: #abs(#0) -> #0 [1] #abs(#neg(@x)) -> #pos(@x) [1] #abs(#pos(@x)) -> #pos(@x) [1] #abs(#s(@x)) -> #pos(#s(@x)) [1] #equal(@x, @y) -> #eq(@x, @y) [1] #greater(#0, #0) -> #ckgt(#EQ) [1] #greater(#0, #neg(@y')) -> #ckgt(#GT) [1] #greater(#0, #pos(@y'')) -> #ckgt(#LT) [1] #greater(#0, #s(@y1)) -> #ckgt(#LT) [1] #greater(#neg(@x'), #0) -> #ckgt(#LT) [1] #greater(#neg(@x''), #neg(@y2)) -> #ckgt(#compare(@y2, @x'')) [1] #greater(#neg(@x1), #pos(@y3)) -> #ckgt(#LT) [1] #greater(#pos(@x2), #0) -> #ckgt(#GT) [1] #greater(#pos(@x3), #neg(@y4)) -> #ckgt(#GT) [1] #greater(#pos(@x4), #pos(@y5)) -> #ckgt(#compare(@x4, @y5)) [1] #greater(#s(@x5), #0) -> #ckgt(#GT) [1] #greater(#s(@x6), #s(@y6)) -> #ckgt(#compare(@x6, @y6)) [1] #greater(@x, @y) -> #ckgt(null_#compare) [1] #less(#0, #0) -> #cklt(#EQ) [1] #less(#0, #neg(@y7)) -> #cklt(#GT) [1] #less(#0, #pos(@y8)) -> #cklt(#LT) [1] #less(#0, #s(@y9)) -> #cklt(#LT) [1] #less(#neg(@x7), #0) -> #cklt(#LT) [1] #less(#neg(@x8), #neg(@y10)) -> #cklt(#compare(@y10, @x8)) [1] #less(#neg(@x9), #pos(@y11)) -> #cklt(#LT) [1] #less(#pos(@x10), #0) -> #cklt(#GT) [1] #less(#pos(@x11), #neg(@y12)) -> #cklt(#GT) [1] #less(#pos(@x12), #pos(@y13)) -> #cklt(#compare(@x12, @y13)) [1] #less(#s(@x13), #0) -> #cklt(#GT) [1] #less(#s(@x14), #s(@y14)) -> #cklt(#compare(@x14, @y14)) [1] #less(@x, @y) -> #cklt(null_#compare) [1] times(@x, @y) -> #mult(@x, @y) [1] plus(@x, @y) -> #add(@x, @y) [1] minus(@x, @y) -> #sub(@x, @y) [1] add(@b1, @b2) -> add'(@b1, @b2, #0) [2] add(@b1, @b2) -> add'(@b1, @b2, null_#abs) [1] add'(@b1, @b2, @r) -> add'#1(@b1, @b2, @r) [1] add'#1(::(@x, @xs), @b2, @r) -> add'#2(@b2, @r, @x, @xs) [1] add'#1(nil, @b2, @r) -> nil [1] add'#2(::(@y, @ys), @r, @x, @xs) -> add'#3(sum#1(plus(plus(@x, @y), @r)), @xs, @ys) [2] add'#2(nil, @r, @x, @xs) -> nil [1] add'#3(tuple#2(@z, @r'), @xs, @ys) -> ::(@z, add'(@xs, @ys, @r')) [1] bitToInt(@b) -> bitToInt'(@b, #pos(#s(#0))) [2] bitToInt(@b) -> bitToInt'(@b, null_#abs) [1] bitToInt'(@b, @n) -> bitToInt'#1(@b, @n) [1] bitToInt'#1(::(@x, @xs), @n) -> plus(#mult(@x, @n), bitToInt'(@xs, #mult(@n, #pos(#s(#s(#0)))))) [3] bitToInt'#1(nil, @n) -> #abs(#0) [1] compare(@b1, @b2) -> compare#1(@b1, @b2) [1] compare#1(::(@x, @xs), @b2) -> compare#2(@b2, @x, @xs) [1] compare#1(nil, @b2) -> #abs(#0) [1] compare#2(::(@y, @ys), @x, @xs) -> compare#3(compare#1(@xs, @ys), @x, @y) [2] compare#2(nil, @x, @xs) -> #abs(#0) [1] compare#3(@r, @x, @y) -> compare#4(#eq(@r, #0), @r, @x, @y) [2] compare#4(#false, @r, @x, @y) -> @r [1] compare#4(#true, @r, @x, @y) -> compare#5(#cklt(#compare(@x, @y)), @x, @y) [2] compare#5(#false, @x, @y) -> compare#6(#ckgt(#compare(@x, @y))) [2] compare#5(#true, @x, @y) -> minus(#0, #pos(#s(#0))) [1] compare#6(#false) -> #abs(#0) [1] compare#6(#true) -> #abs(#pos(#s(#0))) [1] diff(@x, @y, @r) -> tuple#2(mod(plus(#add(@x, @y), @r), #pos(#s(#s(#0)))), diff#1(#less(minus(#sub(@x, @y), @r), #0))) [3] diff#1(#false) -> #abs(#0) [1] diff#1(#true) -> #abs(#pos(#s(#0))) [1] div(@x, @y) -> #div(@x, @y) [1] leq(@b1, @b2) -> #less(compare#1(@b1, @b2), #pos(#s(#0))) [2] mod(@x, @y) -> minus(@x, times(@x, #div(@x, @y))) [2] mult(@b1, @b2) -> mult#1(@b1, @b2) [1] mult#1(::(@x, @xs), @b2) -> mult#2(::(#0, mult#1(@xs, @b2)), @b2, @x) [3] mult#1(::(@x, @xs), @b2) -> mult#2(::(null_#abs, mult#1(@xs, @b2)), @b2, @x) [2] mult#1(nil, @b2) -> nil [1] mult#2(@zs, @b2, @x) -> mult#3(#eq(@x, #pos(#s(#0))), @b2, @zs) [2] mult#3(#false, @b2, @zs) -> @zs [1] mult#3(#true, @b2, @zs) -> add(@b2, @zs) [1] mult3(@b1, @b2, @b3) -> mult(mult#1(@b1, @b2), @b2) [2] sub(@b1, @b2) -> sub#1(sub'(@b1, @b2, #0)) [2] sub(@b1, @b2) -> sub#1(sub'(@b1, @b2, null_#abs)) [1] sub#1(tuple#2(@b, @_@1)) -> @b [1] sub'(@b1, @b2, @r) -> sub'#1(@b1, @b2, @r) [1] sub'#1(::(@x, @xs), @b2, @r) -> sub'#2(@b2, @r, @x, @xs) [1] sub'#1(nil, @b2, @r) -> tuple#2(nil, @r) [1] sub'#2(::(@y, @ys), @r, @x, @xs) -> sub'#3(tuple#2(mod(plus(plus(@x, @y), @r), #pos(#s(#s(#0)))), diff#1(#less(minus(minus(@x, @y), @r), #0))), @xs, @ys) [2] sub'#2(nil, @r, @x, @xs) -> tuple#2(nil, @r) [1] sub'#3(tuple#2(@z, @r'), @xs, @ys) -> sub'#4(sub'#1(@xs, @ys, @r'), @z) [2] sub'#4(tuple#2(@zs, @s), @z) -> tuple#2(sub'#5(#eq(@s, #pos(#s(#0))), @z, @zs), @s) [2] sub'#5(#false, @z, @zs) -> ::(@z, @zs) [1] sub'#5(#true, @z, @zs) -> ::(#abs(#0), @zs) [1] sum(@x, @y, @r) -> sum#1(plus(#add(@x, @y), @r)) [2] sum#1(@s) -> sum#2(#eq(@s, #0), @s) [2] sum#2(#false, @s) -> sum#3(#eq(@s, #pos(#s(#0))), @s) [2] sum#2(#true, @s) -> tuple#2(#abs(#0), #abs(#0)) [1] sum#3(#false, @s) -> sum#4(#eq(@s, #pos(#s(#s(#0))))) [2] sum#3(#true, @s) -> tuple#2(#abs(#pos(#s(#0))), #abs(#0)) [1] sum#4(#false) -> tuple#2(#abs(#pos(#s(#0))), #abs(#pos(#s(#0)))) [1] sum#4(#true) -> tuple#2(#abs(#0), #abs(#pos(#s(#0)))) [1] #add(#0, @y) -> @y [0] #add(#neg(#s(#0)), @y) -> #pred(@y) [0] #add(#neg(#s(#s(#0))), @y) -> #pred(#succ(@y)) [0] #add(#neg(#s(#s(#s(@x15)))), @y) -> #pred(#succ(#add(#pos(#s(@x15)), @y))) [0] #add(#neg(#s(#s(@x))), @y) -> #pred(null_#add) [0] #add(#pos(#s(#0)), @y) -> #succ(@y) [0] #add(#pos(#s(#s(#0))), @y) -> #succ(#succ(@y)) [0] #add(#pos(#s(#s(#s(@x16)))), @y) -> #succ(#succ(#add(#pos(#s(@x16)), @y))) [0] #add(#pos(#s(#s(@x))), @y) -> #succ(null_#add) [0] #and(#false, #false) -> #false [0] #and(#false, #true) -> #false [0] #and(#true, #false) -> #false [0] #and(#true, #true) -> #true [0] #ckgt(#EQ) -> #false [0] #ckgt(#GT) -> #true [0] #ckgt(#LT) -> #false [0] #cklt(#EQ) -> #false [0] #cklt(#GT) -> #false [0] #cklt(#LT) -> #true [0] #compare(#0, #0) -> #EQ [0] #compare(#0, #neg(@y)) -> #GT [0] #compare(#0, #pos(@y)) -> #LT [0] #compare(#0, #s(@y)) -> #LT [0] #compare(#neg(@x), #0) -> #LT [0] #compare(#neg(@x), #neg(@y)) -> #compare(@y, @x) [0] #compare(#neg(@x), #pos(@y)) -> #LT [0] #compare(#pos(@x), #0) -> #GT [0] #compare(#pos(@x), #neg(@y)) -> #GT [0] #compare(#pos(@x), #pos(@y)) -> #compare(@x, @y) [0] #compare(#s(@x), #0) -> #GT [0] #compare(#s(@x), #s(@y)) -> #compare(@x, @y) [0] #div(#0, #0) -> #divByZero [0] #div(#0, #neg(@y)) -> #0 [0] #div(#0, #pos(@y)) -> #0 [0] #div(#neg(@x), #0) -> #divByZero [0] #div(#neg(@x), #neg(@y)) -> #pos(#natdiv(@x, @y)) [0] #div(#neg(@x), #pos(@y)) -> #neg(#natdiv(@x, @y)) [0] #div(#pos(@x), #0) -> #divByZero [0] #div(#pos(@x), #neg(@y)) -> #neg(#natdiv(@x, @y)) [0] #div(#pos(@x), #pos(@y)) -> #pos(#natdiv(@x, @y)) [0] #eq(#0, #0) -> #true [0] #eq(#0, #neg(@y)) -> #false [0] #eq(#0, #pos(@y)) -> #false [0] #eq(#0, #s(@y)) -> #false [0] #eq(#neg(@x), #0) -> #false [0] #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y) [0] #eq(#neg(@x), #pos(@y)) -> #false [0] #eq(#pos(@x), #0) -> #false [0] #eq(#pos(@x), #neg(@y)) -> #false [0] #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y) [0] #eq(#s(@x), #0) -> #false [0] #eq(#s(@x), #s(@y)) -> #eq(@x, @y) [0] #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) -> #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) [0] #eq(::(@x_1, @x_2), nil) -> #false [0] #eq(::(@x_1, @x_2), tuple#2(@y_1, @y_2)) -> #false [0] #eq(nil, ::(@y_1, @y_2)) -> #false [0] #eq(nil, nil) -> #true [0] #eq(nil, tuple#2(@y_1, @y_2)) -> #false [0] #eq(tuple#2(@x_1, @x_2), ::(@y_1, @y_2)) -> #false [0] #eq(tuple#2(@x_1, @x_2), nil) -> #false [0] #eq(tuple#2(@x_1, @x_2), tuple#2(@y_1, @y_2)) -> #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) [0] #mult(#0, #0) -> #0 [0] #mult(#0, #neg(@y)) -> #0 [0] #mult(#0, #pos(@y)) -> #0 [0] #mult(#neg(@x), #0) -> #0 [0] #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) [0] #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) [0] #mult(#pos(@x), #0) -> #0 [0] #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) [0] #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) [0] #natdiv(#0, #0) -> #divByZero [0] #natdiv(#s(@x), #s(#0)) -> #s(#natdiv(@x, #s(#0))) [0] #natdiv(#s(#s(@x385)), #s(#s(@y383))) -> #s(#natdiv(#natsub(@x385, @y383), #s(#s(@y383)))) [0] #natdiv(#s(@x), #s(@y)) -> #s(#natdiv(null_#natsub, #s(@y))) [0] #natmult(#0, @y) -> #0 [0] #natmult(#s(#0), @y) -> #add(#pos(@y), #0) [0] #natmult(#s(#s(@x386)), @y) -> #add(#pos(@y), #add(#pos(@y), #natmult(@x386, @y))) [0] #natmult(#s(@x), @y) -> #add(#pos(@y), null_#natmult) [0] #natsub(@x, #0) -> @x [0] #natsub(#s(@x), #s(@y)) -> #natsub(@x, @y) [0] #pred(#0) -> #neg(#s(#0)) [0] #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) [0] #pred(#pos(#s(#0))) -> #0 [0] #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) [0] #sub(@x, #0) -> @x [0] #sub(@x, #neg(@y)) -> #add(@x, #pos(@y)) [0] #sub(@x, #pos(@y)) -> #add(@x, #neg(@y)) [0] #succ(#0) -> #pos(#s(#0)) [0] #succ(#neg(#s(#0))) -> #0 [0] #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) [0] #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) [0] #add(v0, v1) -> null_#add [0] #and(v0, v1) -> null_#and [0] #ckgt(v0) -> null_#ckgt [0] #cklt(v0) -> null_#cklt [0] #compare(v0, v1) -> null_#compare [0] #div(v0, v1) -> null_#div [0] #eq(v0, v1) -> null_#eq [0] #mult(v0, v1) -> null_#mult [0] #natdiv(v0, v1) -> null_#natdiv [0] #natmult(v0, v1) -> null_#natmult [0] #natsub(v0, v1) -> null_#natsub [0] #pred(v0) -> null_#pred [0] #sub(v0, v1) -> null_#sub [0] #succ(v0) -> null_#succ [0] #abs(v0) -> null_#abs [0] bitToInt'#1(v0, v1) -> null_bitToInt'#1 [0] sub'#1(v0, v1, v2) -> null_sub'#1 [0] sum#2(v0, v1) -> null_sum#2 [0] diff#1(v0) -> null_diff#1 [0] compare#1(v0, v1) -> null_compare#1 [0] mult#1(v0, v1) -> null_mult#1 [0] sub'#2(v0, v1, v2, v3) -> null_sub'#2 [0] sum#3(v0, v1) -> null_sum#3 [0] sum#4(v0) -> null_sum#4 [0] compare#2(v0, v1, v2) -> null_compare#2 [0] sub'#3(v0, v1, v2) -> null_sub'#3 [0] mult#3(v0, v1, v2) -> null_mult#3 [0] sub'#4(v0, v1) -> null_sub'#4 [0] sub'#5(v0, v1, v2) -> null_sub'#5 [0] compare#4(v0, v1, v2, v3) -> null_compare#4 [0] add'#1(v0, v1, v2) -> null_add'#1 [0] compare#5(v0, v1, v2) -> null_compare#5 [0] compare#6(v0) -> null_compare#6 [0] add'#2(v0, v1, v2, v3) -> null_add'#2 [0] add'#3(v0, v1, v2) -> null_add'#3 [0] The TRS has the following type information: #abs :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 #0 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 #neg :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 #pos :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 #s :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 #equal :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #false:#true:null_#and:null_#ckgt:null_#cklt:null_#eq #eq :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #false:#true:null_#and:null_#ckgt:null_#cklt:null_#eq #greater :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #false:#true:null_#and:null_#ckgt:null_#cklt:null_#eq #ckgt :: #EQ:#GT:#LT:null_#compare -> #false:#true:null_#and:null_#ckgt:null_#cklt:null_#eq #compare :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #EQ:#GT:#LT:null_#compare #less :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #false:#true:null_#and:null_#ckgt:null_#cklt:null_#eq #cklt :: #EQ:#GT:#LT:null_#compare -> #false:#true:null_#and:null_#ckgt:null_#cklt:null_#eq times :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 #mult :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 plus :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 #add :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 minus :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 #sub :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 add :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 add' :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 add'#1 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 :: :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 add'#2 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 nil :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 add'#3 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 sum :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 tuple#2 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 bitToInt :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 bitToInt' :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 bitToInt'#1 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 compare :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 compare#1 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 compare#2 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 compare#3 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 compare#4 :: #false:#true:null_#and:null_#ckgt:null_#cklt:null_#eq -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 #false :: #false:#true:null_#and:null_#ckgt:null_#cklt:null_#eq #true :: #false:#true:null_#and:null_#ckgt:null_#cklt:null_#eq compare#5 :: #false:#true:null_#and:null_#ckgt:null_#cklt:null_#eq -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 compare#6 :: #false:#true:null_#and:null_#ckgt:null_#cklt:null_#eq -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 diff :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 mod :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 diff#1 :: #false:#true:null_#and:null_#ckgt:null_#cklt:null_#eq -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 div :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 #div :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 leq :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #false:#true:null_#and:null_#ckgt:null_#cklt:null_#eq mult :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 mult#1 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 mult#2 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 mult#3 :: #false:#true:null_#and:null_#ckgt:null_#cklt:null_#eq -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 mult3 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> a -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 sub :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 sub#1 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 sub' :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 sub'#1 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 sub'#2 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 sub'#3 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 sub'#4 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 sub'#5 :: #false:#true:null_#and:null_#ckgt:null_#cklt:null_#eq -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 sum#1 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 sum#2 :: #false:#true:null_#and:null_#ckgt:null_#cklt:null_#eq -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 sum#3 :: #false:#true:null_#and:null_#ckgt:null_#cklt:null_#eq -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 sum#4 :: #false:#true:null_#and:null_#ckgt:null_#cklt:null_#eq -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 #pred :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 #succ :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 #and :: #false:#true:null_#and:null_#ckgt:null_#cklt:null_#eq -> #false:#true:null_#and:null_#ckgt:null_#cklt:null_#eq -> #false:#true:null_#and:null_#ckgt:null_#cklt:null_#eq #EQ :: #EQ:#GT:#LT:null_#compare #GT :: #EQ:#GT:#LT:null_#compare #LT :: #EQ:#GT:#LT:null_#compare #divByZero :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 #natdiv :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 #natmult :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 #natsub :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 -> #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 null_#add :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 null_#and :: #false:#true:null_#and:null_#ckgt:null_#cklt:null_#eq null_#ckgt :: #false:#true:null_#and:null_#ckgt:null_#cklt:null_#eq null_#cklt :: #false:#true:null_#and:null_#ckgt:null_#cklt:null_#eq null_#compare :: #EQ:#GT:#LT:null_#compare null_#div :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 null_#eq :: #false:#true:null_#and:null_#ckgt:null_#cklt:null_#eq null_#mult :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 null_#natdiv :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 null_#natmult :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 null_#natsub :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 null_#pred :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 null_#sub :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 null_#succ :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 null_#abs :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 null_bitToInt'#1 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 null_sub'#1 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 null_sum#2 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 null_diff#1 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 null_compare#1 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 null_mult#1 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 null_sub'#2 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 null_sum#3 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 null_sum#4 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 null_compare#2 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 null_sub'#3 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 null_mult#3 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 null_sub'#4 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 null_sub'#5 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 null_compare#4 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 null_add'#1 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 null_compare#5 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 null_compare#6 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 null_add'#2 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 null_add'#3 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 const :: a Rewrite Strategy: INNERMOST ---------------------------------------- (13) CpxTypedWeightedTrsToRntsProof (UPPER BOUND(ID)) Transformed the TRS into an over-approximating RNTS by (improved) Size Abstraction. The constant constructors are abstracted as follows: #0 => 0 nil => 2 #false => 1 #true => 2 #EQ => 1 #GT => 2 #LT => 3 #divByZero => 1 null_#add => 0 null_#and => 0 null_#ckgt => 0 null_#cklt => 0 null_#compare => 0 null_#div => 0 null_#eq => 0 null_#mult => 0 null_#natdiv => 0 null_#natmult => 0 null_#natsub => 0 null_#pred => 0 null_#sub => 0 null_#succ => 0 null_#abs => 0 null_bitToInt'#1 => 0 null_sub'#1 => 0 null_sum#2 => 0 null_diff#1 => 0 null_compare#1 => 0 null_mult#1 => 0 null_sub'#2 => 0 null_sum#3 => 0 null_sum#4 => 0 null_compare#2 => 0 null_sub'#3 => 0 null_mult#3 => 0 null_sub'#4 => 0 null_sub'#5 => 0 null_compare#4 => 0 null_add'#1 => 0 null_compare#5 => 0 null_compare#6 => 0 null_add'#2 => 0 null_add'#3 => 0 const => 0 ---------------------------------------- (14) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 #abs(z) -{ 1 }-> 1 + @x :|: @x >= 0, z = 1 + @x #abs(z) -{ 1 }-> 1 + (1 + @x) :|: @x >= 0, z = 1 + @x #add(z, z') -{ 0 }-> @y :|: z' = @y, z = 0, @y >= 0 #add(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 #add(z, z') -{ 0 }-> #succ(@y) :|: z = 1 + (1 + 0), z' = @y, @y >= 0 #add(z, z') -{ 0 }-> #succ(0) :|: @x >= 0, z' = @y, z = 1 + (1 + (1 + @x)), @y >= 0 #add(z, z') -{ 0 }-> #succ(#succ(@y)) :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + @x16), @y))) :|: @x16 >= 0, z' = @y, z = 1 + (1 + (1 + (1 + @x16))), @y >= 0 #add(z, z') -{ 0 }-> #pred(@y) :|: z = 1 + (1 + 0), z' = @y, @y >= 0 #add(z, z') -{ 0 }-> #pred(0) :|: @x >= 0, z' = @y, z = 1 + (1 + (1 + @x)), @y >= 0 #add(z, z') -{ 0 }-> #pred(#succ(@y)) :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + @x15), @y))) :|: z = 1 + (1 + (1 + (1 + @x15))), z' = @y, @x15 >= 0, @y >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' = 1 + @y, @y >= 0 #compare(z, z') -{ 0 }-> 3 :|: @x >= 0, z = 1 + @x, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: @x >= 0, z = 1 + @x, z' = 1 + @y, @y >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' = 1 + @y, @y >= 0 #compare(z, z') -{ 0 }-> 2 :|: @x >= 0, z = 1 + @x, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: @x >= 0, z = 1 + @x, z' = 1 + @y, @y >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 #compare(z, z') -{ 0 }-> #compare(@x, @y) :|: @x >= 0, z = 1 + @x, z' = 1 + @y, @y >= 0 #compare(z, z') -{ 0 }-> #compare(@y, @x) :|: @x >= 0, z = 1 + @x, z' = 1 + @y, @y >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: @x >= 0, z = 1 + @x, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' = 1 + @y, @y >= 0 #div(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 #div(z, z') -{ 0 }-> 1 + #natdiv(@x, @y) :|: @x >= 0, z = 1 + @x, z' = 1 + @y, @y >= 0 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' = 1 + @y, @y >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x >= 0, z = 1 + @x, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: @x >= 0, z = 1 + @x, z' = 1 + @y, @y >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 #eq(z, z') -{ 0 }-> #eq(@x, @y) :|: @x >= 0, z = 1 + @x, z' = 1 + @y, @y >= 0 #eq(z, z') -{ 0 }-> #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #equal(z, z') -{ 1 }-> #eq(@x, @y) :|: z = @x, @x >= 0, z' = @y, @y >= 0 #greater(z, z') -{ 1 }-> #ckgt(3) :|: z' = 1 + @y'', @y'' >= 0, z = 0 #greater(z, z') -{ 1 }-> #ckgt(3) :|: z' = 1 + @y1, @y1 >= 0, z = 0 #greater(z, z') -{ 1 }-> #ckgt(3) :|: z = 1 + @x', @x' >= 0, z' = 0 #greater(z, z') -{ 1 }-> #ckgt(3) :|: @y3 >= 0, @x1 >= 0, z' = 1 + @y3, z = 1 + @x1 #greater(z, z') -{ 1 }-> #ckgt(2) :|: @y' >= 0, z' = 1 + @y', z = 0 #greater(z, z') -{ 1 }-> #ckgt(2) :|: @x2 >= 0, z = 1 + @x2, z' = 0 #greater(z, z') -{ 1 }-> #ckgt(2) :|: @x3 >= 0, z' = 1 + @y4, z = 1 + @x3, @y4 >= 0 #greater(z, z') -{ 1 }-> #ckgt(2) :|: z = 1 + @x5, @x5 >= 0, z' = 0 #greater(z, z') -{ 1 }-> #ckgt(1) :|: z = 0, z' = 0 #greater(z, z') -{ 1 }-> #ckgt(0) :|: z = @x, @x >= 0, z' = @y, @y >= 0 #greater(z, z') -{ 1 }-> #ckgt(#compare(@x4, @y5)) :|: z' = 1 + @y5, @y5 >= 0, z = 1 + @x4, @x4 >= 0 #greater(z, z') -{ 1 }-> #ckgt(#compare(@x6, @y6)) :|: z = 1 + @x6, z' = 1 + @y6, @x6 >= 0, @y6 >= 0 #greater(z, z') -{ 1 }-> #ckgt(#compare(@y2, @x'')) :|: z = 1 + @x'', z' = 1 + @y2, @y2 >= 0, @x'' >= 0 #less(z, z') -{ 1 }-> #cklt(3) :|: @y8 >= 0, z = 0, z' = 1 + @y8 #less(z, z') -{ 1 }-> #cklt(3) :|: @y9 >= 0, z' = 1 + @y9, z = 0 #less(z, z') -{ 1 }-> #cklt(3) :|: z = 1 + @x7, @x7 >= 0, z' = 0 #less(z, z') -{ 1 }-> #cklt(3) :|: @y11 >= 0, z = 1 + @x9, z' = 1 + @y11, @x9 >= 0 #less(z, z') -{ 1 }-> #cklt(2) :|: @y7 >= 0, z = 0, z' = 1 + @y7 #less(z, z') -{ 1 }-> #cklt(2) :|: z = 1 + @x10, @x10 >= 0, z' = 0 #less(z, z') -{ 1 }-> #cklt(2) :|: z = 1 + @x11, @x11 >= 0, @y12 >= 0, z' = 1 + @y12 #less(z, z') -{ 1 }-> #cklt(2) :|: z = 1 + @x13, @x13 >= 0, z' = 0 #less(z, z') -{ 1 }-> #cklt(1) :|: z = 0, z' = 0 #less(z, z') -{ 1 }-> #cklt(0) :|: z = @x, @x >= 0, z' = @y, @y >= 0 #less(z, z') -{ 1 }-> #cklt(#compare(@x12, @y13)) :|: @x12 >= 0, z = 1 + @x12, @y13 >= 0, z' = 1 + @y13 #less(z, z') -{ 1 }-> #cklt(#compare(@x14, @y14)) :|: z = 1 + @x14, @x14 >= 0, @y14 >= 0, z' = 1 + @y14 #less(z, z') -{ 1 }-> #cklt(#compare(@y10, @x8)) :|: z' = 1 + @y10, @y10 >= 0, z = 1 + @x8, @x8 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 1 + @y, @y >= 0 #mult(z, z') -{ 0 }-> 0 :|: @x >= 0, z = 1 + @x, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 #mult(z, z') -{ 0 }-> 1 + #natmult(@x, @y) :|: @x >= 0, z = 1 + @x, z' = 1 + @y, @y >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(@x, 1 + 0) :|: @x >= 0, z = 1 + @x, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(0, 1 + @y) :|: @x >= 0, z = 1 + @x, z' = 1 + @y, @y >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(#natsub(@x385, @y383), 1 + (1 + @y383)) :|: z = 1 + (1 + @x385), @x385 >= 0, z' = 1 + (1 + @y383), @y383 >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z' = @y, z = 0, @y >= 0 #natmult(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 #natmult(z, z') -{ 0 }-> #add(1 + @y, 0) :|: z = 1 + 0, z' = @y, @y >= 0 #natmult(z, z') -{ 0 }-> #add(1 + @y, 0) :|: @x >= 0, z = 1 + @x, z' = @y, @y >= 0 #natmult(z, z') -{ 0 }-> #add(1 + @y, #add(1 + @y, #natmult(@x386, @y))) :|: @x386 >= 0, z' = @y, @y >= 0, z = 1 + (1 + @x386) #natsub(z, z') -{ 0 }-> @x :|: z = @x, @x >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 #natsub(z, z') -{ 0 }-> #natsub(@x, @y) :|: @x >= 0, z = 1 + @x, z' = 1 + @y, @y >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 #pred(z) -{ 0 }-> 1 + (1 + @x) :|: @x >= 0, z = 1 + (1 + (1 + @x)) #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + @x)) :|: @x >= 0, z = 1 + (1 + @x) #sub(z, z') -{ 0 }-> @x :|: z = @x, @x >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 #sub(z, z') -{ 0 }-> #add(@x, 1 + @y) :|: z = @x, @x >= 0, z' = 1 + @y, @y >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 #succ(z) -{ 0 }-> 1 + (1 + @x) :|: @x >= 0, z = 1 + (1 + (1 + @x)) #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + @x)) :|: @x >= 0, z = 1 + (1 + @x) add(z, z') -{ 2 }-> add'(@b1, @b2, 0) :|: z' = @b2, @b2 >= 0, z = @b1, @b1 >= 0 add(z, z') -{ 1 }-> add'(@b1, @b2, 0) :|: z' = @b2, @b2 >= 0, z = @b1, @b1 >= 0 add'(z, z', z'') -{ 1 }-> add'#1(@b1, @b2, @r) :|: z' = @b2, @b2 >= 0, z = @b1, @b1 >= 0, z'' = @r, @r >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(@b2, @r, @x, @xs) :|: z' = @b2, @x >= 0, z = 1 + @x + @xs, @xs >= 0, @b2 >= 0, z'' = @r, @r >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' = @b2, @b2 >= 0, z'' = @r, @r >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0 add'#2(z, z', z'', z1) -{ 2 }-> add'#3(sum#1(plus(plus(@x, @y), @r)), @xs, @ys) :|: z' = @r, z = 1 + @y + @ys, @x >= 0, z1 = @xs, @xs >= 0, z'' = @x, @y >= 0, @ys >= 0, @r >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z' = @r, @x >= 0, z1 = @xs, @xs >= 0, z'' = @x, @r >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z1 = v3, v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0, v3 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(@xs, @ys, @r') :|: z' = @xs, z = 1 + @z + @r', @xs >= 0, z'' = @ys, @r' >= 0, @ys >= 0, @z >= 0 bitToInt(z) -{ 1 }-> bitToInt'(@b, 0) :|: z = @b, @b >= 0 bitToInt(z) -{ 2 }-> bitToInt'(@b, 1 + (1 + 0)) :|: z = @b, @b >= 0 bitToInt'(z, z') -{ 1 }-> bitToInt'#1(@b, @n) :|: z' = @n, @n >= 0, z = @b, @b >= 0 bitToInt'#1(z, z') -{ 3 }-> plus(#mult(@x, @n), bitToInt'(@xs, #mult(@n, 1 + (1 + (1 + 0))))) :|: z' = @n, @x >= 0, z = 1 + @x + @xs, @n >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 bitToInt'#1(z, z') -{ 1 }-> #abs(0) :|: z = 2, z' = @n, @n >= 0 compare(z, z') -{ 1 }-> compare#1(@b1, @b2) :|: z' = @b2, @b2 >= 0, z = @b1, @b1 >= 0 compare#1(z, z') -{ 1 }-> compare#2(@b2, @x, @xs) :|: z' = @b2, @x >= 0, z = 1 + @x + @xs, @xs >= 0, @b2 >= 0 compare#1(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 compare#1(z, z') -{ 1 }-> #abs(0) :|: z = 2, z' = @b2, @b2 >= 0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(@xs, @ys), @x, @y) :|: z = 1 + @y + @ys, @x >= 0, @xs >= 0, @y >= 0, z' = @x, z'' = @xs, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0 compare#2(z, z', z'') -{ 1 }-> #abs(0) :|: z = 2, @x >= 0, @xs >= 0, z' = @x, z'' = @xs compare#3(z, z', z'') -{ 2 }-> compare#4(#eq(@r, 0), @r, @x, @y) :|: @x >= 0, z = @r, @y >= 0, z' = @x, @r >= 0, z'' = @y compare#4(z, z', z'', z1) -{ 1 }-> @r :|: z' = @r, @x >= 0, z = 1, z1 = @y, z'' = @x, @y >= 0, @r >= 0 compare#4(z, z', z'', z1) -{ 2 }-> compare#5(#cklt(#compare(@x, @y)), @x, @y) :|: z = 2, z' = @r, @x >= 0, z1 = @y, z'' = @x, @y >= 0, @r >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z1 = v3, v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0, v3 >= 0 compare#5(z, z', z'') -{ 1 }-> minus(0, 1 + (1 + 0)) :|: z = 2, @x >= 0, @y >= 0, z' = @x, z'' = @y compare#5(z, z', z'') -{ 2 }-> compare#6(#ckgt(#compare(@x, @y))) :|: @x >= 0, z = 1, @y >= 0, z' = @x, z'' = @y compare#5(z, z', z'') -{ 0 }-> 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0 compare#6(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 compare#6(z) -{ 1 }-> #abs(0) :|: z = 1 compare#6(z) -{ 1 }-> #abs(1 + (1 + 0)) :|: z = 2 diff(z, z', z'') -{ 3 }-> 1 + mod(plus(#add(@x, @y), @r), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(@x, @y), @r), 0)) :|: z = @x, @x >= 0, z' = @y, z'' = @r, @y >= 0, @r >= 0 diff#1(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 diff#1(z) -{ 1 }-> #abs(0) :|: z = 1 diff#1(z) -{ 1 }-> #abs(1 + (1 + 0)) :|: z = 2 div(z, z') -{ 1 }-> #div(@x, @y) :|: z = @x, @x >= 0, z' = @y, @y >= 0 leq(z, z') -{ 2 }-> #less(compare#1(@b1, @b2), 1 + (1 + 0)) :|: z' = @b2, @b2 >= 0, z = @b1, @b1 >= 0 minus(z, z') -{ 1 }-> #sub(@x, @y) :|: z = @x, @x >= 0, z' = @y, @y >= 0 mod(z, z') -{ 2 }-> minus(@x, times(@x, #div(@x, @y))) :|: z = @x, @x >= 0, z' = @y, @y >= 0 mult(z, z') -{ 1 }-> mult#1(@b1, @b2) :|: z' = @b2, @b2 >= 0, z = @b1, @b1 >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, @b2), @b2, @x) :|: z' = @b2, @x >= 0, z = 1 + @x + @xs, @xs >= 0, @b2 >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, @b2), @b2, @x) :|: z' = @b2, @x >= 0, z = 1 + @x + @xs, @xs >= 0, @b2 >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' = @b2, @b2 >= 0 mult#1(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 mult#2(z, z', z'') -{ 2 }-> mult#3(#eq(@x, 1 + (1 + 0)), @b2, @zs) :|: z' = @b2, @x >= 0, z = @zs, @b2 >= 0, @zs >= 0, z'' = @x mult#3(z, z', z'') -{ 1 }-> @zs :|: z' = @b2, z = 1, @b2 >= 0, @zs >= 0, z'' = @zs mult#3(z, z', z'') -{ 1 }-> add(@b2, @zs) :|: z = 2, z' = @b2, @b2 >= 0, @zs >= 0, z'' = @zs mult#3(z, z', z'') -{ 0 }-> 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(@b1, @b2), @b2) :|: z' = @b2, z'' = @b3, @b3 >= 0, @b2 >= 0, z = @b1, @b1 >= 0 plus(z, z') -{ 1 }-> #add(@x, @y) :|: z = @x, @x >= 0, z' = @y, @y >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(@b1, @b2, 0)) :|: z' = @b2, @b2 >= 0, z = @b1, @b1 >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(@b1, @b2, 0)) :|: z' = @b2, @b2 >= 0, z = @b1, @b1 >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(@b1, @b2, @r) :|: z' = @b2, @b2 >= 0, z = @b1, @b1 >= 0, z'' = @r, @r >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(@b2, @r, @x, @xs) :|: z' = @b2, @x >= 0, z = 1 + @x + @xs, @xs >= 0, @b2 >= 0, z'' = @r, @r >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + @r :|: z = 2, z' = @b2, @b2 >= 0, z'' = @r, @r >= 0 sub'#2(z, z', z'', z1) -{ 2 }-> sub'#3(1 + mod(plus(plus(@x, @y), @r), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(@x, @y), @r), 0)), @xs, @ys) :|: z' = @r, z = 1 + @y + @ys, @x >= 0, z1 = @xs, @xs >= 0, z'' = @x, @y >= 0, @ys >= 0, @r >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z1 = v3, v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0, v3 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + @r :|: z = 2, z' = @r, @x >= 0, z1 = @xs, @xs >= 0, z'' = @x, @r >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(@xs, @ys, @r'), @z) :|: z' = @xs, z = 1 + @z + @r', @xs >= 0, z'' = @ys, @r' >= 0, @ys >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 sub'#4(z, z') -{ 2 }-> 1 + sub'#5(#eq(@s, 1 + (1 + 0)), @z, @zs) + @s :|: z' = @z, z = 1 + @zs + @s, @zs >= 0, @s >= 0, @z >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + @z + @zs :|: z' = @z, z = 1, @zs >= 0, z'' = @zs, @z >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + #abs(0) + @zs :|: z = 2, z' = @z, @zs >= 0, z'' = @zs, @z >= 0 sum(z, z', z'') -{ 2 }-> sum#1(plus(#add(@x, @y), @r)) :|: z = @x, @x >= 0, z' = @y, z'' = @r, @y >= 0, @r >= 0 sum#1(z) -{ 2 }-> sum#2(#eq(@s, 0), @s) :|: z = @s, @s >= 0 sum#2(z, z') -{ 2 }-> sum#3(#eq(@s, 1 + (1 + 0)), @s) :|: z = 1, z' = @s, @s >= 0 sum#2(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 sum#2(z, z') -{ 1 }-> 1 + #abs(0) + #abs(0) :|: z = 2, z' = @s, @s >= 0 sum#3(z, z') -{ 2 }-> sum#4(#eq(@s, 1 + (1 + (1 + 0)))) :|: z = 1, z' = @s, @s >= 0 sum#3(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 sum#3(z, z') -{ 1 }-> 1 + #abs(1 + (1 + 0)) + #abs(0) :|: z = 2, z' = @s, @s >= 0 sum#4(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 sum#4(z) -{ 1 }-> 1 + #abs(0) + #abs(1 + (1 + 0)) :|: z = 2 sum#4(z) -{ 1 }-> 1 + #abs(1 + (1 + 0)) + #abs(1 + (1 + 0)) :|: z = 1 times(z, z') -{ 1 }-> #mult(@x, @y) :|: z = @x, @x >= 0, z' = @y, @y >= 0 ---------------------------------------- (15) InliningProof (UPPER BOUND(ID)) Inlined the following terminating rules on right-hand sides where appropriate: #abs(z) -{ 1 }-> 1 + (1 + @x) :|: @x >= 0, z = 1 + @x #abs(z) -{ 1 }-> 1 + @x :|: @x >= 0, z = 1 + @x #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 2 :|: z = 3 #pred(z) -{ 0 }-> 1 + (1 + (1 + @x)) :|: @x >= 0, z = 1 + (1 + @x) #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 1 + (1 + @x) :|: @x >= 0, z = 1 + (1 + (1 + @x)) #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 #succ(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 #succ(z) -{ 0 }-> 1 + (1 + @x) :|: @x >= 0, z = 1 + (1 + (1 + @x)) #succ(z) -{ 0 }-> 1 + (1 + (1 + @x)) :|: @x >= 0, z = 1 + (1 + @x) #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 compare#6(z) -{ 1 }-> #abs(0) :|: z = 1 compare#6(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 compare#6(z) -{ 1 }-> #abs(1 + (1 + 0)) :|: z = 2 diff#1(z) -{ 1 }-> #abs(1 + (1 + 0)) :|: z = 2 diff#1(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 diff#1(z) -{ 1 }-> #abs(0) :|: z = 1 sub'#5(z, z', z'') -{ 1 }-> 1 + #abs(0) + @zs :|: z = 2, z' = @z, @zs >= 0, z'' = @zs, @z >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + @z + @zs :|: z' = @z, z = 1, @zs >= 0, z'' = @zs, @z >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0 sum#4(z) -{ 1 }-> 1 + #abs(1 + (1 + 0)) + #abs(1 + (1 + 0)) :|: z = 1 sum#4(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 sum#4(z) -{ 1 }-> 1 + #abs(0) + #abs(1 + (1 + 0)) :|: z = 2 ---------------------------------------- (16) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 #abs(z) -{ 1 }-> 1 + @x :|: @x >= 0, z = 1 + @x #abs(z) -{ 1 }-> 1 + (1 + @x) :|: @x >= 0, z = 1 + @x #add(z, z') -{ 0 }-> @y :|: z' = @y, z = 0, @y >= 0 #add(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' = @y, @y >= 0, @y = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' = @y, @y >= 0, v0 >= 0, @y = v0 #add(z, z') -{ 0 }-> 0 :|: @x >= 0, z' = @y, z = 1 + (1 + (1 + @x)), @y >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, v0 >= 0, @y = v0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, @x >= 0, @y = 1 + (1 + (1 + @x)), v0 >= 0, 1 + (1 + @x) = v0 #add(z, z') -{ 0 }-> 0 :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, @x >= 0, @y = 1 + (1 + (1 + @x)), 1 + (1 + @x) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, @x >= 0, @y = 1 + (1 + @x), v0 >= 0, 1 + (1 + (1 + @x)) = v0 #add(z, z') -{ 0 }-> 0 :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, @y = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, @y = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, @y = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x) :|: z = 1 + (1 + 0), z' = @y, @y >= 0, @x >= 0, @y = 1 + (1 + (1 + @x)) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, @x >= 0, @y = 1 + (1 + (1 + @x)), @x' >= 0, 1 + (1 + @x) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, @x >= 0, @y = 1 + (1 + @x), @x' >= 0, 1 + (1 + (1 + @x)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' = @y, @y >= 0, @y = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: @x >= 0, z' = @y, z = 1 + (1 + (1 + @x)), @y >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, v0 >= 0, @y = v0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, @y = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + 0), z' = @y, @y >= 0, @x >= 0, @y = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, @y = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, @x >= 0, @y = 1 + (1 + (1 + @x)), @x' >= 0, 1 + (1 + @x) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, @x >= 0, @y = 1 + (1 + @x), @x' >= 0, 1 + (1 + (1 + @x)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + @x16), @y))) :|: @x16 >= 0, z' = @y, z = 1 + (1 + (1 + (1 + @x16))), @y >= 0 #add(z, z') -{ 0 }-> #pred(0) :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, v0 >= 0, @y = v0 #add(z, z') -{ 0 }-> #pred(0) :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, @y = 1 + (1 + 0) #add(z, z') -{ 0 }-> #pred(1 + (1 + @x)) :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, @x >= 0, @y = 1 + (1 + (1 + @x)) #add(z, z') -{ 0 }-> #pred(1 + (1 + 0)) :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, @y = 0 #add(z, z') -{ 0 }-> #pred(1 + (1 + (1 + @x))) :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, @x >= 0, @y = 1 + (1 + @x) #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + @x15), @y))) :|: z = 1 + (1 + (1 + (1 + @x15))), z' = @y, @x15 >= 0, @y >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' = 1 + @y, @y >= 0 #compare(z, z') -{ 0 }-> 3 :|: @x >= 0, z = 1 + @x, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: @x >= 0, z = 1 + @x, z' = 1 + @y, @y >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' = 1 + @y, @y >= 0 #compare(z, z') -{ 0 }-> 2 :|: @x >= 0, z = 1 + @x, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: @x >= 0, z = 1 + @x, z' = 1 + @y, @y >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 #compare(z, z') -{ 0 }-> #compare(@x, @y) :|: @x >= 0, z = 1 + @x, z' = 1 + @y, @y >= 0 #compare(z, z') -{ 0 }-> #compare(@y, @x) :|: @x >= 0, z = 1 + @x, z' = 1 + @y, @y >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: @x >= 0, z = 1 + @x, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' = 1 + @y, @y >= 0 #div(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 #div(z, z') -{ 0 }-> 1 + #natdiv(@x, @y) :|: @x >= 0, z = 1 + @x, z' = 1 + @y, @y >= 0 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' = 1 + @y, @y >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x >= 0, z = 1 + @x, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: @x >= 0, z = 1 + @x, z' = 1 + @y, @y >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 #eq(z, z') -{ 0 }-> #eq(@x, @y) :|: @x >= 0, z = 1 + @x, z' = 1 + @y, @y >= 0 #eq(z, z') -{ 0 }-> #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #equal(z, z') -{ 1 }-> #eq(@x, @y) :|: z = @x, @x >= 0, z' = @y, @y >= 0 #greater(z, z') -{ 1 }-> 2 :|: @y' >= 0, z' = 1 + @y', z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: @x2 >= 0, z = 1 + @x2, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: @x3 >= 0, z' = 1 + @y4, z = 1 + @x3, @y4 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z = 1 + @x5, @x5 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' = 1 + @y'', @y'' >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' = 1 + @y1, @y1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z = 1 + @x', @x' >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: @y3 >= 0, @x1 >= 0, z' = 1 + @y3, z = 1 + @x1, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: @y' >= 0, z' = 1 + @y', z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' = 1 + @y'', @y'' >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' = 1 + @y1, @y1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z = 1 + @x', @x' >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: @y3 >= 0, @x1 >= 0, z' = 1 + @y3, z = 1 + @x1, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: @x2 >= 0, z = 1 + @x2, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: @x3 >= 0, z' = 1 + @y4, z = 1 + @x3, @y4 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z = 1 + @x5, @x5 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z = @x, @x >= 0, z' = @y, @y >= 0, v0 >= 0, 0 = v0 #greater(z, z') -{ 1 }-> #ckgt(#compare(@x4, @y5)) :|: z' = 1 + @y5, @y5 >= 0, z = 1 + @x4, @x4 >= 0 #greater(z, z') -{ 1 }-> #ckgt(#compare(@x6, @y6)) :|: z = 1 + @x6, z' = 1 + @y6, @x6 >= 0, @y6 >= 0 #greater(z, z') -{ 1 }-> #ckgt(#compare(@y2, @x'')) :|: z = 1 + @x'', z' = 1 + @y2, @y2 >= 0, @x'' >= 0 #less(z, z') -{ 1 }-> 2 :|: @y8 >= 0, z = 0, z' = 1 + @y8, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: @y9 >= 0, z' = 1 + @y9, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z = 1 + @x7, @x7 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: @y11 >= 0, z = 1 + @x9, z' = 1 + @y11, @x9 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: @y7 >= 0, z = 0, z' = 1 + @y7, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z = 1 + @x10, @x10 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z = 1 + @x11, @x11 >= 0, @y12 >= 0, z' = 1 + @y12, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z = 1 + @x13, @x13 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: @y7 >= 0, z = 0, z' = 1 + @y7, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: @y8 >= 0, z = 0, z' = 1 + @y8, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: @y9 >= 0, z' = 1 + @y9, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z = 1 + @x7, @x7 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: @y11 >= 0, z = 1 + @x9, z' = 1 + @y11, @x9 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z = 1 + @x10, @x10 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z = 1 + @x11, @x11 >= 0, @y12 >= 0, z' = 1 + @y12, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z = 1 + @x13, @x13 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z = @x, @x >= 0, z' = @y, @y >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> #cklt(#compare(@x12, @y13)) :|: @x12 >= 0, z = 1 + @x12, @y13 >= 0, z' = 1 + @y13 #less(z, z') -{ 1 }-> #cklt(#compare(@x14, @y14)) :|: z = 1 + @x14, @x14 >= 0, @y14 >= 0, z' = 1 + @y14 #less(z, z') -{ 1 }-> #cklt(#compare(@y10, @x8)) :|: z' = 1 + @y10, @y10 >= 0, z = 1 + @x8, @x8 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 1 + @y, @y >= 0 #mult(z, z') -{ 0 }-> 0 :|: @x >= 0, z = 1 + @x, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 #mult(z, z') -{ 0 }-> 1 + #natmult(@x, @y) :|: @x >= 0, z = 1 + @x, z' = 1 + @y, @y >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(@x, 1 + 0) :|: @x >= 0, z = 1 + @x, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(0, 1 + @y) :|: @x >= 0, z = 1 + @x, z' = 1 + @y, @y >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(#natsub(@x385, @y383), 1 + (1 + @y383)) :|: z = 1 + (1 + @x385), @x385 >= 0, z' = 1 + (1 + @y383), @y383 >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z' = @y, z = 0, @y >= 0 #natmult(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 #natmult(z, z') -{ 0 }-> #add(1 + @y, 0) :|: z = 1 + 0, z' = @y, @y >= 0 #natmult(z, z') -{ 0 }-> #add(1 + @y, 0) :|: @x >= 0, z = 1 + @x, z' = @y, @y >= 0 #natmult(z, z') -{ 0 }-> #add(1 + @y, #add(1 + @y, #natmult(@x386, @y))) :|: @x386 >= 0, z' = @y, @y >= 0, z = 1 + (1 + @x386) #natsub(z, z') -{ 0 }-> @x :|: z = @x, @x >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 #natsub(z, z') -{ 0 }-> #natsub(@x, @y) :|: @x >= 0, z = 1 + @x, z' = 1 + @y, @y >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 #pred(z) -{ 0 }-> 1 + (1 + @x) :|: @x >= 0, z = 1 + (1 + (1 + @x)) #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + @x)) :|: @x >= 0, z = 1 + (1 + @x) #sub(z, z') -{ 0 }-> @x :|: z = @x, @x >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 #sub(z, z') -{ 0 }-> #add(@x, 1 + @y) :|: z = @x, @x >= 0, z' = 1 + @y, @y >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 #succ(z) -{ 0 }-> 1 + (1 + @x) :|: @x >= 0, z = 1 + (1 + (1 + @x)) #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + @x)) :|: @x >= 0, z = 1 + (1 + @x) add(z, z') -{ 2 }-> add'(@b1, @b2, 0) :|: z' = @b2, @b2 >= 0, z = @b1, @b1 >= 0 add(z, z') -{ 1 }-> add'(@b1, @b2, 0) :|: z' = @b2, @b2 >= 0, z = @b1, @b1 >= 0 add'(z, z', z'') -{ 1 }-> add'#1(@b1, @b2, @r) :|: z' = @b2, @b2 >= 0, z = @b1, @b1 >= 0, z'' = @r, @r >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(@b2, @r, @x, @xs) :|: z' = @b2, @x >= 0, z = 1 + @x + @xs, @xs >= 0, @b2 >= 0, z'' = @r, @r >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' = @b2, @b2 >= 0, z'' = @r, @r >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0 add'#2(z, z', z'', z1) -{ 2 }-> add'#3(sum#1(plus(plus(@x, @y), @r)), @xs, @ys) :|: z' = @r, z = 1 + @y + @ys, @x >= 0, z1 = @xs, @xs >= 0, z'' = @x, @y >= 0, @ys >= 0, @r >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z' = @r, @x >= 0, z1 = @xs, @xs >= 0, z'' = @x, @r >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z1 = v3, v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0, v3 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(@xs, @ys, @r') :|: z' = @xs, z = 1 + @z + @r', @xs >= 0, z'' = @ys, @r' >= 0, @ys >= 0, @z >= 0 bitToInt(z) -{ 1 }-> bitToInt'(@b, 0) :|: z = @b, @b >= 0 bitToInt(z) -{ 2 }-> bitToInt'(@b, 1 + (1 + 0)) :|: z = @b, @b >= 0 bitToInt'(z, z') -{ 1 }-> bitToInt'#1(@b, @n) :|: z' = @n, @n >= 0, z = @b, @b >= 0 bitToInt'#1(z, z') -{ 3 }-> plus(#mult(@x, @n), bitToInt'(@xs, #mult(@n, 1 + (1 + (1 + 0))))) :|: z' = @n, @x >= 0, z = 1 + @x + @xs, @n >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' = @n, @n >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' = @n, @n >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(@b1, @b2) :|: z' = @b2, @b2 >= 0, z = @b1, @b1 >= 0 compare#1(z, z') -{ 1 }-> compare#2(@b2, @x, @xs) :|: z' = @b2, @x >= 0, z = 1 + @x + @xs, @xs >= 0, @b2 >= 0 compare#1(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' = @b2, @b2 >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' = @b2, @b2 >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(@xs, @ys), @x, @y) :|: z = 1 + @y + @ys, @x >= 0, @xs >= 0, @y >= 0, z' = @x, z'' = @xs, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, @x >= 0, @xs >= 0, z' = @x, z'' = @xs, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, @x >= 0, @xs >= 0, z' = @x, z'' = @xs, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 2 }-> compare#4(#eq(@r, 0), @r, @x, @y) :|: @x >= 0, z = @r, @y >= 0, z' = @x, @r >= 0, z'' = @y compare#4(z, z', z'', z1) -{ 1 }-> @r :|: z' = @r, @x >= 0, z = 1, z1 = @y, z'' = @x, @y >= 0, @r >= 0 compare#4(z, z', z'', z1) -{ 2 }-> compare#5(#cklt(#compare(@x, @y)), @x, @y) :|: z = 2, z' = @r, @x >= 0, z1 = @y, z'' = @x, @y >= 0, @r >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z1 = v3, v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0, v3 >= 0 compare#5(z, z', z'') -{ 1 }-> minus(0, 1 + (1 + 0)) :|: z = 2, @x >= 0, @y >= 0, z' = @x, z'' = @y compare#5(z, z', z'') -{ 2 }-> compare#6(#ckgt(#compare(@x, @y))) :|: @x >= 0, z = 1, @y >= 0, z' = @x, z'' = @y compare#5(z, z', z'') -{ 0 }-> 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0 compare#6(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 3 }-> 1 + mod(plus(#add(@x, @y), @r), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(@x, @y), @r), 0)) :|: z = @x, @x >= 0, z' = @y, z'' = @r, @y >= 0, @r >= 0 diff#1(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> #div(@x, @y) :|: z = @x, @x >= 0, z' = @y, @y >= 0 leq(z, z') -{ 2 }-> #less(compare#1(@b1, @b2), 1 + (1 + 0)) :|: z' = @b2, @b2 >= 0, z = @b1, @b1 >= 0 minus(z, z') -{ 1 }-> #sub(@x, @y) :|: z = @x, @x >= 0, z' = @y, @y >= 0 mod(z, z') -{ 2 }-> minus(@x, times(@x, #div(@x, @y))) :|: z = @x, @x >= 0, z' = @y, @y >= 0 mult(z, z') -{ 1 }-> mult#1(@b1, @b2) :|: z' = @b2, @b2 >= 0, z = @b1, @b1 >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, @b2), @b2, @x) :|: z' = @b2, @x >= 0, z = 1 + @x + @xs, @xs >= 0, @b2 >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, @b2), @b2, @x) :|: z' = @b2, @x >= 0, z = 1 + @x + @xs, @xs >= 0, @b2 >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' = @b2, @b2 >= 0 mult#1(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 mult#2(z, z', z'') -{ 2 }-> mult#3(#eq(@x, 1 + (1 + 0)), @b2, @zs) :|: z' = @b2, @x >= 0, z = @zs, @b2 >= 0, @zs >= 0, z'' = @x mult#3(z, z', z'') -{ 1 }-> @zs :|: z' = @b2, z = 1, @b2 >= 0, @zs >= 0, z'' = @zs mult#3(z, z', z'') -{ 1 }-> add(@b2, @zs) :|: z = 2, z' = @b2, @b2 >= 0, @zs >= 0, z'' = @zs mult#3(z, z', z'') -{ 0 }-> 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(@b1, @b2), @b2) :|: z' = @b2, z'' = @b3, @b3 >= 0, @b2 >= 0, z = @b1, @b1 >= 0 plus(z, z') -{ 1 }-> #add(@x, @y) :|: z = @x, @x >= 0, z' = @y, @y >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(@b1, @b2, 0)) :|: z' = @b2, @b2 >= 0, z = @b1, @b1 >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(@b1, @b2, 0)) :|: z' = @b2, @b2 >= 0, z = @b1, @b1 >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(@b1, @b2, @r) :|: z' = @b2, @b2 >= 0, z = @b1, @b1 >= 0, z'' = @r, @r >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(@b2, @r, @x, @xs) :|: z' = @b2, @x >= 0, z = 1 + @x + @xs, @xs >= 0, @b2 >= 0, z'' = @r, @r >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + @r :|: z = 2, z' = @b2, @b2 >= 0, z'' = @r, @r >= 0 sub'#2(z, z', z'', z1) -{ 2 }-> sub'#3(1 + mod(plus(plus(@x, @y), @r), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(@x, @y), @r), 0)), @xs, @ys) :|: z' = @r, z = 1 + @y + @ys, @x >= 0, z1 = @xs, @xs >= 0, z'' = @x, @y >= 0, @ys >= 0, @r >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z1 = v3, v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0, v3 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + @r :|: z = 2, z' = @r, @x >= 0, z1 = @xs, @xs >= 0, z'' = @x, @r >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(@xs, @ys, @r'), @z) :|: z' = @xs, z = 1 + @z + @r', @xs >= 0, z'' = @ys, @r' >= 0, @ys >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 sub'#4(z, z') -{ 2 }-> 1 + sub'#5(#eq(@s, 1 + (1 + 0)), @z, @zs) + @s :|: z' = @z, z = 1 + @zs + @s, @zs >= 0, @s >= 0, @z >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + @z + @zs :|: z' = @z, z = 1, @zs >= 0, z'' = @zs, @z >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + @zs :|: z = 2, z' = @z, @zs >= 0, z'' = @zs, @z >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + @zs :|: z = 2, z' = @z, @zs >= 0, z'' = @zs, @z >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 2 }-> sum#1(plus(#add(@x, @y), @r)) :|: z = @x, @x >= 0, z' = @y, z'' = @r, @y >= 0, @r >= 0 sum#1(z) -{ 2 }-> sum#2(#eq(@s, 0), @s) :|: z = @s, @s >= 0 sum#2(z, z') -{ 2 }-> sum#3(#eq(@s, 1 + (1 + 0)), @s) :|: z = 1, z' = @s, @s >= 0 sum#2(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' = @s, @s >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' = @s, @s >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' = @s, @s >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 2 }-> sum#4(#eq(@s, 1 + (1 + (1 + 0)))) :|: z = 1, z' = @s, @s >= 0 sum#3(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' = @s, @s >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' = @s, @s >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' = @s, @s >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' = @s, @s >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' = @s, @s >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' = @s, @s >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> #mult(@x, @y) :|: z = @x, @x >= 0, z' = @y, @y >= 0 ---------------------------------------- (17) SimplificationProof (BOTH BOUNDS(ID, ID)) Simplified the RNTS by moving equalities from the constraints into the right-hand sides. ---------------------------------------- (18) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> #pred(1 + (1 + 0)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> #pred(1 + (1 + (z' - 3))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> #pred(1 + (1 + (1 + (z' - 2)))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #compare(z, z') -{ 0 }-> #compare(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> #compare(z' - 1, z - 1) :|: z - 1 >= 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #eq(z, z') -{ 0 }-> #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #equal(z, z') -{ 1 }-> #eq(z, z') :|: z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #greater(z, z') -{ 1 }-> #ckgt(#compare(z - 1, z' - 1)) :|: z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> #ckgt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> #cklt(#compare(z - 1, z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> #cklt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(#natsub(z - 2, z' - 2), 1 + (1 + (z' - 2))) :|: z - 2 >= 0, z' - 2 >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> #natsub(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #sub(z, z') -{ 0 }-> #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 2 }-> add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 1 }-> bitToInt'(z, 0) :|: z >= 0 bitToInt(z) -{ 2 }-> bitToInt'(z, 1 + (1 + 0)) :|: z >= 0 bitToInt'(z, z') -{ 1 }-> bitToInt'#1(z, z') :|: z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 3 }-> plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 2 }-> compare#4(#eq(z, 0), z, z', z'') :|: z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 2 }-> compare#5(#cklt(#compare(z'', z1)), z'', z1) :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 1 }-> minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 2 }-> compare#6(#ckgt(#compare(z', z''))) :|: z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 3 }-> 1 + mod(plus(#add(z, z'), z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> #div(z, z') :|: z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> #sub(z, z') :|: z >= 0, z' >= 0 mod(z, z') -{ 2 }-> minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(#eq(z'', 1 + (1 + 0)), z', z) :|: z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 2 }-> sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 2 }-> 1 + sub'#5(#eq(@s, 1 + (1 + 0)), z', @zs) + @s :|: z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 2 }-> sum#1(plus(#add(z, z'), z'')) :|: z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 2 }-> sum#2(#eq(z, 0), z) :|: z >= 0 sum#2(z, z') -{ 2 }-> sum#3(#eq(z', 1 + (1 + 0)), z') :|: z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 2 }-> sum#4(#eq(z', 1 + (1 + (1 + 0)))) :|: z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 ---------------------------------------- (19) CpxRntsAnalysisOrderProof (BOTH BOUNDS(ID, ID)) Found the following analysis order by SCC decomposition: { #ckgt } { sub#1 } { #pred } { #natsub } { compare#6 } { sum#4 } { #and } { sub'#5 } { #cklt } { #compare } { diff#1 } { #abs } { #succ } { #greater } { #add } { #natdiv } { #eq } { #less } { #sub } { #natmult } { plus } { #div } { sum#3 } { sub'#4 } { #equal } { minus } { #mult } { div } { sum#2 } { compare#5 } { times } { bitToInt', bitToInt'#1 } { sum#1 } { compare#4 } { mod } { bitToInt } { sum } { add'#2, add'#1, add', add'#3 } { compare#3 } { diff } { sub'#2, sub'#1, sub'#3 } { add } { compare#1, compare#2 } { sub' } { mult#3 } { leq } { compare } { sub } { mult#2 } { mult#1 } { mult } { mult3 } ---------------------------------------- (20) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> #pred(1 + (1 + 0)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> #pred(1 + (1 + (z' - 3))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> #pred(1 + (1 + (1 + (z' - 2)))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #compare(z, z') -{ 0 }-> #compare(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> #compare(z' - 1, z - 1) :|: z - 1 >= 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #eq(z, z') -{ 0 }-> #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #equal(z, z') -{ 1 }-> #eq(z, z') :|: z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #greater(z, z') -{ 1 }-> #ckgt(#compare(z - 1, z' - 1)) :|: z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> #ckgt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> #cklt(#compare(z - 1, z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> #cklt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(#natsub(z - 2, z' - 2), 1 + (1 + (z' - 2))) :|: z - 2 >= 0, z' - 2 >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> #natsub(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #sub(z, z') -{ 0 }-> #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 2 }-> add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 1 }-> bitToInt'(z, 0) :|: z >= 0 bitToInt(z) -{ 2 }-> bitToInt'(z, 1 + (1 + 0)) :|: z >= 0 bitToInt'(z, z') -{ 1 }-> bitToInt'#1(z, z') :|: z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 3 }-> plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 2 }-> compare#4(#eq(z, 0), z, z', z'') :|: z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 2 }-> compare#5(#cklt(#compare(z'', z1)), z'', z1) :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 1 }-> minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 2 }-> compare#6(#ckgt(#compare(z', z''))) :|: z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 3 }-> 1 + mod(plus(#add(z, z'), z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> #div(z, z') :|: z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> #sub(z, z') :|: z >= 0, z' >= 0 mod(z, z') -{ 2 }-> minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(#eq(z'', 1 + (1 + 0)), z', z) :|: z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 2 }-> sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 2 }-> 1 + sub'#5(#eq(@s, 1 + (1 + 0)), z', @zs) + @s :|: z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 2 }-> sum#1(plus(#add(z, z'), z'')) :|: z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 2 }-> sum#2(#eq(z, 0), z) :|: z >= 0 sum#2(z, z') -{ 2 }-> sum#3(#eq(z', 1 + (1 + 0)), z') :|: z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 2 }-> sum#4(#eq(z', 1 + (1 + (1 + 0)))) :|: z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {#ckgt}, {sub#1}, {#pred}, {#natsub}, {compare#6}, {sum#4}, {#and}, {sub'#5}, {#cklt}, {#compare}, {diff#1}, {#abs}, {#succ}, {#greater}, {#add}, {#natdiv}, {#eq}, {#less}, {#sub}, {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} ---------------------------------------- (21) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (22) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> #pred(1 + (1 + 0)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> #pred(1 + (1 + (z' - 3))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> #pred(1 + (1 + (1 + (z' - 2)))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #compare(z, z') -{ 0 }-> #compare(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> #compare(z' - 1, z - 1) :|: z - 1 >= 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #eq(z, z') -{ 0 }-> #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #equal(z, z') -{ 1 }-> #eq(z, z') :|: z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #greater(z, z') -{ 1 }-> #ckgt(#compare(z - 1, z' - 1)) :|: z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> #ckgt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> #cklt(#compare(z - 1, z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> #cklt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(#natsub(z - 2, z' - 2), 1 + (1 + (z' - 2))) :|: z - 2 >= 0, z' - 2 >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> #natsub(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #sub(z, z') -{ 0 }-> #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 2 }-> add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 1 }-> bitToInt'(z, 0) :|: z >= 0 bitToInt(z) -{ 2 }-> bitToInt'(z, 1 + (1 + 0)) :|: z >= 0 bitToInt'(z, z') -{ 1 }-> bitToInt'#1(z, z') :|: z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 3 }-> plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 2 }-> compare#4(#eq(z, 0), z, z', z'') :|: z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 2 }-> compare#5(#cklt(#compare(z'', z1)), z'', z1) :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 1 }-> minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 2 }-> compare#6(#ckgt(#compare(z', z''))) :|: z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 3 }-> 1 + mod(plus(#add(z, z'), z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> #div(z, z') :|: z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> #sub(z, z') :|: z >= 0, z' >= 0 mod(z, z') -{ 2 }-> minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(#eq(z'', 1 + (1 + 0)), z', z) :|: z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 2 }-> sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 2 }-> 1 + sub'#5(#eq(@s, 1 + (1 + 0)), z', @zs) + @s :|: z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 2 }-> sum#1(plus(#add(z, z'), z'')) :|: z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 2 }-> sum#2(#eq(z, 0), z) :|: z >= 0 sum#2(z, z') -{ 2 }-> sum#3(#eq(z', 1 + (1 + 0)), z') :|: z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 2 }-> sum#4(#eq(z', 1 + (1 + (1 + 0)))) :|: z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {#ckgt}, {sub#1}, {#pred}, {#natsub}, {compare#6}, {sum#4}, {#and}, {sub'#5}, {#cklt}, {#compare}, {diff#1}, {#abs}, {#succ}, {#greater}, {#add}, {#natdiv}, {#eq}, {#less}, {#sub}, {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} ---------------------------------------- (23) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: #ckgt after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 2 ---------------------------------------- (24) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> #pred(1 + (1 + 0)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> #pred(1 + (1 + (z' - 3))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> #pred(1 + (1 + (1 + (z' - 2)))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #compare(z, z') -{ 0 }-> #compare(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> #compare(z' - 1, z - 1) :|: z - 1 >= 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #eq(z, z') -{ 0 }-> #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #equal(z, z') -{ 1 }-> #eq(z, z') :|: z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #greater(z, z') -{ 1 }-> #ckgt(#compare(z - 1, z' - 1)) :|: z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> #ckgt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> #cklt(#compare(z - 1, z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> #cklt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(#natsub(z - 2, z' - 2), 1 + (1 + (z' - 2))) :|: z - 2 >= 0, z' - 2 >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> #natsub(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #sub(z, z') -{ 0 }-> #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 2 }-> add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 1 }-> bitToInt'(z, 0) :|: z >= 0 bitToInt(z) -{ 2 }-> bitToInt'(z, 1 + (1 + 0)) :|: z >= 0 bitToInt'(z, z') -{ 1 }-> bitToInt'#1(z, z') :|: z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 3 }-> plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 2 }-> compare#4(#eq(z, 0), z, z', z'') :|: z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 2 }-> compare#5(#cklt(#compare(z'', z1)), z'', z1) :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 1 }-> minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 2 }-> compare#6(#ckgt(#compare(z', z''))) :|: z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 3 }-> 1 + mod(plus(#add(z, z'), z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> #div(z, z') :|: z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> #sub(z, z') :|: z >= 0, z' >= 0 mod(z, z') -{ 2 }-> minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(#eq(z'', 1 + (1 + 0)), z', z) :|: z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 2 }-> sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 2 }-> 1 + sub'#5(#eq(@s, 1 + (1 + 0)), z', @zs) + @s :|: z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 2 }-> sum#1(plus(#add(z, z'), z'')) :|: z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 2 }-> sum#2(#eq(z, 0), z) :|: z >= 0 sum#2(z, z') -{ 2 }-> sum#3(#eq(z', 1 + (1 + 0)), z') :|: z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 2 }-> sum#4(#eq(z', 1 + (1 + (1 + 0)))) :|: z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {#ckgt}, {sub#1}, {#pred}, {#natsub}, {compare#6}, {sum#4}, {#and}, {sub'#5}, {#cklt}, {#compare}, {diff#1}, {#abs}, {#succ}, {#greater}, {#add}, {#natdiv}, {#eq}, {#less}, {#sub}, {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: ?, size: O(1) [2] ---------------------------------------- (25) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: #ckgt after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 0 ---------------------------------------- (26) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> #pred(1 + (1 + 0)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> #pred(1 + (1 + (z' - 3))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> #pred(1 + (1 + (1 + (z' - 2)))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #compare(z, z') -{ 0 }-> #compare(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> #compare(z' - 1, z - 1) :|: z - 1 >= 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #eq(z, z') -{ 0 }-> #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #equal(z, z') -{ 1 }-> #eq(z, z') :|: z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #greater(z, z') -{ 1 }-> #ckgt(#compare(z - 1, z' - 1)) :|: z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> #ckgt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> #cklt(#compare(z - 1, z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> #cklt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(#natsub(z - 2, z' - 2), 1 + (1 + (z' - 2))) :|: z - 2 >= 0, z' - 2 >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> #natsub(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #sub(z, z') -{ 0 }-> #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 2 }-> add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 1 }-> bitToInt'(z, 0) :|: z >= 0 bitToInt(z) -{ 2 }-> bitToInt'(z, 1 + (1 + 0)) :|: z >= 0 bitToInt'(z, z') -{ 1 }-> bitToInt'#1(z, z') :|: z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 3 }-> plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 2 }-> compare#4(#eq(z, 0), z, z', z'') :|: z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 2 }-> compare#5(#cklt(#compare(z'', z1)), z'', z1) :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 1 }-> minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 2 }-> compare#6(#ckgt(#compare(z', z''))) :|: z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 3 }-> 1 + mod(plus(#add(z, z'), z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> #div(z, z') :|: z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> #sub(z, z') :|: z >= 0, z' >= 0 mod(z, z') -{ 2 }-> minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(#eq(z'', 1 + (1 + 0)), z', z) :|: z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 2 }-> sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 2 }-> 1 + sub'#5(#eq(@s, 1 + (1 + 0)), z', @zs) + @s :|: z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 2 }-> sum#1(plus(#add(z, z'), z'')) :|: z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 2 }-> sum#2(#eq(z, 0), z) :|: z >= 0 sum#2(z, z') -{ 2 }-> sum#3(#eq(z', 1 + (1 + 0)), z') :|: z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 2 }-> sum#4(#eq(z', 1 + (1 + (1 + 0)))) :|: z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {sub#1}, {#pred}, {#natsub}, {compare#6}, {sum#4}, {#and}, {sub'#5}, {#cklt}, {#compare}, {diff#1}, {#abs}, {#succ}, {#greater}, {#add}, {#natdiv}, {#eq}, {#less}, {#sub}, {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] ---------------------------------------- (27) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (28) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> #pred(1 + (1 + 0)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> #pred(1 + (1 + (z' - 3))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> #pred(1 + (1 + (1 + (z' - 2)))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #compare(z, z') -{ 0 }-> #compare(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> #compare(z' - 1, z - 1) :|: z - 1 >= 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #eq(z, z') -{ 0 }-> #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #equal(z, z') -{ 1 }-> #eq(z, z') :|: z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #greater(z, z') -{ 1 }-> #ckgt(#compare(z - 1, z' - 1)) :|: z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> #ckgt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> #cklt(#compare(z - 1, z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> #cklt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(#natsub(z - 2, z' - 2), 1 + (1 + (z' - 2))) :|: z - 2 >= 0, z' - 2 >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> #natsub(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #sub(z, z') -{ 0 }-> #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 2 }-> add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 1 }-> bitToInt'(z, 0) :|: z >= 0 bitToInt(z) -{ 2 }-> bitToInt'(z, 1 + (1 + 0)) :|: z >= 0 bitToInt'(z, z') -{ 1 }-> bitToInt'#1(z, z') :|: z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 3 }-> plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 2 }-> compare#4(#eq(z, 0), z, z', z'') :|: z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 2 }-> compare#5(#cklt(#compare(z'', z1)), z'', z1) :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 1 }-> minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 2 }-> compare#6(#ckgt(#compare(z', z''))) :|: z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 3 }-> 1 + mod(plus(#add(z, z'), z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> #div(z, z') :|: z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> #sub(z, z') :|: z >= 0, z' >= 0 mod(z, z') -{ 2 }-> minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(#eq(z'', 1 + (1 + 0)), z', z) :|: z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 2 }-> sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 2 }-> 1 + sub'#5(#eq(@s, 1 + (1 + 0)), z', @zs) + @s :|: z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 2 }-> sum#1(plus(#add(z, z'), z'')) :|: z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 2 }-> sum#2(#eq(z, 0), z) :|: z >= 0 sum#2(z, z') -{ 2 }-> sum#3(#eq(z', 1 + (1 + 0)), z') :|: z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 2 }-> sum#4(#eq(z', 1 + (1 + (1 + 0)))) :|: z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {sub#1}, {#pred}, {#natsub}, {compare#6}, {sum#4}, {#and}, {sub'#5}, {#cklt}, {#compare}, {diff#1}, {#abs}, {#succ}, {#greater}, {#add}, {#natdiv}, {#eq}, {#less}, {#sub}, {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] ---------------------------------------- (29) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using KoAT for: sub#1 after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: z ---------------------------------------- (30) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> #pred(1 + (1 + 0)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> #pred(1 + (1 + (z' - 3))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> #pred(1 + (1 + (1 + (z' - 2)))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #compare(z, z') -{ 0 }-> #compare(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> #compare(z' - 1, z - 1) :|: z - 1 >= 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #eq(z, z') -{ 0 }-> #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #equal(z, z') -{ 1 }-> #eq(z, z') :|: z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #greater(z, z') -{ 1 }-> #ckgt(#compare(z - 1, z' - 1)) :|: z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> #ckgt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> #cklt(#compare(z - 1, z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> #cklt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(#natsub(z - 2, z' - 2), 1 + (1 + (z' - 2))) :|: z - 2 >= 0, z' - 2 >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> #natsub(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #sub(z, z') -{ 0 }-> #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 2 }-> add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 1 }-> bitToInt'(z, 0) :|: z >= 0 bitToInt(z) -{ 2 }-> bitToInt'(z, 1 + (1 + 0)) :|: z >= 0 bitToInt'(z, z') -{ 1 }-> bitToInt'#1(z, z') :|: z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 3 }-> plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 2 }-> compare#4(#eq(z, 0), z, z', z'') :|: z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 2 }-> compare#5(#cklt(#compare(z'', z1)), z'', z1) :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 1 }-> minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 2 }-> compare#6(#ckgt(#compare(z', z''))) :|: z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 3 }-> 1 + mod(plus(#add(z, z'), z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> #div(z, z') :|: z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> #sub(z, z') :|: z >= 0, z' >= 0 mod(z, z') -{ 2 }-> minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(#eq(z'', 1 + (1 + 0)), z', z) :|: z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 2 }-> sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 2 }-> 1 + sub'#5(#eq(@s, 1 + (1 + 0)), z', @zs) + @s :|: z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 2 }-> sum#1(plus(#add(z, z'), z'')) :|: z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 2 }-> sum#2(#eq(z, 0), z) :|: z >= 0 sum#2(z, z') -{ 2 }-> sum#3(#eq(z', 1 + (1 + 0)), z') :|: z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 2 }-> sum#4(#eq(z', 1 + (1 + (1 + 0)))) :|: z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {sub#1}, {#pred}, {#natsub}, {compare#6}, {sum#4}, {#and}, {sub'#5}, {#cklt}, {#compare}, {diff#1}, {#abs}, {#succ}, {#greater}, {#add}, {#natdiv}, {#eq}, {#less}, {#sub}, {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: ?, size: O(n^1) [z] ---------------------------------------- (31) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: sub#1 after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 1 ---------------------------------------- (32) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> #pred(1 + (1 + 0)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> #pred(1 + (1 + (z' - 3))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> #pred(1 + (1 + (1 + (z' - 2)))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #compare(z, z') -{ 0 }-> #compare(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> #compare(z' - 1, z - 1) :|: z - 1 >= 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #eq(z, z') -{ 0 }-> #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #equal(z, z') -{ 1 }-> #eq(z, z') :|: z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #greater(z, z') -{ 1 }-> #ckgt(#compare(z - 1, z' - 1)) :|: z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> #ckgt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> #cklt(#compare(z - 1, z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> #cklt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(#natsub(z - 2, z' - 2), 1 + (1 + (z' - 2))) :|: z - 2 >= 0, z' - 2 >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> #natsub(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #sub(z, z') -{ 0 }-> #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 2 }-> add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 1 }-> bitToInt'(z, 0) :|: z >= 0 bitToInt(z) -{ 2 }-> bitToInt'(z, 1 + (1 + 0)) :|: z >= 0 bitToInt'(z, z') -{ 1 }-> bitToInt'#1(z, z') :|: z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 3 }-> plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 2 }-> compare#4(#eq(z, 0), z, z', z'') :|: z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 2 }-> compare#5(#cklt(#compare(z'', z1)), z'', z1) :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 1 }-> minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 2 }-> compare#6(#ckgt(#compare(z', z''))) :|: z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 3 }-> 1 + mod(plus(#add(z, z'), z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> #div(z, z') :|: z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> #sub(z, z') :|: z >= 0, z' >= 0 mod(z, z') -{ 2 }-> minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(#eq(z'', 1 + (1 + 0)), z', z) :|: z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 2 }-> sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 2 }-> 1 + sub'#5(#eq(@s, 1 + (1 + 0)), z', @zs) + @s :|: z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 2 }-> sum#1(plus(#add(z, z'), z'')) :|: z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 2 }-> sum#2(#eq(z, 0), z) :|: z >= 0 sum#2(z, z') -{ 2 }-> sum#3(#eq(z', 1 + (1 + 0)), z') :|: z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 2 }-> sum#4(#eq(z', 1 + (1 + (1 + 0)))) :|: z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {#pred}, {#natsub}, {compare#6}, {sum#4}, {#and}, {sub'#5}, {#cklt}, {#compare}, {diff#1}, {#abs}, {#succ}, {#greater}, {#add}, {#natdiv}, {#eq}, {#less}, {#sub}, {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] ---------------------------------------- (33) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (34) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> #pred(1 + (1 + 0)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> #pred(1 + (1 + (z' - 3))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> #pred(1 + (1 + (1 + (z' - 2)))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #compare(z, z') -{ 0 }-> #compare(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> #compare(z' - 1, z - 1) :|: z - 1 >= 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #eq(z, z') -{ 0 }-> #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #equal(z, z') -{ 1 }-> #eq(z, z') :|: z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #greater(z, z') -{ 1 }-> #ckgt(#compare(z - 1, z' - 1)) :|: z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> #ckgt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> #cklt(#compare(z - 1, z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> #cklt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(#natsub(z - 2, z' - 2), 1 + (1 + (z' - 2))) :|: z - 2 >= 0, z' - 2 >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> #natsub(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #sub(z, z') -{ 0 }-> #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 2 }-> add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 1 }-> bitToInt'(z, 0) :|: z >= 0 bitToInt(z) -{ 2 }-> bitToInt'(z, 1 + (1 + 0)) :|: z >= 0 bitToInt'(z, z') -{ 1 }-> bitToInt'#1(z, z') :|: z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 3 }-> plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 2 }-> compare#4(#eq(z, 0), z, z', z'') :|: z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 2 }-> compare#5(#cklt(#compare(z'', z1)), z'', z1) :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 1 }-> minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 2 }-> compare#6(#ckgt(#compare(z', z''))) :|: z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 3 }-> 1 + mod(plus(#add(z, z'), z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> #div(z, z') :|: z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> #sub(z, z') :|: z >= 0, z' >= 0 mod(z, z') -{ 2 }-> minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(#eq(z'', 1 + (1 + 0)), z', z) :|: z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 2 }-> sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 2 }-> 1 + sub'#5(#eq(@s, 1 + (1 + 0)), z', @zs) + @s :|: z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 2 }-> sum#1(plus(#add(z, z'), z'')) :|: z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 2 }-> sum#2(#eq(z, 0), z) :|: z >= 0 sum#2(z, z') -{ 2 }-> sum#3(#eq(z', 1 + (1 + 0)), z') :|: z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 2 }-> sum#4(#eq(z', 1 + (1 + (1 + 0)))) :|: z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {#pred}, {#natsub}, {compare#6}, {sum#4}, {#and}, {sub'#5}, {#cklt}, {#compare}, {diff#1}, {#abs}, {#succ}, {#greater}, {#add}, {#natdiv}, {#eq}, {#less}, {#sub}, {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] ---------------------------------------- (35) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: #pred after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 2 + z ---------------------------------------- (36) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> #pred(1 + (1 + 0)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> #pred(1 + (1 + (z' - 3))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> #pred(1 + (1 + (1 + (z' - 2)))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #compare(z, z') -{ 0 }-> #compare(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> #compare(z' - 1, z - 1) :|: z - 1 >= 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #eq(z, z') -{ 0 }-> #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #equal(z, z') -{ 1 }-> #eq(z, z') :|: z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #greater(z, z') -{ 1 }-> #ckgt(#compare(z - 1, z' - 1)) :|: z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> #ckgt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> #cklt(#compare(z - 1, z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> #cklt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(#natsub(z - 2, z' - 2), 1 + (1 + (z' - 2))) :|: z - 2 >= 0, z' - 2 >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> #natsub(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #sub(z, z') -{ 0 }-> #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 2 }-> add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 1 }-> bitToInt'(z, 0) :|: z >= 0 bitToInt(z) -{ 2 }-> bitToInt'(z, 1 + (1 + 0)) :|: z >= 0 bitToInt'(z, z') -{ 1 }-> bitToInt'#1(z, z') :|: z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 3 }-> plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 2 }-> compare#4(#eq(z, 0), z, z', z'') :|: z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 2 }-> compare#5(#cklt(#compare(z'', z1)), z'', z1) :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 1 }-> minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 2 }-> compare#6(#ckgt(#compare(z', z''))) :|: z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 3 }-> 1 + mod(plus(#add(z, z'), z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> #div(z, z') :|: z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> #sub(z, z') :|: z >= 0, z' >= 0 mod(z, z') -{ 2 }-> minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(#eq(z'', 1 + (1 + 0)), z', z) :|: z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 2 }-> sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 2 }-> 1 + sub'#5(#eq(@s, 1 + (1 + 0)), z', @zs) + @s :|: z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 2 }-> sum#1(plus(#add(z, z'), z'')) :|: z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 2 }-> sum#2(#eq(z, 0), z) :|: z >= 0 sum#2(z, z') -{ 2 }-> sum#3(#eq(z', 1 + (1 + 0)), z') :|: z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 2 }-> sum#4(#eq(z', 1 + (1 + (1 + 0)))) :|: z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {#pred}, {#natsub}, {compare#6}, {sum#4}, {#and}, {sub'#5}, {#cklt}, {#compare}, {diff#1}, {#abs}, {#succ}, {#greater}, {#add}, {#natdiv}, {#eq}, {#less}, {#sub}, {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: ?, size: O(n^1) [2 + z] ---------------------------------------- (37) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: #pred after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 0 ---------------------------------------- (38) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> #pred(1 + (1 + 0)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> #pred(1 + (1 + (z' - 3))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> #pred(1 + (1 + (1 + (z' - 2)))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #compare(z, z') -{ 0 }-> #compare(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> #compare(z' - 1, z - 1) :|: z - 1 >= 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #eq(z, z') -{ 0 }-> #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #equal(z, z') -{ 1 }-> #eq(z, z') :|: z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #greater(z, z') -{ 1 }-> #ckgt(#compare(z - 1, z' - 1)) :|: z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> #ckgt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> #cklt(#compare(z - 1, z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> #cklt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(#natsub(z - 2, z' - 2), 1 + (1 + (z' - 2))) :|: z - 2 >= 0, z' - 2 >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> #natsub(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #sub(z, z') -{ 0 }-> #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 2 }-> add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 1 }-> bitToInt'(z, 0) :|: z >= 0 bitToInt(z) -{ 2 }-> bitToInt'(z, 1 + (1 + 0)) :|: z >= 0 bitToInt'(z, z') -{ 1 }-> bitToInt'#1(z, z') :|: z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 3 }-> plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 2 }-> compare#4(#eq(z, 0), z, z', z'') :|: z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 2 }-> compare#5(#cklt(#compare(z'', z1)), z'', z1) :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 1 }-> minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 2 }-> compare#6(#ckgt(#compare(z', z''))) :|: z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 3 }-> 1 + mod(plus(#add(z, z'), z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> #div(z, z') :|: z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> #sub(z, z') :|: z >= 0, z' >= 0 mod(z, z') -{ 2 }-> minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(#eq(z'', 1 + (1 + 0)), z', z) :|: z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 2 }-> sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 2 }-> 1 + sub'#5(#eq(@s, 1 + (1 + 0)), z', @zs) + @s :|: z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 2 }-> sum#1(plus(#add(z, z'), z'')) :|: z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 2 }-> sum#2(#eq(z, 0), z) :|: z >= 0 sum#2(z, z') -{ 2 }-> sum#3(#eq(z', 1 + (1 + 0)), z') :|: z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 2 }-> sum#4(#eq(z', 1 + (1 + (1 + 0)))) :|: z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {#natsub}, {compare#6}, {sum#4}, {#and}, {sub'#5}, {#cklt}, {#compare}, {diff#1}, {#abs}, {#succ}, {#greater}, {#add}, {#natdiv}, {#eq}, {#less}, {#sub}, {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] ---------------------------------------- (39) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (40) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #compare(z, z') -{ 0 }-> #compare(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> #compare(z' - 1, z - 1) :|: z - 1 >= 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #eq(z, z') -{ 0 }-> #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #equal(z, z') -{ 1 }-> #eq(z, z') :|: z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #greater(z, z') -{ 1 }-> #ckgt(#compare(z - 1, z' - 1)) :|: z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> #ckgt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> #cklt(#compare(z - 1, z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> #cklt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(#natsub(z - 2, z' - 2), 1 + (1 + (z' - 2))) :|: z - 2 >= 0, z' - 2 >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> #natsub(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #sub(z, z') -{ 0 }-> #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 2 }-> add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 1 }-> bitToInt'(z, 0) :|: z >= 0 bitToInt(z) -{ 2 }-> bitToInt'(z, 1 + (1 + 0)) :|: z >= 0 bitToInt'(z, z') -{ 1 }-> bitToInt'#1(z, z') :|: z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 3 }-> plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 2 }-> compare#4(#eq(z, 0), z, z', z'') :|: z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 2 }-> compare#5(#cklt(#compare(z'', z1)), z'', z1) :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 1 }-> minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 2 }-> compare#6(#ckgt(#compare(z', z''))) :|: z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 3 }-> 1 + mod(plus(#add(z, z'), z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> #div(z, z') :|: z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> #sub(z, z') :|: z >= 0, z' >= 0 mod(z, z') -{ 2 }-> minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(#eq(z'', 1 + (1 + 0)), z', z) :|: z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 2 }-> sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 2 }-> 1 + sub'#5(#eq(@s, 1 + (1 + 0)), z', @zs) + @s :|: z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 2 }-> sum#1(plus(#add(z, z'), z'')) :|: z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 2 }-> sum#2(#eq(z, 0), z) :|: z >= 0 sum#2(z, z') -{ 2 }-> sum#3(#eq(z', 1 + (1 + 0)), z') :|: z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 2 }-> sum#4(#eq(z', 1 + (1 + (1 + 0)))) :|: z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {#natsub}, {compare#6}, {sum#4}, {#and}, {sub'#5}, {#cklt}, {#compare}, {diff#1}, {#abs}, {#succ}, {#greater}, {#add}, {#natdiv}, {#eq}, {#less}, {#sub}, {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] ---------------------------------------- (41) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using KoAT for: #natsub after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: z ---------------------------------------- (42) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #compare(z, z') -{ 0 }-> #compare(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> #compare(z' - 1, z - 1) :|: z - 1 >= 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #eq(z, z') -{ 0 }-> #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #equal(z, z') -{ 1 }-> #eq(z, z') :|: z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #greater(z, z') -{ 1 }-> #ckgt(#compare(z - 1, z' - 1)) :|: z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> #ckgt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> #cklt(#compare(z - 1, z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> #cklt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(#natsub(z - 2, z' - 2), 1 + (1 + (z' - 2))) :|: z - 2 >= 0, z' - 2 >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> #natsub(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #sub(z, z') -{ 0 }-> #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 2 }-> add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 1 }-> bitToInt'(z, 0) :|: z >= 0 bitToInt(z) -{ 2 }-> bitToInt'(z, 1 + (1 + 0)) :|: z >= 0 bitToInt'(z, z') -{ 1 }-> bitToInt'#1(z, z') :|: z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 3 }-> plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 2 }-> compare#4(#eq(z, 0), z, z', z'') :|: z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 2 }-> compare#5(#cklt(#compare(z'', z1)), z'', z1) :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 1 }-> minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 2 }-> compare#6(#ckgt(#compare(z', z''))) :|: z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 3 }-> 1 + mod(plus(#add(z, z'), z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> #div(z, z') :|: z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> #sub(z, z') :|: z >= 0, z' >= 0 mod(z, z') -{ 2 }-> minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(#eq(z'', 1 + (1 + 0)), z', z) :|: z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 2 }-> sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 2 }-> 1 + sub'#5(#eq(@s, 1 + (1 + 0)), z', @zs) + @s :|: z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 2 }-> sum#1(plus(#add(z, z'), z'')) :|: z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 2 }-> sum#2(#eq(z, 0), z) :|: z >= 0 sum#2(z, z') -{ 2 }-> sum#3(#eq(z', 1 + (1 + 0)), z') :|: z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 2 }-> sum#4(#eq(z', 1 + (1 + (1 + 0)))) :|: z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {#natsub}, {compare#6}, {sum#4}, {#and}, {sub'#5}, {#cklt}, {#compare}, {diff#1}, {#abs}, {#succ}, {#greater}, {#add}, {#natdiv}, {#eq}, {#less}, {#sub}, {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: ?, size: O(n^1) [z] ---------------------------------------- (43) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: #natsub after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 0 ---------------------------------------- (44) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #compare(z, z') -{ 0 }-> #compare(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> #compare(z' - 1, z - 1) :|: z - 1 >= 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #eq(z, z') -{ 0 }-> #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #equal(z, z') -{ 1 }-> #eq(z, z') :|: z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #greater(z, z') -{ 1 }-> #ckgt(#compare(z - 1, z' - 1)) :|: z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> #ckgt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> #cklt(#compare(z - 1, z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> #cklt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(#natsub(z - 2, z' - 2), 1 + (1 + (z' - 2))) :|: z - 2 >= 0, z' - 2 >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> #natsub(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #sub(z, z') -{ 0 }-> #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 2 }-> add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 1 }-> bitToInt'(z, 0) :|: z >= 0 bitToInt(z) -{ 2 }-> bitToInt'(z, 1 + (1 + 0)) :|: z >= 0 bitToInt'(z, z') -{ 1 }-> bitToInt'#1(z, z') :|: z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 3 }-> plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 2 }-> compare#4(#eq(z, 0), z, z', z'') :|: z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 2 }-> compare#5(#cklt(#compare(z'', z1)), z'', z1) :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 1 }-> minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 2 }-> compare#6(#ckgt(#compare(z', z''))) :|: z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 3 }-> 1 + mod(plus(#add(z, z'), z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> #div(z, z') :|: z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> #sub(z, z') :|: z >= 0, z' >= 0 mod(z, z') -{ 2 }-> minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(#eq(z'', 1 + (1 + 0)), z', z) :|: z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 2 }-> sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 2 }-> 1 + sub'#5(#eq(@s, 1 + (1 + 0)), z', @zs) + @s :|: z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 2 }-> sum#1(plus(#add(z, z'), z'')) :|: z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 2 }-> sum#2(#eq(z, 0), z) :|: z >= 0 sum#2(z, z') -{ 2 }-> sum#3(#eq(z', 1 + (1 + 0)), z') :|: z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 2 }-> sum#4(#eq(z', 1 + (1 + (1 + 0)))) :|: z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {compare#6}, {sum#4}, {#and}, {sub'#5}, {#cklt}, {#compare}, {diff#1}, {#abs}, {#succ}, {#greater}, {#add}, {#natdiv}, {#eq}, {#less}, {#sub}, {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] ---------------------------------------- (45) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (46) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #compare(z, z') -{ 0 }-> #compare(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> #compare(z' - 1, z - 1) :|: z - 1 >= 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #eq(z, z') -{ 0 }-> #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #equal(z, z') -{ 1 }-> #eq(z, z') :|: z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #greater(z, z') -{ 1 }-> #ckgt(#compare(z - 1, z' - 1)) :|: z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> #ckgt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> #cklt(#compare(z - 1, z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> #cklt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(s3, 1 + (1 + (z' - 2))) :|: s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #sub(z, z') -{ 0 }-> #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 2 }-> add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 1 }-> bitToInt'(z, 0) :|: z >= 0 bitToInt(z) -{ 2 }-> bitToInt'(z, 1 + (1 + 0)) :|: z >= 0 bitToInt'(z, z') -{ 1 }-> bitToInt'#1(z, z') :|: z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 3 }-> plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 2 }-> compare#4(#eq(z, 0), z, z', z'') :|: z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 2 }-> compare#5(#cklt(#compare(z'', z1)), z'', z1) :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 1 }-> minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 2 }-> compare#6(#ckgt(#compare(z', z''))) :|: z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 3 }-> 1 + mod(plus(#add(z, z'), z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> #div(z, z') :|: z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> #sub(z, z') :|: z >= 0, z' >= 0 mod(z, z') -{ 2 }-> minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(#eq(z'', 1 + (1 + 0)), z', z) :|: z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 2 }-> sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 2 }-> 1 + sub'#5(#eq(@s, 1 + (1 + 0)), z', @zs) + @s :|: z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 2 }-> sum#1(plus(#add(z, z'), z'')) :|: z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 2 }-> sum#2(#eq(z, 0), z) :|: z >= 0 sum#2(z, z') -{ 2 }-> sum#3(#eq(z', 1 + (1 + 0)), z') :|: z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 2 }-> sum#4(#eq(z', 1 + (1 + (1 + 0)))) :|: z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {compare#6}, {sum#4}, {#and}, {sub'#5}, {#cklt}, {#compare}, {diff#1}, {#abs}, {#succ}, {#greater}, {#add}, {#natdiv}, {#eq}, {#less}, {#sub}, {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] ---------------------------------------- (47) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: compare#6 after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 3 ---------------------------------------- (48) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #compare(z, z') -{ 0 }-> #compare(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> #compare(z' - 1, z - 1) :|: z - 1 >= 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #eq(z, z') -{ 0 }-> #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #equal(z, z') -{ 1 }-> #eq(z, z') :|: z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #greater(z, z') -{ 1 }-> #ckgt(#compare(z - 1, z' - 1)) :|: z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> #ckgt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> #cklt(#compare(z - 1, z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> #cklt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(s3, 1 + (1 + (z' - 2))) :|: s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #sub(z, z') -{ 0 }-> #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 2 }-> add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 1 }-> bitToInt'(z, 0) :|: z >= 0 bitToInt(z) -{ 2 }-> bitToInt'(z, 1 + (1 + 0)) :|: z >= 0 bitToInt'(z, z') -{ 1 }-> bitToInt'#1(z, z') :|: z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 3 }-> plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 2 }-> compare#4(#eq(z, 0), z, z', z'') :|: z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 2 }-> compare#5(#cklt(#compare(z'', z1)), z'', z1) :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 1 }-> minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 2 }-> compare#6(#ckgt(#compare(z', z''))) :|: z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 3 }-> 1 + mod(plus(#add(z, z'), z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> #div(z, z') :|: z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> #sub(z, z') :|: z >= 0, z' >= 0 mod(z, z') -{ 2 }-> minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(#eq(z'', 1 + (1 + 0)), z', z) :|: z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 2 }-> sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 2 }-> 1 + sub'#5(#eq(@s, 1 + (1 + 0)), z', @zs) + @s :|: z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 2 }-> sum#1(plus(#add(z, z'), z'')) :|: z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 2 }-> sum#2(#eq(z, 0), z) :|: z >= 0 sum#2(z, z') -{ 2 }-> sum#3(#eq(z', 1 + (1 + 0)), z') :|: z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 2 }-> sum#4(#eq(z', 1 + (1 + (1 + 0)))) :|: z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {compare#6}, {sum#4}, {#and}, {sub'#5}, {#cklt}, {#compare}, {diff#1}, {#abs}, {#succ}, {#greater}, {#add}, {#natdiv}, {#eq}, {#less}, {#sub}, {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: ?, size: O(1) [3] ---------------------------------------- (49) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: compare#6 after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 2 ---------------------------------------- (50) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #compare(z, z') -{ 0 }-> #compare(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> #compare(z' - 1, z - 1) :|: z - 1 >= 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #eq(z, z') -{ 0 }-> #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #equal(z, z') -{ 1 }-> #eq(z, z') :|: z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #greater(z, z') -{ 1 }-> #ckgt(#compare(z - 1, z' - 1)) :|: z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> #ckgt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> #cklt(#compare(z - 1, z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> #cklt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(s3, 1 + (1 + (z' - 2))) :|: s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #sub(z, z') -{ 0 }-> #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 2 }-> add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 1 }-> bitToInt'(z, 0) :|: z >= 0 bitToInt(z) -{ 2 }-> bitToInt'(z, 1 + (1 + 0)) :|: z >= 0 bitToInt'(z, z') -{ 1 }-> bitToInt'#1(z, z') :|: z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 3 }-> plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 2 }-> compare#4(#eq(z, 0), z, z', z'') :|: z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 2 }-> compare#5(#cklt(#compare(z'', z1)), z'', z1) :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 1 }-> minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 2 }-> compare#6(#ckgt(#compare(z', z''))) :|: z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 3 }-> 1 + mod(plus(#add(z, z'), z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> #div(z, z') :|: z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> #sub(z, z') :|: z >= 0, z' >= 0 mod(z, z') -{ 2 }-> minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(#eq(z'', 1 + (1 + 0)), z', z) :|: z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 2 }-> sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 2 }-> 1 + sub'#5(#eq(@s, 1 + (1 + 0)), z', @zs) + @s :|: z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 2 }-> sum#1(plus(#add(z, z'), z'')) :|: z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 2 }-> sum#2(#eq(z, 0), z) :|: z >= 0 sum#2(z, z') -{ 2 }-> sum#3(#eq(z', 1 + (1 + 0)), z') :|: z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 2 }-> sum#4(#eq(z', 1 + (1 + (1 + 0)))) :|: z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {sum#4}, {#and}, {sub'#5}, {#cklt}, {#compare}, {diff#1}, {#abs}, {#succ}, {#greater}, {#add}, {#natdiv}, {#eq}, {#less}, {#sub}, {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] ---------------------------------------- (51) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (52) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #compare(z, z') -{ 0 }-> #compare(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> #compare(z' - 1, z - 1) :|: z - 1 >= 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #eq(z, z') -{ 0 }-> #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #equal(z, z') -{ 1 }-> #eq(z, z') :|: z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #greater(z, z') -{ 1 }-> #ckgt(#compare(z - 1, z' - 1)) :|: z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> #ckgt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> #cklt(#compare(z - 1, z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> #cklt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(s3, 1 + (1 + (z' - 2))) :|: s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #sub(z, z') -{ 0 }-> #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 2 }-> add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 1 }-> bitToInt'(z, 0) :|: z >= 0 bitToInt(z) -{ 2 }-> bitToInt'(z, 1 + (1 + 0)) :|: z >= 0 bitToInt'(z, z') -{ 1 }-> bitToInt'#1(z, z') :|: z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 3 }-> plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 2 }-> compare#4(#eq(z, 0), z, z', z'') :|: z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 2 }-> compare#5(#cklt(#compare(z'', z1)), z'', z1) :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 1 }-> minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 2 }-> compare#6(#ckgt(#compare(z', z''))) :|: z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 3 }-> 1 + mod(plus(#add(z, z'), z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> #div(z, z') :|: z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> #sub(z, z') :|: z >= 0, z' >= 0 mod(z, z') -{ 2 }-> minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(#eq(z'', 1 + (1 + 0)), z', z) :|: z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 2 }-> sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 2 }-> 1 + sub'#5(#eq(@s, 1 + (1 + 0)), z', @zs) + @s :|: z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 2 }-> sum#1(plus(#add(z, z'), z'')) :|: z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 2 }-> sum#2(#eq(z, 0), z) :|: z >= 0 sum#2(z, z') -{ 2 }-> sum#3(#eq(z', 1 + (1 + 0)), z') :|: z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 2 }-> sum#4(#eq(z', 1 + (1 + (1 + 0)))) :|: z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {sum#4}, {#and}, {sub'#5}, {#cklt}, {#compare}, {diff#1}, {#abs}, {#succ}, {#greater}, {#add}, {#natdiv}, {#eq}, {#less}, {#sub}, {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] ---------------------------------------- (53) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: sum#4 after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 7 ---------------------------------------- (54) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #compare(z, z') -{ 0 }-> #compare(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> #compare(z' - 1, z - 1) :|: z - 1 >= 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #eq(z, z') -{ 0 }-> #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #equal(z, z') -{ 1 }-> #eq(z, z') :|: z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #greater(z, z') -{ 1 }-> #ckgt(#compare(z - 1, z' - 1)) :|: z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> #ckgt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> #cklt(#compare(z - 1, z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> #cklt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(s3, 1 + (1 + (z' - 2))) :|: s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #sub(z, z') -{ 0 }-> #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 2 }-> add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 1 }-> bitToInt'(z, 0) :|: z >= 0 bitToInt(z) -{ 2 }-> bitToInt'(z, 1 + (1 + 0)) :|: z >= 0 bitToInt'(z, z') -{ 1 }-> bitToInt'#1(z, z') :|: z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 3 }-> plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 2 }-> compare#4(#eq(z, 0), z, z', z'') :|: z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 2 }-> compare#5(#cklt(#compare(z'', z1)), z'', z1) :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 1 }-> minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 2 }-> compare#6(#ckgt(#compare(z', z''))) :|: z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 3 }-> 1 + mod(plus(#add(z, z'), z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> #div(z, z') :|: z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> #sub(z, z') :|: z >= 0, z' >= 0 mod(z, z') -{ 2 }-> minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(#eq(z'', 1 + (1 + 0)), z', z) :|: z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 2 }-> sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 2 }-> 1 + sub'#5(#eq(@s, 1 + (1 + 0)), z', @zs) + @s :|: z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 2 }-> sum#1(plus(#add(z, z'), z'')) :|: z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 2 }-> sum#2(#eq(z, 0), z) :|: z >= 0 sum#2(z, z') -{ 2 }-> sum#3(#eq(z', 1 + (1 + 0)), z') :|: z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 2 }-> sum#4(#eq(z', 1 + (1 + (1 + 0)))) :|: z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {sum#4}, {#and}, {sub'#5}, {#cklt}, {#compare}, {diff#1}, {#abs}, {#succ}, {#greater}, {#add}, {#natdiv}, {#eq}, {#less}, {#sub}, {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: ?, size: O(1) [7] ---------------------------------------- (55) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: sum#4 after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 3 ---------------------------------------- (56) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #compare(z, z') -{ 0 }-> #compare(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> #compare(z' - 1, z - 1) :|: z - 1 >= 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #eq(z, z') -{ 0 }-> #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #equal(z, z') -{ 1 }-> #eq(z, z') :|: z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #greater(z, z') -{ 1 }-> #ckgt(#compare(z - 1, z' - 1)) :|: z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> #ckgt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> #cklt(#compare(z - 1, z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> #cklt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(s3, 1 + (1 + (z' - 2))) :|: s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #sub(z, z') -{ 0 }-> #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 2 }-> add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 1 }-> bitToInt'(z, 0) :|: z >= 0 bitToInt(z) -{ 2 }-> bitToInt'(z, 1 + (1 + 0)) :|: z >= 0 bitToInt'(z, z') -{ 1 }-> bitToInt'#1(z, z') :|: z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 3 }-> plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 2 }-> compare#4(#eq(z, 0), z, z', z'') :|: z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 2 }-> compare#5(#cklt(#compare(z'', z1)), z'', z1) :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 1 }-> minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 2 }-> compare#6(#ckgt(#compare(z', z''))) :|: z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 3 }-> 1 + mod(plus(#add(z, z'), z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> #div(z, z') :|: z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> #sub(z, z') :|: z >= 0, z' >= 0 mod(z, z') -{ 2 }-> minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(#eq(z'', 1 + (1 + 0)), z', z) :|: z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 2 }-> sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 2 }-> 1 + sub'#5(#eq(@s, 1 + (1 + 0)), z', @zs) + @s :|: z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 2 }-> sum#1(plus(#add(z, z'), z'')) :|: z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 2 }-> sum#2(#eq(z, 0), z) :|: z >= 0 sum#2(z, z') -{ 2 }-> sum#3(#eq(z', 1 + (1 + 0)), z') :|: z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 2 }-> sum#4(#eq(z', 1 + (1 + (1 + 0)))) :|: z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {#and}, {sub'#5}, {#cklt}, {#compare}, {diff#1}, {#abs}, {#succ}, {#greater}, {#add}, {#natdiv}, {#eq}, {#less}, {#sub}, {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] ---------------------------------------- (57) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (58) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #compare(z, z') -{ 0 }-> #compare(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> #compare(z' - 1, z - 1) :|: z - 1 >= 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #eq(z, z') -{ 0 }-> #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #equal(z, z') -{ 1 }-> #eq(z, z') :|: z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #greater(z, z') -{ 1 }-> #ckgt(#compare(z - 1, z' - 1)) :|: z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> #ckgt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> #cklt(#compare(z - 1, z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> #cklt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(s3, 1 + (1 + (z' - 2))) :|: s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #sub(z, z') -{ 0 }-> #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 2 }-> add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 1 }-> bitToInt'(z, 0) :|: z >= 0 bitToInt(z) -{ 2 }-> bitToInt'(z, 1 + (1 + 0)) :|: z >= 0 bitToInt'(z, z') -{ 1 }-> bitToInt'#1(z, z') :|: z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 3 }-> plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 2 }-> compare#4(#eq(z, 0), z, z', z'') :|: z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 2 }-> compare#5(#cklt(#compare(z'', z1)), z'', z1) :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 1 }-> minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 2 }-> compare#6(#ckgt(#compare(z', z''))) :|: z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 3 }-> 1 + mod(plus(#add(z, z'), z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> #div(z, z') :|: z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> #sub(z, z') :|: z >= 0, z' >= 0 mod(z, z') -{ 2 }-> minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(#eq(z'', 1 + (1 + 0)), z', z) :|: z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 2 }-> sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 2 }-> 1 + sub'#5(#eq(@s, 1 + (1 + 0)), z', @zs) + @s :|: z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 2 }-> sum#1(plus(#add(z, z'), z'')) :|: z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 2 }-> sum#2(#eq(z, 0), z) :|: z >= 0 sum#2(z, z') -{ 2 }-> sum#3(#eq(z', 1 + (1 + 0)), z') :|: z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 2 }-> sum#4(#eq(z', 1 + (1 + (1 + 0)))) :|: z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {#and}, {sub'#5}, {#cklt}, {#compare}, {diff#1}, {#abs}, {#succ}, {#greater}, {#add}, {#natdiv}, {#eq}, {#less}, {#sub}, {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] ---------------------------------------- (59) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: #and after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 2 ---------------------------------------- (60) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #compare(z, z') -{ 0 }-> #compare(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> #compare(z' - 1, z - 1) :|: z - 1 >= 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #eq(z, z') -{ 0 }-> #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #equal(z, z') -{ 1 }-> #eq(z, z') :|: z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #greater(z, z') -{ 1 }-> #ckgt(#compare(z - 1, z' - 1)) :|: z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> #ckgt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> #cklt(#compare(z - 1, z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> #cklt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(s3, 1 + (1 + (z' - 2))) :|: s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #sub(z, z') -{ 0 }-> #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 2 }-> add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 1 }-> bitToInt'(z, 0) :|: z >= 0 bitToInt(z) -{ 2 }-> bitToInt'(z, 1 + (1 + 0)) :|: z >= 0 bitToInt'(z, z') -{ 1 }-> bitToInt'#1(z, z') :|: z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 3 }-> plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 2 }-> compare#4(#eq(z, 0), z, z', z'') :|: z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 2 }-> compare#5(#cklt(#compare(z'', z1)), z'', z1) :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 1 }-> minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 2 }-> compare#6(#ckgt(#compare(z', z''))) :|: z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 3 }-> 1 + mod(plus(#add(z, z'), z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> #div(z, z') :|: z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> #sub(z, z') :|: z >= 0, z' >= 0 mod(z, z') -{ 2 }-> minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(#eq(z'', 1 + (1 + 0)), z', z) :|: z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 2 }-> sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 2 }-> 1 + sub'#5(#eq(@s, 1 + (1 + 0)), z', @zs) + @s :|: z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 2 }-> sum#1(plus(#add(z, z'), z'')) :|: z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 2 }-> sum#2(#eq(z, 0), z) :|: z >= 0 sum#2(z, z') -{ 2 }-> sum#3(#eq(z', 1 + (1 + 0)), z') :|: z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 2 }-> sum#4(#eq(z', 1 + (1 + (1 + 0)))) :|: z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {#and}, {sub'#5}, {#cklt}, {#compare}, {diff#1}, {#abs}, {#succ}, {#greater}, {#add}, {#natdiv}, {#eq}, {#less}, {#sub}, {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: ?, size: O(1) [2] ---------------------------------------- (61) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: #and after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 0 ---------------------------------------- (62) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #compare(z, z') -{ 0 }-> #compare(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> #compare(z' - 1, z - 1) :|: z - 1 >= 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #eq(z, z') -{ 0 }-> #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #equal(z, z') -{ 1 }-> #eq(z, z') :|: z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #greater(z, z') -{ 1 }-> #ckgt(#compare(z - 1, z' - 1)) :|: z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> #ckgt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> #cklt(#compare(z - 1, z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> #cklt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(s3, 1 + (1 + (z' - 2))) :|: s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #sub(z, z') -{ 0 }-> #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 2 }-> add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 1 }-> bitToInt'(z, 0) :|: z >= 0 bitToInt(z) -{ 2 }-> bitToInt'(z, 1 + (1 + 0)) :|: z >= 0 bitToInt'(z, z') -{ 1 }-> bitToInt'#1(z, z') :|: z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 3 }-> plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 2 }-> compare#4(#eq(z, 0), z, z', z'') :|: z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 2 }-> compare#5(#cklt(#compare(z'', z1)), z'', z1) :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 1 }-> minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 2 }-> compare#6(#ckgt(#compare(z', z''))) :|: z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 3 }-> 1 + mod(plus(#add(z, z'), z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> #div(z, z') :|: z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> #sub(z, z') :|: z >= 0, z' >= 0 mod(z, z') -{ 2 }-> minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(#eq(z'', 1 + (1 + 0)), z', z) :|: z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 2 }-> sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 2 }-> 1 + sub'#5(#eq(@s, 1 + (1 + 0)), z', @zs) + @s :|: z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 2 }-> sum#1(plus(#add(z, z'), z'')) :|: z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 2 }-> sum#2(#eq(z, 0), z) :|: z >= 0 sum#2(z, z') -{ 2 }-> sum#3(#eq(z', 1 + (1 + 0)), z') :|: z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 2 }-> sum#4(#eq(z', 1 + (1 + (1 + 0)))) :|: z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {sub'#5}, {#cklt}, {#compare}, {diff#1}, {#abs}, {#succ}, {#greater}, {#add}, {#natdiv}, {#eq}, {#less}, {#sub}, {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] ---------------------------------------- (63) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (64) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #compare(z, z') -{ 0 }-> #compare(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> #compare(z' - 1, z - 1) :|: z - 1 >= 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #eq(z, z') -{ 0 }-> #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #equal(z, z') -{ 1 }-> #eq(z, z') :|: z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #greater(z, z') -{ 1 }-> #ckgt(#compare(z - 1, z' - 1)) :|: z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> #ckgt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> #cklt(#compare(z - 1, z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> #cklt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(s3, 1 + (1 + (z' - 2))) :|: s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #sub(z, z') -{ 0 }-> #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 2 }-> add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 1 }-> bitToInt'(z, 0) :|: z >= 0 bitToInt(z) -{ 2 }-> bitToInt'(z, 1 + (1 + 0)) :|: z >= 0 bitToInt'(z, z') -{ 1 }-> bitToInt'#1(z, z') :|: z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 3 }-> plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 2 }-> compare#4(#eq(z, 0), z, z', z'') :|: z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 2 }-> compare#5(#cklt(#compare(z'', z1)), z'', z1) :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 1 }-> minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 2 }-> compare#6(#ckgt(#compare(z', z''))) :|: z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 3 }-> 1 + mod(plus(#add(z, z'), z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> #div(z, z') :|: z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> #sub(z, z') :|: z >= 0, z' >= 0 mod(z, z') -{ 2 }-> minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(#eq(z'', 1 + (1 + 0)), z', z) :|: z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 2 }-> sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 2 }-> 1 + sub'#5(#eq(@s, 1 + (1 + 0)), z', @zs) + @s :|: z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 2 }-> sum#1(plus(#add(z, z'), z'')) :|: z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 2 }-> sum#2(#eq(z, 0), z) :|: z >= 0 sum#2(z, z') -{ 2 }-> sum#3(#eq(z', 1 + (1 + 0)), z') :|: z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 2 }-> sum#4(#eq(z', 1 + (1 + (1 + 0)))) :|: z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {sub'#5}, {#cklt}, {#compare}, {diff#1}, {#abs}, {#succ}, {#greater}, {#add}, {#natdiv}, {#eq}, {#less}, {#sub}, {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] ---------------------------------------- (65) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: sub'#5 after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 1 + z' + z'' ---------------------------------------- (66) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #compare(z, z') -{ 0 }-> #compare(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> #compare(z' - 1, z - 1) :|: z - 1 >= 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #eq(z, z') -{ 0 }-> #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #equal(z, z') -{ 1 }-> #eq(z, z') :|: z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #greater(z, z') -{ 1 }-> #ckgt(#compare(z - 1, z' - 1)) :|: z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> #ckgt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> #cklt(#compare(z - 1, z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> #cklt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(s3, 1 + (1 + (z' - 2))) :|: s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #sub(z, z') -{ 0 }-> #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 2 }-> add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 1 }-> bitToInt'(z, 0) :|: z >= 0 bitToInt(z) -{ 2 }-> bitToInt'(z, 1 + (1 + 0)) :|: z >= 0 bitToInt'(z, z') -{ 1 }-> bitToInt'#1(z, z') :|: z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 3 }-> plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 2 }-> compare#4(#eq(z, 0), z, z', z'') :|: z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 2 }-> compare#5(#cklt(#compare(z'', z1)), z'', z1) :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 1 }-> minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 2 }-> compare#6(#ckgt(#compare(z', z''))) :|: z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 3 }-> 1 + mod(plus(#add(z, z'), z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> #div(z, z') :|: z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> #sub(z, z') :|: z >= 0, z' >= 0 mod(z, z') -{ 2 }-> minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(#eq(z'', 1 + (1 + 0)), z', z) :|: z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 2 }-> sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 2 }-> 1 + sub'#5(#eq(@s, 1 + (1 + 0)), z', @zs) + @s :|: z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 2 }-> sum#1(plus(#add(z, z'), z'')) :|: z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 2 }-> sum#2(#eq(z, 0), z) :|: z >= 0 sum#2(z, z') -{ 2 }-> sum#3(#eq(z', 1 + (1 + 0)), z') :|: z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 2 }-> sum#4(#eq(z', 1 + (1 + (1 + 0)))) :|: z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {sub'#5}, {#cklt}, {#compare}, {diff#1}, {#abs}, {#succ}, {#greater}, {#add}, {#natdiv}, {#eq}, {#less}, {#sub}, {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: ?, size: O(n^1) [1 + z' + z''] ---------------------------------------- (67) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: sub'#5 after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 2 ---------------------------------------- (68) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #compare(z, z') -{ 0 }-> #compare(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> #compare(z' - 1, z - 1) :|: z - 1 >= 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #eq(z, z') -{ 0 }-> #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #equal(z, z') -{ 1 }-> #eq(z, z') :|: z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #greater(z, z') -{ 1 }-> #ckgt(#compare(z - 1, z' - 1)) :|: z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> #ckgt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> #cklt(#compare(z - 1, z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> #cklt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(s3, 1 + (1 + (z' - 2))) :|: s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #sub(z, z') -{ 0 }-> #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 2 }-> add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 1 }-> bitToInt'(z, 0) :|: z >= 0 bitToInt(z) -{ 2 }-> bitToInt'(z, 1 + (1 + 0)) :|: z >= 0 bitToInt'(z, z') -{ 1 }-> bitToInt'#1(z, z') :|: z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 3 }-> plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 2 }-> compare#4(#eq(z, 0), z, z', z'') :|: z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 2 }-> compare#5(#cklt(#compare(z'', z1)), z'', z1) :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 1 }-> minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 2 }-> compare#6(#ckgt(#compare(z', z''))) :|: z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 3 }-> 1 + mod(plus(#add(z, z'), z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> #div(z, z') :|: z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> #sub(z, z') :|: z >= 0, z' >= 0 mod(z, z') -{ 2 }-> minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(#eq(z'', 1 + (1 + 0)), z', z) :|: z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 2 }-> sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 2 }-> 1 + sub'#5(#eq(@s, 1 + (1 + 0)), z', @zs) + @s :|: z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 2 }-> sum#1(plus(#add(z, z'), z'')) :|: z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 2 }-> sum#2(#eq(z, 0), z) :|: z >= 0 sum#2(z, z') -{ 2 }-> sum#3(#eq(z', 1 + (1 + 0)), z') :|: z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 2 }-> sum#4(#eq(z', 1 + (1 + (1 + 0)))) :|: z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {#cklt}, {#compare}, {diff#1}, {#abs}, {#succ}, {#greater}, {#add}, {#natdiv}, {#eq}, {#less}, {#sub}, {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] ---------------------------------------- (69) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (70) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #compare(z, z') -{ 0 }-> #compare(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> #compare(z' - 1, z - 1) :|: z - 1 >= 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #eq(z, z') -{ 0 }-> #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #equal(z, z') -{ 1 }-> #eq(z, z') :|: z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #greater(z, z') -{ 1 }-> #ckgt(#compare(z - 1, z' - 1)) :|: z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> #ckgt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> #cklt(#compare(z - 1, z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> #cklt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(s3, 1 + (1 + (z' - 2))) :|: s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #sub(z, z') -{ 0 }-> #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 2 }-> add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 1 }-> bitToInt'(z, 0) :|: z >= 0 bitToInt(z) -{ 2 }-> bitToInt'(z, 1 + (1 + 0)) :|: z >= 0 bitToInt'(z, z') -{ 1 }-> bitToInt'#1(z, z') :|: z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 3 }-> plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 2 }-> compare#4(#eq(z, 0), z, z', z'') :|: z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 2 }-> compare#5(#cklt(#compare(z'', z1)), z'', z1) :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 1 }-> minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 2 }-> compare#6(#ckgt(#compare(z', z''))) :|: z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 3 }-> 1 + mod(plus(#add(z, z'), z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> #div(z, z') :|: z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> #sub(z, z') :|: z >= 0, z' >= 0 mod(z, z') -{ 2 }-> minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(#eq(z'', 1 + (1 + 0)), z', z) :|: z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 2 }-> sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 2 }-> 1 + sub'#5(#eq(@s, 1 + (1 + 0)), z', @zs) + @s :|: z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 2 }-> sum#1(plus(#add(z, z'), z'')) :|: z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 2 }-> sum#2(#eq(z, 0), z) :|: z >= 0 sum#2(z, z') -{ 2 }-> sum#3(#eq(z', 1 + (1 + 0)), z') :|: z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 2 }-> sum#4(#eq(z', 1 + (1 + (1 + 0)))) :|: z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {#cklt}, {#compare}, {diff#1}, {#abs}, {#succ}, {#greater}, {#add}, {#natdiv}, {#eq}, {#less}, {#sub}, {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] ---------------------------------------- (71) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: #cklt after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 2 ---------------------------------------- (72) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #compare(z, z') -{ 0 }-> #compare(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> #compare(z' - 1, z - 1) :|: z - 1 >= 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #eq(z, z') -{ 0 }-> #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #equal(z, z') -{ 1 }-> #eq(z, z') :|: z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #greater(z, z') -{ 1 }-> #ckgt(#compare(z - 1, z' - 1)) :|: z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> #ckgt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> #cklt(#compare(z - 1, z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> #cklt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(s3, 1 + (1 + (z' - 2))) :|: s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #sub(z, z') -{ 0 }-> #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 2 }-> add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 1 }-> bitToInt'(z, 0) :|: z >= 0 bitToInt(z) -{ 2 }-> bitToInt'(z, 1 + (1 + 0)) :|: z >= 0 bitToInt'(z, z') -{ 1 }-> bitToInt'#1(z, z') :|: z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 3 }-> plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 2 }-> compare#4(#eq(z, 0), z, z', z'') :|: z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 2 }-> compare#5(#cklt(#compare(z'', z1)), z'', z1) :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 1 }-> minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 2 }-> compare#6(#ckgt(#compare(z', z''))) :|: z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 3 }-> 1 + mod(plus(#add(z, z'), z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> #div(z, z') :|: z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> #sub(z, z') :|: z >= 0, z' >= 0 mod(z, z') -{ 2 }-> minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(#eq(z'', 1 + (1 + 0)), z', z) :|: z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 2 }-> sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 2 }-> 1 + sub'#5(#eq(@s, 1 + (1 + 0)), z', @zs) + @s :|: z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 2 }-> sum#1(plus(#add(z, z'), z'')) :|: z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 2 }-> sum#2(#eq(z, 0), z) :|: z >= 0 sum#2(z, z') -{ 2 }-> sum#3(#eq(z', 1 + (1 + 0)), z') :|: z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 2 }-> sum#4(#eq(z', 1 + (1 + (1 + 0)))) :|: z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {#cklt}, {#compare}, {diff#1}, {#abs}, {#succ}, {#greater}, {#add}, {#natdiv}, {#eq}, {#less}, {#sub}, {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: ?, size: O(1) [2] ---------------------------------------- (73) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: #cklt after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 0 ---------------------------------------- (74) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #compare(z, z') -{ 0 }-> #compare(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> #compare(z' - 1, z - 1) :|: z - 1 >= 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #eq(z, z') -{ 0 }-> #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #equal(z, z') -{ 1 }-> #eq(z, z') :|: z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #greater(z, z') -{ 1 }-> #ckgt(#compare(z - 1, z' - 1)) :|: z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> #ckgt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> #cklt(#compare(z - 1, z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> #cklt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(s3, 1 + (1 + (z' - 2))) :|: s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #sub(z, z') -{ 0 }-> #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 2 }-> add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 1 }-> bitToInt'(z, 0) :|: z >= 0 bitToInt(z) -{ 2 }-> bitToInt'(z, 1 + (1 + 0)) :|: z >= 0 bitToInt'(z, z') -{ 1 }-> bitToInt'#1(z, z') :|: z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 3 }-> plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 2 }-> compare#4(#eq(z, 0), z, z', z'') :|: z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 2 }-> compare#5(#cklt(#compare(z'', z1)), z'', z1) :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 1 }-> minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 2 }-> compare#6(#ckgt(#compare(z', z''))) :|: z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 3 }-> 1 + mod(plus(#add(z, z'), z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> #div(z, z') :|: z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> #sub(z, z') :|: z >= 0, z' >= 0 mod(z, z') -{ 2 }-> minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(#eq(z'', 1 + (1 + 0)), z', z) :|: z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 2 }-> sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 2 }-> 1 + sub'#5(#eq(@s, 1 + (1 + 0)), z', @zs) + @s :|: z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 2 }-> sum#1(plus(#add(z, z'), z'')) :|: z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 2 }-> sum#2(#eq(z, 0), z) :|: z >= 0 sum#2(z, z') -{ 2 }-> sum#3(#eq(z', 1 + (1 + 0)), z') :|: z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 2 }-> sum#4(#eq(z', 1 + (1 + (1 + 0)))) :|: z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {#compare}, {diff#1}, {#abs}, {#succ}, {#greater}, {#add}, {#natdiv}, {#eq}, {#less}, {#sub}, {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] ---------------------------------------- (75) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (76) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #compare(z, z') -{ 0 }-> #compare(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> #compare(z' - 1, z - 1) :|: z - 1 >= 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #eq(z, z') -{ 0 }-> #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #equal(z, z') -{ 1 }-> #eq(z, z') :|: z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #greater(z, z') -{ 1 }-> #ckgt(#compare(z - 1, z' - 1)) :|: z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> #ckgt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> #cklt(#compare(z - 1, z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> #cklt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(s3, 1 + (1 + (z' - 2))) :|: s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #sub(z, z') -{ 0 }-> #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 2 }-> add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 1 }-> bitToInt'(z, 0) :|: z >= 0 bitToInt(z) -{ 2 }-> bitToInt'(z, 1 + (1 + 0)) :|: z >= 0 bitToInt'(z, z') -{ 1 }-> bitToInt'#1(z, z') :|: z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 3 }-> plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 2 }-> compare#4(#eq(z, 0), z, z', z'') :|: z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 2 }-> compare#5(#cklt(#compare(z'', z1)), z'', z1) :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 1 }-> minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 2 }-> compare#6(#ckgt(#compare(z', z''))) :|: z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 3 }-> 1 + mod(plus(#add(z, z'), z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> #div(z, z') :|: z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> #sub(z, z') :|: z >= 0, z' >= 0 mod(z, z') -{ 2 }-> minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(#eq(z'', 1 + (1 + 0)), z', z) :|: z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 2 }-> sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 2 }-> 1 + sub'#5(#eq(@s, 1 + (1 + 0)), z', @zs) + @s :|: z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 2 }-> sum#1(plus(#add(z, z'), z'')) :|: z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 2 }-> sum#2(#eq(z, 0), z) :|: z >= 0 sum#2(z, z') -{ 2 }-> sum#3(#eq(z', 1 + (1 + 0)), z') :|: z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 2 }-> sum#4(#eq(z', 1 + (1 + (1 + 0)))) :|: z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {#compare}, {diff#1}, {#abs}, {#succ}, {#greater}, {#add}, {#natdiv}, {#eq}, {#less}, {#sub}, {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] ---------------------------------------- (77) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: #compare after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 3 ---------------------------------------- (78) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #compare(z, z') -{ 0 }-> #compare(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> #compare(z' - 1, z - 1) :|: z - 1 >= 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #eq(z, z') -{ 0 }-> #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #equal(z, z') -{ 1 }-> #eq(z, z') :|: z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #greater(z, z') -{ 1 }-> #ckgt(#compare(z - 1, z' - 1)) :|: z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> #ckgt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> #cklt(#compare(z - 1, z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> #cklt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(s3, 1 + (1 + (z' - 2))) :|: s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #sub(z, z') -{ 0 }-> #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 2 }-> add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 1 }-> bitToInt'(z, 0) :|: z >= 0 bitToInt(z) -{ 2 }-> bitToInt'(z, 1 + (1 + 0)) :|: z >= 0 bitToInt'(z, z') -{ 1 }-> bitToInt'#1(z, z') :|: z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 3 }-> plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 2 }-> compare#4(#eq(z, 0), z, z', z'') :|: z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 2 }-> compare#5(#cklt(#compare(z'', z1)), z'', z1) :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 1 }-> minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 2 }-> compare#6(#ckgt(#compare(z', z''))) :|: z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 3 }-> 1 + mod(plus(#add(z, z'), z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> #div(z, z') :|: z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> #sub(z, z') :|: z >= 0, z' >= 0 mod(z, z') -{ 2 }-> minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(#eq(z'', 1 + (1 + 0)), z', z) :|: z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 2 }-> sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 2 }-> 1 + sub'#5(#eq(@s, 1 + (1 + 0)), z', @zs) + @s :|: z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 2 }-> sum#1(plus(#add(z, z'), z'')) :|: z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 2 }-> sum#2(#eq(z, 0), z) :|: z >= 0 sum#2(z, z') -{ 2 }-> sum#3(#eq(z', 1 + (1 + 0)), z') :|: z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 2 }-> sum#4(#eq(z', 1 + (1 + (1 + 0)))) :|: z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {#compare}, {diff#1}, {#abs}, {#succ}, {#greater}, {#add}, {#natdiv}, {#eq}, {#less}, {#sub}, {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: ?, size: O(1) [3] ---------------------------------------- (79) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: #compare after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 0 ---------------------------------------- (80) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #compare(z, z') -{ 0 }-> #compare(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> #compare(z' - 1, z - 1) :|: z - 1 >= 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #eq(z, z') -{ 0 }-> #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #equal(z, z') -{ 1 }-> #eq(z, z') :|: z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #greater(z, z') -{ 1 }-> #ckgt(#compare(z - 1, z' - 1)) :|: z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> #ckgt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> #cklt(#compare(z - 1, z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> #cklt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(s3, 1 + (1 + (z' - 2))) :|: s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #sub(z, z') -{ 0 }-> #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 2 }-> add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 1 }-> bitToInt'(z, 0) :|: z >= 0 bitToInt(z) -{ 2 }-> bitToInt'(z, 1 + (1 + 0)) :|: z >= 0 bitToInt'(z, z') -{ 1 }-> bitToInt'#1(z, z') :|: z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 3 }-> plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 2 }-> compare#4(#eq(z, 0), z, z', z'') :|: z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 2 }-> compare#5(#cklt(#compare(z'', z1)), z'', z1) :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 1 }-> minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 2 }-> compare#6(#ckgt(#compare(z', z''))) :|: z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 3 }-> 1 + mod(plus(#add(z, z'), z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> #div(z, z') :|: z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> #sub(z, z') :|: z >= 0, z' >= 0 mod(z, z') -{ 2 }-> minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(#eq(z'', 1 + (1 + 0)), z', z) :|: z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 2 }-> sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 2 }-> 1 + sub'#5(#eq(@s, 1 + (1 + 0)), z', @zs) + @s :|: z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 2 }-> sum#1(plus(#add(z, z'), z'')) :|: z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 2 }-> sum#2(#eq(z, 0), z) :|: z >= 0 sum#2(z, z') -{ 2 }-> sum#3(#eq(z', 1 + (1 + 0)), z') :|: z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 2 }-> sum#4(#eq(z', 1 + (1 + (1 + 0)))) :|: z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {diff#1}, {#abs}, {#succ}, {#greater}, {#add}, {#natdiv}, {#eq}, {#less}, {#sub}, {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] ---------------------------------------- (81) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (82) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #eq(z, z') -{ 0 }-> #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #equal(z, z') -{ 1 }-> #eq(z, z') :|: z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(s3, 1 + (1 + (z' - 2))) :|: s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #sub(z, z') -{ 0 }-> #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 2 }-> add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 1 }-> bitToInt'(z, 0) :|: z >= 0 bitToInt(z) -{ 2 }-> bitToInt'(z, 1 + (1 + 0)) :|: z >= 0 bitToInt'(z, z') -{ 1 }-> bitToInt'#1(z, z') :|: z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 3 }-> plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 2 }-> compare#4(#eq(z, 0), z, z', z'') :|: z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 2 }-> compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 1 }-> minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 3 }-> 1 + mod(plus(#add(z, z'), z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> #div(z, z') :|: z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> #sub(z, z') :|: z >= 0, z' >= 0 mod(z, z') -{ 2 }-> minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(#eq(z'', 1 + (1 + 0)), z', z) :|: z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 2 }-> sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 2 }-> 1 + sub'#5(#eq(@s, 1 + (1 + 0)), z', @zs) + @s :|: z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 2 }-> sum#1(plus(#add(z, z'), z'')) :|: z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 2 }-> sum#2(#eq(z, 0), z) :|: z >= 0 sum#2(z, z') -{ 2 }-> sum#3(#eq(z', 1 + (1 + 0)), z') :|: z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 2 }-> sum#4(#eq(z', 1 + (1 + (1 + 0)))) :|: z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {diff#1}, {#abs}, {#succ}, {#greater}, {#add}, {#natdiv}, {#eq}, {#less}, {#sub}, {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] ---------------------------------------- (83) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: diff#1 after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 3 ---------------------------------------- (84) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #eq(z, z') -{ 0 }-> #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #equal(z, z') -{ 1 }-> #eq(z, z') :|: z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(s3, 1 + (1 + (z' - 2))) :|: s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #sub(z, z') -{ 0 }-> #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 2 }-> add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 1 }-> bitToInt'(z, 0) :|: z >= 0 bitToInt(z) -{ 2 }-> bitToInt'(z, 1 + (1 + 0)) :|: z >= 0 bitToInt'(z, z') -{ 1 }-> bitToInt'#1(z, z') :|: z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 3 }-> plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 2 }-> compare#4(#eq(z, 0), z, z', z'') :|: z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 2 }-> compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 1 }-> minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 3 }-> 1 + mod(plus(#add(z, z'), z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> #div(z, z') :|: z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> #sub(z, z') :|: z >= 0, z' >= 0 mod(z, z') -{ 2 }-> minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(#eq(z'', 1 + (1 + 0)), z', z) :|: z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 2 }-> sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 2 }-> 1 + sub'#5(#eq(@s, 1 + (1 + 0)), z', @zs) + @s :|: z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 2 }-> sum#1(plus(#add(z, z'), z'')) :|: z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 2 }-> sum#2(#eq(z, 0), z) :|: z >= 0 sum#2(z, z') -{ 2 }-> sum#3(#eq(z', 1 + (1 + 0)), z') :|: z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 2 }-> sum#4(#eq(z', 1 + (1 + (1 + 0)))) :|: z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {diff#1}, {#abs}, {#succ}, {#greater}, {#add}, {#natdiv}, {#eq}, {#less}, {#sub}, {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: ?, size: O(1) [3] ---------------------------------------- (85) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: diff#1 after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 2 ---------------------------------------- (86) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #eq(z, z') -{ 0 }-> #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #equal(z, z') -{ 1 }-> #eq(z, z') :|: z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(s3, 1 + (1 + (z' - 2))) :|: s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #sub(z, z') -{ 0 }-> #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 2 }-> add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 1 }-> bitToInt'(z, 0) :|: z >= 0 bitToInt(z) -{ 2 }-> bitToInt'(z, 1 + (1 + 0)) :|: z >= 0 bitToInt'(z, z') -{ 1 }-> bitToInt'#1(z, z') :|: z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 3 }-> plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 2 }-> compare#4(#eq(z, 0), z, z', z'') :|: z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 2 }-> compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 1 }-> minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 3 }-> 1 + mod(plus(#add(z, z'), z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> #div(z, z') :|: z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> #sub(z, z') :|: z >= 0, z' >= 0 mod(z, z') -{ 2 }-> minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(#eq(z'', 1 + (1 + 0)), z', z) :|: z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 2 }-> sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 2 }-> 1 + sub'#5(#eq(@s, 1 + (1 + 0)), z', @zs) + @s :|: z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 2 }-> sum#1(plus(#add(z, z'), z'')) :|: z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 2 }-> sum#2(#eq(z, 0), z) :|: z >= 0 sum#2(z, z') -{ 2 }-> sum#3(#eq(z', 1 + (1 + 0)), z') :|: z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 2 }-> sum#4(#eq(z', 1 + (1 + (1 + 0)))) :|: z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {#abs}, {#succ}, {#greater}, {#add}, {#natdiv}, {#eq}, {#less}, {#sub}, {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] ---------------------------------------- (87) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (88) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #eq(z, z') -{ 0 }-> #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #equal(z, z') -{ 1 }-> #eq(z, z') :|: z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(s3, 1 + (1 + (z' - 2))) :|: s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #sub(z, z') -{ 0 }-> #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 2 }-> add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 1 }-> bitToInt'(z, 0) :|: z >= 0 bitToInt(z) -{ 2 }-> bitToInt'(z, 1 + (1 + 0)) :|: z >= 0 bitToInt'(z, z') -{ 1 }-> bitToInt'#1(z, z') :|: z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 3 }-> plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 2 }-> compare#4(#eq(z, 0), z, z', z'') :|: z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 2 }-> compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 1 }-> minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 3 }-> 1 + mod(plus(#add(z, z'), z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> #div(z, z') :|: z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> #sub(z, z') :|: z >= 0, z' >= 0 mod(z, z') -{ 2 }-> minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(#eq(z'', 1 + (1 + 0)), z', z) :|: z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 2 }-> sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 2 }-> 1 + sub'#5(#eq(@s, 1 + (1 + 0)), z', @zs) + @s :|: z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 2 }-> sum#1(plus(#add(z, z'), z'')) :|: z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 2 }-> sum#2(#eq(z, 0), z) :|: z >= 0 sum#2(z, z') -{ 2 }-> sum#3(#eq(z', 1 + (1 + 0)), z') :|: z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 2 }-> sum#4(#eq(z', 1 + (1 + (1 + 0)))) :|: z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {#abs}, {#succ}, {#greater}, {#add}, {#natdiv}, {#eq}, {#less}, {#sub}, {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] ---------------------------------------- (89) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: #abs after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 1 + z ---------------------------------------- (90) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #eq(z, z') -{ 0 }-> #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #equal(z, z') -{ 1 }-> #eq(z, z') :|: z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(s3, 1 + (1 + (z' - 2))) :|: s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #sub(z, z') -{ 0 }-> #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 2 }-> add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 1 }-> bitToInt'(z, 0) :|: z >= 0 bitToInt(z) -{ 2 }-> bitToInt'(z, 1 + (1 + 0)) :|: z >= 0 bitToInt'(z, z') -{ 1 }-> bitToInt'#1(z, z') :|: z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 3 }-> plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 2 }-> compare#4(#eq(z, 0), z, z', z'') :|: z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 2 }-> compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 1 }-> minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 3 }-> 1 + mod(plus(#add(z, z'), z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> #div(z, z') :|: z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> #sub(z, z') :|: z >= 0, z' >= 0 mod(z, z') -{ 2 }-> minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(#eq(z'', 1 + (1 + 0)), z', z) :|: z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 2 }-> sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 2 }-> 1 + sub'#5(#eq(@s, 1 + (1 + 0)), z', @zs) + @s :|: z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 2 }-> sum#1(plus(#add(z, z'), z'')) :|: z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 2 }-> sum#2(#eq(z, 0), z) :|: z >= 0 sum#2(z, z') -{ 2 }-> sum#3(#eq(z', 1 + (1 + 0)), z') :|: z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 2 }-> sum#4(#eq(z', 1 + (1 + (1 + 0)))) :|: z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {#abs}, {#succ}, {#greater}, {#add}, {#natdiv}, {#eq}, {#less}, {#sub}, {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: ?, size: O(n^1) [1 + z] ---------------------------------------- (91) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: #abs after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 1 ---------------------------------------- (92) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #eq(z, z') -{ 0 }-> #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #equal(z, z') -{ 1 }-> #eq(z, z') :|: z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(s3, 1 + (1 + (z' - 2))) :|: s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #sub(z, z') -{ 0 }-> #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 2 }-> add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 1 }-> bitToInt'(z, 0) :|: z >= 0 bitToInt(z) -{ 2 }-> bitToInt'(z, 1 + (1 + 0)) :|: z >= 0 bitToInt'(z, z') -{ 1 }-> bitToInt'#1(z, z') :|: z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 3 }-> plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 2 }-> compare#4(#eq(z, 0), z, z', z'') :|: z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 2 }-> compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 1 }-> minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 3 }-> 1 + mod(plus(#add(z, z'), z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> #div(z, z') :|: z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> #sub(z, z') :|: z >= 0, z' >= 0 mod(z, z') -{ 2 }-> minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(#eq(z'', 1 + (1 + 0)), z', z) :|: z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 2 }-> sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 2 }-> 1 + sub'#5(#eq(@s, 1 + (1 + 0)), z', @zs) + @s :|: z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 2 }-> sum#1(plus(#add(z, z'), z'')) :|: z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 2 }-> sum#2(#eq(z, 0), z) :|: z >= 0 sum#2(z, z') -{ 2 }-> sum#3(#eq(z', 1 + (1 + 0)), z') :|: z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 2 }-> sum#4(#eq(z', 1 + (1 + (1 + 0)))) :|: z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {#succ}, {#greater}, {#add}, {#natdiv}, {#eq}, {#less}, {#sub}, {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] ---------------------------------------- (93) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (94) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #eq(z, z') -{ 0 }-> #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #equal(z, z') -{ 1 }-> #eq(z, z') :|: z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(s3, 1 + (1 + (z' - 2))) :|: s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #sub(z, z') -{ 0 }-> #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 2 }-> add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 1 }-> bitToInt'(z, 0) :|: z >= 0 bitToInt(z) -{ 2 }-> bitToInt'(z, 1 + (1 + 0)) :|: z >= 0 bitToInt'(z, z') -{ 1 }-> bitToInt'#1(z, z') :|: z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 3 }-> plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 2 }-> compare#4(#eq(z, 0), z, z', z'') :|: z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 2 }-> compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 1 }-> minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 3 }-> 1 + mod(plus(#add(z, z'), z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> #div(z, z') :|: z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> #sub(z, z') :|: z >= 0, z' >= 0 mod(z, z') -{ 2 }-> minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(#eq(z'', 1 + (1 + 0)), z', z) :|: z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 2 }-> sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 2 }-> 1 + sub'#5(#eq(@s, 1 + (1 + 0)), z', @zs) + @s :|: z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 2 }-> sum#1(plus(#add(z, z'), z'')) :|: z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 2 }-> sum#2(#eq(z, 0), z) :|: z >= 0 sum#2(z, z') -{ 2 }-> sum#3(#eq(z', 1 + (1 + 0)), z') :|: z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 2 }-> sum#4(#eq(z', 1 + (1 + (1 + 0)))) :|: z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {#succ}, {#greater}, {#add}, {#natdiv}, {#eq}, {#less}, {#sub}, {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] ---------------------------------------- (95) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: #succ after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 2 + z ---------------------------------------- (96) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #eq(z, z') -{ 0 }-> #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #equal(z, z') -{ 1 }-> #eq(z, z') :|: z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(s3, 1 + (1 + (z' - 2))) :|: s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #sub(z, z') -{ 0 }-> #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 2 }-> add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 1 }-> bitToInt'(z, 0) :|: z >= 0 bitToInt(z) -{ 2 }-> bitToInt'(z, 1 + (1 + 0)) :|: z >= 0 bitToInt'(z, z') -{ 1 }-> bitToInt'#1(z, z') :|: z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 3 }-> plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 2 }-> compare#4(#eq(z, 0), z, z', z'') :|: z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 2 }-> compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 1 }-> minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 3 }-> 1 + mod(plus(#add(z, z'), z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> #div(z, z') :|: z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> #sub(z, z') :|: z >= 0, z' >= 0 mod(z, z') -{ 2 }-> minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(#eq(z'', 1 + (1 + 0)), z', z) :|: z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 2 }-> sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 2 }-> 1 + sub'#5(#eq(@s, 1 + (1 + 0)), z', @zs) + @s :|: z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 2 }-> sum#1(plus(#add(z, z'), z'')) :|: z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 2 }-> sum#2(#eq(z, 0), z) :|: z >= 0 sum#2(z, z') -{ 2 }-> sum#3(#eq(z', 1 + (1 + 0)), z') :|: z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 2 }-> sum#4(#eq(z', 1 + (1 + (1 + 0)))) :|: z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {#succ}, {#greater}, {#add}, {#natdiv}, {#eq}, {#less}, {#sub}, {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: ?, size: O(n^1) [2 + z] ---------------------------------------- (97) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: #succ after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 0 ---------------------------------------- (98) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #eq(z, z') -{ 0 }-> #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #equal(z, z') -{ 1 }-> #eq(z, z') :|: z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(s3, 1 + (1 + (z' - 2))) :|: s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #sub(z, z') -{ 0 }-> #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 2 }-> add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 1 }-> bitToInt'(z, 0) :|: z >= 0 bitToInt(z) -{ 2 }-> bitToInt'(z, 1 + (1 + 0)) :|: z >= 0 bitToInt'(z, z') -{ 1 }-> bitToInt'#1(z, z') :|: z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 3 }-> plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 2 }-> compare#4(#eq(z, 0), z, z', z'') :|: z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 2 }-> compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 1 }-> minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 3 }-> 1 + mod(plus(#add(z, z'), z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> #div(z, z') :|: z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> #sub(z, z') :|: z >= 0, z' >= 0 mod(z, z') -{ 2 }-> minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(#eq(z'', 1 + (1 + 0)), z', z) :|: z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 2 }-> sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 2 }-> 1 + sub'#5(#eq(@s, 1 + (1 + 0)), z', @zs) + @s :|: z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 2 }-> sum#1(plus(#add(z, z'), z'')) :|: z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 2 }-> sum#2(#eq(z, 0), z) :|: z >= 0 sum#2(z, z') -{ 2 }-> sum#3(#eq(z', 1 + (1 + 0)), z') :|: z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 2 }-> sum#4(#eq(z', 1 + (1 + (1 + 0)))) :|: z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {#greater}, {#add}, {#natdiv}, {#eq}, {#less}, {#sub}, {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] ---------------------------------------- (99) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (100) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #eq(z, z') -{ 0 }-> #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #equal(z, z') -{ 1 }-> #eq(z, z') :|: z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(s3, 1 + (1 + (z' - 2))) :|: s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #sub(z, z') -{ 0 }-> #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 2 }-> add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 1 }-> bitToInt'(z, 0) :|: z >= 0 bitToInt(z) -{ 2 }-> bitToInt'(z, 1 + (1 + 0)) :|: z >= 0 bitToInt'(z, z') -{ 1 }-> bitToInt'#1(z, z') :|: z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 3 }-> plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 2 }-> compare#4(#eq(z, 0), z, z', z'') :|: z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 2 }-> compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 1 }-> minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 3 }-> 1 + mod(plus(#add(z, z'), z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> #div(z, z') :|: z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> #sub(z, z') :|: z >= 0, z' >= 0 mod(z, z') -{ 2 }-> minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(#eq(z'', 1 + (1 + 0)), z', z) :|: z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 2 }-> sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 2 }-> 1 + sub'#5(#eq(@s, 1 + (1 + 0)), z', @zs) + @s :|: z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 2 }-> sum#1(plus(#add(z, z'), z'')) :|: z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 2 }-> sum#2(#eq(z, 0), z) :|: z >= 0 sum#2(z, z') -{ 2 }-> sum#3(#eq(z', 1 + (1 + 0)), z') :|: z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 2 }-> sum#4(#eq(z', 1 + (1 + (1 + 0)))) :|: z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {#greater}, {#add}, {#natdiv}, {#eq}, {#less}, {#sub}, {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] ---------------------------------------- (101) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: #greater after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 2 ---------------------------------------- (102) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #eq(z, z') -{ 0 }-> #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #equal(z, z') -{ 1 }-> #eq(z, z') :|: z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(s3, 1 + (1 + (z' - 2))) :|: s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #sub(z, z') -{ 0 }-> #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 2 }-> add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 1 }-> bitToInt'(z, 0) :|: z >= 0 bitToInt(z) -{ 2 }-> bitToInt'(z, 1 + (1 + 0)) :|: z >= 0 bitToInt'(z, z') -{ 1 }-> bitToInt'#1(z, z') :|: z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 3 }-> plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 2 }-> compare#4(#eq(z, 0), z, z', z'') :|: z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 2 }-> compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 1 }-> minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 3 }-> 1 + mod(plus(#add(z, z'), z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> #div(z, z') :|: z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> #sub(z, z') :|: z >= 0, z' >= 0 mod(z, z') -{ 2 }-> minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(#eq(z'', 1 + (1 + 0)), z', z) :|: z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 2 }-> sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 2 }-> 1 + sub'#5(#eq(@s, 1 + (1 + 0)), z', @zs) + @s :|: z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 2 }-> sum#1(plus(#add(z, z'), z'')) :|: z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 2 }-> sum#2(#eq(z, 0), z) :|: z >= 0 sum#2(z, z') -{ 2 }-> sum#3(#eq(z', 1 + (1 + 0)), z') :|: z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 2 }-> sum#4(#eq(z', 1 + (1 + (1 + 0)))) :|: z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {#greater}, {#add}, {#natdiv}, {#eq}, {#less}, {#sub}, {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: ?, size: O(1) [2] ---------------------------------------- (103) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: #greater after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 1 ---------------------------------------- (104) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #eq(z, z') -{ 0 }-> #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #equal(z, z') -{ 1 }-> #eq(z, z') :|: z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(s3, 1 + (1 + (z' - 2))) :|: s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #sub(z, z') -{ 0 }-> #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 2 }-> add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 1 }-> bitToInt'(z, 0) :|: z >= 0 bitToInt(z) -{ 2 }-> bitToInt'(z, 1 + (1 + 0)) :|: z >= 0 bitToInt'(z, z') -{ 1 }-> bitToInt'#1(z, z') :|: z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 3 }-> plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 2 }-> compare#4(#eq(z, 0), z, z', z'') :|: z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 2 }-> compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 1 }-> minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 3 }-> 1 + mod(plus(#add(z, z'), z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> #div(z, z') :|: z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> #sub(z, z') :|: z >= 0, z' >= 0 mod(z, z') -{ 2 }-> minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(#eq(z'', 1 + (1 + 0)), z', z) :|: z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 2 }-> sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 2 }-> 1 + sub'#5(#eq(@s, 1 + (1 + 0)), z', @zs) + @s :|: z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 2 }-> sum#1(plus(#add(z, z'), z'')) :|: z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 2 }-> sum#2(#eq(z, 0), z) :|: z >= 0 sum#2(z, z') -{ 2 }-> sum#3(#eq(z', 1 + (1 + 0)), z') :|: z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 2 }-> sum#4(#eq(z', 1 + (1 + (1 + 0)))) :|: z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {#add}, {#natdiv}, {#eq}, {#less}, {#sub}, {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] ---------------------------------------- (105) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (106) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #eq(z, z') -{ 0 }-> #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #equal(z, z') -{ 1 }-> #eq(z, z') :|: z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(s3, 1 + (1 + (z' - 2))) :|: s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #sub(z, z') -{ 0 }-> #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 2 }-> add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 1 }-> bitToInt'(z, 0) :|: z >= 0 bitToInt(z) -{ 2 }-> bitToInt'(z, 1 + (1 + 0)) :|: z >= 0 bitToInt'(z, z') -{ 1 }-> bitToInt'#1(z, z') :|: z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 3 }-> plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 2 }-> compare#4(#eq(z, 0), z, z', z'') :|: z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 2 }-> compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 1 }-> minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 3 }-> 1 + mod(plus(#add(z, z'), z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> #div(z, z') :|: z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> #sub(z, z') :|: z >= 0, z' >= 0 mod(z, z') -{ 2 }-> minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(#eq(z'', 1 + (1 + 0)), z', z) :|: z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 2 }-> sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 2 }-> 1 + sub'#5(#eq(@s, 1 + (1 + 0)), z', @zs) + @s :|: z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 2 }-> sum#1(plus(#add(z, z'), z'')) :|: z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 2 }-> sum#2(#eq(z, 0), z) :|: z >= 0 sum#2(z, z') -{ 2 }-> sum#3(#eq(z', 1 + (1 + 0)), z') :|: z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 2 }-> sum#4(#eq(z', 1 + (1 + (1 + 0)))) :|: z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {#add}, {#natdiv}, {#eq}, {#less}, {#sub}, {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] ---------------------------------------- (107) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using KoAT for: #add after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 2*z + z' ---------------------------------------- (108) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #eq(z, z') -{ 0 }-> #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #equal(z, z') -{ 1 }-> #eq(z, z') :|: z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(s3, 1 + (1 + (z' - 2))) :|: s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #sub(z, z') -{ 0 }-> #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 2 }-> add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 1 }-> bitToInt'(z, 0) :|: z >= 0 bitToInt(z) -{ 2 }-> bitToInt'(z, 1 + (1 + 0)) :|: z >= 0 bitToInt'(z, z') -{ 1 }-> bitToInt'#1(z, z') :|: z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 3 }-> plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 2 }-> compare#4(#eq(z, 0), z, z', z'') :|: z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 2 }-> compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 1 }-> minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 3 }-> 1 + mod(plus(#add(z, z'), z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> #div(z, z') :|: z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> #sub(z, z') :|: z >= 0, z' >= 0 mod(z, z') -{ 2 }-> minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(#eq(z'', 1 + (1 + 0)), z', z) :|: z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 2 }-> sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 2 }-> 1 + sub'#5(#eq(@s, 1 + (1 + 0)), z', @zs) + @s :|: z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 2 }-> sum#1(plus(#add(z, z'), z'')) :|: z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 2 }-> sum#2(#eq(z, 0), z) :|: z >= 0 sum#2(z, z') -{ 2 }-> sum#3(#eq(z', 1 + (1 + 0)), z') :|: z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 2 }-> sum#4(#eq(z', 1 + (1 + (1 + 0)))) :|: z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {#add}, {#natdiv}, {#eq}, {#less}, {#sub}, {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] #add: runtime: ?, size: O(n^1) [2*z + z'] ---------------------------------------- (109) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: #add after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 0 ---------------------------------------- (110) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #eq(z, z') -{ 0 }-> #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #equal(z, z') -{ 1 }-> #eq(z, z') :|: z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(s3, 1 + (1 + (z' - 2))) :|: s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #sub(z, z') -{ 0 }-> #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 2 }-> add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 1 }-> bitToInt'(z, 0) :|: z >= 0 bitToInt(z) -{ 2 }-> bitToInt'(z, 1 + (1 + 0)) :|: z >= 0 bitToInt'(z, z') -{ 1 }-> bitToInt'#1(z, z') :|: z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 3 }-> plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 2 }-> compare#4(#eq(z, 0), z, z', z'') :|: z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 2 }-> compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 1 }-> minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 3 }-> 1 + mod(plus(#add(z, z'), z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> #div(z, z') :|: z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> #sub(z, z') :|: z >= 0, z' >= 0 mod(z, z') -{ 2 }-> minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(#eq(z'', 1 + (1 + 0)), z', z) :|: z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 2 }-> sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 2 }-> 1 + sub'#5(#eq(@s, 1 + (1 + 0)), z', @zs) + @s :|: z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 2 }-> sum#1(plus(#add(z, z'), z'')) :|: z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 2 }-> sum#2(#eq(z, 0), z) :|: z >= 0 sum#2(z, z') -{ 2 }-> sum#3(#eq(z', 1 + (1 + 0)), z') :|: z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 2 }-> sum#4(#eq(z', 1 + (1 + (1 + 0)))) :|: z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {#natdiv}, {#eq}, {#less}, {#sub}, {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] ---------------------------------------- (111) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (112) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + z', s26 >= 0, s26 <= s25 + 2, s27 >= 0, s27 <= s26 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + z', s29 >= 0, s29 <= s28 + 2, s30 >= 0, s30 <= s29 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #eq(z, z') -{ 0 }-> #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #equal(z, z') -{ 1 }-> #eq(z, z') :|: z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(s3, 1 + (1 + (z' - 2))) :|: s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0 #natmult(z, z') -{ 0 }-> s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> s24 :|: s24 >= 0, s24 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 2 }-> add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 1 }-> bitToInt'(z, 0) :|: z >= 0 bitToInt(z) -{ 2 }-> bitToInt'(z, 1 + (1 + 0)) :|: z >= 0 bitToInt'(z, z') -{ 1 }-> bitToInt'#1(z, z') :|: z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 3 }-> plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 2 }-> compare#4(#eq(z, 0), z, z', z'') :|: z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 2 }-> compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 1 }-> minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 3 }-> 1 + mod(plus(s31, z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: s31 >= 0, s31 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> #div(z, z') :|: z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> #sub(z, z') :|: z >= 0, z' >= 0 mod(z, z') -{ 2 }-> minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(#eq(z'', 1 + (1 + 0)), z', z) :|: z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> s20 :|: s20 >= 0, s20 <= 2 * z + z', z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 2 }-> sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 2 }-> 1 + sub'#5(#eq(@s, 1 + (1 + 0)), z', @zs) + @s :|: z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 2 }-> sum#1(plus(s21, z'')) :|: s21 >= 0, s21 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 2 }-> sum#2(#eq(z, 0), z) :|: z >= 0 sum#2(z, z') -{ 2 }-> sum#3(#eq(z', 1 + (1 + 0)), z') :|: z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 2 }-> sum#4(#eq(z', 1 + (1 + (1 + 0)))) :|: z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {#natdiv}, {#eq}, {#less}, {#sub}, {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] ---------------------------------------- (113) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: #natdiv after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 1 + z ---------------------------------------- (114) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + z', s26 >= 0, s26 <= s25 + 2, s27 >= 0, s27 <= s26 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + z', s29 >= 0, s29 <= s28 + 2, s30 >= 0, s30 <= s29 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #eq(z, z') -{ 0 }-> #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #equal(z, z') -{ 1 }-> #eq(z, z') :|: z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(s3, 1 + (1 + (z' - 2))) :|: s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0 #natmult(z, z') -{ 0 }-> s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> s24 :|: s24 >= 0, s24 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 2 }-> add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 1 }-> bitToInt'(z, 0) :|: z >= 0 bitToInt(z) -{ 2 }-> bitToInt'(z, 1 + (1 + 0)) :|: z >= 0 bitToInt'(z, z') -{ 1 }-> bitToInt'#1(z, z') :|: z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 3 }-> plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 2 }-> compare#4(#eq(z, 0), z, z', z'') :|: z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 2 }-> compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 1 }-> minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 3 }-> 1 + mod(plus(s31, z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: s31 >= 0, s31 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> #div(z, z') :|: z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> #sub(z, z') :|: z >= 0, z' >= 0 mod(z, z') -{ 2 }-> minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(#eq(z'', 1 + (1 + 0)), z', z) :|: z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> s20 :|: s20 >= 0, s20 <= 2 * z + z', z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 2 }-> sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 2 }-> 1 + sub'#5(#eq(@s, 1 + (1 + 0)), z', @zs) + @s :|: z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 2 }-> sum#1(plus(s21, z'')) :|: s21 >= 0, s21 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 2 }-> sum#2(#eq(z, 0), z) :|: z >= 0 sum#2(z, z') -{ 2 }-> sum#3(#eq(z', 1 + (1 + 0)), z') :|: z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 2 }-> sum#4(#eq(z', 1 + (1 + (1 + 0)))) :|: z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {#natdiv}, {#eq}, {#less}, {#sub}, {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natdiv: runtime: ?, size: O(n^1) [1 + z] ---------------------------------------- (115) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: #natdiv after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 0 ---------------------------------------- (116) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + z', s26 >= 0, s26 <= s25 + 2, s27 >= 0, s27 <= s26 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + z', s29 >= 0, s29 <= s28 + 2, s30 >= 0, s30 <= s29 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #eq(z, z') -{ 0 }-> #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #equal(z, z') -{ 1 }-> #eq(z, z') :|: z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(s3, 1 + (1 + (z' - 2))) :|: s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0 #natmult(z, z') -{ 0 }-> s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> s24 :|: s24 >= 0, s24 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 2 }-> add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 1 }-> bitToInt'(z, 0) :|: z >= 0 bitToInt(z) -{ 2 }-> bitToInt'(z, 1 + (1 + 0)) :|: z >= 0 bitToInt'(z, z') -{ 1 }-> bitToInt'#1(z, z') :|: z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 3 }-> plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 2 }-> compare#4(#eq(z, 0), z, z', z'') :|: z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 2 }-> compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 1 }-> minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 3 }-> 1 + mod(plus(s31, z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: s31 >= 0, s31 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> #div(z, z') :|: z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> #sub(z, z') :|: z >= 0, z' >= 0 mod(z, z') -{ 2 }-> minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(#eq(z'', 1 + (1 + 0)), z', z) :|: z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> s20 :|: s20 >= 0, s20 <= 2 * z + z', z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 2 }-> sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 2 }-> 1 + sub'#5(#eq(@s, 1 + (1 + 0)), z', @zs) + @s :|: z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 2 }-> sum#1(plus(s21, z'')) :|: s21 >= 0, s21 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 2 }-> sum#2(#eq(z, 0), z) :|: z >= 0 sum#2(z, z') -{ 2 }-> sum#3(#eq(z', 1 + (1 + 0)), z') :|: z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 2 }-> sum#4(#eq(z', 1 + (1 + (1 + 0)))) :|: z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {#eq}, {#less}, {#sub}, {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] ---------------------------------------- (117) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (118) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + z', s26 >= 0, s26 <= s25 + 2, s27 >= 0, s27 <= s26 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + z', s29 >= 0, s29 <= s28 + 2, s30 >= 0, s30 <= s29 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + s32 :|: s32 >= 0, s32 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #eq(z, z') -{ 0 }-> #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #equal(z, z') -{ 1 }-> #eq(z, z') :|: z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + s33 :|: s33 >= 0, s33 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + s34 :|: s34 >= 0, s34 <= s3 + 1, s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + s35 :|: s35 >= 0, s35 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> s24 :|: s24 >= 0, s24 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 2 }-> add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 1 }-> bitToInt'(z, 0) :|: z >= 0 bitToInt(z) -{ 2 }-> bitToInt'(z, 1 + (1 + 0)) :|: z >= 0 bitToInt'(z, z') -{ 1 }-> bitToInt'#1(z, z') :|: z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 3 }-> plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 2 }-> compare#4(#eq(z, 0), z, z', z'') :|: z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 2 }-> compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 1 }-> minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 3 }-> 1 + mod(plus(s31, z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: s31 >= 0, s31 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> #div(z, z') :|: z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> #sub(z, z') :|: z >= 0, z' >= 0 mod(z, z') -{ 2 }-> minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(#eq(z'', 1 + (1 + 0)), z', z) :|: z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> s20 :|: s20 >= 0, s20 <= 2 * z + z', z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 2 }-> sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 2 }-> 1 + sub'#5(#eq(@s, 1 + (1 + 0)), z', @zs) + @s :|: z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 2 }-> sum#1(plus(s21, z'')) :|: s21 >= 0, s21 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 2 }-> sum#2(#eq(z, 0), z) :|: z >= 0 sum#2(z, z') -{ 2 }-> sum#3(#eq(z', 1 + (1 + 0)), z') :|: z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 2 }-> sum#4(#eq(z', 1 + (1 + (1 + 0)))) :|: z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {#eq}, {#less}, {#sub}, {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] ---------------------------------------- (119) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: #eq after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 2 ---------------------------------------- (120) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + z', s26 >= 0, s26 <= s25 + 2, s27 >= 0, s27 <= s26 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + z', s29 >= 0, s29 <= s28 + 2, s30 >= 0, s30 <= s29 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + s32 :|: s32 >= 0, s32 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #eq(z, z') -{ 0 }-> #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #equal(z, z') -{ 1 }-> #eq(z, z') :|: z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + s33 :|: s33 >= 0, s33 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + s34 :|: s34 >= 0, s34 <= s3 + 1, s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + s35 :|: s35 >= 0, s35 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> s24 :|: s24 >= 0, s24 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 2 }-> add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 1 }-> bitToInt'(z, 0) :|: z >= 0 bitToInt(z) -{ 2 }-> bitToInt'(z, 1 + (1 + 0)) :|: z >= 0 bitToInt'(z, z') -{ 1 }-> bitToInt'#1(z, z') :|: z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 3 }-> plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 2 }-> compare#4(#eq(z, 0), z, z', z'') :|: z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 2 }-> compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 1 }-> minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 3 }-> 1 + mod(plus(s31, z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: s31 >= 0, s31 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> #div(z, z') :|: z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> #sub(z, z') :|: z >= 0, z' >= 0 mod(z, z') -{ 2 }-> minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(#eq(z'', 1 + (1 + 0)), z', z) :|: z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> s20 :|: s20 >= 0, s20 <= 2 * z + z', z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 2 }-> sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 2 }-> 1 + sub'#5(#eq(@s, 1 + (1 + 0)), z', @zs) + @s :|: z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 2 }-> sum#1(plus(s21, z'')) :|: s21 >= 0, s21 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 2 }-> sum#2(#eq(z, 0), z) :|: z >= 0 sum#2(z, z') -{ 2 }-> sum#3(#eq(z', 1 + (1 + 0)), z') :|: z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 2 }-> sum#4(#eq(z', 1 + (1 + (1 + 0)))) :|: z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {#eq}, {#less}, {#sub}, {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] #eq: runtime: ?, size: O(1) [2] ---------------------------------------- (121) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: #eq after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 0 ---------------------------------------- (122) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + z', s26 >= 0, s26 <= s25 + 2, s27 >= 0, s27 <= s26 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + z', s29 >= 0, s29 <= s28 + 2, s30 >= 0, s30 <= s29 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + s32 :|: s32 >= 0, s32 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #eq(z, z') -{ 0 }-> #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #equal(z, z') -{ 1 }-> #eq(z, z') :|: z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + s33 :|: s33 >= 0, s33 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + s34 :|: s34 >= 0, s34 <= s3 + 1, s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + s35 :|: s35 >= 0, s35 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> s24 :|: s24 >= 0, s24 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 2 }-> add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 1 }-> bitToInt'(z, 0) :|: z >= 0 bitToInt(z) -{ 2 }-> bitToInt'(z, 1 + (1 + 0)) :|: z >= 0 bitToInt'(z, z') -{ 1 }-> bitToInt'#1(z, z') :|: z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 3 }-> plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 2 }-> compare#4(#eq(z, 0), z, z', z'') :|: z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 2 }-> compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 1 }-> minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 3 }-> 1 + mod(plus(s31, z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: s31 >= 0, s31 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> #div(z, z') :|: z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> #sub(z, z') :|: z >= 0, z' >= 0 mod(z, z') -{ 2 }-> minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(#eq(z'', 1 + (1 + 0)), z', z) :|: z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> s20 :|: s20 >= 0, s20 <= 2 * z + z', z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 2 }-> sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 2 }-> 1 + sub'#5(#eq(@s, 1 + (1 + 0)), z', @zs) + @s :|: z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 2 }-> sum#1(plus(s21, z'')) :|: s21 >= 0, s21 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 2 }-> sum#2(#eq(z, 0), z) :|: z >= 0 sum#2(z, z') -{ 2 }-> sum#3(#eq(z', 1 + (1 + 0)), z') :|: z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 2 }-> sum#4(#eq(z', 1 + (1 + (1 + 0)))) :|: z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {#less}, {#sub}, {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] #eq: runtime: O(1) [0], size: O(1) [2] ---------------------------------------- (123) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (124) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + z', s26 >= 0, s26 <= s25 + 2, s27 >= 0, s27 <= s26 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + z', s29 >= 0, s29 <= s28 + 2, s30 >= 0, s30 <= s29 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + s32 :|: s32 >= 0, s32 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #equal(z, z') -{ 1 }-> s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + s33 :|: s33 >= 0, s33 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + s34 :|: s34 >= 0, s34 <= s3 + 1, s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + s35 :|: s35 >= 0, s35 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> s24 :|: s24 >= 0, s24 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 2 }-> add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 1 }-> bitToInt'(z, 0) :|: z >= 0 bitToInt(z) -{ 2 }-> bitToInt'(z, 1 + (1 + 0)) :|: z >= 0 bitToInt'(z, z') -{ 1 }-> bitToInt'#1(z, z') :|: z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 3 }-> plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 2 }-> compare#4(s37, z, z', z'') :|: s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 2 }-> compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 1 }-> minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 3 }-> 1 + mod(plus(s31, z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: s31 >= 0, s31 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> #div(z, z') :|: z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> #sub(z, z') :|: z >= 0, z' >= 0 mod(z, z') -{ 2 }-> minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> s20 :|: s20 >= 0, s20 <= 2 * z + z', z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 2 }-> sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 4 }-> 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= z' + @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 2 }-> sum#1(plus(s21, z'')) :|: s21 >= 0, s21 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 2 }-> sum#2(s39, z) :|: s39 >= 0, s39 <= 2, z >= 0 sum#2(z, z') -{ 2 }-> sum#3(s40, z') :|: s40 >= 0, s40 <= 2, z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 5 }-> s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {#less}, {#sub}, {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] #eq: runtime: O(1) [0], size: O(1) [2] ---------------------------------------- (125) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: #less after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 2 ---------------------------------------- (126) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + z', s26 >= 0, s26 <= s25 + 2, s27 >= 0, s27 <= s26 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + z', s29 >= 0, s29 <= s28 + 2, s30 >= 0, s30 <= s29 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + s32 :|: s32 >= 0, s32 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #equal(z, z') -{ 1 }-> s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + s33 :|: s33 >= 0, s33 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + s34 :|: s34 >= 0, s34 <= s3 + 1, s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + s35 :|: s35 >= 0, s35 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> s24 :|: s24 >= 0, s24 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 2 }-> add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 1 }-> bitToInt'(z, 0) :|: z >= 0 bitToInt(z) -{ 2 }-> bitToInt'(z, 1 + (1 + 0)) :|: z >= 0 bitToInt'(z, z') -{ 1 }-> bitToInt'#1(z, z') :|: z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 3 }-> plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 2 }-> compare#4(s37, z, z', z'') :|: s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 2 }-> compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 1 }-> minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 3 }-> 1 + mod(plus(s31, z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: s31 >= 0, s31 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> #div(z, z') :|: z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> #sub(z, z') :|: z >= 0, z' >= 0 mod(z, z') -{ 2 }-> minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> s20 :|: s20 >= 0, s20 <= 2 * z + z', z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 2 }-> sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 4 }-> 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= z' + @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 2 }-> sum#1(plus(s21, z'')) :|: s21 >= 0, s21 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 2 }-> sum#2(s39, z) :|: s39 >= 0, s39 <= 2, z >= 0 sum#2(z, z') -{ 2 }-> sum#3(s40, z') :|: s40 >= 0, s40 <= 2, z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 5 }-> s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {#less}, {#sub}, {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] #eq: runtime: O(1) [0], size: O(1) [2] #less: runtime: ?, size: O(1) [2] ---------------------------------------- (127) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: #less after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 1 ---------------------------------------- (128) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + z', s26 >= 0, s26 <= s25 + 2, s27 >= 0, s27 <= s26 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + z', s29 >= 0, s29 <= s28 + 2, s30 >= 0, s30 <= s29 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + s32 :|: s32 >= 0, s32 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #equal(z, z') -{ 1 }-> s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + s33 :|: s33 >= 0, s33 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + s34 :|: s34 >= 0, s34 <= s3 + 1, s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + s35 :|: s35 >= 0, s35 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> s24 :|: s24 >= 0, s24 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 2 }-> add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 1 }-> bitToInt'(z, 0) :|: z >= 0 bitToInt(z) -{ 2 }-> bitToInt'(z, 1 + (1 + 0)) :|: z >= 0 bitToInt'(z, z') -{ 1 }-> bitToInt'#1(z, z') :|: z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 3 }-> plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 2 }-> compare#4(s37, z, z', z'') :|: s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 2 }-> compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 1 }-> minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 3 }-> 1 + mod(plus(s31, z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: s31 >= 0, s31 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> #div(z, z') :|: z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> #sub(z, z') :|: z >= 0, z' >= 0 mod(z, z') -{ 2 }-> minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> s20 :|: s20 >= 0, s20 <= 2 * z + z', z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 2 }-> sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 4 }-> 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= z' + @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 2 }-> sum#1(plus(s21, z'')) :|: s21 >= 0, s21 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 2 }-> sum#2(s39, z) :|: s39 >= 0, s39 <= 2, z >= 0 sum#2(z, z') -{ 2 }-> sum#3(s40, z') :|: s40 >= 0, s40 <= 2, z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 5 }-> s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {#sub}, {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] #eq: runtime: O(1) [0], size: O(1) [2] #less: runtime: O(1) [1], size: O(1) [2] ---------------------------------------- (129) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (130) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + z', s26 >= 0, s26 <= s25 + 2, s27 >= 0, s27 <= s26 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + z', s29 >= 0, s29 <= s28 + 2, s30 >= 0, s30 <= s29 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + s32 :|: s32 >= 0, s32 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #equal(z, z') -{ 1 }-> s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + s33 :|: s33 >= 0, s33 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + s34 :|: s34 >= 0, s34 <= s3 + 1, s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + s35 :|: s35 >= 0, s35 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> s24 :|: s24 >= 0, s24 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 2 }-> add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 1 }-> bitToInt'(z, 0) :|: z >= 0 bitToInt(z) -{ 2 }-> bitToInt'(z, 1 + (1 + 0)) :|: z >= 0 bitToInt'(z, z') -{ 1 }-> bitToInt'#1(z, z') :|: z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 3 }-> plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 2 }-> compare#4(s37, z, z', z'') :|: s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 2 }-> compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 1 }-> minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 3 }-> 1 + mod(plus(s31, z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: s31 >= 0, s31 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> #div(z, z') :|: z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> #sub(z, z') :|: z >= 0, z' >= 0 mod(z, z') -{ 2 }-> minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> s20 :|: s20 >= 0, s20 <= 2 * z + z', z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 2 }-> sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 4 }-> 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= z' + @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 2 }-> sum#1(plus(s21, z'')) :|: s21 >= 0, s21 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 2 }-> sum#2(s39, z) :|: s39 >= 0, s39 <= 2, z >= 0 sum#2(z, z') -{ 2 }-> sum#3(s40, z') :|: s40 >= 0, s40 <= 2, z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 5 }-> s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {#sub}, {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] #eq: runtime: O(1) [0], size: O(1) [2] #less: runtime: O(1) [1], size: O(1) [2] ---------------------------------------- (131) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: #sub after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 2*z + z' ---------------------------------------- (132) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + z', s26 >= 0, s26 <= s25 + 2, s27 >= 0, s27 <= s26 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + z', s29 >= 0, s29 <= s28 + 2, s30 >= 0, s30 <= s29 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + s32 :|: s32 >= 0, s32 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #equal(z, z') -{ 1 }-> s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + s33 :|: s33 >= 0, s33 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + s34 :|: s34 >= 0, s34 <= s3 + 1, s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + s35 :|: s35 >= 0, s35 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> s24 :|: s24 >= 0, s24 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 2 }-> add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 1 }-> bitToInt'(z, 0) :|: z >= 0 bitToInt(z) -{ 2 }-> bitToInt'(z, 1 + (1 + 0)) :|: z >= 0 bitToInt'(z, z') -{ 1 }-> bitToInt'#1(z, z') :|: z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 3 }-> plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 2 }-> compare#4(s37, z, z', z'') :|: s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 2 }-> compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 1 }-> minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 3 }-> 1 + mod(plus(s31, z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: s31 >= 0, s31 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> #div(z, z') :|: z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> #sub(z, z') :|: z >= 0, z' >= 0 mod(z, z') -{ 2 }-> minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> s20 :|: s20 >= 0, s20 <= 2 * z + z', z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 2 }-> sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 4 }-> 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= z' + @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 2 }-> sum#1(plus(s21, z'')) :|: s21 >= 0, s21 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 2 }-> sum#2(s39, z) :|: s39 >= 0, s39 <= 2, z >= 0 sum#2(z, z') -{ 2 }-> sum#3(s40, z') :|: s40 >= 0, s40 <= 2, z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 5 }-> s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {#sub}, {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] #eq: runtime: O(1) [0], size: O(1) [2] #less: runtime: O(1) [1], size: O(1) [2] #sub: runtime: ?, size: O(n^1) [2*z + z'] ---------------------------------------- (133) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: #sub after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 0 ---------------------------------------- (134) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + z', s26 >= 0, s26 <= s25 + 2, s27 >= 0, s27 <= s26 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + z', s29 >= 0, s29 <= s28 + 2, s30 >= 0, s30 <= s29 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + s32 :|: s32 >= 0, s32 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #equal(z, z') -{ 1 }-> s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + s33 :|: s33 >= 0, s33 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + s34 :|: s34 >= 0, s34 <= s3 + 1, s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + s35 :|: s35 >= 0, s35 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> s24 :|: s24 >= 0, s24 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 2 }-> add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 1 }-> bitToInt'(z, 0) :|: z >= 0 bitToInt(z) -{ 2 }-> bitToInt'(z, 1 + (1 + 0)) :|: z >= 0 bitToInt'(z, z') -{ 1 }-> bitToInt'#1(z, z') :|: z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 3 }-> plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 2 }-> compare#4(s37, z, z', z'') :|: s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 2 }-> compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 1 }-> minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 3 }-> 1 + mod(plus(s31, z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: s31 >= 0, s31 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> #div(z, z') :|: z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> #sub(z, z') :|: z >= 0, z' >= 0 mod(z, z') -{ 2 }-> minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> s20 :|: s20 >= 0, s20 <= 2 * z + z', z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 2 }-> sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 4 }-> 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= z' + @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 2 }-> sum#1(plus(s21, z'')) :|: s21 >= 0, s21 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 2 }-> sum#2(s39, z) :|: s39 >= 0, s39 <= 2, z >= 0 sum#2(z, z') -{ 2 }-> sum#3(s40, z') :|: s40 >= 0, s40 <= 2, z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 5 }-> s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] #eq: runtime: O(1) [0], size: O(1) [2] #less: runtime: O(1) [1], size: O(1) [2] #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] ---------------------------------------- (135) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (136) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + z', s26 >= 0, s26 <= s25 + 2, s27 >= 0, s27 <= s26 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + z', s29 >= 0, s29 <= s28 + 2, s30 >= 0, s30 <= s29 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + s32 :|: s32 >= 0, s32 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #equal(z, z') -{ 1 }-> s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + s33 :|: s33 >= 0, s33 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + s34 :|: s34 >= 0, s34 <= s3 + 1, s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + s35 :|: s35 >= 0, s35 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> s24 :|: s24 >= 0, s24 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 2 }-> add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 1 }-> bitToInt'(z, 0) :|: z >= 0 bitToInt(z) -{ 2 }-> bitToInt'(z, 1 + (1 + 0)) :|: z >= 0 bitToInt'(z, z') -{ 1 }-> bitToInt'#1(z, z') :|: z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 3 }-> plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 2 }-> compare#4(s37, z, z', z'') :|: s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 2 }-> compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 1 }-> minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 3 }-> 1 + mod(plus(s31, z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(s50, z''), 0)) :|: s50 >= 0, s50 <= 2 * z + z', s31 >= 0, s31 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> #div(z, z') :|: z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> s49 :|: s49 >= 0, s49 <= 2 * z + z', z >= 0, z' >= 0 mod(z, z') -{ 2 }-> minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> s20 :|: s20 >= 0, s20 <= 2 * z + z', z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 2 }-> sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 4 }-> 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= z' + @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 2 }-> sum#1(plus(s21, z'')) :|: s21 >= 0, s21 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 2 }-> sum#2(s39, z) :|: s39 >= 0, s39 <= 2, z >= 0 sum#2(z, z') -{ 2 }-> sum#3(s40, z') :|: s40 >= 0, s40 <= 2, z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 5 }-> s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] #eq: runtime: O(1) [0], size: O(1) [2] #less: runtime: O(1) [1], size: O(1) [2] #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] ---------------------------------------- (137) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using KoAT for: #natmult after applying outer abstraction to obtain an ITS, resulting in: O(n^2) with polynomial bound: 4 + 4*z + 4*z*z' + 4*z' ---------------------------------------- (138) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + z', s26 >= 0, s26 <= s25 + 2, s27 >= 0, s27 <= s26 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + z', s29 >= 0, s29 <= s28 + 2, s30 >= 0, s30 <= s29 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + s32 :|: s32 >= 0, s32 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #equal(z, z') -{ 1 }-> s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + s33 :|: s33 >= 0, s33 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + s34 :|: s34 >= 0, s34 <= s3 + 1, s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + s35 :|: s35 >= 0, s35 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> s24 :|: s24 >= 0, s24 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 2 }-> add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 1 }-> bitToInt'(z, 0) :|: z >= 0 bitToInt(z) -{ 2 }-> bitToInt'(z, 1 + (1 + 0)) :|: z >= 0 bitToInt'(z, z') -{ 1 }-> bitToInt'#1(z, z') :|: z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 3 }-> plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 2 }-> compare#4(s37, z, z', z'') :|: s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 2 }-> compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 1 }-> minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 3 }-> 1 + mod(plus(s31, z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(s50, z''), 0)) :|: s50 >= 0, s50 <= 2 * z + z', s31 >= 0, s31 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> #div(z, z') :|: z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> s49 :|: s49 >= 0, s49 <= 2 * z + z', z >= 0, z' >= 0 mod(z, z') -{ 2 }-> minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> s20 :|: s20 >= 0, s20 <= 2 * z + z', z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 2 }-> sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 4 }-> 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= z' + @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 2 }-> sum#1(plus(s21, z'')) :|: s21 >= 0, s21 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 2 }-> sum#2(s39, z) :|: s39 >= 0, s39 <= 2, z >= 0 sum#2(z, z') -{ 2 }-> sum#3(s40, z') :|: s40 >= 0, s40 <= 2, z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 5 }-> s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] #eq: runtime: O(1) [0], size: O(1) [2] #less: runtime: O(1) [1], size: O(1) [2] #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: ?, size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] ---------------------------------------- (139) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: #natmult after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 0 ---------------------------------------- (140) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + z', s26 >= 0, s26 <= s25 + 2, s27 >= 0, s27 <= s26 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + z', s29 >= 0, s29 <= s28 + 2, s30 >= 0, s30 <= s29 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + s32 :|: s32 >= 0, s32 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #equal(z, z') -{ 1 }-> s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + s33 :|: s33 >= 0, s33 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + s34 :|: s34 >= 0, s34 <= s3 + 1, s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + s35 :|: s35 >= 0, s35 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> s24 :|: s24 >= 0, s24 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 2 }-> add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 1 }-> bitToInt'(z, 0) :|: z >= 0 bitToInt(z) -{ 2 }-> bitToInt'(z, 1 + (1 + 0)) :|: z >= 0 bitToInt'(z, z') -{ 1 }-> bitToInt'#1(z, z') :|: z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 3 }-> plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 2 }-> compare#4(s37, z, z', z'') :|: s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 2 }-> compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 1 }-> minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 3 }-> 1 + mod(plus(s31, z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(s50, z''), 0)) :|: s50 >= 0, s50 <= 2 * z + z', s31 >= 0, s31 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> #div(z, z') :|: z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> s49 :|: s49 >= 0, s49 <= 2 * z + z', z >= 0, z' >= 0 mod(z, z') -{ 2 }-> minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> s20 :|: s20 >= 0, s20 <= 2 * z + z', z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 2 }-> sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 4 }-> 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= z' + @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 2 }-> sum#1(plus(s21, z'')) :|: s21 >= 0, s21 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 2 }-> sum#2(s39, z) :|: s39 >= 0, s39 <= 2, z >= 0 sum#2(z, z') -{ 2 }-> sum#3(s40, z') :|: s40 >= 0, s40 <= 2, z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 5 }-> s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] #eq: runtime: O(1) [0], size: O(1) [2] #less: runtime: O(1) [1], size: O(1) [2] #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] ---------------------------------------- (141) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (142) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + z', s26 >= 0, s26 <= s25 + 2, s27 >= 0, s27 <= s26 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + z', s29 >= 0, s29 <= s28 + 2, s30 >= 0, s30 <= s29 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + s32 :|: s32 >= 0, s32 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #equal(z, z') -{ 1 }-> s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s51 :|: s51 >= 0, s51 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + s33 :|: s33 >= 0, s33 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + s34 :|: s34 >= 0, s34 <= s3 + 1, s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + s35 :|: s35 >= 0, s35 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s54 :|: s52 >= 0, s52 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s53 >= 0, s53 <= 2 * (1 + z') + s52, s54 >= 0, s54 <= 2 * (1 + z') + s53, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> s24 :|: s24 >= 0, s24 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 2 }-> add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 1 }-> bitToInt'(z, 0) :|: z >= 0 bitToInt(z) -{ 2 }-> bitToInt'(z, 1 + (1 + 0)) :|: z >= 0 bitToInt'(z, z') -{ 1 }-> bitToInt'#1(z, z') :|: z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 3 }-> plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 2 }-> compare#4(s37, z, z', z'') :|: s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 2 }-> compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 1 }-> minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 3 }-> 1 + mod(plus(s31, z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(s50, z''), 0)) :|: s50 >= 0, s50 <= 2 * z + z', s31 >= 0, s31 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> #div(z, z') :|: z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> s49 :|: s49 >= 0, s49 <= 2 * z + z', z >= 0, z' >= 0 mod(z, z') -{ 2 }-> minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> s20 :|: s20 >= 0, s20 <= 2 * z + z', z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 2 }-> sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 4 }-> 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= z' + @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 2 }-> sum#1(plus(s21, z'')) :|: s21 >= 0, s21 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 2 }-> sum#2(s39, z) :|: s39 >= 0, s39 <= 2, z >= 0 sum#2(z, z') -{ 2 }-> sum#3(s40, z') :|: s40 >= 0, s40 <= 2, z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 5 }-> s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] #eq: runtime: O(1) [0], size: O(1) [2] #less: runtime: O(1) [1], size: O(1) [2] #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] ---------------------------------------- (143) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: plus after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 2*z + z' ---------------------------------------- (144) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + z', s26 >= 0, s26 <= s25 + 2, s27 >= 0, s27 <= s26 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + z', s29 >= 0, s29 <= s28 + 2, s30 >= 0, s30 <= s29 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + s32 :|: s32 >= 0, s32 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #equal(z, z') -{ 1 }-> s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s51 :|: s51 >= 0, s51 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + s33 :|: s33 >= 0, s33 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + s34 :|: s34 >= 0, s34 <= s3 + 1, s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + s35 :|: s35 >= 0, s35 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s54 :|: s52 >= 0, s52 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s53 >= 0, s53 <= 2 * (1 + z') + s52, s54 >= 0, s54 <= 2 * (1 + z') + s53, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> s24 :|: s24 >= 0, s24 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 2 }-> add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 1 }-> bitToInt'(z, 0) :|: z >= 0 bitToInt(z) -{ 2 }-> bitToInt'(z, 1 + (1 + 0)) :|: z >= 0 bitToInt'(z, z') -{ 1 }-> bitToInt'#1(z, z') :|: z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 3 }-> plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 2 }-> compare#4(s37, z, z', z'') :|: s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 2 }-> compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 1 }-> minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 3 }-> 1 + mod(plus(s31, z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(s50, z''), 0)) :|: s50 >= 0, s50 <= 2 * z + z', s31 >= 0, s31 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> #div(z, z') :|: z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> s49 :|: s49 >= 0, s49 <= 2 * z + z', z >= 0, z' >= 0 mod(z, z') -{ 2 }-> minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> s20 :|: s20 >= 0, s20 <= 2 * z + z', z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 2 }-> sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 4 }-> 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= z' + @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 2 }-> sum#1(plus(s21, z'')) :|: s21 >= 0, s21 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 2 }-> sum#2(s39, z) :|: s39 >= 0, s39 <= 2, z >= 0 sum#2(z, z') -{ 2 }-> sum#3(s40, z') :|: s40 >= 0, s40 <= 2, z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 5 }-> s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] #eq: runtime: O(1) [0], size: O(1) [2] #less: runtime: O(1) [1], size: O(1) [2] #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: ?, size: O(n^1) [2*z + z'] ---------------------------------------- (145) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: plus after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 1 ---------------------------------------- (146) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + z', s26 >= 0, s26 <= s25 + 2, s27 >= 0, s27 <= s26 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + z', s29 >= 0, s29 <= s28 + 2, s30 >= 0, s30 <= s29 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + s32 :|: s32 >= 0, s32 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #equal(z, z') -{ 1 }-> s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s51 :|: s51 >= 0, s51 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + s33 :|: s33 >= 0, s33 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + s34 :|: s34 >= 0, s34 <= s3 + 1, s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + s35 :|: s35 >= 0, s35 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s54 :|: s52 >= 0, s52 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s53 >= 0, s53 <= 2 * (1 + z') + s52, s54 >= 0, s54 <= 2 * (1 + z') + s53, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> s24 :|: s24 >= 0, s24 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 2 }-> add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 1 }-> bitToInt'(z, 0) :|: z >= 0 bitToInt(z) -{ 2 }-> bitToInt'(z, 1 + (1 + 0)) :|: z >= 0 bitToInt'(z, z') -{ 1 }-> bitToInt'#1(z, z') :|: z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 3 }-> plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 2 }-> compare#4(s37, z, z', z'') :|: s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 2 }-> compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 1 }-> minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 3 }-> 1 + mod(plus(s31, z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(s50, z''), 0)) :|: s50 >= 0, s50 <= 2 * z + z', s31 >= 0, s31 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> #div(z, z') :|: z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> s49 :|: s49 >= 0, s49 <= 2 * z + z', z >= 0, z' >= 0 mod(z, z') -{ 2 }-> minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> s20 :|: s20 >= 0, s20 <= 2 * z + z', z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 2 }-> sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 4 }-> 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= z' + @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 2 }-> sum#1(plus(s21, z'')) :|: s21 >= 0, s21 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 2 }-> sum#2(s39, z) :|: s39 >= 0, s39 <= 2, z >= 0 sum#2(z, z') -{ 2 }-> sum#3(s40, z') :|: s40 >= 0, s40 <= 2, z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 5 }-> s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] #eq: runtime: O(1) [0], size: O(1) [2] #less: runtime: O(1) [1], size: O(1) [2] #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] ---------------------------------------- (147) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (148) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + z', s26 >= 0, s26 <= s25 + 2, s27 >= 0, s27 <= s26 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + z', s29 >= 0, s29 <= s28 + 2, s30 >= 0, s30 <= s29 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + s32 :|: s32 >= 0, s32 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #equal(z, z') -{ 1 }-> s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s51 :|: s51 >= 0, s51 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + s33 :|: s33 >= 0, s33 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + s34 :|: s34 >= 0, s34 <= s3 + 1, s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + s35 :|: s35 >= 0, s35 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s54 :|: s52 >= 0, s52 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s53 >= 0, s53 <= 2 * (1 + z') + s52, s54 >= 0, s54 <= 2 * (1 + z') + s53, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> s24 :|: s24 >= 0, s24 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 4 }-> add'#3(sum#1(s56), z1, @ys) :|: s55 >= 0, s55 <= 2 * z'' + @y, s56 >= 0, s56 <= 2 * s55 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 1 }-> bitToInt'(z, 0) :|: z >= 0 bitToInt(z) -{ 2 }-> bitToInt'(z, 1 + (1 + 0)) :|: z >= 0 bitToInt'(z, z') -{ 1 }-> bitToInt'#1(z, z') :|: z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 3 }-> plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 2 }-> compare#4(s37, z, z', z'') :|: s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 2 }-> compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 1 }-> minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 4 }-> 1 + mod(s58, 1 + (1 + (1 + 0))) + diff#1(#less(minus(s50, z''), 0)) :|: s58 >= 0, s58 <= 2 * s31 + z'', s50 >= 0, s50 <= 2 * z + z', s31 >= 0, s31 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> #div(z, z') :|: z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> s49 :|: s49 >= 0, s49 <= 2 * z + z', z >= 0, z' >= 0 mod(z, z') -{ 2 }-> minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> s20 :|: s20 >= 0, s20 <= 2 * z + z', z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 4 }-> sub'#3(1 + mod(s60, 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: s59 >= 0, s59 <= 2 * z'' + @y, s60 >= 0, s60 <= 2 * s59 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 4 }-> 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= z' + @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 3 }-> sum#1(s57) :|: s57 >= 0, s57 <= 2 * s21 + z'', s21 >= 0, s21 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 2 }-> sum#2(s39, z) :|: s39 >= 0, s39 <= 2, z >= 0 sum#2(z, z') -{ 2 }-> sum#3(s40, z') :|: s40 >= 0, s40 <= 2, z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 5 }-> s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] #eq: runtime: O(1) [0], size: O(1) [2] #less: runtime: O(1) [1], size: O(1) [2] #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] ---------------------------------------- (149) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: #div after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 1 + z ---------------------------------------- (150) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + z', s26 >= 0, s26 <= s25 + 2, s27 >= 0, s27 <= s26 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + z', s29 >= 0, s29 <= s28 + 2, s30 >= 0, s30 <= s29 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + s32 :|: s32 >= 0, s32 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #equal(z, z') -{ 1 }-> s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s51 :|: s51 >= 0, s51 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + s33 :|: s33 >= 0, s33 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + s34 :|: s34 >= 0, s34 <= s3 + 1, s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + s35 :|: s35 >= 0, s35 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s54 :|: s52 >= 0, s52 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s53 >= 0, s53 <= 2 * (1 + z') + s52, s54 >= 0, s54 <= 2 * (1 + z') + s53, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> s24 :|: s24 >= 0, s24 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 4 }-> add'#3(sum#1(s56), z1, @ys) :|: s55 >= 0, s55 <= 2 * z'' + @y, s56 >= 0, s56 <= 2 * s55 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 1 }-> bitToInt'(z, 0) :|: z >= 0 bitToInt(z) -{ 2 }-> bitToInt'(z, 1 + (1 + 0)) :|: z >= 0 bitToInt'(z, z') -{ 1 }-> bitToInt'#1(z, z') :|: z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 3 }-> plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 2 }-> compare#4(s37, z, z', z'') :|: s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 2 }-> compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 1 }-> minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 4 }-> 1 + mod(s58, 1 + (1 + (1 + 0))) + diff#1(#less(minus(s50, z''), 0)) :|: s58 >= 0, s58 <= 2 * s31 + z'', s50 >= 0, s50 <= 2 * z + z', s31 >= 0, s31 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> #div(z, z') :|: z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> s49 :|: s49 >= 0, s49 <= 2 * z + z', z >= 0, z' >= 0 mod(z, z') -{ 2 }-> minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> s20 :|: s20 >= 0, s20 <= 2 * z + z', z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 4 }-> sub'#3(1 + mod(s60, 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: s59 >= 0, s59 <= 2 * z'' + @y, s60 >= 0, s60 <= 2 * s59 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 4 }-> 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= z' + @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 3 }-> sum#1(s57) :|: s57 >= 0, s57 <= 2 * s21 + z'', s21 >= 0, s21 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 2 }-> sum#2(s39, z) :|: s39 >= 0, s39 <= 2, z >= 0 sum#2(z, z') -{ 2 }-> sum#3(s40, z') :|: s40 >= 0, s40 <= 2, z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 5 }-> s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] #eq: runtime: O(1) [0], size: O(1) [2] #less: runtime: O(1) [1], size: O(1) [2] #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #div: runtime: ?, size: O(n^1) [1 + z] ---------------------------------------- (151) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: #div after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 0 ---------------------------------------- (152) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + z', s26 >= 0, s26 <= s25 + 2, s27 >= 0, s27 <= s26 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + z', s29 >= 0, s29 <= s28 + 2, s30 >= 0, s30 <= s29 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + s32 :|: s32 >= 0, s32 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #equal(z, z') -{ 1 }-> s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s51 :|: s51 >= 0, s51 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + s33 :|: s33 >= 0, s33 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + s34 :|: s34 >= 0, s34 <= s3 + 1, s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + s35 :|: s35 >= 0, s35 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s54 :|: s52 >= 0, s52 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s53 >= 0, s53 <= 2 * (1 + z') + s52, s54 >= 0, s54 <= 2 * (1 + z') + s53, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> s24 :|: s24 >= 0, s24 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 4 }-> add'#3(sum#1(s56), z1, @ys) :|: s55 >= 0, s55 <= 2 * z'' + @y, s56 >= 0, s56 <= 2 * s55 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 1 }-> bitToInt'(z, 0) :|: z >= 0 bitToInt(z) -{ 2 }-> bitToInt'(z, 1 + (1 + 0)) :|: z >= 0 bitToInt'(z, z') -{ 1 }-> bitToInt'#1(z, z') :|: z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 3 }-> plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 2 }-> compare#4(s37, z, z', z'') :|: s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 2 }-> compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 1 }-> minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 4 }-> 1 + mod(s58, 1 + (1 + (1 + 0))) + diff#1(#less(minus(s50, z''), 0)) :|: s58 >= 0, s58 <= 2 * s31 + z'', s50 >= 0, s50 <= 2 * z + z', s31 >= 0, s31 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> #div(z, z') :|: z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> s49 :|: s49 >= 0, s49 <= 2 * z + z', z >= 0, z' >= 0 mod(z, z') -{ 2 }-> minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> s20 :|: s20 >= 0, s20 <= 2 * z + z', z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 4 }-> sub'#3(1 + mod(s60, 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: s59 >= 0, s59 <= 2 * z'' + @y, s60 >= 0, s60 <= 2 * s59 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 4 }-> 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= z' + @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 3 }-> sum#1(s57) :|: s57 >= 0, s57 <= 2 * s21 + z'', s21 >= 0, s21 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 2 }-> sum#2(s39, z) :|: s39 >= 0, s39 <= 2, z >= 0 sum#2(z, z') -{ 2 }-> sum#3(s40, z') :|: s40 >= 0, s40 <= 2, z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 5 }-> s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] #eq: runtime: O(1) [0], size: O(1) [2] #less: runtime: O(1) [1], size: O(1) [2] #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #div: runtime: O(1) [0], size: O(n^1) [1 + z] ---------------------------------------- (153) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (154) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + z', s26 >= 0, s26 <= s25 + 2, s27 >= 0, s27 <= s26 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + z', s29 >= 0, s29 <= s28 + 2, s30 >= 0, s30 <= s29 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + s32 :|: s32 >= 0, s32 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #equal(z, z') -{ 1 }-> s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s51 :|: s51 >= 0, s51 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + s33 :|: s33 >= 0, s33 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + s34 :|: s34 >= 0, s34 <= s3 + 1, s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + s35 :|: s35 >= 0, s35 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s54 :|: s52 >= 0, s52 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s53 >= 0, s53 <= 2 * (1 + z') + s52, s54 >= 0, s54 <= 2 * (1 + z') + s53, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> s24 :|: s24 >= 0, s24 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 4 }-> add'#3(sum#1(s56), z1, @ys) :|: s55 >= 0, s55 <= 2 * z'' + @y, s56 >= 0, s56 <= 2 * s55 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 1 }-> bitToInt'(z, 0) :|: z >= 0 bitToInt(z) -{ 2 }-> bitToInt'(z, 1 + (1 + 0)) :|: z >= 0 bitToInt'(z, z') -{ 1 }-> bitToInt'#1(z, z') :|: z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 3 }-> plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 2 }-> compare#4(s37, z, z', z'') :|: s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 2 }-> compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 1 }-> minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 4 }-> 1 + mod(s58, 1 + (1 + (1 + 0))) + diff#1(#less(minus(s50, z''), 0)) :|: s58 >= 0, s58 <= 2 * s31 + z'', s50 >= 0, s50 <= 2 * z + z', s31 >= 0, s31 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> s61 :|: s61 >= 0, s61 <= z + 1, z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> s49 :|: s49 >= 0, s49 <= 2 * z + z', z >= 0, z' >= 0 mod(z, z') -{ 2 }-> minus(z, times(z, s62)) :|: s62 >= 0, s62 <= z + 1, z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> s20 :|: s20 >= 0, s20 <= 2 * z + z', z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 4 }-> sub'#3(1 + mod(s60, 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: s59 >= 0, s59 <= 2 * z'' + @y, s60 >= 0, s60 <= 2 * s59 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 4 }-> 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= z' + @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 3 }-> sum#1(s57) :|: s57 >= 0, s57 <= 2 * s21 + z'', s21 >= 0, s21 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 2 }-> sum#2(s39, z) :|: s39 >= 0, s39 <= 2, z >= 0 sum#2(z, z') -{ 2 }-> sum#3(s40, z') :|: s40 >= 0, s40 <= 2, z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 5 }-> s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] #eq: runtime: O(1) [0], size: O(1) [2] #less: runtime: O(1) [1], size: O(1) [2] #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #div: runtime: O(1) [0], size: O(n^1) [1 + z] ---------------------------------------- (155) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: sum#3 after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 7 ---------------------------------------- (156) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + z', s26 >= 0, s26 <= s25 + 2, s27 >= 0, s27 <= s26 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + z', s29 >= 0, s29 <= s28 + 2, s30 >= 0, s30 <= s29 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + s32 :|: s32 >= 0, s32 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #equal(z, z') -{ 1 }-> s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s51 :|: s51 >= 0, s51 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + s33 :|: s33 >= 0, s33 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + s34 :|: s34 >= 0, s34 <= s3 + 1, s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + s35 :|: s35 >= 0, s35 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s54 :|: s52 >= 0, s52 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s53 >= 0, s53 <= 2 * (1 + z') + s52, s54 >= 0, s54 <= 2 * (1 + z') + s53, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> s24 :|: s24 >= 0, s24 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 4 }-> add'#3(sum#1(s56), z1, @ys) :|: s55 >= 0, s55 <= 2 * z'' + @y, s56 >= 0, s56 <= 2 * s55 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 1 }-> bitToInt'(z, 0) :|: z >= 0 bitToInt(z) -{ 2 }-> bitToInt'(z, 1 + (1 + 0)) :|: z >= 0 bitToInt'(z, z') -{ 1 }-> bitToInt'#1(z, z') :|: z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 3 }-> plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 2 }-> compare#4(s37, z, z', z'') :|: s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 2 }-> compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 1 }-> minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 4 }-> 1 + mod(s58, 1 + (1 + (1 + 0))) + diff#1(#less(minus(s50, z''), 0)) :|: s58 >= 0, s58 <= 2 * s31 + z'', s50 >= 0, s50 <= 2 * z + z', s31 >= 0, s31 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> s61 :|: s61 >= 0, s61 <= z + 1, z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> s49 :|: s49 >= 0, s49 <= 2 * z + z', z >= 0, z' >= 0 mod(z, z') -{ 2 }-> minus(z, times(z, s62)) :|: s62 >= 0, s62 <= z + 1, z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> s20 :|: s20 >= 0, s20 <= 2 * z + z', z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 4 }-> sub'#3(1 + mod(s60, 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: s59 >= 0, s59 <= 2 * z'' + @y, s60 >= 0, s60 <= 2 * s59 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 4 }-> 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= z' + @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 3 }-> sum#1(s57) :|: s57 >= 0, s57 <= 2 * s21 + z'', s21 >= 0, s21 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 2 }-> sum#2(s39, z) :|: s39 >= 0, s39 <= 2, z >= 0 sum#2(z, z') -{ 2 }-> sum#3(s40, z') :|: s40 >= 0, s40 <= 2, z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 5 }-> s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] #eq: runtime: O(1) [0], size: O(1) [2] #less: runtime: O(1) [1], size: O(1) [2] #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #div: runtime: O(1) [0], size: O(n^1) [1 + z] sum#3: runtime: ?, size: O(1) [7] ---------------------------------------- (157) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: sum#3 after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 5 ---------------------------------------- (158) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + z', s26 >= 0, s26 <= s25 + 2, s27 >= 0, s27 <= s26 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + z', s29 >= 0, s29 <= s28 + 2, s30 >= 0, s30 <= s29 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + s32 :|: s32 >= 0, s32 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #equal(z, z') -{ 1 }-> s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s51 :|: s51 >= 0, s51 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + s33 :|: s33 >= 0, s33 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + s34 :|: s34 >= 0, s34 <= s3 + 1, s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + s35 :|: s35 >= 0, s35 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s54 :|: s52 >= 0, s52 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s53 >= 0, s53 <= 2 * (1 + z') + s52, s54 >= 0, s54 <= 2 * (1 + z') + s53, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> s24 :|: s24 >= 0, s24 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 4 }-> add'#3(sum#1(s56), z1, @ys) :|: s55 >= 0, s55 <= 2 * z'' + @y, s56 >= 0, s56 <= 2 * s55 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 1 }-> bitToInt'(z, 0) :|: z >= 0 bitToInt(z) -{ 2 }-> bitToInt'(z, 1 + (1 + 0)) :|: z >= 0 bitToInt'(z, z') -{ 1 }-> bitToInt'#1(z, z') :|: z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 3 }-> plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 2 }-> compare#4(s37, z, z', z'') :|: s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 2 }-> compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 1 }-> minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 4 }-> 1 + mod(s58, 1 + (1 + (1 + 0))) + diff#1(#less(minus(s50, z''), 0)) :|: s58 >= 0, s58 <= 2 * s31 + z'', s50 >= 0, s50 <= 2 * z + z', s31 >= 0, s31 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> s61 :|: s61 >= 0, s61 <= z + 1, z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> s49 :|: s49 >= 0, s49 <= 2 * z + z', z >= 0, z' >= 0 mod(z, z') -{ 2 }-> minus(z, times(z, s62)) :|: s62 >= 0, s62 <= z + 1, z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> s20 :|: s20 >= 0, s20 <= 2 * z + z', z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 4 }-> sub'#3(1 + mod(s60, 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: s59 >= 0, s59 <= 2 * z'' + @y, s60 >= 0, s60 <= 2 * s59 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 4 }-> 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= z' + @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 3 }-> sum#1(s57) :|: s57 >= 0, s57 <= 2 * s21 + z'', s21 >= 0, s21 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 2 }-> sum#2(s39, z) :|: s39 >= 0, s39 <= 2, z >= 0 sum#2(z, z') -{ 2 }-> sum#3(s40, z') :|: s40 >= 0, s40 <= 2, z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 5 }-> s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] #eq: runtime: O(1) [0], size: O(1) [2] #less: runtime: O(1) [1], size: O(1) [2] #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #div: runtime: O(1) [0], size: O(n^1) [1 + z] sum#3: runtime: O(1) [5], size: O(1) [7] ---------------------------------------- (159) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (160) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + z', s26 >= 0, s26 <= s25 + 2, s27 >= 0, s27 <= s26 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + z', s29 >= 0, s29 <= s28 + 2, s30 >= 0, s30 <= s29 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + s32 :|: s32 >= 0, s32 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #equal(z, z') -{ 1 }-> s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s51 :|: s51 >= 0, s51 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + s33 :|: s33 >= 0, s33 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + s34 :|: s34 >= 0, s34 <= s3 + 1, s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + s35 :|: s35 >= 0, s35 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s54 :|: s52 >= 0, s52 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s53 >= 0, s53 <= 2 * (1 + z') + s52, s54 >= 0, s54 <= 2 * (1 + z') + s53, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> s24 :|: s24 >= 0, s24 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 4 }-> add'#3(sum#1(s56), z1, @ys) :|: s55 >= 0, s55 <= 2 * z'' + @y, s56 >= 0, s56 <= 2 * s55 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 1 }-> bitToInt'(z, 0) :|: z >= 0 bitToInt(z) -{ 2 }-> bitToInt'(z, 1 + (1 + 0)) :|: z >= 0 bitToInt'(z, z') -{ 1 }-> bitToInt'#1(z, z') :|: z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 3 }-> plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 2 }-> compare#4(s37, z, z', z'') :|: s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 2 }-> compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 1 }-> minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 4 }-> 1 + mod(s58, 1 + (1 + (1 + 0))) + diff#1(#less(minus(s50, z''), 0)) :|: s58 >= 0, s58 <= 2 * s31 + z'', s50 >= 0, s50 <= 2 * z + z', s31 >= 0, s31 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> s61 :|: s61 >= 0, s61 <= z + 1, z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> s49 :|: s49 >= 0, s49 <= 2 * z + z', z >= 0, z' >= 0 mod(z, z') -{ 2 }-> minus(z, times(z, s62)) :|: s62 >= 0, s62 <= z + 1, z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> s20 :|: s20 >= 0, s20 <= 2 * z + z', z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 4 }-> sub'#3(1 + mod(s60, 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: s59 >= 0, s59 <= 2 * z'' + @y, s60 >= 0, s60 <= 2 * s59 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 4 }-> 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= z' + @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 3 }-> sum#1(s57) :|: s57 >= 0, s57 <= 2 * s21 + z'', s21 >= 0, s21 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 2 }-> sum#2(s39, z) :|: s39 >= 0, s39 <= 2, z >= 0 sum#2(z, z') -{ 7 }-> s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 5 }-> s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] #eq: runtime: O(1) [0], size: O(1) [2] #less: runtime: O(1) [1], size: O(1) [2] #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #div: runtime: O(1) [0], size: O(n^1) [1 + z] sum#3: runtime: O(1) [5], size: O(1) [7] ---------------------------------------- (161) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: sub'#4 after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 1 + z + z' ---------------------------------------- (162) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + z', s26 >= 0, s26 <= s25 + 2, s27 >= 0, s27 <= s26 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + z', s29 >= 0, s29 <= s28 + 2, s30 >= 0, s30 <= s29 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + s32 :|: s32 >= 0, s32 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #equal(z, z') -{ 1 }-> s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s51 :|: s51 >= 0, s51 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + s33 :|: s33 >= 0, s33 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + s34 :|: s34 >= 0, s34 <= s3 + 1, s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + s35 :|: s35 >= 0, s35 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s54 :|: s52 >= 0, s52 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s53 >= 0, s53 <= 2 * (1 + z') + s52, s54 >= 0, s54 <= 2 * (1 + z') + s53, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> s24 :|: s24 >= 0, s24 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 4 }-> add'#3(sum#1(s56), z1, @ys) :|: s55 >= 0, s55 <= 2 * z'' + @y, s56 >= 0, s56 <= 2 * s55 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 1 }-> bitToInt'(z, 0) :|: z >= 0 bitToInt(z) -{ 2 }-> bitToInt'(z, 1 + (1 + 0)) :|: z >= 0 bitToInt'(z, z') -{ 1 }-> bitToInt'#1(z, z') :|: z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 3 }-> plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 2 }-> compare#4(s37, z, z', z'') :|: s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 2 }-> compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 1 }-> minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 4 }-> 1 + mod(s58, 1 + (1 + (1 + 0))) + diff#1(#less(minus(s50, z''), 0)) :|: s58 >= 0, s58 <= 2 * s31 + z'', s50 >= 0, s50 <= 2 * z + z', s31 >= 0, s31 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> s61 :|: s61 >= 0, s61 <= z + 1, z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> s49 :|: s49 >= 0, s49 <= 2 * z + z', z >= 0, z' >= 0 mod(z, z') -{ 2 }-> minus(z, times(z, s62)) :|: s62 >= 0, s62 <= z + 1, z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> s20 :|: s20 >= 0, s20 <= 2 * z + z', z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 4 }-> sub'#3(1 + mod(s60, 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: s59 >= 0, s59 <= 2 * z'' + @y, s60 >= 0, s60 <= 2 * s59 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 4 }-> 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= z' + @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 3 }-> sum#1(s57) :|: s57 >= 0, s57 <= 2 * s21 + z'', s21 >= 0, s21 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 2 }-> sum#2(s39, z) :|: s39 >= 0, s39 <= 2, z >= 0 sum#2(z, z') -{ 7 }-> s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 5 }-> s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] #eq: runtime: O(1) [0], size: O(1) [2] #less: runtime: O(1) [1], size: O(1) [2] #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #div: runtime: O(1) [0], size: O(n^1) [1 + z] sum#3: runtime: O(1) [5], size: O(1) [7] sub'#4: runtime: ?, size: O(n^1) [1 + z + z'] ---------------------------------------- (163) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: sub'#4 after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 4 ---------------------------------------- (164) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + z', s26 >= 0, s26 <= s25 + 2, s27 >= 0, s27 <= s26 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + z', s29 >= 0, s29 <= s28 + 2, s30 >= 0, s30 <= s29 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + s32 :|: s32 >= 0, s32 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #equal(z, z') -{ 1 }-> s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s51 :|: s51 >= 0, s51 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + s33 :|: s33 >= 0, s33 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + s34 :|: s34 >= 0, s34 <= s3 + 1, s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + s35 :|: s35 >= 0, s35 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s54 :|: s52 >= 0, s52 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s53 >= 0, s53 <= 2 * (1 + z') + s52, s54 >= 0, s54 <= 2 * (1 + z') + s53, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> s24 :|: s24 >= 0, s24 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 4 }-> add'#3(sum#1(s56), z1, @ys) :|: s55 >= 0, s55 <= 2 * z'' + @y, s56 >= 0, s56 <= 2 * s55 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 1 }-> bitToInt'(z, 0) :|: z >= 0 bitToInt(z) -{ 2 }-> bitToInt'(z, 1 + (1 + 0)) :|: z >= 0 bitToInt'(z, z') -{ 1 }-> bitToInt'#1(z, z') :|: z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 3 }-> plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 2 }-> compare#4(s37, z, z', z'') :|: s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 2 }-> compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 1 }-> minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 4 }-> 1 + mod(s58, 1 + (1 + (1 + 0))) + diff#1(#less(minus(s50, z''), 0)) :|: s58 >= 0, s58 <= 2 * s31 + z'', s50 >= 0, s50 <= 2 * z + z', s31 >= 0, s31 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> s61 :|: s61 >= 0, s61 <= z + 1, z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> s49 :|: s49 >= 0, s49 <= 2 * z + z', z >= 0, z' >= 0 mod(z, z') -{ 2 }-> minus(z, times(z, s62)) :|: s62 >= 0, s62 <= z + 1, z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> s20 :|: s20 >= 0, s20 <= 2 * z + z', z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 4 }-> sub'#3(1 + mod(s60, 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: s59 >= 0, s59 <= 2 * z'' + @y, s60 >= 0, s60 <= 2 * s59 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 4 }-> 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= z' + @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 3 }-> sum#1(s57) :|: s57 >= 0, s57 <= 2 * s21 + z'', s21 >= 0, s21 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 2 }-> sum#2(s39, z) :|: s39 >= 0, s39 <= 2, z >= 0 sum#2(z, z') -{ 7 }-> s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 5 }-> s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] #eq: runtime: O(1) [0], size: O(1) [2] #less: runtime: O(1) [1], size: O(1) [2] #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #div: runtime: O(1) [0], size: O(n^1) [1 + z] sum#3: runtime: O(1) [5], size: O(1) [7] sub'#4: runtime: O(1) [4], size: O(n^1) [1 + z + z'] ---------------------------------------- (165) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (166) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + z', s26 >= 0, s26 <= s25 + 2, s27 >= 0, s27 <= s26 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + z', s29 >= 0, s29 <= s28 + 2, s30 >= 0, s30 <= s29 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + s32 :|: s32 >= 0, s32 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #equal(z, z') -{ 1 }-> s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s51 :|: s51 >= 0, s51 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + s33 :|: s33 >= 0, s33 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + s34 :|: s34 >= 0, s34 <= s3 + 1, s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + s35 :|: s35 >= 0, s35 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s54 :|: s52 >= 0, s52 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s53 >= 0, s53 <= 2 * (1 + z') + s52, s54 >= 0, s54 <= 2 * (1 + z') + s53, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> s24 :|: s24 >= 0, s24 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 4 }-> add'#3(sum#1(s56), z1, @ys) :|: s55 >= 0, s55 <= 2 * z'' + @y, s56 >= 0, s56 <= 2 * s55 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 1 }-> bitToInt'(z, 0) :|: z >= 0 bitToInt(z) -{ 2 }-> bitToInt'(z, 1 + (1 + 0)) :|: z >= 0 bitToInt'(z, z') -{ 1 }-> bitToInt'#1(z, z') :|: z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 3 }-> plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 2 }-> compare#4(s37, z, z', z'') :|: s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 2 }-> compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 1 }-> minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 4 }-> 1 + mod(s58, 1 + (1 + (1 + 0))) + diff#1(#less(minus(s50, z''), 0)) :|: s58 >= 0, s58 <= 2 * s31 + z'', s50 >= 0, s50 <= 2 * z + z', s31 >= 0, s31 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> s61 :|: s61 >= 0, s61 <= z + 1, z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> s49 :|: s49 >= 0, s49 <= 2 * z + z', z >= 0, z' >= 0 mod(z, z') -{ 2 }-> minus(z, times(z, s62)) :|: s62 >= 0, s62 <= z + 1, z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> s20 :|: s20 >= 0, s20 <= 2 * z + z', z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 4 }-> sub'#3(1 + mod(s60, 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: s59 >= 0, s59 <= 2 * z'' + @y, s60 >= 0, s60 <= 2 * s59 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 4 }-> 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= z' + @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 3 }-> sum#1(s57) :|: s57 >= 0, s57 <= 2 * s21 + z'', s21 >= 0, s21 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 2 }-> sum#2(s39, z) :|: s39 >= 0, s39 <= 2, z >= 0 sum#2(z, z') -{ 7 }-> s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 5 }-> s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] #eq: runtime: O(1) [0], size: O(1) [2] #less: runtime: O(1) [1], size: O(1) [2] #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #div: runtime: O(1) [0], size: O(n^1) [1 + z] sum#3: runtime: O(1) [5], size: O(1) [7] sub'#4: runtime: O(1) [4], size: O(n^1) [1 + z + z'] ---------------------------------------- (167) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: #equal after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 2 ---------------------------------------- (168) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + z', s26 >= 0, s26 <= s25 + 2, s27 >= 0, s27 <= s26 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + z', s29 >= 0, s29 <= s28 + 2, s30 >= 0, s30 <= s29 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + s32 :|: s32 >= 0, s32 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #equal(z, z') -{ 1 }-> s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s51 :|: s51 >= 0, s51 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + s33 :|: s33 >= 0, s33 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + s34 :|: s34 >= 0, s34 <= s3 + 1, s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + s35 :|: s35 >= 0, s35 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s54 :|: s52 >= 0, s52 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s53 >= 0, s53 <= 2 * (1 + z') + s52, s54 >= 0, s54 <= 2 * (1 + z') + s53, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> s24 :|: s24 >= 0, s24 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 4 }-> add'#3(sum#1(s56), z1, @ys) :|: s55 >= 0, s55 <= 2 * z'' + @y, s56 >= 0, s56 <= 2 * s55 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 1 }-> bitToInt'(z, 0) :|: z >= 0 bitToInt(z) -{ 2 }-> bitToInt'(z, 1 + (1 + 0)) :|: z >= 0 bitToInt'(z, z') -{ 1 }-> bitToInt'#1(z, z') :|: z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 3 }-> plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 2 }-> compare#4(s37, z, z', z'') :|: s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 2 }-> compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 1 }-> minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 4 }-> 1 + mod(s58, 1 + (1 + (1 + 0))) + diff#1(#less(minus(s50, z''), 0)) :|: s58 >= 0, s58 <= 2 * s31 + z'', s50 >= 0, s50 <= 2 * z + z', s31 >= 0, s31 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> s61 :|: s61 >= 0, s61 <= z + 1, z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> s49 :|: s49 >= 0, s49 <= 2 * z + z', z >= 0, z' >= 0 mod(z, z') -{ 2 }-> minus(z, times(z, s62)) :|: s62 >= 0, s62 <= z + 1, z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> s20 :|: s20 >= 0, s20 <= 2 * z + z', z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 4 }-> sub'#3(1 + mod(s60, 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: s59 >= 0, s59 <= 2 * z'' + @y, s60 >= 0, s60 <= 2 * s59 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 4 }-> 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= z' + @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 3 }-> sum#1(s57) :|: s57 >= 0, s57 <= 2 * s21 + z'', s21 >= 0, s21 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 2 }-> sum#2(s39, z) :|: s39 >= 0, s39 <= 2, z >= 0 sum#2(z, z') -{ 7 }-> s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 5 }-> s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] #eq: runtime: O(1) [0], size: O(1) [2] #less: runtime: O(1) [1], size: O(1) [2] #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #div: runtime: O(1) [0], size: O(n^1) [1 + z] sum#3: runtime: O(1) [5], size: O(1) [7] sub'#4: runtime: O(1) [4], size: O(n^1) [1 + z + z'] #equal: runtime: ?, size: O(1) [2] ---------------------------------------- (169) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: #equal after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 1 ---------------------------------------- (170) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + z', s26 >= 0, s26 <= s25 + 2, s27 >= 0, s27 <= s26 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + z', s29 >= 0, s29 <= s28 + 2, s30 >= 0, s30 <= s29 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + s32 :|: s32 >= 0, s32 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #equal(z, z') -{ 1 }-> s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s51 :|: s51 >= 0, s51 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + s33 :|: s33 >= 0, s33 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + s34 :|: s34 >= 0, s34 <= s3 + 1, s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + s35 :|: s35 >= 0, s35 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s54 :|: s52 >= 0, s52 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s53 >= 0, s53 <= 2 * (1 + z') + s52, s54 >= 0, s54 <= 2 * (1 + z') + s53, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> s24 :|: s24 >= 0, s24 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 4 }-> add'#3(sum#1(s56), z1, @ys) :|: s55 >= 0, s55 <= 2 * z'' + @y, s56 >= 0, s56 <= 2 * s55 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 1 }-> bitToInt'(z, 0) :|: z >= 0 bitToInt(z) -{ 2 }-> bitToInt'(z, 1 + (1 + 0)) :|: z >= 0 bitToInt'(z, z') -{ 1 }-> bitToInt'#1(z, z') :|: z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 3 }-> plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 2 }-> compare#4(s37, z, z', z'') :|: s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 2 }-> compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 1 }-> minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 4 }-> 1 + mod(s58, 1 + (1 + (1 + 0))) + diff#1(#less(minus(s50, z''), 0)) :|: s58 >= 0, s58 <= 2 * s31 + z'', s50 >= 0, s50 <= 2 * z + z', s31 >= 0, s31 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> s61 :|: s61 >= 0, s61 <= z + 1, z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> s49 :|: s49 >= 0, s49 <= 2 * z + z', z >= 0, z' >= 0 mod(z, z') -{ 2 }-> minus(z, times(z, s62)) :|: s62 >= 0, s62 <= z + 1, z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> s20 :|: s20 >= 0, s20 <= 2 * z + z', z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 4 }-> sub'#3(1 + mod(s60, 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: s59 >= 0, s59 <= 2 * z'' + @y, s60 >= 0, s60 <= 2 * s59 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 4 }-> 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= z' + @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 3 }-> sum#1(s57) :|: s57 >= 0, s57 <= 2 * s21 + z'', s21 >= 0, s21 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 2 }-> sum#2(s39, z) :|: s39 >= 0, s39 <= 2, z >= 0 sum#2(z, z') -{ 7 }-> s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 5 }-> s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] #eq: runtime: O(1) [0], size: O(1) [2] #less: runtime: O(1) [1], size: O(1) [2] #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #div: runtime: O(1) [0], size: O(n^1) [1 + z] sum#3: runtime: O(1) [5], size: O(1) [7] sub'#4: runtime: O(1) [4], size: O(n^1) [1 + z + z'] #equal: runtime: O(1) [1], size: O(1) [2] ---------------------------------------- (171) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (172) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + z', s26 >= 0, s26 <= s25 + 2, s27 >= 0, s27 <= s26 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + z', s29 >= 0, s29 <= s28 + 2, s30 >= 0, s30 <= s29 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + s32 :|: s32 >= 0, s32 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #equal(z, z') -{ 1 }-> s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s51 :|: s51 >= 0, s51 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + s33 :|: s33 >= 0, s33 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + s34 :|: s34 >= 0, s34 <= s3 + 1, s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + s35 :|: s35 >= 0, s35 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s54 :|: s52 >= 0, s52 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s53 >= 0, s53 <= 2 * (1 + z') + s52, s54 >= 0, s54 <= 2 * (1 + z') + s53, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> s24 :|: s24 >= 0, s24 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 4 }-> add'#3(sum#1(s56), z1, @ys) :|: s55 >= 0, s55 <= 2 * z'' + @y, s56 >= 0, s56 <= 2 * s55 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 1 }-> bitToInt'(z, 0) :|: z >= 0 bitToInt(z) -{ 2 }-> bitToInt'(z, 1 + (1 + 0)) :|: z >= 0 bitToInt'(z, z') -{ 1 }-> bitToInt'#1(z, z') :|: z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 3 }-> plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 2 }-> compare#4(s37, z, z', z'') :|: s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 2 }-> compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 1 }-> minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 4 }-> 1 + mod(s58, 1 + (1 + (1 + 0))) + diff#1(#less(minus(s50, z''), 0)) :|: s58 >= 0, s58 <= 2 * s31 + z'', s50 >= 0, s50 <= 2 * z + z', s31 >= 0, s31 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> s61 :|: s61 >= 0, s61 <= z + 1, z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> s49 :|: s49 >= 0, s49 <= 2 * z + z', z >= 0, z' >= 0 mod(z, z') -{ 2 }-> minus(z, times(z, s62)) :|: s62 >= 0, s62 <= z + 1, z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> s20 :|: s20 >= 0, s20 <= 2 * z + z', z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 4 }-> sub'#3(1 + mod(s60, 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: s59 >= 0, s59 <= 2 * z'' + @y, s60 >= 0, s60 <= 2 * s59 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 4 }-> 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= z' + @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 3 }-> sum#1(s57) :|: s57 >= 0, s57 <= 2 * s21 + z'', s21 >= 0, s21 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 2 }-> sum#2(s39, z) :|: s39 >= 0, s39 <= 2, z >= 0 sum#2(z, z') -{ 7 }-> s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 5 }-> s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] #eq: runtime: O(1) [0], size: O(1) [2] #less: runtime: O(1) [1], size: O(1) [2] #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #div: runtime: O(1) [0], size: O(n^1) [1 + z] sum#3: runtime: O(1) [5], size: O(1) [7] sub'#4: runtime: O(1) [4], size: O(n^1) [1 + z + z'] #equal: runtime: O(1) [1], size: O(1) [2] ---------------------------------------- (173) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: minus after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 2*z + z' ---------------------------------------- (174) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + z', s26 >= 0, s26 <= s25 + 2, s27 >= 0, s27 <= s26 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + z', s29 >= 0, s29 <= s28 + 2, s30 >= 0, s30 <= s29 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + s32 :|: s32 >= 0, s32 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #equal(z, z') -{ 1 }-> s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s51 :|: s51 >= 0, s51 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + s33 :|: s33 >= 0, s33 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + s34 :|: s34 >= 0, s34 <= s3 + 1, s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + s35 :|: s35 >= 0, s35 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s54 :|: s52 >= 0, s52 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s53 >= 0, s53 <= 2 * (1 + z') + s52, s54 >= 0, s54 <= 2 * (1 + z') + s53, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> s24 :|: s24 >= 0, s24 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 4 }-> add'#3(sum#1(s56), z1, @ys) :|: s55 >= 0, s55 <= 2 * z'' + @y, s56 >= 0, s56 <= 2 * s55 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 1 }-> bitToInt'(z, 0) :|: z >= 0 bitToInt(z) -{ 2 }-> bitToInt'(z, 1 + (1 + 0)) :|: z >= 0 bitToInt'(z, z') -{ 1 }-> bitToInt'#1(z, z') :|: z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 3 }-> plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 2 }-> compare#4(s37, z, z', z'') :|: s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 2 }-> compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 1 }-> minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 4 }-> 1 + mod(s58, 1 + (1 + (1 + 0))) + diff#1(#less(minus(s50, z''), 0)) :|: s58 >= 0, s58 <= 2 * s31 + z'', s50 >= 0, s50 <= 2 * z + z', s31 >= 0, s31 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> s61 :|: s61 >= 0, s61 <= z + 1, z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> s49 :|: s49 >= 0, s49 <= 2 * z + z', z >= 0, z' >= 0 mod(z, z') -{ 2 }-> minus(z, times(z, s62)) :|: s62 >= 0, s62 <= z + 1, z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> s20 :|: s20 >= 0, s20 <= 2 * z + z', z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 4 }-> sub'#3(1 + mod(s60, 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: s59 >= 0, s59 <= 2 * z'' + @y, s60 >= 0, s60 <= 2 * s59 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 4 }-> 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= z' + @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 3 }-> sum#1(s57) :|: s57 >= 0, s57 <= 2 * s21 + z'', s21 >= 0, s21 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 2 }-> sum#2(s39, z) :|: s39 >= 0, s39 <= 2, z >= 0 sum#2(z, z') -{ 7 }-> s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 5 }-> s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] #eq: runtime: O(1) [0], size: O(1) [2] #less: runtime: O(1) [1], size: O(1) [2] #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #div: runtime: O(1) [0], size: O(n^1) [1 + z] sum#3: runtime: O(1) [5], size: O(1) [7] sub'#4: runtime: O(1) [4], size: O(n^1) [1 + z + z'] #equal: runtime: O(1) [1], size: O(1) [2] minus: runtime: ?, size: O(n^1) [2*z + z'] ---------------------------------------- (175) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: minus after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 1 ---------------------------------------- (176) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + z', s26 >= 0, s26 <= s25 + 2, s27 >= 0, s27 <= s26 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + z', s29 >= 0, s29 <= s28 + 2, s30 >= 0, s30 <= s29 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + s32 :|: s32 >= 0, s32 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #equal(z, z') -{ 1 }-> s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s51 :|: s51 >= 0, s51 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + s33 :|: s33 >= 0, s33 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + s34 :|: s34 >= 0, s34 <= s3 + 1, s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + s35 :|: s35 >= 0, s35 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s54 :|: s52 >= 0, s52 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s53 >= 0, s53 <= 2 * (1 + z') + s52, s54 >= 0, s54 <= 2 * (1 + z') + s53, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> s24 :|: s24 >= 0, s24 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 4 }-> add'#3(sum#1(s56), z1, @ys) :|: s55 >= 0, s55 <= 2 * z'' + @y, s56 >= 0, s56 <= 2 * s55 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 1 }-> bitToInt'(z, 0) :|: z >= 0 bitToInt(z) -{ 2 }-> bitToInt'(z, 1 + (1 + 0)) :|: z >= 0 bitToInt'(z, z') -{ 1 }-> bitToInt'#1(z, z') :|: z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 3 }-> plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 2 }-> compare#4(s37, z, z', z'') :|: s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 2 }-> compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 1 }-> minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 4 }-> 1 + mod(s58, 1 + (1 + (1 + 0))) + diff#1(#less(minus(s50, z''), 0)) :|: s58 >= 0, s58 <= 2 * s31 + z'', s50 >= 0, s50 <= 2 * z + z', s31 >= 0, s31 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> s61 :|: s61 >= 0, s61 <= z + 1, z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> s49 :|: s49 >= 0, s49 <= 2 * z + z', z >= 0, z' >= 0 mod(z, z') -{ 2 }-> minus(z, times(z, s62)) :|: s62 >= 0, s62 <= z + 1, z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> s20 :|: s20 >= 0, s20 <= 2 * z + z', z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 4 }-> sub'#3(1 + mod(s60, 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: s59 >= 0, s59 <= 2 * z'' + @y, s60 >= 0, s60 <= 2 * s59 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 4 }-> 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= z' + @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 3 }-> sum#1(s57) :|: s57 >= 0, s57 <= 2 * s21 + z'', s21 >= 0, s21 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 2 }-> sum#2(s39, z) :|: s39 >= 0, s39 <= 2, z >= 0 sum#2(z, z') -{ 7 }-> s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 5 }-> s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] #eq: runtime: O(1) [0], size: O(1) [2] #less: runtime: O(1) [1], size: O(1) [2] #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #div: runtime: O(1) [0], size: O(n^1) [1 + z] sum#3: runtime: O(1) [5], size: O(1) [7] sub'#4: runtime: O(1) [4], size: O(n^1) [1 + z + z'] #equal: runtime: O(1) [1], size: O(1) [2] minus: runtime: O(1) [1], size: O(n^1) [2*z + z'] ---------------------------------------- (177) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (178) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + z', s26 >= 0, s26 <= s25 + 2, s27 >= 0, s27 <= s26 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + z', s29 >= 0, s29 <= s28 + 2, s30 >= 0, s30 <= s29 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + s32 :|: s32 >= 0, s32 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #equal(z, z') -{ 1 }-> s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s51 :|: s51 >= 0, s51 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + s33 :|: s33 >= 0, s33 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + s34 :|: s34 >= 0, s34 <= s3 + 1, s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + s35 :|: s35 >= 0, s35 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s54 :|: s52 >= 0, s52 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s53 >= 0, s53 <= 2 * (1 + z') + s52, s54 >= 0, s54 <= 2 * (1 + z') + s53, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> s24 :|: s24 >= 0, s24 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 4 }-> add'#3(sum#1(s56), z1, @ys) :|: s55 >= 0, s55 <= 2 * z'' + @y, s56 >= 0, s56 <= 2 * s55 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 1 }-> bitToInt'(z, 0) :|: z >= 0 bitToInt(z) -{ 2 }-> bitToInt'(z, 1 + (1 + 0)) :|: z >= 0 bitToInt'(z, z') -{ 1 }-> bitToInt'#1(z, z') :|: z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 3 }-> plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 2 }-> compare#4(s37, z, z', z'') :|: s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 2 }-> compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 2 }-> s64 :|: s64 >= 0, s64 <= 2 * 0 + (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 8 }-> 1 + mod(s58, 1 + (1 + (1 + 0))) + s67 :|: s65 >= 0, s65 <= 2 * s50 + z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + z'', s50 >= 0, s50 <= 2 * z + z', s31 >= 0, s31 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> s61 :|: s61 >= 0, s61 <= z + 1, z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> s49 :|: s49 >= 0, s49 <= 2 * z + z', z >= 0, z' >= 0 mod(z, z') -{ 2 }-> minus(z, times(z, s62)) :|: s62 >= 0, s62 <= z + 1, z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> s20 :|: s20 >= 0, s20 <= 2 * z + z', z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 9 }-> sub'#3(1 + mod(s60, 1 + (1 + (1 + 0))) + s71, z1, @ys) :|: s68 >= 0, s68 <= 2 * z'' + @y, s69 >= 0, s69 <= 2 * s68 + z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + @y, s60 >= 0, s60 <= 2 * s59 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 4 }-> 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= z' + @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 3 }-> sum#1(s57) :|: s57 >= 0, s57 <= 2 * s21 + z'', s21 >= 0, s21 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 2 }-> sum#2(s39, z) :|: s39 >= 0, s39 <= 2, z >= 0 sum#2(z, z') -{ 7 }-> s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 5 }-> s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] #eq: runtime: O(1) [0], size: O(1) [2] #less: runtime: O(1) [1], size: O(1) [2] #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #div: runtime: O(1) [0], size: O(n^1) [1 + z] sum#3: runtime: O(1) [5], size: O(1) [7] sub'#4: runtime: O(1) [4], size: O(n^1) [1 + z + z'] #equal: runtime: O(1) [1], size: O(1) [2] minus: runtime: O(1) [1], size: O(n^1) [2*z + z'] ---------------------------------------- (179) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using KoAT for: #mult after applying outer abstraction to obtain an ITS, resulting in: O(n^2) with polynomial bound: 1 + 4*z*z' ---------------------------------------- (180) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + z', s26 >= 0, s26 <= s25 + 2, s27 >= 0, s27 <= s26 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + z', s29 >= 0, s29 <= s28 + 2, s30 >= 0, s30 <= s29 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + s32 :|: s32 >= 0, s32 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #equal(z, z') -{ 1 }-> s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s51 :|: s51 >= 0, s51 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + s33 :|: s33 >= 0, s33 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + s34 :|: s34 >= 0, s34 <= s3 + 1, s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + s35 :|: s35 >= 0, s35 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s54 :|: s52 >= 0, s52 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s53 >= 0, s53 <= 2 * (1 + z') + s52, s54 >= 0, s54 <= 2 * (1 + z') + s53, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> s24 :|: s24 >= 0, s24 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 4 }-> add'#3(sum#1(s56), z1, @ys) :|: s55 >= 0, s55 <= 2 * z'' + @y, s56 >= 0, s56 <= 2 * s55 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 1 }-> bitToInt'(z, 0) :|: z >= 0 bitToInt(z) -{ 2 }-> bitToInt'(z, 1 + (1 + 0)) :|: z >= 0 bitToInt'(z, z') -{ 1 }-> bitToInt'#1(z, z') :|: z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 3 }-> plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 2 }-> compare#4(s37, z, z', z'') :|: s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 2 }-> compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 2 }-> s64 :|: s64 >= 0, s64 <= 2 * 0 + (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 8 }-> 1 + mod(s58, 1 + (1 + (1 + 0))) + s67 :|: s65 >= 0, s65 <= 2 * s50 + z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + z'', s50 >= 0, s50 <= 2 * z + z', s31 >= 0, s31 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> s61 :|: s61 >= 0, s61 <= z + 1, z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> s49 :|: s49 >= 0, s49 <= 2 * z + z', z >= 0, z' >= 0 mod(z, z') -{ 2 }-> minus(z, times(z, s62)) :|: s62 >= 0, s62 <= z + 1, z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> s20 :|: s20 >= 0, s20 <= 2 * z + z', z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 9 }-> sub'#3(1 + mod(s60, 1 + (1 + (1 + 0))) + s71, z1, @ys) :|: s68 >= 0, s68 <= 2 * z'' + @y, s69 >= 0, s69 <= 2 * s68 + z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + @y, s60 >= 0, s60 <= 2 * s59 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 4 }-> 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= z' + @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 3 }-> sum#1(s57) :|: s57 >= 0, s57 <= 2 * s21 + z'', s21 >= 0, s21 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 2 }-> sum#2(s39, z) :|: s39 >= 0, s39 <= 2, z >= 0 sum#2(z, z') -{ 7 }-> s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 5 }-> s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] #eq: runtime: O(1) [0], size: O(1) [2] #less: runtime: O(1) [1], size: O(1) [2] #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #div: runtime: O(1) [0], size: O(n^1) [1 + z] sum#3: runtime: O(1) [5], size: O(1) [7] sub'#4: runtime: O(1) [4], size: O(n^1) [1 + z + z'] #equal: runtime: O(1) [1], size: O(1) [2] minus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #mult: runtime: ?, size: O(n^2) [1 + 4*z*z'] ---------------------------------------- (181) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: #mult after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 0 ---------------------------------------- (182) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + z', s26 >= 0, s26 <= s25 + 2, s27 >= 0, s27 <= s26 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + z', s29 >= 0, s29 <= s28 + 2, s30 >= 0, s30 <= s29 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + s32 :|: s32 >= 0, s32 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #equal(z, z') -{ 1 }-> s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s51 :|: s51 >= 0, s51 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + s33 :|: s33 >= 0, s33 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + s34 :|: s34 >= 0, s34 <= s3 + 1, s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + s35 :|: s35 >= 0, s35 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s54 :|: s52 >= 0, s52 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s53 >= 0, s53 <= 2 * (1 + z') + s52, s54 >= 0, s54 <= 2 * (1 + z') + s53, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> s24 :|: s24 >= 0, s24 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 4 }-> add'#3(sum#1(s56), z1, @ys) :|: s55 >= 0, s55 <= 2 * z'' + @y, s56 >= 0, s56 <= 2 * s55 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 1 }-> bitToInt'(z, 0) :|: z >= 0 bitToInt(z) -{ 2 }-> bitToInt'(z, 1 + (1 + 0)) :|: z >= 0 bitToInt'(z, z') -{ 1 }-> bitToInt'#1(z, z') :|: z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 3 }-> plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 2 }-> compare#4(s37, z, z', z'') :|: s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 2 }-> compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 2 }-> s64 :|: s64 >= 0, s64 <= 2 * 0 + (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 8 }-> 1 + mod(s58, 1 + (1 + (1 + 0))) + s67 :|: s65 >= 0, s65 <= 2 * s50 + z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + z'', s50 >= 0, s50 <= 2 * z + z', s31 >= 0, s31 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> s61 :|: s61 >= 0, s61 <= z + 1, z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> s49 :|: s49 >= 0, s49 <= 2 * z + z', z >= 0, z' >= 0 mod(z, z') -{ 2 }-> minus(z, times(z, s62)) :|: s62 >= 0, s62 <= z + 1, z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> s20 :|: s20 >= 0, s20 <= 2 * z + z', z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 9 }-> sub'#3(1 + mod(s60, 1 + (1 + (1 + 0))) + s71, z1, @ys) :|: s68 >= 0, s68 <= 2 * z'' + @y, s69 >= 0, s69 <= 2 * s68 + z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + @y, s60 >= 0, s60 <= 2 * s59 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 4 }-> 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= z' + @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 3 }-> sum#1(s57) :|: s57 >= 0, s57 <= 2 * s21 + z'', s21 >= 0, s21 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 2 }-> sum#2(s39, z) :|: s39 >= 0, s39 <= 2, z >= 0 sum#2(z, z') -{ 7 }-> s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 5 }-> s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] #eq: runtime: O(1) [0], size: O(1) [2] #less: runtime: O(1) [1], size: O(1) [2] #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #div: runtime: O(1) [0], size: O(n^1) [1 + z] sum#3: runtime: O(1) [5], size: O(1) [7] sub'#4: runtime: O(1) [4], size: O(n^1) [1 + z + z'] #equal: runtime: O(1) [1], size: O(1) [2] minus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] ---------------------------------------- (183) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (184) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + z', s26 >= 0, s26 <= s25 + 2, s27 >= 0, s27 <= s26 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + z', s29 >= 0, s29 <= s28 + 2, s30 >= 0, s30 <= s29 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + s32 :|: s32 >= 0, s32 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #equal(z, z') -{ 1 }-> s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s51 :|: s51 >= 0, s51 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + s33 :|: s33 >= 0, s33 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + s34 :|: s34 >= 0, s34 <= s3 + 1, s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + s35 :|: s35 >= 0, s35 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s54 :|: s52 >= 0, s52 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s53 >= 0, s53 <= 2 * (1 + z') + s52, s54 >= 0, s54 <= 2 * (1 + z') + s53, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> s24 :|: s24 >= 0, s24 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 4 }-> add'#3(sum#1(s56), z1, @ys) :|: s55 >= 0, s55 <= 2 * z'' + @y, s56 >= 0, s56 <= 2 * s55 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 1 }-> bitToInt'(z, 0) :|: z >= 0 bitToInt(z) -{ 2 }-> bitToInt'(z, 1 + (1 + 0)) :|: z >= 0 bitToInt'(z, z') -{ 1 }-> bitToInt'#1(z, z') :|: z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 3 }-> plus(s73, bitToInt'(@xs, s74)) :|: s73 >= 0, s73 <= 4 * (z' * @x) + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 2 }-> compare#4(s37, z, z', z'') :|: s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 2 }-> compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 2 }-> s64 :|: s64 >= 0, s64 <= 2 * 0 + (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 8 }-> 1 + mod(s58, 1 + (1 + (1 + 0))) + s67 :|: s65 >= 0, s65 <= 2 * s50 + z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + z'', s50 >= 0, s50 <= 2 * z + z', s31 >= 0, s31 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> s61 :|: s61 >= 0, s61 <= z + 1, z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> s49 :|: s49 >= 0, s49 <= 2 * z + z', z >= 0, z' >= 0 mod(z, z') -{ 2 }-> minus(z, times(z, s62)) :|: s62 >= 0, s62 <= z + 1, z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> s20 :|: s20 >= 0, s20 <= 2 * z + z', z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 9 }-> sub'#3(1 + mod(s60, 1 + (1 + (1 + 0))) + s71, z1, @ys) :|: s68 >= 0, s68 <= 2 * z'' + @y, s69 >= 0, s69 <= 2 * s68 + z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + @y, s60 >= 0, s60 <= 2 * s59 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 4 }-> 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= z' + @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 3 }-> sum#1(s57) :|: s57 >= 0, s57 <= 2 * s21 + z'', s21 >= 0, s21 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 2 }-> sum#2(s39, z) :|: s39 >= 0, s39 <= 2, z >= 0 sum#2(z, z') -{ 7 }-> s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 5 }-> s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 Function symbols to be analyzed: {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] #eq: runtime: O(1) [0], size: O(1) [2] #less: runtime: O(1) [1], size: O(1) [2] #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #div: runtime: O(1) [0], size: O(n^1) [1 + z] sum#3: runtime: O(1) [5], size: O(1) [7] sub'#4: runtime: O(1) [4], size: O(n^1) [1 + z + z'] #equal: runtime: O(1) [1], size: O(1) [2] minus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] ---------------------------------------- (185) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: div after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 1 + z ---------------------------------------- (186) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + z', s26 >= 0, s26 <= s25 + 2, s27 >= 0, s27 <= s26 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + z', s29 >= 0, s29 <= s28 + 2, s30 >= 0, s30 <= s29 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + s32 :|: s32 >= 0, s32 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #equal(z, z') -{ 1 }-> s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s51 :|: s51 >= 0, s51 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + s33 :|: s33 >= 0, s33 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + s34 :|: s34 >= 0, s34 <= s3 + 1, s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + s35 :|: s35 >= 0, s35 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s54 :|: s52 >= 0, s52 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s53 >= 0, s53 <= 2 * (1 + z') + s52, s54 >= 0, s54 <= 2 * (1 + z') + s53, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> s24 :|: s24 >= 0, s24 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 4 }-> add'#3(sum#1(s56), z1, @ys) :|: s55 >= 0, s55 <= 2 * z'' + @y, s56 >= 0, s56 <= 2 * s55 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 1 }-> bitToInt'(z, 0) :|: z >= 0 bitToInt(z) -{ 2 }-> bitToInt'(z, 1 + (1 + 0)) :|: z >= 0 bitToInt'(z, z') -{ 1 }-> bitToInt'#1(z, z') :|: z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 3 }-> plus(s73, bitToInt'(@xs, s74)) :|: s73 >= 0, s73 <= 4 * (z' * @x) + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 2 }-> compare#4(s37, z, z', z'') :|: s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 2 }-> compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 2 }-> s64 :|: s64 >= 0, s64 <= 2 * 0 + (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 8 }-> 1 + mod(s58, 1 + (1 + (1 + 0))) + s67 :|: s65 >= 0, s65 <= 2 * s50 + z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + z'', s50 >= 0, s50 <= 2 * z + z', s31 >= 0, s31 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> s61 :|: s61 >= 0, s61 <= z + 1, z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> s49 :|: s49 >= 0, s49 <= 2 * z + z', z >= 0, z' >= 0 mod(z, z') -{ 2 }-> minus(z, times(z, s62)) :|: s62 >= 0, s62 <= z + 1, z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> s20 :|: s20 >= 0, s20 <= 2 * z + z', z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 9 }-> sub'#3(1 + mod(s60, 1 + (1 + (1 + 0))) + s71, z1, @ys) :|: s68 >= 0, s68 <= 2 * z'' + @y, s69 >= 0, s69 <= 2 * s68 + z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + @y, s60 >= 0, s60 <= 2 * s59 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 4 }-> 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= z' + @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 3 }-> sum#1(s57) :|: s57 >= 0, s57 <= 2 * s21 + z'', s21 >= 0, s21 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 2 }-> sum#2(s39, z) :|: s39 >= 0, s39 <= 2, z >= 0 sum#2(z, z') -{ 7 }-> s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 5 }-> s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 Function symbols to be analyzed: {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] #eq: runtime: O(1) [0], size: O(1) [2] #less: runtime: O(1) [1], size: O(1) [2] #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #div: runtime: O(1) [0], size: O(n^1) [1 + z] sum#3: runtime: O(1) [5], size: O(1) [7] sub'#4: runtime: O(1) [4], size: O(n^1) [1 + z + z'] #equal: runtime: O(1) [1], size: O(1) [2] minus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] div: runtime: ?, size: O(n^1) [1 + z] ---------------------------------------- (187) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: div after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 1 ---------------------------------------- (188) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + z', s26 >= 0, s26 <= s25 + 2, s27 >= 0, s27 <= s26 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + z', s29 >= 0, s29 <= s28 + 2, s30 >= 0, s30 <= s29 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + s32 :|: s32 >= 0, s32 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #equal(z, z') -{ 1 }-> s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s51 :|: s51 >= 0, s51 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + s33 :|: s33 >= 0, s33 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + s34 :|: s34 >= 0, s34 <= s3 + 1, s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + s35 :|: s35 >= 0, s35 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s54 :|: s52 >= 0, s52 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s53 >= 0, s53 <= 2 * (1 + z') + s52, s54 >= 0, s54 <= 2 * (1 + z') + s53, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> s24 :|: s24 >= 0, s24 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 4 }-> add'#3(sum#1(s56), z1, @ys) :|: s55 >= 0, s55 <= 2 * z'' + @y, s56 >= 0, s56 <= 2 * s55 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 1 }-> bitToInt'(z, 0) :|: z >= 0 bitToInt(z) -{ 2 }-> bitToInt'(z, 1 + (1 + 0)) :|: z >= 0 bitToInt'(z, z') -{ 1 }-> bitToInt'#1(z, z') :|: z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 3 }-> plus(s73, bitToInt'(@xs, s74)) :|: s73 >= 0, s73 <= 4 * (z' * @x) + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 2 }-> compare#4(s37, z, z', z'') :|: s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 2 }-> compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 2 }-> s64 :|: s64 >= 0, s64 <= 2 * 0 + (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 8 }-> 1 + mod(s58, 1 + (1 + (1 + 0))) + s67 :|: s65 >= 0, s65 <= 2 * s50 + z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + z'', s50 >= 0, s50 <= 2 * z + z', s31 >= 0, s31 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> s61 :|: s61 >= 0, s61 <= z + 1, z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> s49 :|: s49 >= 0, s49 <= 2 * z + z', z >= 0, z' >= 0 mod(z, z') -{ 2 }-> minus(z, times(z, s62)) :|: s62 >= 0, s62 <= z + 1, z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> s20 :|: s20 >= 0, s20 <= 2 * z + z', z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 9 }-> sub'#3(1 + mod(s60, 1 + (1 + (1 + 0))) + s71, z1, @ys) :|: s68 >= 0, s68 <= 2 * z'' + @y, s69 >= 0, s69 <= 2 * s68 + z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + @y, s60 >= 0, s60 <= 2 * s59 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 4 }-> 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= z' + @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 3 }-> sum#1(s57) :|: s57 >= 0, s57 <= 2 * s21 + z'', s21 >= 0, s21 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 2 }-> sum#2(s39, z) :|: s39 >= 0, s39 <= 2, z >= 0 sum#2(z, z') -{ 7 }-> s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 5 }-> s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 Function symbols to be analyzed: {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] #eq: runtime: O(1) [0], size: O(1) [2] #less: runtime: O(1) [1], size: O(1) [2] #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #div: runtime: O(1) [0], size: O(n^1) [1 + z] sum#3: runtime: O(1) [5], size: O(1) [7] sub'#4: runtime: O(1) [4], size: O(n^1) [1 + z + z'] #equal: runtime: O(1) [1], size: O(1) [2] minus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] div: runtime: O(1) [1], size: O(n^1) [1 + z] ---------------------------------------- (189) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (190) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + z', s26 >= 0, s26 <= s25 + 2, s27 >= 0, s27 <= s26 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + z', s29 >= 0, s29 <= s28 + 2, s30 >= 0, s30 <= s29 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + s32 :|: s32 >= 0, s32 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #equal(z, z') -{ 1 }-> s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s51 :|: s51 >= 0, s51 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + s33 :|: s33 >= 0, s33 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + s34 :|: s34 >= 0, s34 <= s3 + 1, s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + s35 :|: s35 >= 0, s35 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s54 :|: s52 >= 0, s52 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s53 >= 0, s53 <= 2 * (1 + z') + s52, s54 >= 0, s54 <= 2 * (1 + z') + s53, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> s24 :|: s24 >= 0, s24 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 4 }-> add'#3(sum#1(s56), z1, @ys) :|: s55 >= 0, s55 <= 2 * z'' + @y, s56 >= 0, s56 <= 2 * s55 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 1 }-> bitToInt'(z, 0) :|: z >= 0 bitToInt(z) -{ 2 }-> bitToInt'(z, 1 + (1 + 0)) :|: z >= 0 bitToInt'(z, z') -{ 1 }-> bitToInt'#1(z, z') :|: z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 3 }-> plus(s73, bitToInt'(@xs, s74)) :|: s73 >= 0, s73 <= 4 * (z' * @x) + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 2 }-> compare#4(s37, z, z', z'') :|: s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 2 }-> compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 2 }-> s64 :|: s64 >= 0, s64 <= 2 * 0 + (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 8 }-> 1 + mod(s58, 1 + (1 + (1 + 0))) + s67 :|: s65 >= 0, s65 <= 2 * s50 + z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + z'', s50 >= 0, s50 <= 2 * z + z', s31 >= 0, s31 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> s61 :|: s61 >= 0, s61 <= z + 1, z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> s49 :|: s49 >= 0, s49 <= 2 * z + z', z >= 0, z' >= 0 mod(z, z') -{ 2 }-> minus(z, times(z, s62)) :|: s62 >= 0, s62 <= z + 1, z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> s20 :|: s20 >= 0, s20 <= 2 * z + z', z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 9 }-> sub'#3(1 + mod(s60, 1 + (1 + (1 + 0))) + s71, z1, @ys) :|: s68 >= 0, s68 <= 2 * z'' + @y, s69 >= 0, s69 <= 2 * s68 + z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + @y, s60 >= 0, s60 <= 2 * s59 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 4 }-> 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= z' + @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 3 }-> sum#1(s57) :|: s57 >= 0, s57 <= 2 * s21 + z'', s21 >= 0, s21 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 2 }-> sum#2(s39, z) :|: s39 >= 0, s39 <= 2, z >= 0 sum#2(z, z') -{ 7 }-> s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 5 }-> s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 Function symbols to be analyzed: {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] #eq: runtime: O(1) [0], size: O(1) [2] #less: runtime: O(1) [1], size: O(1) [2] #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #div: runtime: O(1) [0], size: O(n^1) [1 + z] sum#3: runtime: O(1) [5], size: O(1) [7] sub'#4: runtime: O(1) [4], size: O(n^1) [1 + z + z'] #equal: runtime: O(1) [1], size: O(1) [2] minus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] div: runtime: O(1) [1], size: O(n^1) [1 + z] ---------------------------------------- (191) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: sum#2 after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 7 ---------------------------------------- (192) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + z', s26 >= 0, s26 <= s25 + 2, s27 >= 0, s27 <= s26 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + z', s29 >= 0, s29 <= s28 + 2, s30 >= 0, s30 <= s29 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + s32 :|: s32 >= 0, s32 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #equal(z, z') -{ 1 }-> s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s51 :|: s51 >= 0, s51 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + s33 :|: s33 >= 0, s33 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + s34 :|: s34 >= 0, s34 <= s3 + 1, s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + s35 :|: s35 >= 0, s35 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s54 :|: s52 >= 0, s52 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s53 >= 0, s53 <= 2 * (1 + z') + s52, s54 >= 0, s54 <= 2 * (1 + z') + s53, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> s24 :|: s24 >= 0, s24 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 4 }-> add'#3(sum#1(s56), z1, @ys) :|: s55 >= 0, s55 <= 2 * z'' + @y, s56 >= 0, s56 <= 2 * s55 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 1 }-> bitToInt'(z, 0) :|: z >= 0 bitToInt(z) -{ 2 }-> bitToInt'(z, 1 + (1 + 0)) :|: z >= 0 bitToInt'(z, z') -{ 1 }-> bitToInt'#1(z, z') :|: z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 3 }-> plus(s73, bitToInt'(@xs, s74)) :|: s73 >= 0, s73 <= 4 * (z' * @x) + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 2 }-> compare#4(s37, z, z', z'') :|: s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 2 }-> compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 2 }-> s64 :|: s64 >= 0, s64 <= 2 * 0 + (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 8 }-> 1 + mod(s58, 1 + (1 + (1 + 0))) + s67 :|: s65 >= 0, s65 <= 2 * s50 + z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + z'', s50 >= 0, s50 <= 2 * z + z', s31 >= 0, s31 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> s61 :|: s61 >= 0, s61 <= z + 1, z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> s49 :|: s49 >= 0, s49 <= 2 * z + z', z >= 0, z' >= 0 mod(z, z') -{ 2 }-> minus(z, times(z, s62)) :|: s62 >= 0, s62 <= z + 1, z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> s20 :|: s20 >= 0, s20 <= 2 * z + z', z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 9 }-> sub'#3(1 + mod(s60, 1 + (1 + (1 + 0))) + s71, z1, @ys) :|: s68 >= 0, s68 <= 2 * z'' + @y, s69 >= 0, s69 <= 2 * s68 + z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + @y, s60 >= 0, s60 <= 2 * s59 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 4 }-> 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= z' + @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 3 }-> sum#1(s57) :|: s57 >= 0, s57 <= 2 * s21 + z'', s21 >= 0, s21 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 2 }-> sum#2(s39, z) :|: s39 >= 0, s39 <= 2, z >= 0 sum#2(z, z') -{ 7 }-> s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 5 }-> s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 Function symbols to be analyzed: {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] #eq: runtime: O(1) [0], size: O(1) [2] #less: runtime: O(1) [1], size: O(1) [2] #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #div: runtime: O(1) [0], size: O(n^1) [1 + z] sum#3: runtime: O(1) [5], size: O(1) [7] sub'#4: runtime: O(1) [4], size: O(n^1) [1 + z + z'] #equal: runtime: O(1) [1], size: O(1) [2] minus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] div: runtime: O(1) [1], size: O(n^1) [1 + z] sum#2: runtime: ?, size: O(1) [7] ---------------------------------------- (193) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: sum#2 after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 7 ---------------------------------------- (194) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + z', s26 >= 0, s26 <= s25 + 2, s27 >= 0, s27 <= s26 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + z', s29 >= 0, s29 <= s28 + 2, s30 >= 0, s30 <= s29 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + s32 :|: s32 >= 0, s32 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #equal(z, z') -{ 1 }-> s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s51 :|: s51 >= 0, s51 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + s33 :|: s33 >= 0, s33 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + s34 :|: s34 >= 0, s34 <= s3 + 1, s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + s35 :|: s35 >= 0, s35 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s54 :|: s52 >= 0, s52 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s53 >= 0, s53 <= 2 * (1 + z') + s52, s54 >= 0, s54 <= 2 * (1 + z') + s53, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> s24 :|: s24 >= 0, s24 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 4 }-> add'#3(sum#1(s56), z1, @ys) :|: s55 >= 0, s55 <= 2 * z'' + @y, s56 >= 0, s56 <= 2 * s55 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 1 }-> bitToInt'(z, 0) :|: z >= 0 bitToInt(z) -{ 2 }-> bitToInt'(z, 1 + (1 + 0)) :|: z >= 0 bitToInt'(z, z') -{ 1 }-> bitToInt'#1(z, z') :|: z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 3 }-> plus(s73, bitToInt'(@xs, s74)) :|: s73 >= 0, s73 <= 4 * (z' * @x) + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 2 }-> compare#4(s37, z, z', z'') :|: s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 2 }-> compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 2 }-> s64 :|: s64 >= 0, s64 <= 2 * 0 + (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 8 }-> 1 + mod(s58, 1 + (1 + (1 + 0))) + s67 :|: s65 >= 0, s65 <= 2 * s50 + z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + z'', s50 >= 0, s50 <= 2 * z + z', s31 >= 0, s31 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> s61 :|: s61 >= 0, s61 <= z + 1, z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> s49 :|: s49 >= 0, s49 <= 2 * z + z', z >= 0, z' >= 0 mod(z, z') -{ 2 }-> minus(z, times(z, s62)) :|: s62 >= 0, s62 <= z + 1, z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> s20 :|: s20 >= 0, s20 <= 2 * z + z', z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 9 }-> sub'#3(1 + mod(s60, 1 + (1 + (1 + 0))) + s71, z1, @ys) :|: s68 >= 0, s68 <= 2 * z'' + @y, s69 >= 0, s69 <= 2 * s68 + z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + @y, s60 >= 0, s60 <= 2 * s59 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 4 }-> 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= z' + @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 3 }-> sum#1(s57) :|: s57 >= 0, s57 <= 2 * s21 + z'', s21 >= 0, s21 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 2 }-> sum#2(s39, z) :|: s39 >= 0, s39 <= 2, z >= 0 sum#2(z, z') -{ 7 }-> s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 5 }-> s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 Function symbols to be analyzed: {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] #eq: runtime: O(1) [0], size: O(1) [2] #less: runtime: O(1) [1], size: O(1) [2] #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #div: runtime: O(1) [0], size: O(n^1) [1 + z] sum#3: runtime: O(1) [5], size: O(1) [7] sub'#4: runtime: O(1) [4], size: O(n^1) [1 + z + z'] #equal: runtime: O(1) [1], size: O(1) [2] minus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] div: runtime: O(1) [1], size: O(n^1) [1 + z] sum#2: runtime: O(1) [7], size: O(1) [7] ---------------------------------------- (195) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (196) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + z', s26 >= 0, s26 <= s25 + 2, s27 >= 0, s27 <= s26 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + z', s29 >= 0, s29 <= s28 + 2, s30 >= 0, s30 <= s29 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + s32 :|: s32 >= 0, s32 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #equal(z, z') -{ 1 }-> s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s51 :|: s51 >= 0, s51 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + s33 :|: s33 >= 0, s33 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + s34 :|: s34 >= 0, s34 <= s3 + 1, s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + s35 :|: s35 >= 0, s35 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s54 :|: s52 >= 0, s52 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s53 >= 0, s53 <= 2 * (1 + z') + s52, s54 >= 0, s54 <= 2 * (1 + z') + s53, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> s24 :|: s24 >= 0, s24 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 4 }-> add'#3(sum#1(s56), z1, @ys) :|: s55 >= 0, s55 <= 2 * z'' + @y, s56 >= 0, s56 <= 2 * s55 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 1 }-> bitToInt'(z, 0) :|: z >= 0 bitToInt(z) -{ 2 }-> bitToInt'(z, 1 + (1 + 0)) :|: z >= 0 bitToInt'(z, z') -{ 1 }-> bitToInt'#1(z, z') :|: z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 3 }-> plus(s73, bitToInt'(@xs, s74)) :|: s73 >= 0, s73 <= 4 * (z' * @x) + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 2 }-> compare#4(s37, z, z', z'') :|: s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 2 }-> compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 2 }-> s64 :|: s64 >= 0, s64 <= 2 * 0 + (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 8 }-> 1 + mod(s58, 1 + (1 + (1 + 0))) + s67 :|: s65 >= 0, s65 <= 2 * s50 + z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + z'', s50 >= 0, s50 <= 2 * z + z', s31 >= 0, s31 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> s61 :|: s61 >= 0, s61 <= z + 1, z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> s49 :|: s49 >= 0, s49 <= 2 * z + z', z >= 0, z' >= 0 mod(z, z') -{ 2 }-> minus(z, times(z, s62)) :|: s62 >= 0, s62 <= z + 1, z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> s20 :|: s20 >= 0, s20 <= 2 * z + z', z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 9 }-> sub'#3(1 + mod(s60, 1 + (1 + (1 + 0))) + s71, z1, @ys) :|: s68 >= 0, s68 <= 2 * z'' + @y, s69 >= 0, s69 <= 2 * s68 + z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + @y, s60 >= 0, s60 <= 2 * s59 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 4 }-> 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= z' + @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 3 }-> sum#1(s57) :|: s57 >= 0, s57 <= 2 * s21 + z'', s21 >= 0, s21 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 9 }-> s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0 sum#2(z, z') -{ 7 }-> s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 5 }-> s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 Function symbols to be analyzed: {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] #eq: runtime: O(1) [0], size: O(1) [2] #less: runtime: O(1) [1], size: O(1) [2] #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #div: runtime: O(1) [0], size: O(n^1) [1 + z] sum#3: runtime: O(1) [5], size: O(1) [7] sub'#4: runtime: O(1) [4], size: O(n^1) [1 + z + z'] #equal: runtime: O(1) [1], size: O(1) [2] minus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] div: runtime: O(1) [1], size: O(n^1) [1 + z] sum#2: runtime: O(1) [7], size: O(1) [7] ---------------------------------------- (197) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: compare#5 after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 3 ---------------------------------------- (198) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + z', s26 >= 0, s26 <= s25 + 2, s27 >= 0, s27 <= s26 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + z', s29 >= 0, s29 <= s28 + 2, s30 >= 0, s30 <= s29 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + s32 :|: s32 >= 0, s32 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #equal(z, z') -{ 1 }-> s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s51 :|: s51 >= 0, s51 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + s33 :|: s33 >= 0, s33 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + s34 :|: s34 >= 0, s34 <= s3 + 1, s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + s35 :|: s35 >= 0, s35 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s54 :|: s52 >= 0, s52 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s53 >= 0, s53 <= 2 * (1 + z') + s52, s54 >= 0, s54 <= 2 * (1 + z') + s53, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> s24 :|: s24 >= 0, s24 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 4 }-> add'#3(sum#1(s56), z1, @ys) :|: s55 >= 0, s55 <= 2 * z'' + @y, s56 >= 0, s56 <= 2 * s55 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 1 }-> bitToInt'(z, 0) :|: z >= 0 bitToInt(z) -{ 2 }-> bitToInt'(z, 1 + (1 + 0)) :|: z >= 0 bitToInt'(z, z') -{ 1 }-> bitToInt'#1(z, z') :|: z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 3 }-> plus(s73, bitToInt'(@xs, s74)) :|: s73 >= 0, s73 <= 4 * (z' * @x) + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 2 }-> compare#4(s37, z, z', z'') :|: s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 2 }-> compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 2 }-> s64 :|: s64 >= 0, s64 <= 2 * 0 + (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 8 }-> 1 + mod(s58, 1 + (1 + (1 + 0))) + s67 :|: s65 >= 0, s65 <= 2 * s50 + z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + z'', s50 >= 0, s50 <= 2 * z + z', s31 >= 0, s31 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> s61 :|: s61 >= 0, s61 <= z + 1, z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> s49 :|: s49 >= 0, s49 <= 2 * z + z', z >= 0, z' >= 0 mod(z, z') -{ 2 }-> minus(z, times(z, s62)) :|: s62 >= 0, s62 <= z + 1, z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> s20 :|: s20 >= 0, s20 <= 2 * z + z', z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 9 }-> sub'#3(1 + mod(s60, 1 + (1 + (1 + 0))) + s71, z1, @ys) :|: s68 >= 0, s68 <= 2 * z'' + @y, s69 >= 0, s69 <= 2 * s68 + z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + @y, s60 >= 0, s60 <= 2 * s59 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 4 }-> 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= z' + @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 3 }-> sum#1(s57) :|: s57 >= 0, s57 <= 2 * s21 + z'', s21 >= 0, s21 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 9 }-> s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0 sum#2(z, z') -{ 7 }-> s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 5 }-> s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 Function symbols to be analyzed: {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] #eq: runtime: O(1) [0], size: O(1) [2] #less: runtime: O(1) [1], size: O(1) [2] #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #div: runtime: O(1) [0], size: O(n^1) [1 + z] sum#3: runtime: O(1) [5], size: O(1) [7] sub'#4: runtime: O(1) [4], size: O(n^1) [1 + z + z'] #equal: runtime: O(1) [1], size: O(1) [2] minus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] div: runtime: O(1) [1], size: O(n^1) [1 + z] sum#2: runtime: O(1) [7], size: O(1) [7] compare#5: runtime: ?, size: O(1) [3] ---------------------------------------- (199) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: compare#5 after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 4 ---------------------------------------- (200) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + z', s26 >= 0, s26 <= s25 + 2, s27 >= 0, s27 <= s26 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + z', s29 >= 0, s29 <= s28 + 2, s30 >= 0, s30 <= s29 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + s32 :|: s32 >= 0, s32 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #equal(z, z') -{ 1 }-> s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s51 :|: s51 >= 0, s51 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + s33 :|: s33 >= 0, s33 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + s34 :|: s34 >= 0, s34 <= s3 + 1, s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + s35 :|: s35 >= 0, s35 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s54 :|: s52 >= 0, s52 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s53 >= 0, s53 <= 2 * (1 + z') + s52, s54 >= 0, s54 <= 2 * (1 + z') + s53, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> s24 :|: s24 >= 0, s24 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 4 }-> add'#3(sum#1(s56), z1, @ys) :|: s55 >= 0, s55 <= 2 * z'' + @y, s56 >= 0, s56 <= 2 * s55 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 1 }-> bitToInt'(z, 0) :|: z >= 0 bitToInt(z) -{ 2 }-> bitToInt'(z, 1 + (1 + 0)) :|: z >= 0 bitToInt'(z, z') -{ 1 }-> bitToInt'#1(z, z') :|: z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 3 }-> plus(s73, bitToInt'(@xs, s74)) :|: s73 >= 0, s73 <= 4 * (z' * @x) + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 2 }-> compare#4(s37, z, z', z'') :|: s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 2 }-> compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 2 }-> s64 :|: s64 >= 0, s64 <= 2 * 0 + (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 8 }-> 1 + mod(s58, 1 + (1 + (1 + 0))) + s67 :|: s65 >= 0, s65 <= 2 * s50 + z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + z'', s50 >= 0, s50 <= 2 * z + z', s31 >= 0, s31 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> s61 :|: s61 >= 0, s61 <= z + 1, z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> s49 :|: s49 >= 0, s49 <= 2 * z + z', z >= 0, z' >= 0 mod(z, z') -{ 2 }-> minus(z, times(z, s62)) :|: s62 >= 0, s62 <= z + 1, z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> s20 :|: s20 >= 0, s20 <= 2 * z + z', z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 9 }-> sub'#3(1 + mod(s60, 1 + (1 + (1 + 0))) + s71, z1, @ys) :|: s68 >= 0, s68 <= 2 * z'' + @y, s69 >= 0, s69 <= 2 * s68 + z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + @y, s60 >= 0, s60 <= 2 * s59 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 4 }-> 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= z' + @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 3 }-> sum#1(s57) :|: s57 >= 0, s57 <= 2 * s21 + z'', s21 >= 0, s21 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 9 }-> s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0 sum#2(z, z') -{ 7 }-> s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 5 }-> s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 Function symbols to be analyzed: {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] #eq: runtime: O(1) [0], size: O(1) [2] #less: runtime: O(1) [1], size: O(1) [2] #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #div: runtime: O(1) [0], size: O(n^1) [1 + z] sum#3: runtime: O(1) [5], size: O(1) [7] sub'#4: runtime: O(1) [4], size: O(n^1) [1 + z + z'] #equal: runtime: O(1) [1], size: O(1) [2] minus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] div: runtime: O(1) [1], size: O(n^1) [1 + z] sum#2: runtime: O(1) [7], size: O(1) [7] compare#5: runtime: O(1) [4], size: O(1) [3] ---------------------------------------- (201) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (202) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + z', s26 >= 0, s26 <= s25 + 2, s27 >= 0, s27 <= s26 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + z', s29 >= 0, s29 <= s28 + 2, s30 >= 0, s30 <= s29 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + s32 :|: s32 >= 0, s32 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #equal(z, z') -{ 1 }-> s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s51 :|: s51 >= 0, s51 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + s33 :|: s33 >= 0, s33 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + s34 :|: s34 >= 0, s34 <= s3 + 1, s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + s35 :|: s35 >= 0, s35 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s54 :|: s52 >= 0, s52 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s53 >= 0, s53 <= 2 * (1 + z') + s52, s54 >= 0, s54 <= 2 * (1 + z') + s53, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> s24 :|: s24 >= 0, s24 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 4 }-> add'#3(sum#1(s56), z1, @ys) :|: s55 >= 0, s55 <= 2 * z'' + @y, s56 >= 0, s56 <= 2 * s55 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 1 }-> bitToInt'(z, 0) :|: z >= 0 bitToInt(z) -{ 2 }-> bitToInt'(z, 1 + (1 + 0)) :|: z >= 0 bitToInt'(z, z') -{ 1 }-> bitToInt'#1(z, z') :|: z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 3 }-> plus(s73, bitToInt'(@xs, s74)) :|: s73 >= 0, s73 <= 4 * (z' * @x) + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 2 }-> compare#4(s37, z, z', z'') :|: s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 6 }-> s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 2 }-> s64 :|: s64 >= 0, s64 <= 2 * 0 + (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 8 }-> 1 + mod(s58, 1 + (1 + (1 + 0))) + s67 :|: s65 >= 0, s65 <= 2 * s50 + z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + z'', s50 >= 0, s50 <= 2 * z + z', s31 >= 0, s31 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> s61 :|: s61 >= 0, s61 <= z + 1, z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> s49 :|: s49 >= 0, s49 <= 2 * z + z', z >= 0, z' >= 0 mod(z, z') -{ 2 }-> minus(z, times(z, s62)) :|: s62 >= 0, s62 <= z + 1, z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> s20 :|: s20 >= 0, s20 <= 2 * z + z', z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 9 }-> sub'#3(1 + mod(s60, 1 + (1 + (1 + 0))) + s71, z1, @ys) :|: s68 >= 0, s68 <= 2 * z'' + @y, s69 >= 0, s69 <= 2 * s68 + z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + @y, s60 >= 0, s60 <= 2 * s59 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 4 }-> 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= z' + @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 3 }-> sum#1(s57) :|: s57 >= 0, s57 <= 2 * s21 + z'', s21 >= 0, s21 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 9 }-> s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0 sum#2(z, z') -{ 7 }-> s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 5 }-> s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 Function symbols to be analyzed: {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] #eq: runtime: O(1) [0], size: O(1) [2] #less: runtime: O(1) [1], size: O(1) [2] #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #div: runtime: O(1) [0], size: O(n^1) [1 + z] sum#3: runtime: O(1) [5], size: O(1) [7] sub'#4: runtime: O(1) [4], size: O(n^1) [1 + z + z'] #equal: runtime: O(1) [1], size: O(1) [2] minus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] div: runtime: O(1) [1], size: O(n^1) [1 + z] sum#2: runtime: O(1) [7], size: O(1) [7] compare#5: runtime: O(1) [4], size: O(1) [3] ---------------------------------------- (203) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using KoAT for: times after applying outer abstraction to obtain an ITS, resulting in: O(n^2) with polynomial bound: 1 + 4*z*z' ---------------------------------------- (204) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + z', s26 >= 0, s26 <= s25 + 2, s27 >= 0, s27 <= s26 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + z', s29 >= 0, s29 <= s28 + 2, s30 >= 0, s30 <= s29 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + s32 :|: s32 >= 0, s32 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #equal(z, z') -{ 1 }-> s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s51 :|: s51 >= 0, s51 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + s33 :|: s33 >= 0, s33 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + s34 :|: s34 >= 0, s34 <= s3 + 1, s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + s35 :|: s35 >= 0, s35 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s54 :|: s52 >= 0, s52 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s53 >= 0, s53 <= 2 * (1 + z') + s52, s54 >= 0, s54 <= 2 * (1 + z') + s53, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> s24 :|: s24 >= 0, s24 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 4 }-> add'#3(sum#1(s56), z1, @ys) :|: s55 >= 0, s55 <= 2 * z'' + @y, s56 >= 0, s56 <= 2 * s55 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 1 }-> bitToInt'(z, 0) :|: z >= 0 bitToInt(z) -{ 2 }-> bitToInt'(z, 1 + (1 + 0)) :|: z >= 0 bitToInt'(z, z') -{ 1 }-> bitToInt'#1(z, z') :|: z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 3 }-> plus(s73, bitToInt'(@xs, s74)) :|: s73 >= 0, s73 <= 4 * (z' * @x) + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 2 }-> compare#4(s37, z, z', z'') :|: s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 6 }-> s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 2 }-> s64 :|: s64 >= 0, s64 <= 2 * 0 + (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 8 }-> 1 + mod(s58, 1 + (1 + (1 + 0))) + s67 :|: s65 >= 0, s65 <= 2 * s50 + z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + z'', s50 >= 0, s50 <= 2 * z + z', s31 >= 0, s31 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> s61 :|: s61 >= 0, s61 <= z + 1, z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> s49 :|: s49 >= 0, s49 <= 2 * z + z', z >= 0, z' >= 0 mod(z, z') -{ 2 }-> minus(z, times(z, s62)) :|: s62 >= 0, s62 <= z + 1, z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> s20 :|: s20 >= 0, s20 <= 2 * z + z', z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 9 }-> sub'#3(1 + mod(s60, 1 + (1 + (1 + 0))) + s71, z1, @ys) :|: s68 >= 0, s68 <= 2 * z'' + @y, s69 >= 0, s69 <= 2 * s68 + z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + @y, s60 >= 0, s60 <= 2 * s59 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 4 }-> 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= z' + @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 3 }-> sum#1(s57) :|: s57 >= 0, s57 <= 2 * s21 + z'', s21 >= 0, s21 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 9 }-> s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0 sum#2(z, z') -{ 7 }-> s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 5 }-> s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 Function symbols to be analyzed: {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] #eq: runtime: O(1) [0], size: O(1) [2] #less: runtime: O(1) [1], size: O(1) [2] #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #div: runtime: O(1) [0], size: O(n^1) [1 + z] sum#3: runtime: O(1) [5], size: O(1) [7] sub'#4: runtime: O(1) [4], size: O(n^1) [1 + z + z'] #equal: runtime: O(1) [1], size: O(1) [2] minus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] div: runtime: O(1) [1], size: O(n^1) [1 + z] sum#2: runtime: O(1) [7], size: O(1) [7] compare#5: runtime: O(1) [4], size: O(1) [3] times: runtime: ?, size: O(n^2) [1 + 4*z*z'] ---------------------------------------- (205) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: times after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 1 ---------------------------------------- (206) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + z', s26 >= 0, s26 <= s25 + 2, s27 >= 0, s27 <= s26 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + z', s29 >= 0, s29 <= s28 + 2, s30 >= 0, s30 <= s29 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + s32 :|: s32 >= 0, s32 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #equal(z, z') -{ 1 }-> s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s51 :|: s51 >= 0, s51 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + s33 :|: s33 >= 0, s33 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + s34 :|: s34 >= 0, s34 <= s3 + 1, s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + s35 :|: s35 >= 0, s35 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s54 :|: s52 >= 0, s52 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s53 >= 0, s53 <= 2 * (1 + z') + s52, s54 >= 0, s54 <= 2 * (1 + z') + s53, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> s24 :|: s24 >= 0, s24 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 4 }-> add'#3(sum#1(s56), z1, @ys) :|: s55 >= 0, s55 <= 2 * z'' + @y, s56 >= 0, s56 <= 2 * s55 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 1 }-> bitToInt'(z, 0) :|: z >= 0 bitToInt(z) -{ 2 }-> bitToInt'(z, 1 + (1 + 0)) :|: z >= 0 bitToInt'(z, z') -{ 1 }-> bitToInt'#1(z, z') :|: z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 3 }-> plus(s73, bitToInt'(@xs, s74)) :|: s73 >= 0, s73 <= 4 * (z' * @x) + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 2 }-> compare#4(s37, z, z', z'') :|: s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 6 }-> s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 2 }-> s64 :|: s64 >= 0, s64 <= 2 * 0 + (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 8 }-> 1 + mod(s58, 1 + (1 + (1 + 0))) + s67 :|: s65 >= 0, s65 <= 2 * s50 + z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + z'', s50 >= 0, s50 <= 2 * z + z', s31 >= 0, s31 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> s61 :|: s61 >= 0, s61 <= z + 1, z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> s49 :|: s49 >= 0, s49 <= 2 * z + z', z >= 0, z' >= 0 mod(z, z') -{ 2 }-> minus(z, times(z, s62)) :|: s62 >= 0, s62 <= z + 1, z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> s20 :|: s20 >= 0, s20 <= 2 * z + z', z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 9 }-> sub'#3(1 + mod(s60, 1 + (1 + (1 + 0))) + s71, z1, @ys) :|: s68 >= 0, s68 <= 2 * z'' + @y, s69 >= 0, s69 <= 2 * s68 + z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + @y, s60 >= 0, s60 <= 2 * s59 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 4 }-> 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= z' + @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 3 }-> sum#1(s57) :|: s57 >= 0, s57 <= 2 * s21 + z'', s21 >= 0, s21 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 9 }-> s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0 sum#2(z, z') -{ 7 }-> s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 5 }-> s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 Function symbols to be analyzed: {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] #eq: runtime: O(1) [0], size: O(1) [2] #less: runtime: O(1) [1], size: O(1) [2] #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #div: runtime: O(1) [0], size: O(n^1) [1 + z] sum#3: runtime: O(1) [5], size: O(1) [7] sub'#4: runtime: O(1) [4], size: O(n^1) [1 + z + z'] #equal: runtime: O(1) [1], size: O(1) [2] minus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] div: runtime: O(1) [1], size: O(n^1) [1 + z] sum#2: runtime: O(1) [7], size: O(1) [7] compare#5: runtime: O(1) [4], size: O(1) [3] times: runtime: O(1) [1], size: O(n^2) [1 + 4*z*z'] ---------------------------------------- (207) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (208) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + z', s26 >= 0, s26 <= s25 + 2, s27 >= 0, s27 <= s26 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + z', s29 >= 0, s29 <= s28 + 2, s30 >= 0, s30 <= s29 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + s32 :|: s32 >= 0, s32 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #equal(z, z') -{ 1 }-> s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s51 :|: s51 >= 0, s51 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + s33 :|: s33 >= 0, s33 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + s34 :|: s34 >= 0, s34 <= s3 + 1, s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + s35 :|: s35 >= 0, s35 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s54 :|: s52 >= 0, s52 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s53 >= 0, s53 <= 2 * (1 + z') + s52, s54 >= 0, s54 <= 2 * (1 + z') + s53, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> s24 :|: s24 >= 0, s24 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 4 }-> add'#3(sum#1(s56), z1, @ys) :|: s55 >= 0, s55 <= 2 * z'' + @y, s56 >= 0, s56 <= 2 * s55 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 1 }-> bitToInt'(z, 0) :|: z >= 0 bitToInt(z) -{ 2 }-> bitToInt'(z, 1 + (1 + 0)) :|: z >= 0 bitToInt'(z, z') -{ 1 }-> bitToInt'#1(z, z') :|: z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 3 }-> plus(s73, bitToInt'(@xs, s74)) :|: s73 >= 0, s73 <= 4 * (z' * @x) + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 2 }-> compare#4(s37, z, z', z'') :|: s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 6 }-> s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 2 }-> s64 :|: s64 >= 0, s64 <= 2 * 0 + (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 8 }-> 1 + mod(s58, 1 + (1 + (1 + 0))) + s67 :|: s65 >= 0, s65 <= 2 * s50 + z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + z'', s50 >= 0, s50 <= 2 * z + z', s31 >= 0, s31 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> s61 :|: s61 >= 0, s61 <= z + 1, z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> s49 :|: s49 >= 0, s49 <= 2 * z + z', z >= 0, z' >= 0 mod(z, z') -{ 4 }-> s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 1, s78 >= 0, s78 <= 2 * z + s77, s62 >= 0, s62 <= z + 1, z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> s20 :|: s20 >= 0, s20 <= 2 * z + z', z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 9 }-> sub'#3(1 + mod(s60, 1 + (1 + (1 + 0))) + s71, z1, @ys) :|: s68 >= 0, s68 <= 2 * z'' + @y, s69 >= 0, s69 <= 2 * s68 + z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + @y, s60 >= 0, s60 <= 2 * s59 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 4 }-> 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= z' + @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 3 }-> sum#1(s57) :|: s57 >= 0, s57 <= 2 * s21 + z'', s21 >= 0, s21 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 9 }-> s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0 sum#2(z, z') -{ 7 }-> s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 5 }-> s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 Function symbols to be analyzed: {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] #eq: runtime: O(1) [0], size: O(1) [2] #less: runtime: O(1) [1], size: O(1) [2] #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #div: runtime: O(1) [0], size: O(n^1) [1 + z] sum#3: runtime: O(1) [5], size: O(1) [7] sub'#4: runtime: O(1) [4], size: O(n^1) [1 + z + z'] #equal: runtime: O(1) [1], size: O(1) [2] minus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] div: runtime: O(1) [1], size: O(n^1) [1 + z] sum#2: runtime: O(1) [7], size: O(1) [7] compare#5: runtime: O(1) [4], size: O(1) [3] times: runtime: O(1) [1], size: O(n^2) [1 + 4*z*z'] ---------------------------------------- (209) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: bitToInt' after applying outer abstraction to obtain an ITS, resulting in: INF with polynomial bound: ? Computed SIZE bound using CoFloCo for: bitToInt'#1 after applying outer abstraction to obtain an ITS, resulting in: INF with polynomial bound: ? ---------------------------------------- (210) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + z', s26 >= 0, s26 <= s25 + 2, s27 >= 0, s27 <= s26 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + z', s29 >= 0, s29 <= s28 + 2, s30 >= 0, s30 <= s29 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + s32 :|: s32 >= 0, s32 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #equal(z, z') -{ 1 }-> s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s51 :|: s51 >= 0, s51 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + s33 :|: s33 >= 0, s33 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + s34 :|: s34 >= 0, s34 <= s3 + 1, s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + s35 :|: s35 >= 0, s35 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s54 :|: s52 >= 0, s52 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s53 >= 0, s53 <= 2 * (1 + z') + s52, s54 >= 0, s54 <= 2 * (1 + z') + s53, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> s24 :|: s24 >= 0, s24 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 4 }-> add'#3(sum#1(s56), z1, @ys) :|: s55 >= 0, s55 <= 2 * z'' + @y, s56 >= 0, s56 <= 2 * s55 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 1 }-> bitToInt'(z, 0) :|: z >= 0 bitToInt(z) -{ 2 }-> bitToInt'(z, 1 + (1 + 0)) :|: z >= 0 bitToInt'(z, z') -{ 1 }-> bitToInt'#1(z, z') :|: z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 3 }-> plus(s73, bitToInt'(@xs, s74)) :|: s73 >= 0, s73 <= 4 * (z' * @x) + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 2 }-> compare#4(s37, z, z', z'') :|: s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 6 }-> s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 2 }-> s64 :|: s64 >= 0, s64 <= 2 * 0 + (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 8 }-> 1 + mod(s58, 1 + (1 + (1 + 0))) + s67 :|: s65 >= 0, s65 <= 2 * s50 + z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + z'', s50 >= 0, s50 <= 2 * z + z', s31 >= 0, s31 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> s61 :|: s61 >= 0, s61 <= z + 1, z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> s49 :|: s49 >= 0, s49 <= 2 * z + z', z >= 0, z' >= 0 mod(z, z') -{ 4 }-> s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 1, s78 >= 0, s78 <= 2 * z + s77, s62 >= 0, s62 <= z + 1, z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> s20 :|: s20 >= 0, s20 <= 2 * z + z', z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 9 }-> sub'#3(1 + mod(s60, 1 + (1 + (1 + 0))) + s71, z1, @ys) :|: s68 >= 0, s68 <= 2 * z'' + @y, s69 >= 0, s69 <= 2 * s68 + z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + @y, s60 >= 0, s60 <= 2 * s59 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 4 }-> 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= z' + @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 3 }-> sum#1(s57) :|: s57 >= 0, s57 <= 2 * s21 + z'', s21 >= 0, s21 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 9 }-> s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0 sum#2(z, z') -{ 7 }-> s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 5 }-> s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 Function symbols to be analyzed: {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] #eq: runtime: O(1) [0], size: O(1) [2] #less: runtime: O(1) [1], size: O(1) [2] #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #div: runtime: O(1) [0], size: O(n^1) [1 + z] sum#3: runtime: O(1) [5], size: O(1) [7] sub'#4: runtime: O(1) [4], size: O(n^1) [1 + z + z'] #equal: runtime: O(1) [1], size: O(1) [2] minus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] div: runtime: O(1) [1], size: O(n^1) [1 + z] sum#2: runtime: O(1) [7], size: O(1) [7] compare#5: runtime: O(1) [4], size: O(1) [3] times: runtime: O(1) [1], size: O(n^2) [1 + 4*z*z'] bitToInt': runtime: ?, size: INF bitToInt'#1: runtime: ?, size: INF ---------------------------------------- (211) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using KoAT for: bitToInt' after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 8 + 10*z Computed RUNTIME bound using CoFloCo for: bitToInt'#1 after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 2 + 10*z ---------------------------------------- (212) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + z', s26 >= 0, s26 <= s25 + 2, s27 >= 0, s27 <= s26 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + z', s29 >= 0, s29 <= s28 + 2, s30 >= 0, s30 <= s29 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + s32 :|: s32 >= 0, s32 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #equal(z, z') -{ 1 }-> s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s51 :|: s51 >= 0, s51 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + s33 :|: s33 >= 0, s33 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + s34 :|: s34 >= 0, s34 <= s3 + 1, s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + s35 :|: s35 >= 0, s35 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s54 :|: s52 >= 0, s52 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s53 >= 0, s53 <= 2 * (1 + z') + s52, s54 >= 0, s54 <= 2 * (1 + z') + s53, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> s24 :|: s24 >= 0, s24 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 4 }-> add'#3(sum#1(s56), z1, @ys) :|: s55 >= 0, s55 <= 2 * z'' + @y, s56 >= 0, s56 <= 2 * s55 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 1 }-> bitToInt'(z, 0) :|: z >= 0 bitToInt(z) -{ 2 }-> bitToInt'(z, 1 + (1 + 0)) :|: z >= 0 bitToInt'(z, z') -{ 1 }-> bitToInt'#1(z, z') :|: z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 3 }-> plus(s73, bitToInt'(@xs, s74)) :|: s73 >= 0, s73 <= 4 * (z' * @x) + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 2 }-> compare#4(s37, z, z', z'') :|: s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 6 }-> s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 2 }-> s64 :|: s64 >= 0, s64 <= 2 * 0 + (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 8 }-> 1 + mod(s58, 1 + (1 + (1 + 0))) + s67 :|: s65 >= 0, s65 <= 2 * s50 + z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + z'', s50 >= 0, s50 <= 2 * z + z', s31 >= 0, s31 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> s61 :|: s61 >= 0, s61 <= z + 1, z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> s49 :|: s49 >= 0, s49 <= 2 * z + z', z >= 0, z' >= 0 mod(z, z') -{ 4 }-> s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 1, s78 >= 0, s78 <= 2 * z + s77, s62 >= 0, s62 <= z + 1, z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> s20 :|: s20 >= 0, s20 <= 2 * z + z', z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 9 }-> sub'#3(1 + mod(s60, 1 + (1 + (1 + 0))) + s71, z1, @ys) :|: s68 >= 0, s68 <= 2 * z'' + @y, s69 >= 0, s69 <= 2 * s68 + z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + @y, s60 >= 0, s60 <= 2 * s59 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 4 }-> 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= z' + @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 3 }-> sum#1(s57) :|: s57 >= 0, s57 <= 2 * s21 + z'', s21 >= 0, s21 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 9 }-> s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0 sum#2(z, z') -{ 7 }-> s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 5 }-> s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 Function symbols to be analyzed: {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] #eq: runtime: O(1) [0], size: O(1) [2] #less: runtime: O(1) [1], size: O(1) [2] #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #div: runtime: O(1) [0], size: O(n^1) [1 + z] sum#3: runtime: O(1) [5], size: O(1) [7] sub'#4: runtime: O(1) [4], size: O(n^1) [1 + z + z'] #equal: runtime: O(1) [1], size: O(1) [2] minus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] div: runtime: O(1) [1], size: O(n^1) [1 + z] sum#2: runtime: O(1) [7], size: O(1) [7] compare#5: runtime: O(1) [4], size: O(1) [3] times: runtime: O(1) [1], size: O(n^2) [1 + 4*z*z'] bitToInt': runtime: O(n^1) [8 + 10*z], size: INF bitToInt'#1: runtime: O(n^1) [2 + 10*z], size: INF ---------------------------------------- (213) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (214) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + z', s26 >= 0, s26 <= s25 + 2, s27 >= 0, s27 <= s26 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + z', s29 >= 0, s29 <= s28 + 2, s30 >= 0, s30 <= s29 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + s32 :|: s32 >= 0, s32 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #equal(z, z') -{ 1 }-> s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s51 :|: s51 >= 0, s51 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + s33 :|: s33 >= 0, s33 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + s34 :|: s34 >= 0, s34 <= s3 + 1, s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + s35 :|: s35 >= 0, s35 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s54 :|: s52 >= 0, s52 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s53 >= 0, s53 <= 2 * (1 + z') + s52, s54 >= 0, s54 <= 2 * (1 + z') + s53, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> s24 :|: s24 >= 0, s24 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 4 }-> add'#3(sum#1(s56), z1, @ys) :|: s55 >= 0, s55 <= 2 * z'' + @y, s56 >= 0, s56 <= 2 * s55 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 10 + 10*z }-> s79 :|: s79 >= 0, s79 <= inf, z >= 0 bitToInt(z) -{ 9 + 10*z }-> s80 :|: s80 >= 0, s80 <= inf', z >= 0 bitToInt'(z, z') -{ 3 + 10*z }-> s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 12 + 10*@xs }-> s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + s82, s73 >= 0, s73 <= 4 * (z' * @x) + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 2 }-> compare#4(s37, z, z', z'') :|: s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 6 }-> s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 2 }-> s64 :|: s64 >= 0, s64 <= 2 * 0 + (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 8 }-> 1 + mod(s58, 1 + (1 + (1 + 0))) + s67 :|: s65 >= 0, s65 <= 2 * s50 + z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + z'', s50 >= 0, s50 <= 2 * z + z', s31 >= 0, s31 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> s61 :|: s61 >= 0, s61 <= z + 1, z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> s49 :|: s49 >= 0, s49 <= 2 * z + z', z >= 0, z' >= 0 mod(z, z') -{ 4 }-> s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 1, s78 >= 0, s78 <= 2 * z + s77, s62 >= 0, s62 <= z + 1, z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> s20 :|: s20 >= 0, s20 <= 2 * z + z', z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 9 }-> sub'#3(1 + mod(s60, 1 + (1 + (1 + 0))) + s71, z1, @ys) :|: s68 >= 0, s68 <= 2 * z'' + @y, s69 >= 0, s69 <= 2 * s68 + z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + @y, s60 >= 0, s60 <= 2 * s59 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 4 }-> 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= z' + @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 3 }-> sum#1(s57) :|: s57 >= 0, s57 <= 2 * s21 + z'', s21 >= 0, s21 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 9 }-> s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0 sum#2(z, z') -{ 7 }-> s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 5 }-> s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 Function symbols to be analyzed: {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] #eq: runtime: O(1) [0], size: O(1) [2] #less: runtime: O(1) [1], size: O(1) [2] #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #div: runtime: O(1) [0], size: O(n^1) [1 + z] sum#3: runtime: O(1) [5], size: O(1) [7] sub'#4: runtime: O(1) [4], size: O(n^1) [1 + z + z'] #equal: runtime: O(1) [1], size: O(1) [2] minus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] div: runtime: O(1) [1], size: O(n^1) [1 + z] sum#2: runtime: O(1) [7], size: O(1) [7] compare#5: runtime: O(1) [4], size: O(1) [3] times: runtime: O(1) [1], size: O(n^2) [1 + 4*z*z'] bitToInt': runtime: O(n^1) [8 + 10*z], size: INF bitToInt'#1: runtime: O(n^1) [2 + 10*z], size: INF ---------------------------------------- (215) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: sum#1 after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 7 ---------------------------------------- (216) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + z', s26 >= 0, s26 <= s25 + 2, s27 >= 0, s27 <= s26 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + z', s29 >= 0, s29 <= s28 + 2, s30 >= 0, s30 <= s29 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + s32 :|: s32 >= 0, s32 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #equal(z, z') -{ 1 }-> s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s51 :|: s51 >= 0, s51 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + s33 :|: s33 >= 0, s33 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + s34 :|: s34 >= 0, s34 <= s3 + 1, s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + s35 :|: s35 >= 0, s35 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s54 :|: s52 >= 0, s52 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s53 >= 0, s53 <= 2 * (1 + z') + s52, s54 >= 0, s54 <= 2 * (1 + z') + s53, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> s24 :|: s24 >= 0, s24 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 4 }-> add'#3(sum#1(s56), z1, @ys) :|: s55 >= 0, s55 <= 2 * z'' + @y, s56 >= 0, s56 <= 2 * s55 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 10 + 10*z }-> s79 :|: s79 >= 0, s79 <= inf, z >= 0 bitToInt(z) -{ 9 + 10*z }-> s80 :|: s80 >= 0, s80 <= inf', z >= 0 bitToInt'(z, z') -{ 3 + 10*z }-> s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 12 + 10*@xs }-> s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + s82, s73 >= 0, s73 <= 4 * (z' * @x) + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 2 }-> compare#4(s37, z, z', z'') :|: s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 6 }-> s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 2 }-> s64 :|: s64 >= 0, s64 <= 2 * 0 + (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 8 }-> 1 + mod(s58, 1 + (1 + (1 + 0))) + s67 :|: s65 >= 0, s65 <= 2 * s50 + z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + z'', s50 >= 0, s50 <= 2 * z + z', s31 >= 0, s31 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> s61 :|: s61 >= 0, s61 <= z + 1, z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> s49 :|: s49 >= 0, s49 <= 2 * z + z', z >= 0, z' >= 0 mod(z, z') -{ 4 }-> s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 1, s78 >= 0, s78 <= 2 * z + s77, s62 >= 0, s62 <= z + 1, z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> s20 :|: s20 >= 0, s20 <= 2 * z + z', z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 9 }-> sub'#3(1 + mod(s60, 1 + (1 + (1 + 0))) + s71, z1, @ys) :|: s68 >= 0, s68 <= 2 * z'' + @y, s69 >= 0, s69 <= 2 * s68 + z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + @y, s60 >= 0, s60 <= 2 * s59 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 4 }-> 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= z' + @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 3 }-> sum#1(s57) :|: s57 >= 0, s57 <= 2 * s21 + z'', s21 >= 0, s21 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 9 }-> s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0 sum#2(z, z') -{ 7 }-> s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 5 }-> s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 Function symbols to be analyzed: {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] #eq: runtime: O(1) [0], size: O(1) [2] #less: runtime: O(1) [1], size: O(1) [2] #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #div: runtime: O(1) [0], size: O(n^1) [1 + z] sum#3: runtime: O(1) [5], size: O(1) [7] sub'#4: runtime: O(1) [4], size: O(n^1) [1 + z + z'] #equal: runtime: O(1) [1], size: O(1) [2] minus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] div: runtime: O(1) [1], size: O(n^1) [1 + z] sum#2: runtime: O(1) [7], size: O(1) [7] compare#5: runtime: O(1) [4], size: O(1) [3] times: runtime: O(1) [1], size: O(n^2) [1 + 4*z*z'] bitToInt': runtime: O(n^1) [8 + 10*z], size: INF bitToInt'#1: runtime: O(n^1) [2 + 10*z], size: INF sum#1: runtime: ?, size: O(1) [7] ---------------------------------------- (217) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: sum#1 after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 9 ---------------------------------------- (218) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + z', s26 >= 0, s26 <= s25 + 2, s27 >= 0, s27 <= s26 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + z', s29 >= 0, s29 <= s28 + 2, s30 >= 0, s30 <= s29 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + s32 :|: s32 >= 0, s32 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #equal(z, z') -{ 1 }-> s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s51 :|: s51 >= 0, s51 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + s33 :|: s33 >= 0, s33 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + s34 :|: s34 >= 0, s34 <= s3 + 1, s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + s35 :|: s35 >= 0, s35 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s54 :|: s52 >= 0, s52 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s53 >= 0, s53 <= 2 * (1 + z') + s52, s54 >= 0, s54 <= 2 * (1 + z') + s53, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> s24 :|: s24 >= 0, s24 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 4 }-> add'#3(sum#1(s56), z1, @ys) :|: s55 >= 0, s55 <= 2 * z'' + @y, s56 >= 0, s56 <= 2 * s55 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 10 + 10*z }-> s79 :|: s79 >= 0, s79 <= inf, z >= 0 bitToInt(z) -{ 9 + 10*z }-> s80 :|: s80 >= 0, s80 <= inf', z >= 0 bitToInt'(z, z') -{ 3 + 10*z }-> s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 12 + 10*@xs }-> s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + s82, s73 >= 0, s73 <= 4 * (z' * @x) + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 2 }-> compare#4(s37, z, z', z'') :|: s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 6 }-> s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 2 }-> s64 :|: s64 >= 0, s64 <= 2 * 0 + (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 8 }-> 1 + mod(s58, 1 + (1 + (1 + 0))) + s67 :|: s65 >= 0, s65 <= 2 * s50 + z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + z'', s50 >= 0, s50 <= 2 * z + z', s31 >= 0, s31 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> s61 :|: s61 >= 0, s61 <= z + 1, z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> s49 :|: s49 >= 0, s49 <= 2 * z + z', z >= 0, z' >= 0 mod(z, z') -{ 4 }-> s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 1, s78 >= 0, s78 <= 2 * z + s77, s62 >= 0, s62 <= z + 1, z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> s20 :|: s20 >= 0, s20 <= 2 * z + z', z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 9 }-> sub'#3(1 + mod(s60, 1 + (1 + (1 + 0))) + s71, z1, @ys) :|: s68 >= 0, s68 <= 2 * z'' + @y, s69 >= 0, s69 <= 2 * s68 + z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + @y, s60 >= 0, s60 <= 2 * s59 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 4 }-> 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= z' + @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 3 }-> sum#1(s57) :|: s57 >= 0, s57 <= 2 * s21 + z'', s21 >= 0, s21 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 9 }-> s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0 sum#2(z, z') -{ 7 }-> s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 5 }-> s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 Function symbols to be analyzed: {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] #eq: runtime: O(1) [0], size: O(1) [2] #less: runtime: O(1) [1], size: O(1) [2] #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #div: runtime: O(1) [0], size: O(n^1) [1 + z] sum#3: runtime: O(1) [5], size: O(1) [7] sub'#4: runtime: O(1) [4], size: O(n^1) [1 + z + z'] #equal: runtime: O(1) [1], size: O(1) [2] minus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] div: runtime: O(1) [1], size: O(n^1) [1 + z] sum#2: runtime: O(1) [7], size: O(1) [7] compare#5: runtime: O(1) [4], size: O(1) [3] times: runtime: O(1) [1], size: O(n^2) [1 + 4*z*z'] bitToInt': runtime: O(n^1) [8 + 10*z], size: INF bitToInt'#1: runtime: O(n^1) [2 + 10*z], size: INF sum#1: runtime: O(1) [9], size: O(1) [7] ---------------------------------------- (219) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (220) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + z', s26 >= 0, s26 <= s25 + 2, s27 >= 0, s27 <= s26 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + z', s29 >= 0, s29 <= s28 + 2, s30 >= 0, s30 <= s29 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + s32 :|: s32 >= 0, s32 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #equal(z, z') -{ 1 }-> s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s51 :|: s51 >= 0, s51 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + s33 :|: s33 >= 0, s33 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + s34 :|: s34 >= 0, s34 <= s3 + 1, s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + s35 :|: s35 >= 0, s35 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s54 :|: s52 >= 0, s52 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s53 >= 0, s53 <= 2 * (1 + z') + s52, s54 >= 0, s54 <= 2 * (1 + z') + s53, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> s24 :|: s24 >= 0, s24 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 13 }-> add'#3(s84, z1, @ys) :|: s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + @y, s56 >= 0, s56 <= 2 * s55 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 10 + 10*z }-> s79 :|: s79 >= 0, s79 <= inf, z >= 0 bitToInt(z) -{ 9 + 10*z }-> s80 :|: s80 >= 0, s80 <= inf', z >= 0 bitToInt'(z, z') -{ 3 + 10*z }-> s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 12 + 10*@xs }-> s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + s82, s73 >= 0, s73 <= 4 * (z' * @x) + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 2 }-> compare#4(s37, z, z', z'') :|: s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 6 }-> s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 2 }-> s64 :|: s64 >= 0, s64 <= 2 * 0 + (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 8 }-> 1 + mod(s58, 1 + (1 + (1 + 0))) + s67 :|: s65 >= 0, s65 <= 2 * s50 + z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + z'', s50 >= 0, s50 <= 2 * z + z', s31 >= 0, s31 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> s61 :|: s61 >= 0, s61 <= z + 1, z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> s49 :|: s49 >= 0, s49 <= 2 * z + z', z >= 0, z' >= 0 mod(z, z') -{ 4 }-> s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 1, s78 >= 0, s78 <= 2 * z + s77, s62 >= 0, s62 <= z + 1, z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> s20 :|: s20 >= 0, s20 <= 2 * z + z', z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 9 }-> sub'#3(1 + mod(s60, 1 + (1 + (1 + 0))) + s71, z1, @ys) :|: s68 >= 0, s68 <= 2 * z'' + @y, s69 >= 0, s69 <= 2 * s68 + z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + @y, s60 >= 0, s60 <= 2 * s59 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 4 }-> 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= z' + @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 12 }-> s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + z'', s21 >= 0, s21 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 9 }-> s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0 sum#2(z, z') -{ 7 }-> s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 5 }-> s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 Function symbols to be analyzed: {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] #eq: runtime: O(1) [0], size: O(1) [2] #less: runtime: O(1) [1], size: O(1) [2] #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #div: runtime: O(1) [0], size: O(n^1) [1 + z] sum#3: runtime: O(1) [5], size: O(1) [7] sub'#4: runtime: O(1) [4], size: O(n^1) [1 + z + z'] #equal: runtime: O(1) [1], size: O(1) [2] minus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] div: runtime: O(1) [1], size: O(n^1) [1 + z] sum#2: runtime: O(1) [7], size: O(1) [7] compare#5: runtime: O(1) [4], size: O(1) [3] times: runtime: O(1) [1], size: O(n^2) [1 + 4*z*z'] bitToInt': runtime: O(n^1) [8 + 10*z], size: INF bitToInt'#1: runtime: O(n^1) [2 + 10*z], size: INF sum#1: runtime: O(1) [9], size: O(1) [7] ---------------------------------------- (221) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: compare#4 after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 3 + z' ---------------------------------------- (222) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + z', s26 >= 0, s26 <= s25 + 2, s27 >= 0, s27 <= s26 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + z', s29 >= 0, s29 <= s28 + 2, s30 >= 0, s30 <= s29 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + s32 :|: s32 >= 0, s32 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #equal(z, z') -{ 1 }-> s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s51 :|: s51 >= 0, s51 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + s33 :|: s33 >= 0, s33 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + s34 :|: s34 >= 0, s34 <= s3 + 1, s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + s35 :|: s35 >= 0, s35 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s54 :|: s52 >= 0, s52 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s53 >= 0, s53 <= 2 * (1 + z') + s52, s54 >= 0, s54 <= 2 * (1 + z') + s53, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> s24 :|: s24 >= 0, s24 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 13 }-> add'#3(s84, z1, @ys) :|: s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + @y, s56 >= 0, s56 <= 2 * s55 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 10 + 10*z }-> s79 :|: s79 >= 0, s79 <= inf, z >= 0 bitToInt(z) -{ 9 + 10*z }-> s80 :|: s80 >= 0, s80 <= inf', z >= 0 bitToInt'(z, z') -{ 3 + 10*z }-> s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 12 + 10*@xs }-> s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + s82, s73 >= 0, s73 <= 4 * (z' * @x) + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 2 }-> compare#4(s37, z, z', z'') :|: s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 6 }-> s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 2 }-> s64 :|: s64 >= 0, s64 <= 2 * 0 + (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 8 }-> 1 + mod(s58, 1 + (1 + (1 + 0))) + s67 :|: s65 >= 0, s65 <= 2 * s50 + z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + z'', s50 >= 0, s50 <= 2 * z + z', s31 >= 0, s31 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> s61 :|: s61 >= 0, s61 <= z + 1, z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> s49 :|: s49 >= 0, s49 <= 2 * z + z', z >= 0, z' >= 0 mod(z, z') -{ 4 }-> s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 1, s78 >= 0, s78 <= 2 * z + s77, s62 >= 0, s62 <= z + 1, z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> s20 :|: s20 >= 0, s20 <= 2 * z + z', z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 9 }-> sub'#3(1 + mod(s60, 1 + (1 + (1 + 0))) + s71, z1, @ys) :|: s68 >= 0, s68 <= 2 * z'' + @y, s69 >= 0, s69 <= 2 * s68 + z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + @y, s60 >= 0, s60 <= 2 * s59 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 4 }-> 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= z' + @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 12 }-> s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + z'', s21 >= 0, s21 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 9 }-> s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0 sum#2(z, z') -{ 7 }-> s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 5 }-> s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 Function symbols to be analyzed: {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] #eq: runtime: O(1) [0], size: O(1) [2] #less: runtime: O(1) [1], size: O(1) [2] #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #div: runtime: O(1) [0], size: O(n^1) [1 + z] sum#3: runtime: O(1) [5], size: O(1) [7] sub'#4: runtime: O(1) [4], size: O(n^1) [1 + z + z'] #equal: runtime: O(1) [1], size: O(1) [2] minus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] div: runtime: O(1) [1], size: O(n^1) [1 + z] sum#2: runtime: O(1) [7], size: O(1) [7] compare#5: runtime: O(1) [4], size: O(1) [3] times: runtime: O(1) [1], size: O(n^2) [1 + 4*z*z'] bitToInt': runtime: O(n^1) [8 + 10*z], size: INF bitToInt'#1: runtime: O(n^1) [2 + 10*z], size: INF sum#1: runtime: O(1) [9], size: O(1) [7] compare#4: runtime: ?, size: O(n^1) [3 + z'] ---------------------------------------- (223) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: compare#4 after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 6 ---------------------------------------- (224) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + z', s26 >= 0, s26 <= s25 + 2, s27 >= 0, s27 <= s26 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + z', s29 >= 0, s29 <= s28 + 2, s30 >= 0, s30 <= s29 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + s32 :|: s32 >= 0, s32 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #equal(z, z') -{ 1 }-> s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s51 :|: s51 >= 0, s51 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + s33 :|: s33 >= 0, s33 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + s34 :|: s34 >= 0, s34 <= s3 + 1, s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + s35 :|: s35 >= 0, s35 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s54 :|: s52 >= 0, s52 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s53 >= 0, s53 <= 2 * (1 + z') + s52, s54 >= 0, s54 <= 2 * (1 + z') + s53, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> s24 :|: s24 >= 0, s24 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 13 }-> add'#3(s84, z1, @ys) :|: s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + @y, s56 >= 0, s56 <= 2 * s55 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 10 + 10*z }-> s79 :|: s79 >= 0, s79 <= inf, z >= 0 bitToInt(z) -{ 9 + 10*z }-> s80 :|: s80 >= 0, s80 <= inf', z >= 0 bitToInt'(z, z') -{ 3 + 10*z }-> s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 12 + 10*@xs }-> s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + s82, s73 >= 0, s73 <= 4 * (z' * @x) + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 2 }-> compare#4(s37, z, z', z'') :|: s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 6 }-> s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 2 }-> s64 :|: s64 >= 0, s64 <= 2 * 0 + (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 8 }-> 1 + mod(s58, 1 + (1 + (1 + 0))) + s67 :|: s65 >= 0, s65 <= 2 * s50 + z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + z'', s50 >= 0, s50 <= 2 * z + z', s31 >= 0, s31 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> s61 :|: s61 >= 0, s61 <= z + 1, z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> s49 :|: s49 >= 0, s49 <= 2 * z + z', z >= 0, z' >= 0 mod(z, z') -{ 4 }-> s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 1, s78 >= 0, s78 <= 2 * z + s77, s62 >= 0, s62 <= z + 1, z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> s20 :|: s20 >= 0, s20 <= 2 * z + z', z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 9 }-> sub'#3(1 + mod(s60, 1 + (1 + (1 + 0))) + s71, z1, @ys) :|: s68 >= 0, s68 <= 2 * z'' + @y, s69 >= 0, s69 <= 2 * s68 + z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + @y, s60 >= 0, s60 <= 2 * s59 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 4 }-> 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= z' + @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 12 }-> s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + z'', s21 >= 0, s21 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 9 }-> s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0 sum#2(z, z') -{ 7 }-> s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 5 }-> s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 Function symbols to be analyzed: {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] #eq: runtime: O(1) [0], size: O(1) [2] #less: runtime: O(1) [1], size: O(1) [2] #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #div: runtime: O(1) [0], size: O(n^1) [1 + z] sum#3: runtime: O(1) [5], size: O(1) [7] sub'#4: runtime: O(1) [4], size: O(n^1) [1 + z + z'] #equal: runtime: O(1) [1], size: O(1) [2] minus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] div: runtime: O(1) [1], size: O(n^1) [1 + z] sum#2: runtime: O(1) [7], size: O(1) [7] compare#5: runtime: O(1) [4], size: O(1) [3] times: runtime: O(1) [1], size: O(n^2) [1 + 4*z*z'] bitToInt': runtime: O(n^1) [8 + 10*z], size: INF bitToInt'#1: runtime: O(n^1) [2 + 10*z], size: INF sum#1: runtime: O(1) [9], size: O(1) [7] compare#4: runtime: O(1) [6], size: O(n^1) [3 + z'] ---------------------------------------- (225) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (226) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + z', s26 >= 0, s26 <= s25 + 2, s27 >= 0, s27 <= s26 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + z', s29 >= 0, s29 <= s28 + 2, s30 >= 0, s30 <= s29 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + s32 :|: s32 >= 0, s32 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #equal(z, z') -{ 1 }-> s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s51 :|: s51 >= 0, s51 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + s33 :|: s33 >= 0, s33 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + s34 :|: s34 >= 0, s34 <= s3 + 1, s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + s35 :|: s35 >= 0, s35 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s54 :|: s52 >= 0, s52 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s53 >= 0, s53 <= 2 * (1 + z') + s52, s54 >= 0, s54 <= 2 * (1 + z') + s53, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> s24 :|: s24 >= 0, s24 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 13 }-> add'#3(s84, z1, @ys) :|: s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + @y, s56 >= 0, s56 <= 2 * s55 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 10 + 10*z }-> s79 :|: s79 >= 0, s79 <= inf, z >= 0 bitToInt(z) -{ 9 + 10*z }-> s80 :|: s80 >= 0, s80 <= inf', z >= 0 bitToInt'(z, z') -{ 3 + 10*z }-> s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 12 + 10*@xs }-> s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + s82, s73 >= 0, s73 <= 4 * (z' * @x) + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 8 }-> s86 :|: s86 >= 0, s86 <= z + 3, s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 6 }-> s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 2 }-> s64 :|: s64 >= 0, s64 <= 2 * 0 + (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 8 }-> 1 + mod(s58, 1 + (1 + (1 + 0))) + s67 :|: s65 >= 0, s65 <= 2 * s50 + z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + z'', s50 >= 0, s50 <= 2 * z + z', s31 >= 0, s31 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> s61 :|: s61 >= 0, s61 <= z + 1, z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> s49 :|: s49 >= 0, s49 <= 2 * z + z', z >= 0, z' >= 0 mod(z, z') -{ 4 }-> s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 1, s78 >= 0, s78 <= 2 * z + s77, s62 >= 0, s62 <= z + 1, z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> s20 :|: s20 >= 0, s20 <= 2 * z + z', z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 9 }-> sub'#3(1 + mod(s60, 1 + (1 + (1 + 0))) + s71, z1, @ys) :|: s68 >= 0, s68 <= 2 * z'' + @y, s69 >= 0, s69 <= 2 * s68 + z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + @y, s60 >= 0, s60 <= 2 * s59 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 4 }-> 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= z' + @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 12 }-> s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + z'', s21 >= 0, s21 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 9 }-> s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0 sum#2(z, z') -{ 7 }-> s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 5 }-> s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 Function symbols to be analyzed: {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] #eq: runtime: O(1) [0], size: O(1) [2] #less: runtime: O(1) [1], size: O(1) [2] #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #div: runtime: O(1) [0], size: O(n^1) [1 + z] sum#3: runtime: O(1) [5], size: O(1) [7] sub'#4: runtime: O(1) [4], size: O(n^1) [1 + z + z'] #equal: runtime: O(1) [1], size: O(1) [2] minus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] div: runtime: O(1) [1], size: O(n^1) [1 + z] sum#2: runtime: O(1) [7], size: O(1) [7] compare#5: runtime: O(1) [4], size: O(1) [3] times: runtime: O(1) [1], size: O(n^2) [1 + 4*z*z'] bitToInt': runtime: O(n^1) [8 + 10*z], size: INF bitToInt'#1: runtime: O(n^1) [2 + 10*z], size: INF sum#1: runtime: O(1) [9], size: O(1) [7] compare#4: runtime: O(1) [6], size: O(n^1) [3 + z'] ---------------------------------------- (227) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: mod after applying outer abstraction to obtain an ITS, resulting in: INF with polynomial bound: ? ---------------------------------------- (228) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + z', s26 >= 0, s26 <= s25 + 2, s27 >= 0, s27 <= s26 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + z', s29 >= 0, s29 <= s28 + 2, s30 >= 0, s30 <= s29 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + s32 :|: s32 >= 0, s32 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #equal(z, z') -{ 1 }-> s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s51 :|: s51 >= 0, s51 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + s33 :|: s33 >= 0, s33 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + s34 :|: s34 >= 0, s34 <= s3 + 1, s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + s35 :|: s35 >= 0, s35 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s54 :|: s52 >= 0, s52 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s53 >= 0, s53 <= 2 * (1 + z') + s52, s54 >= 0, s54 <= 2 * (1 + z') + s53, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> s24 :|: s24 >= 0, s24 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 13 }-> add'#3(s84, z1, @ys) :|: s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + @y, s56 >= 0, s56 <= 2 * s55 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 10 + 10*z }-> s79 :|: s79 >= 0, s79 <= inf, z >= 0 bitToInt(z) -{ 9 + 10*z }-> s80 :|: s80 >= 0, s80 <= inf', z >= 0 bitToInt'(z, z') -{ 3 + 10*z }-> s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 12 + 10*@xs }-> s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + s82, s73 >= 0, s73 <= 4 * (z' * @x) + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 8 }-> s86 :|: s86 >= 0, s86 <= z + 3, s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 6 }-> s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 2 }-> s64 :|: s64 >= 0, s64 <= 2 * 0 + (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 8 }-> 1 + mod(s58, 1 + (1 + (1 + 0))) + s67 :|: s65 >= 0, s65 <= 2 * s50 + z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + z'', s50 >= 0, s50 <= 2 * z + z', s31 >= 0, s31 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> s61 :|: s61 >= 0, s61 <= z + 1, z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> s49 :|: s49 >= 0, s49 <= 2 * z + z', z >= 0, z' >= 0 mod(z, z') -{ 4 }-> s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 1, s78 >= 0, s78 <= 2 * z + s77, s62 >= 0, s62 <= z + 1, z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> s20 :|: s20 >= 0, s20 <= 2 * z + z', z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 9 }-> sub'#3(1 + mod(s60, 1 + (1 + (1 + 0))) + s71, z1, @ys) :|: s68 >= 0, s68 <= 2 * z'' + @y, s69 >= 0, s69 <= 2 * s68 + z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + @y, s60 >= 0, s60 <= 2 * s59 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 4 }-> 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= z' + @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 12 }-> s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + z'', s21 >= 0, s21 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 9 }-> s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0 sum#2(z, z') -{ 7 }-> s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 5 }-> s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 Function symbols to be analyzed: {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] #eq: runtime: O(1) [0], size: O(1) [2] #less: runtime: O(1) [1], size: O(1) [2] #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #div: runtime: O(1) [0], size: O(n^1) [1 + z] sum#3: runtime: O(1) [5], size: O(1) [7] sub'#4: runtime: O(1) [4], size: O(n^1) [1 + z + z'] #equal: runtime: O(1) [1], size: O(1) [2] minus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] div: runtime: O(1) [1], size: O(n^1) [1 + z] sum#2: runtime: O(1) [7], size: O(1) [7] compare#5: runtime: O(1) [4], size: O(1) [3] times: runtime: O(1) [1], size: O(n^2) [1 + 4*z*z'] bitToInt': runtime: O(n^1) [8 + 10*z], size: INF bitToInt'#1: runtime: O(n^1) [2 + 10*z], size: INF sum#1: runtime: O(1) [9], size: O(1) [7] compare#4: runtime: O(1) [6], size: O(n^1) [3 + z'] mod: runtime: ?, size: INF ---------------------------------------- (229) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: mod after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 4 ---------------------------------------- (230) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + z', s26 >= 0, s26 <= s25 + 2, s27 >= 0, s27 <= s26 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + z', s29 >= 0, s29 <= s28 + 2, s30 >= 0, s30 <= s29 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + s32 :|: s32 >= 0, s32 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #equal(z, z') -{ 1 }-> s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s51 :|: s51 >= 0, s51 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + s33 :|: s33 >= 0, s33 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + s34 :|: s34 >= 0, s34 <= s3 + 1, s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + s35 :|: s35 >= 0, s35 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s54 :|: s52 >= 0, s52 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s53 >= 0, s53 <= 2 * (1 + z') + s52, s54 >= 0, s54 <= 2 * (1 + z') + s53, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> s24 :|: s24 >= 0, s24 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 13 }-> add'#3(s84, z1, @ys) :|: s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + @y, s56 >= 0, s56 <= 2 * s55 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 10 + 10*z }-> s79 :|: s79 >= 0, s79 <= inf, z >= 0 bitToInt(z) -{ 9 + 10*z }-> s80 :|: s80 >= 0, s80 <= inf', z >= 0 bitToInt'(z, z') -{ 3 + 10*z }-> s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 12 + 10*@xs }-> s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + s82, s73 >= 0, s73 <= 4 * (z' * @x) + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 8 }-> s86 :|: s86 >= 0, s86 <= z + 3, s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 6 }-> s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 2 }-> s64 :|: s64 >= 0, s64 <= 2 * 0 + (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 8 }-> 1 + mod(s58, 1 + (1 + (1 + 0))) + s67 :|: s65 >= 0, s65 <= 2 * s50 + z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + z'', s50 >= 0, s50 <= 2 * z + z', s31 >= 0, s31 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> s61 :|: s61 >= 0, s61 <= z + 1, z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> s49 :|: s49 >= 0, s49 <= 2 * z + z', z >= 0, z' >= 0 mod(z, z') -{ 4 }-> s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 1, s78 >= 0, s78 <= 2 * z + s77, s62 >= 0, s62 <= z + 1, z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> s20 :|: s20 >= 0, s20 <= 2 * z + z', z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 9 }-> sub'#3(1 + mod(s60, 1 + (1 + (1 + 0))) + s71, z1, @ys) :|: s68 >= 0, s68 <= 2 * z'' + @y, s69 >= 0, s69 <= 2 * s68 + z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + @y, s60 >= 0, s60 <= 2 * s59 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 4 }-> 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= z' + @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 12 }-> s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + z'', s21 >= 0, s21 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 9 }-> s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0 sum#2(z, z') -{ 7 }-> s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 5 }-> s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 Function symbols to be analyzed: {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] #eq: runtime: O(1) [0], size: O(1) [2] #less: runtime: O(1) [1], size: O(1) [2] #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #div: runtime: O(1) [0], size: O(n^1) [1 + z] sum#3: runtime: O(1) [5], size: O(1) [7] sub'#4: runtime: O(1) [4], size: O(n^1) [1 + z + z'] #equal: runtime: O(1) [1], size: O(1) [2] minus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] div: runtime: O(1) [1], size: O(n^1) [1 + z] sum#2: runtime: O(1) [7], size: O(1) [7] compare#5: runtime: O(1) [4], size: O(1) [3] times: runtime: O(1) [1], size: O(n^2) [1 + 4*z*z'] bitToInt': runtime: O(n^1) [8 + 10*z], size: INF bitToInt'#1: runtime: O(n^1) [2 + 10*z], size: INF sum#1: runtime: O(1) [9], size: O(1) [7] compare#4: runtime: O(1) [6], size: O(n^1) [3 + z'] mod: runtime: O(1) [4], size: INF ---------------------------------------- (231) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (232) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + z', s26 >= 0, s26 <= s25 + 2, s27 >= 0, s27 <= s26 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + z', s29 >= 0, s29 <= s28 + 2, s30 >= 0, s30 <= s29 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + s32 :|: s32 >= 0, s32 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #equal(z, z') -{ 1 }-> s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s51 :|: s51 >= 0, s51 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + s33 :|: s33 >= 0, s33 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + s34 :|: s34 >= 0, s34 <= s3 + 1, s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + s35 :|: s35 >= 0, s35 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s54 :|: s52 >= 0, s52 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s53 >= 0, s53 <= 2 * (1 + z') + s52, s54 >= 0, s54 <= 2 * (1 + z') + s53, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> s24 :|: s24 >= 0, s24 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 13 }-> add'#3(s84, z1, @ys) :|: s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + @y, s56 >= 0, s56 <= 2 * s55 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 10 + 10*z }-> s79 :|: s79 >= 0, s79 <= inf, z >= 0 bitToInt(z) -{ 9 + 10*z }-> s80 :|: s80 >= 0, s80 <= inf', z >= 0 bitToInt'(z, z') -{ 3 + 10*z }-> s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 12 + 10*@xs }-> s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + s82, s73 >= 0, s73 <= 4 * (z' * @x) + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 8 }-> s86 :|: s86 >= 0, s86 <= z + 3, s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 6 }-> s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 2 }-> s64 :|: s64 >= 0, s64 <= 2 * 0 + (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 12 }-> 1 + s87 + s67 :|: s87 >= 0, s87 <= inf2, s65 >= 0, s65 <= 2 * s50 + z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + z'', s50 >= 0, s50 <= 2 * z + z', s31 >= 0, s31 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> s61 :|: s61 >= 0, s61 <= z + 1, z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> s49 :|: s49 >= 0, s49 <= 2 * z + z', z >= 0, z' >= 0 mod(z, z') -{ 4 }-> s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 1, s78 >= 0, s78 <= 2 * z + s77, s62 >= 0, s62 <= z + 1, z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> s20 :|: s20 >= 0, s20 <= 2 * z + z', z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 13 }-> sub'#3(1 + s88 + s71, z1, @ys) :|: s88 >= 0, s88 <= inf3, s68 >= 0, s68 <= 2 * z'' + @y, s69 >= 0, s69 <= 2 * s68 + z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + @y, s60 >= 0, s60 <= 2 * s59 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 4 }-> 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= z' + @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 12 }-> s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + z'', s21 >= 0, s21 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 9 }-> s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0 sum#2(z, z') -{ 7 }-> s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 5 }-> s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 Function symbols to be analyzed: {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] #eq: runtime: O(1) [0], size: O(1) [2] #less: runtime: O(1) [1], size: O(1) [2] #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #div: runtime: O(1) [0], size: O(n^1) [1 + z] sum#3: runtime: O(1) [5], size: O(1) [7] sub'#4: runtime: O(1) [4], size: O(n^1) [1 + z + z'] #equal: runtime: O(1) [1], size: O(1) [2] minus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] div: runtime: O(1) [1], size: O(n^1) [1 + z] sum#2: runtime: O(1) [7], size: O(1) [7] compare#5: runtime: O(1) [4], size: O(1) [3] times: runtime: O(1) [1], size: O(n^2) [1 + 4*z*z'] bitToInt': runtime: O(n^1) [8 + 10*z], size: INF bitToInt'#1: runtime: O(n^1) [2 + 10*z], size: INF sum#1: runtime: O(1) [9], size: O(1) [7] compare#4: runtime: O(1) [6], size: O(n^1) [3 + z'] mod: runtime: O(1) [4], size: INF ---------------------------------------- (233) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: bitToInt after applying outer abstraction to obtain an ITS, resulting in: INF with polynomial bound: ? ---------------------------------------- (234) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + z', s26 >= 0, s26 <= s25 + 2, s27 >= 0, s27 <= s26 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + z', s29 >= 0, s29 <= s28 + 2, s30 >= 0, s30 <= s29 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + s32 :|: s32 >= 0, s32 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #equal(z, z') -{ 1 }-> s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s51 :|: s51 >= 0, s51 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + s33 :|: s33 >= 0, s33 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + s34 :|: s34 >= 0, s34 <= s3 + 1, s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + s35 :|: s35 >= 0, s35 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s54 :|: s52 >= 0, s52 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s53 >= 0, s53 <= 2 * (1 + z') + s52, s54 >= 0, s54 <= 2 * (1 + z') + s53, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> s24 :|: s24 >= 0, s24 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 13 }-> add'#3(s84, z1, @ys) :|: s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + @y, s56 >= 0, s56 <= 2 * s55 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 10 + 10*z }-> s79 :|: s79 >= 0, s79 <= inf, z >= 0 bitToInt(z) -{ 9 + 10*z }-> s80 :|: s80 >= 0, s80 <= inf', z >= 0 bitToInt'(z, z') -{ 3 + 10*z }-> s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 12 + 10*@xs }-> s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + s82, s73 >= 0, s73 <= 4 * (z' * @x) + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 8 }-> s86 :|: s86 >= 0, s86 <= z + 3, s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 6 }-> s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 2 }-> s64 :|: s64 >= 0, s64 <= 2 * 0 + (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 12 }-> 1 + s87 + s67 :|: s87 >= 0, s87 <= inf2, s65 >= 0, s65 <= 2 * s50 + z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + z'', s50 >= 0, s50 <= 2 * z + z', s31 >= 0, s31 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> s61 :|: s61 >= 0, s61 <= z + 1, z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> s49 :|: s49 >= 0, s49 <= 2 * z + z', z >= 0, z' >= 0 mod(z, z') -{ 4 }-> s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 1, s78 >= 0, s78 <= 2 * z + s77, s62 >= 0, s62 <= z + 1, z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> s20 :|: s20 >= 0, s20 <= 2 * z + z', z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 13 }-> sub'#3(1 + s88 + s71, z1, @ys) :|: s88 >= 0, s88 <= inf3, s68 >= 0, s68 <= 2 * z'' + @y, s69 >= 0, s69 <= 2 * s68 + z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + @y, s60 >= 0, s60 <= 2 * s59 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 4 }-> 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= z' + @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 12 }-> s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + z'', s21 >= 0, s21 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 9 }-> s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0 sum#2(z, z') -{ 7 }-> s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 5 }-> s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 Function symbols to be analyzed: {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] #eq: runtime: O(1) [0], size: O(1) [2] #less: runtime: O(1) [1], size: O(1) [2] #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #div: runtime: O(1) [0], size: O(n^1) [1 + z] sum#3: runtime: O(1) [5], size: O(1) [7] sub'#4: runtime: O(1) [4], size: O(n^1) [1 + z + z'] #equal: runtime: O(1) [1], size: O(1) [2] minus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] div: runtime: O(1) [1], size: O(n^1) [1 + z] sum#2: runtime: O(1) [7], size: O(1) [7] compare#5: runtime: O(1) [4], size: O(1) [3] times: runtime: O(1) [1], size: O(n^2) [1 + 4*z*z'] bitToInt': runtime: O(n^1) [8 + 10*z], size: INF bitToInt'#1: runtime: O(n^1) [2 + 10*z], size: INF sum#1: runtime: O(1) [9], size: O(1) [7] compare#4: runtime: O(1) [6], size: O(n^1) [3 + z'] mod: runtime: O(1) [4], size: INF bitToInt: runtime: ?, size: INF ---------------------------------------- (235) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: bitToInt after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 10 + 10*z ---------------------------------------- (236) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + z', s26 >= 0, s26 <= s25 + 2, s27 >= 0, s27 <= s26 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + z', s29 >= 0, s29 <= s28 + 2, s30 >= 0, s30 <= s29 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + s32 :|: s32 >= 0, s32 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #equal(z, z') -{ 1 }-> s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s51 :|: s51 >= 0, s51 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + s33 :|: s33 >= 0, s33 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + s34 :|: s34 >= 0, s34 <= s3 + 1, s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + s35 :|: s35 >= 0, s35 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s54 :|: s52 >= 0, s52 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s53 >= 0, s53 <= 2 * (1 + z') + s52, s54 >= 0, s54 <= 2 * (1 + z') + s53, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> s24 :|: s24 >= 0, s24 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 13 }-> add'#3(s84, z1, @ys) :|: s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + @y, s56 >= 0, s56 <= 2 * s55 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 10 + 10*z }-> s79 :|: s79 >= 0, s79 <= inf, z >= 0 bitToInt(z) -{ 9 + 10*z }-> s80 :|: s80 >= 0, s80 <= inf', z >= 0 bitToInt'(z, z') -{ 3 + 10*z }-> s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 12 + 10*@xs }-> s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + s82, s73 >= 0, s73 <= 4 * (z' * @x) + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 8 }-> s86 :|: s86 >= 0, s86 <= z + 3, s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 6 }-> s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 2 }-> s64 :|: s64 >= 0, s64 <= 2 * 0 + (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 12 }-> 1 + s87 + s67 :|: s87 >= 0, s87 <= inf2, s65 >= 0, s65 <= 2 * s50 + z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + z'', s50 >= 0, s50 <= 2 * z + z', s31 >= 0, s31 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> s61 :|: s61 >= 0, s61 <= z + 1, z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> s49 :|: s49 >= 0, s49 <= 2 * z + z', z >= 0, z' >= 0 mod(z, z') -{ 4 }-> s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 1, s78 >= 0, s78 <= 2 * z + s77, s62 >= 0, s62 <= z + 1, z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> s20 :|: s20 >= 0, s20 <= 2 * z + z', z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 13 }-> sub'#3(1 + s88 + s71, z1, @ys) :|: s88 >= 0, s88 <= inf3, s68 >= 0, s68 <= 2 * z'' + @y, s69 >= 0, s69 <= 2 * s68 + z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + @y, s60 >= 0, s60 <= 2 * s59 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 4 }-> 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= z' + @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 12 }-> s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + z'', s21 >= 0, s21 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 9 }-> s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0 sum#2(z, z') -{ 7 }-> s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 5 }-> s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 Function symbols to be analyzed: {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] #eq: runtime: O(1) [0], size: O(1) [2] #less: runtime: O(1) [1], size: O(1) [2] #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #div: runtime: O(1) [0], size: O(n^1) [1 + z] sum#3: runtime: O(1) [5], size: O(1) [7] sub'#4: runtime: O(1) [4], size: O(n^1) [1 + z + z'] #equal: runtime: O(1) [1], size: O(1) [2] minus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] div: runtime: O(1) [1], size: O(n^1) [1 + z] sum#2: runtime: O(1) [7], size: O(1) [7] compare#5: runtime: O(1) [4], size: O(1) [3] times: runtime: O(1) [1], size: O(n^2) [1 + 4*z*z'] bitToInt': runtime: O(n^1) [8 + 10*z], size: INF bitToInt'#1: runtime: O(n^1) [2 + 10*z], size: INF sum#1: runtime: O(1) [9], size: O(1) [7] compare#4: runtime: O(1) [6], size: O(n^1) [3 + z'] mod: runtime: O(1) [4], size: INF bitToInt: runtime: O(n^1) [10 + 10*z], size: INF ---------------------------------------- (237) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (238) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + z', s26 >= 0, s26 <= s25 + 2, s27 >= 0, s27 <= s26 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + z', s29 >= 0, s29 <= s28 + 2, s30 >= 0, s30 <= s29 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + s32 :|: s32 >= 0, s32 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #equal(z, z') -{ 1 }-> s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s51 :|: s51 >= 0, s51 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + s33 :|: s33 >= 0, s33 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + s34 :|: s34 >= 0, s34 <= s3 + 1, s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + s35 :|: s35 >= 0, s35 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s54 :|: s52 >= 0, s52 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s53 >= 0, s53 <= 2 * (1 + z') + s52, s54 >= 0, s54 <= 2 * (1 + z') + s53, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> s24 :|: s24 >= 0, s24 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 13 }-> add'#3(s84, z1, @ys) :|: s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + @y, s56 >= 0, s56 <= 2 * s55 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 10 + 10*z }-> s79 :|: s79 >= 0, s79 <= inf, z >= 0 bitToInt(z) -{ 9 + 10*z }-> s80 :|: s80 >= 0, s80 <= inf', z >= 0 bitToInt'(z, z') -{ 3 + 10*z }-> s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 12 + 10*@xs }-> s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + s82, s73 >= 0, s73 <= 4 * (z' * @x) + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 8 }-> s86 :|: s86 >= 0, s86 <= z + 3, s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 6 }-> s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 2 }-> s64 :|: s64 >= 0, s64 <= 2 * 0 + (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 12 }-> 1 + s87 + s67 :|: s87 >= 0, s87 <= inf2, s65 >= 0, s65 <= 2 * s50 + z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + z'', s50 >= 0, s50 <= 2 * z + z', s31 >= 0, s31 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> s61 :|: s61 >= 0, s61 <= z + 1, z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> s49 :|: s49 >= 0, s49 <= 2 * z + z', z >= 0, z' >= 0 mod(z, z') -{ 4 }-> s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 1, s78 >= 0, s78 <= 2 * z + s77, s62 >= 0, s62 <= z + 1, z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> s20 :|: s20 >= 0, s20 <= 2 * z + z', z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 13 }-> sub'#3(1 + s88 + s71, z1, @ys) :|: s88 >= 0, s88 <= inf3, s68 >= 0, s68 <= 2 * z'' + @y, s69 >= 0, s69 <= 2 * s68 + z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + @y, s60 >= 0, s60 <= 2 * s59 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 4 }-> 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= z' + @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 12 }-> s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + z'', s21 >= 0, s21 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 9 }-> s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0 sum#2(z, z') -{ 7 }-> s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 5 }-> s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 Function symbols to be analyzed: {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] #eq: runtime: O(1) [0], size: O(1) [2] #less: runtime: O(1) [1], size: O(1) [2] #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #div: runtime: O(1) [0], size: O(n^1) [1 + z] sum#3: runtime: O(1) [5], size: O(1) [7] sub'#4: runtime: O(1) [4], size: O(n^1) [1 + z + z'] #equal: runtime: O(1) [1], size: O(1) [2] minus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] div: runtime: O(1) [1], size: O(n^1) [1 + z] sum#2: runtime: O(1) [7], size: O(1) [7] compare#5: runtime: O(1) [4], size: O(1) [3] times: runtime: O(1) [1], size: O(n^2) [1 + 4*z*z'] bitToInt': runtime: O(n^1) [8 + 10*z], size: INF bitToInt'#1: runtime: O(n^1) [2 + 10*z], size: INF sum#1: runtime: O(1) [9], size: O(1) [7] compare#4: runtime: O(1) [6], size: O(n^1) [3 + z'] mod: runtime: O(1) [4], size: INF bitToInt: runtime: O(n^1) [10 + 10*z], size: INF ---------------------------------------- (239) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: sum after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 7 ---------------------------------------- (240) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + z', s26 >= 0, s26 <= s25 + 2, s27 >= 0, s27 <= s26 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + z', s29 >= 0, s29 <= s28 + 2, s30 >= 0, s30 <= s29 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + s32 :|: s32 >= 0, s32 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #equal(z, z') -{ 1 }-> s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s51 :|: s51 >= 0, s51 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + s33 :|: s33 >= 0, s33 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + s34 :|: s34 >= 0, s34 <= s3 + 1, s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + s35 :|: s35 >= 0, s35 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s54 :|: s52 >= 0, s52 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s53 >= 0, s53 <= 2 * (1 + z') + s52, s54 >= 0, s54 <= 2 * (1 + z') + s53, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> s24 :|: s24 >= 0, s24 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 13 }-> add'#3(s84, z1, @ys) :|: s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + @y, s56 >= 0, s56 <= 2 * s55 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 10 + 10*z }-> s79 :|: s79 >= 0, s79 <= inf, z >= 0 bitToInt(z) -{ 9 + 10*z }-> s80 :|: s80 >= 0, s80 <= inf', z >= 0 bitToInt'(z, z') -{ 3 + 10*z }-> s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 12 + 10*@xs }-> s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + s82, s73 >= 0, s73 <= 4 * (z' * @x) + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 8 }-> s86 :|: s86 >= 0, s86 <= z + 3, s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 6 }-> s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 2 }-> s64 :|: s64 >= 0, s64 <= 2 * 0 + (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 12 }-> 1 + s87 + s67 :|: s87 >= 0, s87 <= inf2, s65 >= 0, s65 <= 2 * s50 + z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + z'', s50 >= 0, s50 <= 2 * z + z', s31 >= 0, s31 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> s61 :|: s61 >= 0, s61 <= z + 1, z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> s49 :|: s49 >= 0, s49 <= 2 * z + z', z >= 0, z' >= 0 mod(z, z') -{ 4 }-> s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 1, s78 >= 0, s78 <= 2 * z + s77, s62 >= 0, s62 <= z + 1, z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> s20 :|: s20 >= 0, s20 <= 2 * z + z', z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 13 }-> sub'#3(1 + s88 + s71, z1, @ys) :|: s88 >= 0, s88 <= inf3, s68 >= 0, s68 <= 2 * z'' + @y, s69 >= 0, s69 <= 2 * s68 + z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + @y, s60 >= 0, s60 <= 2 * s59 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 4 }-> 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= z' + @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 12 }-> s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + z'', s21 >= 0, s21 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 9 }-> s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0 sum#2(z, z') -{ 7 }-> s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 5 }-> s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 Function symbols to be analyzed: {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] #eq: runtime: O(1) [0], size: O(1) [2] #less: runtime: O(1) [1], size: O(1) [2] #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #div: runtime: O(1) [0], size: O(n^1) [1 + z] sum#3: runtime: O(1) [5], size: O(1) [7] sub'#4: runtime: O(1) [4], size: O(n^1) [1 + z + z'] #equal: runtime: O(1) [1], size: O(1) [2] minus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] div: runtime: O(1) [1], size: O(n^1) [1 + z] sum#2: runtime: O(1) [7], size: O(1) [7] compare#5: runtime: O(1) [4], size: O(1) [3] times: runtime: O(1) [1], size: O(n^2) [1 + 4*z*z'] bitToInt': runtime: O(n^1) [8 + 10*z], size: INF bitToInt'#1: runtime: O(n^1) [2 + 10*z], size: INF sum#1: runtime: O(1) [9], size: O(1) [7] compare#4: runtime: O(1) [6], size: O(n^1) [3 + z'] mod: runtime: O(1) [4], size: INF bitToInt: runtime: O(n^1) [10 + 10*z], size: INF sum: runtime: ?, size: O(1) [7] ---------------------------------------- (241) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: sum after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 12 ---------------------------------------- (242) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + z', s26 >= 0, s26 <= s25 + 2, s27 >= 0, s27 <= s26 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + z', s29 >= 0, s29 <= s28 + 2, s30 >= 0, s30 <= s29 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + s32 :|: s32 >= 0, s32 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #equal(z, z') -{ 1 }-> s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s51 :|: s51 >= 0, s51 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + s33 :|: s33 >= 0, s33 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + s34 :|: s34 >= 0, s34 <= s3 + 1, s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + s35 :|: s35 >= 0, s35 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s54 :|: s52 >= 0, s52 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s53 >= 0, s53 <= 2 * (1 + z') + s52, s54 >= 0, s54 <= 2 * (1 + z') + s53, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> s24 :|: s24 >= 0, s24 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 13 }-> add'#3(s84, z1, @ys) :|: s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + @y, s56 >= 0, s56 <= 2 * s55 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 10 + 10*z }-> s79 :|: s79 >= 0, s79 <= inf, z >= 0 bitToInt(z) -{ 9 + 10*z }-> s80 :|: s80 >= 0, s80 <= inf', z >= 0 bitToInt'(z, z') -{ 3 + 10*z }-> s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 12 + 10*@xs }-> s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + s82, s73 >= 0, s73 <= 4 * (z' * @x) + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 8 }-> s86 :|: s86 >= 0, s86 <= z + 3, s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 6 }-> s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 2 }-> s64 :|: s64 >= 0, s64 <= 2 * 0 + (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 12 }-> 1 + s87 + s67 :|: s87 >= 0, s87 <= inf2, s65 >= 0, s65 <= 2 * s50 + z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + z'', s50 >= 0, s50 <= 2 * z + z', s31 >= 0, s31 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> s61 :|: s61 >= 0, s61 <= z + 1, z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> s49 :|: s49 >= 0, s49 <= 2 * z + z', z >= 0, z' >= 0 mod(z, z') -{ 4 }-> s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 1, s78 >= 0, s78 <= 2 * z + s77, s62 >= 0, s62 <= z + 1, z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> s20 :|: s20 >= 0, s20 <= 2 * z + z', z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 13 }-> sub'#3(1 + s88 + s71, z1, @ys) :|: s88 >= 0, s88 <= inf3, s68 >= 0, s68 <= 2 * z'' + @y, s69 >= 0, s69 <= 2 * s68 + z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + @y, s60 >= 0, s60 <= 2 * s59 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 4 }-> 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= z' + @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 12 }-> s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + z'', s21 >= 0, s21 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 9 }-> s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0 sum#2(z, z') -{ 7 }-> s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 5 }-> s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 Function symbols to be analyzed: {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] #eq: runtime: O(1) [0], size: O(1) [2] #less: runtime: O(1) [1], size: O(1) [2] #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #div: runtime: O(1) [0], size: O(n^1) [1 + z] sum#3: runtime: O(1) [5], size: O(1) [7] sub'#4: runtime: O(1) [4], size: O(n^1) [1 + z + z'] #equal: runtime: O(1) [1], size: O(1) [2] minus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] div: runtime: O(1) [1], size: O(n^1) [1 + z] sum#2: runtime: O(1) [7], size: O(1) [7] compare#5: runtime: O(1) [4], size: O(1) [3] times: runtime: O(1) [1], size: O(n^2) [1 + 4*z*z'] bitToInt': runtime: O(n^1) [8 + 10*z], size: INF bitToInt'#1: runtime: O(n^1) [2 + 10*z], size: INF sum#1: runtime: O(1) [9], size: O(1) [7] compare#4: runtime: O(1) [6], size: O(n^1) [3 + z'] mod: runtime: O(1) [4], size: INF bitToInt: runtime: O(n^1) [10 + 10*z], size: INF sum: runtime: O(1) [12], size: O(1) [7] ---------------------------------------- (243) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (244) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + z', s26 >= 0, s26 <= s25 + 2, s27 >= 0, s27 <= s26 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + z', s29 >= 0, s29 <= s28 + 2, s30 >= 0, s30 <= s29 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + s32 :|: s32 >= 0, s32 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #equal(z, z') -{ 1 }-> s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s51 :|: s51 >= 0, s51 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + s33 :|: s33 >= 0, s33 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + s34 :|: s34 >= 0, s34 <= s3 + 1, s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + s35 :|: s35 >= 0, s35 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s54 :|: s52 >= 0, s52 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s53 >= 0, s53 <= 2 * (1 + z') + s52, s54 >= 0, s54 <= 2 * (1 + z') + s53, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> s24 :|: s24 >= 0, s24 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 13 }-> add'#3(s84, z1, @ys) :|: s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + @y, s56 >= 0, s56 <= 2 * s55 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 10 + 10*z }-> s79 :|: s79 >= 0, s79 <= inf, z >= 0 bitToInt(z) -{ 9 + 10*z }-> s80 :|: s80 >= 0, s80 <= inf', z >= 0 bitToInt'(z, z') -{ 3 + 10*z }-> s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 12 + 10*@xs }-> s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + s82, s73 >= 0, s73 <= 4 * (z' * @x) + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 8 }-> s86 :|: s86 >= 0, s86 <= z + 3, s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 6 }-> s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 2 }-> s64 :|: s64 >= 0, s64 <= 2 * 0 + (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 12 }-> 1 + s87 + s67 :|: s87 >= 0, s87 <= inf2, s65 >= 0, s65 <= 2 * s50 + z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + z'', s50 >= 0, s50 <= 2 * z + z', s31 >= 0, s31 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> s61 :|: s61 >= 0, s61 <= z + 1, z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> s49 :|: s49 >= 0, s49 <= 2 * z + z', z >= 0, z' >= 0 mod(z, z') -{ 4 }-> s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 1, s78 >= 0, s78 <= 2 * z + s77, s62 >= 0, s62 <= z + 1, z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> s20 :|: s20 >= 0, s20 <= 2 * z + z', z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 13 }-> sub'#3(1 + s88 + s71, z1, @ys) :|: s88 >= 0, s88 <= inf3, s68 >= 0, s68 <= 2 * z'' + @y, s69 >= 0, s69 <= 2 * s68 + z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + @y, s60 >= 0, s60 <= 2 * s59 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 4 }-> 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= z' + @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 12 }-> s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + z'', s21 >= 0, s21 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 9 }-> s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0 sum#2(z, z') -{ 7 }-> s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 5 }-> s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 Function symbols to be analyzed: {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] #eq: runtime: O(1) [0], size: O(1) [2] #less: runtime: O(1) [1], size: O(1) [2] #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #div: runtime: O(1) [0], size: O(n^1) [1 + z] sum#3: runtime: O(1) [5], size: O(1) [7] sub'#4: runtime: O(1) [4], size: O(n^1) [1 + z + z'] #equal: runtime: O(1) [1], size: O(1) [2] minus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] div: runtime: O(1) [1], size: O(n^1) [1 + z] sum#2: runtime: O(1) [7], size: O(1) [7] compare#5: runtime: O(1) [4], size: O(1) [3] times: runtime: O(1) [1], size: O(n^2) [1 + 4*z*z'] bitToInt': runtime: O(n^1) [8 + 10*z], size: INF bitToInt'#1: runtime: O(n^1) [2 + 10*z], size: INF sum#1: runtime: O(1) [9], size: O(1) [7] compare#4: runtime: O(1) [6], size: O(n^1) [3 + z'] mod: runtime: O(1) [4], size: INF bitToInt: runtime: O(n^1) [10 + 10*z], size: INF sum: runtime: O(1) [12], size: O(1) [7] ---------------------------------------- (245) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using KoAT for: add'#2 after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 28 + 32*z1 Computed SIZE bound using KoAT for: add'#1 after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 32*z Computed SIZE bound using KoAT for: add' after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 32*z Computed SIZE bound using KoAT for: add'#3 after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: z + 32*z' ---------------------------------------- (246) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + z', s26 >= 0, s26 <= s25 + 2, s27 >= 0, s27 <= s26 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + z', s29 >= 0, s29 <= s28 + 2, s30 >= 0, s30 <= s29 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + s32 :|: s32 >= 0, s32 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #equal(z, z') -{ 1 }-> s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s51 :|: s51 >= 0, s51 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + s33 :|: s33 >= 0, s33 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + s34 :|: s34 >= 0, s34 <= s3 + 1, s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + s35 :|: s35 >= 0, s35 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s54 :|: s52 >= 0, s52 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s53 >= 0, s53 <= 2 * (1 + z') + s52, s54 >= 0, s54 <= 2 * (1 + z') + s53, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> s24 :|: s24 >= 0, s24 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 13 }-> add'#3(s84, z1, @ys) :|: s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + @y, s56 >= 0, s56 <= 2 * s55 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 10 + 10*z }-> s79 :|: s79 >= 0, s79 <= inf, z >= 0 bitToInt(z) -{ 9 + 10*z }-> s80 :|: s80 >= 0, s80 <= inf', z >= 0 bitToInt'(z, z') -{ 3 + 10*z }-> s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 12 + 10*@xs }-> s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + s82, s73 >= 0, s73 <= 4 * (z' * @x) + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 8 }-> s86 :|: s86 >= 0, s86 <= z + 3, s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 6 }-> s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 2 }-> s64 :|: s64 >= 0, s64 <= 2 * 0 + (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 12 }-> 1 + s87 + s67 :|: s87 >= 0, s87 <= inf2, s65 >= 0, s65 <= 2 * s50 + z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + z'', s50 >= 0, s50 <= 2 * z + z', s31 >= 0, s31 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> s61 :|: s61 >= 0, s61 <= z + 1, z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> s49 :|: s49 >= 0, s49 <= 2 * z + z', z >= 0, z' >= 0 mod(z, z') -{ 4 }-> s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 1, s78 >= 0, s78 <= 2 * z + s77, s62 >= 0, s62 <= z + 1, z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> s20 :|: s20 >= 0, s20 <= 2 * z + z', z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 13 }-> sub'#3(1 + s88 + s71, z1, @ys) :|: s88 >= 0, s88 <= inf3, s68 >= 0, s68 <= 2 * z'' + @y, s69 >= 0, s69 <= 2 * s68 + z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + @y, s60 >= 0, s60 <= 2 * s59 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 4 }-> 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= z' + @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 12 }-> s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + z'', s21 >= 0, s21 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 9 }-> s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0 sum#2(z, z') -{ 7 }-> s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 5 }-> s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 Function symbols to be analyzed: {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] #eq: runtime: O(1) [0], size: O(1) [2] #less: runtime: O(1) [1], size: O(1) [2] #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #div: runtime: O(1) [0], size: O(n^1) [1 + z] sum#3: runtime: O(1) [5], size: O(1) [7] sub'#4: runtime: O(1) [4], size: O(n^1) [1 + z + z'] #equal: runtime: O(1) [1], size: O(1) [2] minus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] div: runtime: O(1) [1], size: O(n^1) [1 + z] sum#2: runtime: O(1) [7], size: O(1) [7] compare#5: runtime: O(1) [4], size: O(1) [3] times: runtime: O(1) [1], size: O(n^2) [1 + 4*z*z'] bitToInt': runtime: O(n^1) [8 + 10*z], size: INF bitToInt'#1: runtime: O(n^1) [2 + 10*z], size: INF sum#1: runtime: O(1) [9], size: O(1) [7] compare#4: runtime: O(1) [6], size: O(n^1) [3 + z'] mod: runtime: O(1) [4], size: INF bitToInt: runtime: O(n^1) [10 + 10*z], size: INF sum: runtime: O(1) [12], size: O(1) [7] add'#2: runtime: ?, size: O(n^1) [28 + 32*z1] add'#1: runtime: ?, size: O(n^1) [32*z] add': runtime: ?, size: O(n^1) [32*z] add'#3: runtime: ?, size: O(n^1) [z + 32*z'] ---------------------------------------- (247) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using KoAT for: add'#2 after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 2 + 48*z + 16*z1 Computed RUNTIME bound using KoAT for: add'#1 after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 4 + 16*z + 48*z' Computed RUNTIME bound using KoAT for: add' after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 5 + 16*z + 48*z' Computed RUNTIME bound using CoFloCo for: add'#3 after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 6 + 16*z' + 48*z'' ---------------------------------------- (248) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + z', s26 >= 0, s26 <= s25 + 2, s27 >= 0, s27 <= s26 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + z', s29 >= 0, s29 <= s28 + 2, s30 >= 0, s30 <= s29 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + s32 :|: s32 >= 0, s32 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #equal(z, z') -{ 1 }-> s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s51 :|: s51 >= 0, s51 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + s33 :|: s33 >= 0, s33 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + s34 :|: s34 >= 0, s34 <= s3 + 1, s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + s35 :|: s35 >= 0, s35 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s54 :|: s52 >= 0, s52 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s53 >= 0, s53 <= 2 * (1 + z') + s52, s54 >= 0, s54 <= 2 * (1 + z') + s53, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> s24 :|: s24 >= 0, s24 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 2 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add(z, z') -{ 1 }-> add'(z, z', 0) :|: z' >= 0, z >= 0 add'(z, z', z'') -{ 1 }-> add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 13 }-> add'#3(s84, z1, @ys) :|: s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + @y, s56 >= 0, s56 <= 2 * s55 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 1 }-> 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 10 + 10*z }-> s79 :|: s79 >= 0, s79 <= inf, z >= 0 bitToInt(z) -{ 9 + 10*z }-> s80 :|: s80 >= 0, s80 <= inf', z >= 0 bitToInt'(z, z') -{ 3 + 10*z }-> s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 12 + 10*@xs }-> s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + s82, s73 >= 0, s73 <= 4 * (z' * @x) + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 8 }-> s86 :|: s86 >= 0, s86 <= z + 3, s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 6 }-> s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 2 }-> s64 :|: s64 >= 0, s64 <= 2 * 0 + (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 12 }-> 1 + s87 + s67 :|: s87 >= 0, s87 <= inf2, s65 >= 0, s65 <= 2 * s50 + z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + z'', s50 >= 0, s50 <= 2 * z + z', s31 >= 0, s31 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> s61 :|: s61 >= 0, s61 <= z + 1, z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> s49 :|: s49 >= 0, s49 <= 2 * z + z', z >= 0, z' >= 0 mod(z, z') -{ 4 }-> s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 1, s78 >= 0, s78 <= 2 * z + s77, s62 >= 0, s62 <= z + 1, z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> s20 :|: s20 >= 0, s20 <= 2 * z + z', z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 13 }-> sub'#3(1 + s88 + s71, z1, @ys) :|: s88 >= 0, s88 <= inf3, s68 >= 0, s68 <= 2 * z'' + @y, s69 >= 0, s69 <= 2 * s68 + z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + @y, s60 >= 0, s60 <= 2 * s59 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 4 }-> 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= z' + @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 12 }-> s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + z'', s21 >= 0, s21 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 9 }-> s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0 sum#2(z, z') -{ 7 }-> s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 5 }-> s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 Function symbols to be analyzed: {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] #eq: runtime: O(1) [0], size: O(1) [2] #less: runtime: O(1) [1], size: O(1) [2] #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #div: runtime: O(1) [0], size: O(n^1) [1 + z] sum#3: runtime: O(1) [5], size: O(1) [7] sub'#4: runtime: O(1) [4], size: O(n^1) [1 + z + z'] #equal: runtime: O(1) [1], size: O(1) [2] minus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] div: runtime: O(1) [1], size: O(n^1) [1 + z] sum#2: runtime: O(1) [7], size: O(1) [7] compare#5: runtime: O(1) [4], size: O(1) [3] times: runtime: O(1) [1], size: O(n^2) [1 + 4*z*z'] bitToInt': runtime: O(n^1) [8 + 10*z], size: INF bitToInt'#1: runtime: O(n^1) [2 + 10*z], size: INF sum#1: runtime: O(1) [9], size: O(1) [7] compare#4: runtime: O(1) [6], size: O(n^1) [3 + z'] mod: runtime: O(1) [4], size: INF bitToInt: runtime: O(n^1) [10 + 10*z], size: INF sum: runtime: O(1) [12], size: O(1) [7] add'#2: runtime: O(n^1) [2 + 48*z + 16*z1], size: O(n^1) [28 + 32*z1] add'#1: runtime: O(n^1) [4 + 16*z + 48*z'], size: O(n^1) [32*z] add': runtime: O(n^1) [5 + 16*z + 48*z'], size: O(n^1) [32*z] add'#3: runtime: O(n^1) [6 + 16*z' + 48*z''], size: O(n^1) [z + 32*z'] ---------------------------------------- (249) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (250) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + z', s26 >= 0, s26 <= s25 + 2, s27 >= 0, s27 <= s26 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + z', s29 >= 0, s29 <= s28 + 2, s30 >= 0, s30 <= s29 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + s32 :|: s32 >= 0, s32 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #equal(z, z') -{ 1 }-> s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s51 :|: s51 >= 0, s51 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + s33 :|: s33 >= 0, s33 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + s34 :|: s34 >= 0, s34 <= s3 + 1, s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + s35 :|: s35 >= 0, s35 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s54 :|: s52 >= 0, s52 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s53 >= 0, s53 <= 2 * (1 + z') + s52, s54 >= 0, s54 <= 2 * (1 + z') + s53, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> s24 :|: s24 >= 0, s24 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 7 + 16*z + 48*z' }-> s89 :|: s89 >= 0, s89 <= 32 * z, z' >= 0, z >= 0 add(z, z') -{ 6 + 16*z + 48*z' }-> s90 :|: s90 >= 0, s90 <= 32 * z, z' >= 0, z >= 0 add'(z, z', z'') -{ 5 + 16*z + 48*z' }-> s91 :|: s91 >= 0, s91 <= 32 * z, z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 3 + 16*@xs + 48*z' }-> s92 :|: s92 >= 0, s92 <= 32 * @xs + 28, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 19 + 48*@ys + 16*z1 }-> s93 :|: s93 >= 0, s93 <= s84 + 32 * z1, s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + @y, s56 >= 0, s56 <= 2 * s55 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 6 + 16*z' + 48*z'' }-> 1 + @z + s94 :|: s94 >= 0, s94 <= 32 * z', z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 10 + 10*z }-> s79 :|: s79 >= 0, s79 <= inf, z >= 0 bitToInt(z) -{ 9 + 10*z }-> s80 :|: s80 >= 0, s80 <= inf', z >= 0 bitToInt'(z, z') -{ 3 + 10*z }-> s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 12 + 10*@xs }-> s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + s82, s73 >= 0, s73 <= 4 * (z' * @x) + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 8 }-> s86 :|: s86 >= 0, s86 <= z + 3, s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 6 }-> s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 2 }-> s64 :|: s64 >= 0, s64 <= 2 * 0 + (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 12 }-> 1 + s87 + s67 :|: s87 >= 0, s87 <= inf2, s65 >= 0, s65 <= 2 * s50 + z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + z'', s50 >= 0, s50 <= 2 * z + z', s31 >= 0, s31 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> s61 :|: s61 >= 0, s61 <= z + 1, z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> s49 :|: s49 >= 0, s49 <= 2 * z + z', z >= 0, z' >= 0 mod(z, z') -{ 4 }-> s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 1, s78 >= 0, s78 <= 2 * z + s77, s62 >= 0, s62 <= z + 1, z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> s20 :|: s20 >= 0, s20 <= 2 * z + z', z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 13 }-> sub'#3(1 + s88 + s71, z1, @ys) :|: s88 >= 0, s88 <= inf3, s68 >= 0, s68 <= 2 * z'' + @y, s69 >= 0, s69 <= 2 * s68 + z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + @y, s60 >= 0, s60 <= 2 * s59 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 4 }-> 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= z' + @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 12 }-> s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + z'', s21 >= 0, s21 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 9 }-> s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0 sum#2(z, z') -{ 7 }-> s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 5 }-> s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 Function symbols to be analyzed: {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] #eq: runtime: O(1) [0], size: O(1) [2] #less: runtime: O(1) [1], size: O(1) [2] #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #div: runtime: O(1) [0], size: O(n^1) [1 + z] sum#3: runtime: O(1) [5], size: O(1) [7] sub'#4: runtime: O(1) [4], size: O(n^1) [1 + z + z'] #equal: runtime: O(1) [1], size: O(1) [2] minus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] div: runtime: O(1) [1], size: O(n^1) [1 + z] sum#2: runtime: O(1) [7], size: O(1) [7] compare#5: runtime: O(1) [4], size: O(1) [3] times: runtime: O(1) [1], size: O(n^2) [1 + 4*z*z'] bitToInt': runtime: O(n^1) [8 + 10*z], size: INF bitToInt'#1: runtime: O(n^1) [2 + 10*z], size: INF sum#1: runtime: O(1) [9], size: O(1) [7] compare#4: runtime: O(1) [6], size: O(n^1) [3 + z'] mod: runtime: O(1) [4], size: INF bitToInt: runtime: O(n^1) [10 + 10*z], size: INF sum: runtime: O(1) [12], size: O(1) [7] add'#2: runtime: O(n^1) [2 + 48*z + 16*z1], size: O(n^1) [28 + 32*z1] add'#1: runtime: O(n^1) [4 + 16*z + 48*z'], size: O(n^1) [32*z] add': runtime: O(n^1) [5 + 16*z + 48*z'], size: O(n^1) [32*z] add'#3: runtime: O(n^1) [6 + 16*z' + 48*z''], size: O(n^1) [z + 32*z'] ---------------------------------------- (251) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: compare#3 after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 3 + z ---------------------------------------- (252) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + z', s26 >= 0, s26 <= s25 + 2, s27 >= 0, s27 <= s26 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + z', s29 >= 0, s29 <= s28 + 2, s30 >= 0, s30 <= s29 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + s32 :|: s32 >= 0, s32 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #equal(z, z') -{ 1 }-> s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s51 :|: s51 >= 0, s51 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + s33 :|: s33 >= 0, s33 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + s34 :|: s34 >= 0, s34 <= s3 + 1, s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + s35 :|: s35 >= 0, s35 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s54 :|: s52 >= 0, s52 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s53 >= 0, s53 <= 2 * (1 + z') + s52, s54 >= 0, s54 <= 2 * (1 + z') + s53, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> s24 :|: s24 >= 0, s24 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 7 + 16*z + 48*z' }-> s89 :|: s89 >= 0, s89 <= 32 * z, z' >= 0, z >= 0 add(z, z') -{ 6 + 16*z + 48*z' }-> s90 :|: s90 >= 0, s90 <= 32 * z, z' >= 0, z >= 0 add'(z, z', z'') -{ 5 + 16*z + 48*z' }-> s91 :|: s91 >= 0, s91 <= 32 * z, z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 3 + 16*@xs + 48*z' }-> s92 :|: s92 >= 0, s92 <= 32 * @xs + 28, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 19 + 48*@ys + 16*z1 }-> s93 :|: s93 >= 0, s93 <= s84 + 32 * z1, s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + @y, s56 >= 0, s56 <= 2 * s55 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 6 + 16*z' + 48*z'' }-> 1 + @z + s94 :|: s94 >= 0, s94 <= 32 * z', z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 10 + 10*z }-> s79 :|: s79 >= 0, s79 <= inf, z >= 0 bitToInt(z) -{ 9 + 10*z }-> s80 :|: s80 >= 0, s80 <= inf', z >= 0 bitToInt'(z, z') -{ 3 + 10*z }-> s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 12 + 10*@xs }-> s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + s82, s73 >= 0, s73 <= 4 * (z' * @x) + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 8 }-> s86 :|: s86 >= 0, s86 <= z + 3, s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 6 }-> s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 2 }-> s64 :|: s64 >= 0, s64 <= 2 * 0 + (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 12 }-> 1 + s87 + s67 :|: s87 >= 0, s87 <= inf2, s65 >= 0, s65 <= 2 * s50 + z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + z'', s50 >= 0, s50 <= 2 * z + z', s31 >= 0, s31 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> s61 :|: s61 >= 0, s61 <= z + 1, z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> s49 :|: s49 >= 0, s49 <= 2 * z + z', z >= 0, z' >= 0 mod(z, z') -{ 4 }-> s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 1, s78 >= 0, s78 <= 2 * z + s77, s62 >= 0, s62 <= z + 1, z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> s20 :|: s20 >= 0, s20 <= 2 * z + z', z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 13 }-> sub'#3(1 + s88 + s71, z1, @ys) :|: s88 >= 0, s88 <= inf3, s68 >= 0, s68 <= 2 * z'' + @y, s69 >= 0, s69 <= 2 * s68 + z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + @y, s60 >= 0, s60 <= 2 * s59 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 4 }-> 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= z' + @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 12 }-> s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + z'', s21 >= 0, s21 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 9 }-> s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0 sum#2(z, z') -{ 7 }-> s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 5 }-> s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 Function symbols to be analyzed: {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] #eq: runtime: O(1) [0], size: O(1) [2] #less: runtime: O(1) [1], size: O(1) [2] #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #div: runtime: O(1) [0], size: O(n^1) [1 + z] sum#3: runtime: O(1) [5], size: O(1) [7] sub'#4: runtime: O(1) [4], size: O(n^1) [1 + z + z'] #equal: runtime: O(1) [1], size: O(1) [2] minus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] div: runtime: O(1) [1], size: O(n^1) [1 + z] sum#2: runtime: O(1) [7], size: O(1) [7] compare#5: runtime: O(1) [4], size: O(1) [3] times: runtime: O(1) [1], size: O(n^2) [1 + 4*z*z'] bitToInt': runtime: O(n^1) [8 + 10*z], size: INF bitToInt'#1: runtime: O(n^1) [2 + 10*z], size: INF sum#1: runtime: O(1) [9], size: O(1) [7] compare#4: runtime: O(1) [6], size: O(n^1) [3 + z'] mod: runtime: O(1) [4], size: INF bitToInt: runtime: O(n^1) [10 + 10*z], size: INF sum: runtime: O(1) [12], size: O(1) [7] add'#2: runtime: O(n^1) [2 + 48*z + 16*z1], size: O(n^1) [28 + 32*z1] add'#1: runtime: O(n^1) [4 + 16*z + 48*z'], size: O(n^1) [32*z] add': runtime: O(n^1) [5 + 16*z + 48*z'], size: O(n^1) [32*z] add'#3: runtime: O(n^1) [6 + 16*z' + 48*z''], size: O(n^1) [z + 32*z'] compare#3: runtime: ?, size: O(n^1) [3 + z] ---------------------------------------- (253) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: compare#3 after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 8 ---------------------------------------- (254) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + z', s26 >= 0, s26 <= s25 + 2, s27 >= 0, s27 <= s26 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + z', s29 >= 0, s29 <= s28 + 2, s30 >= 0, s30 <= s29 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + s32 :|: s32 >= 0, s32 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #equal(z, z') -{ 1 }-> s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s51 :|: s51 >= 0, s51 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + s33 :|: s33 >= 0, s33 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + s34 :|: s34 >= 0, s34 <= s3 + 1, s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + s35 :|: s35 >= 0, s35 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s54 :|: s52 >= 0, s52 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s53 >= 0, s53 <= 2 * (1 + z') + s52, s54 >= 0, s54 <= 2 * (1 + z') + s53, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> s24 :|: s24 >= 0, s24 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 7 + 16*z + 48*z' }-> s89 :|: s89 >= 0, s89 <= 32 * z, z' >= 0, z >= 0 add(z, z') -{ 6 + 16*z + 48*z' }-> s90 :|: s90 >= 0, s90 <= 32 * z, z' >= 0, z >= 0 add'(z, z', z'') -{ 5 + 16*z + 48*z' }-> s91 :|: s91 >= 0, s91 <= 32 * z, z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 3 + 16*@xs + 48*z' }-> s92 :|: s92 >= 0, s92 <= 32 * @xs + 28, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 19 + 48*@ys + 16*z1 }-> s93 :|: s93 >= 0, s93 <= s84 + 32 * z1, s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + @y, s56 >= 0, s56 <= 2 * s55 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 6 + 16*z' + 48*z'' }-> 1 + @z + s94 :|: s94 >= 0, s94 <= 32 * z', z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 10 + 10*z }-> s79 :|: s79 >= 0, s79 <= inf, z >= 0 bitToInt(z) -{ 9 + 10*z }-> s80 :|: s80 >= 0, s80 <= inf', z >= 0 bitToInt'(z, z') -{ 3 + 10*z }-> s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 12 + 10*@xs }-> s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + s82, s73 >= 0, s73 <= 4 * (z' * @x) + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 8 }-> s86 :|: s86 >= 0, s86 <= z + 3, s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 6 }-> s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 2 }-> s64 :|: s64 >= 0, s64 <= 2 * 0 + (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 12 }-> 1 + s87 + s67 :|: s87 >= 0, s87 <= inf2, s65 >= 0, s65 <= 2 * s50 + z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + z'', s50 >= 0, s50 <= 2 * z + z', s31 >= 0, s31 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> s61 :|: s61 >= 0, s61 <= z + 1, z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> s49 :|: s49 >= 0, s49 <= 2 * z + z', z >= 0, z' >= 0 mod(z, z') -{ 4 }-> s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 1, s78 >= 0, s78 <= 2 * z + s77, s62 >= 0, s62 <= z + 1, z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> s20 :|: s20 >= 0, s20 <= 2 * z + z', z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 13 }-> sub'#3(1 + s88 + s71, z1, @ys) :|: s88 >= 0, s88 <= inf3, s68 >= 0, s68 <= 2 * z'' + @y, s69 >= 0, s69 <= 2 * s68 + z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + @y, s60 >= 0, s60 <= 2 * s59 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 4 }-> 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= z' + @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 12 }-> s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + z'', s21 >= 0, s21 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 9 }-> s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0 sum#2(z, z') -{ 7 }-> s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 5 }-> s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 Function symbols to be analyzed: {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] #eq: runtime: O(1) [0], size: O(1) [2] #less: runtime: O(1) [1], size: O(1) [2] #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #div: runtime: O(1) [0], size: O(n^1) [1 + z] sum#3: runtime: O(1) [5], size: O(1) [7] sub'#4: runtime: O(1) [4], size: O(n^1) [1 + z + z'] #equal: runtime: O(1) [1], size: O(1) [2] minus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] div: runtime: O(1) [1], size: O(n^1) [1 + z] sum#2: runtime: O(1) [7], size: O(1) [7] compare#5: runtime: O(1) [4], size: O(1) [3] times: runtime: O(1) [1], size: O(n^2) [1 + 4*z*z'] bitToInt': runtime: O(n^1) [8 + 10*z], size: INF bitToInt'#1: runtime: O(n^1) [2 + 10*z], size: INF sum#1: runtime: O(1) [9], size: O(1) [7] compare#4: runtime: O(1) [6], size: O(n^1) [3 + z'] mod: runtime: O(1) [4], size: INF bitToInt: runtime: O(n^1) [10 + 10*z], size: INF sum: runtime: O(1) [12], size: O(1) [7] add'#2: runtime: O(n^1) [2 + 48*z + 16*z1], size: O(n^1) [28 + 32*z1] add'#1: runtime: O(n^1) [4 + 16*z + 48*z'], size: O(n^1) [32*z] add': runtime: O(n^1) [5 + 16*z + 48*z'], size: O(n^1) [32*z] add'#3: runtime: O(n^1) [6 + 16*z' + 48*z''], size: O(n^1) [z + 32*z'] compare#3: runtime: O(1) [8], size: O(n^1) [3 + z] ---------------------------------------- (255) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (256) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + z', s26 >= 0, s26 <= s25 + 2, s27 >= 0, s27 <= s26 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + z', s29 >= 0, s29 <= s28 + 2, s30 >= 0, s30 <= s29 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + s32 :|: s32 >= 0, s32 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #equal(z, z') -{ 1 }-> s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s51 :|: s51 >= 0, s51 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + s33 :|: s33 >= 0, s33 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + s34 :|: s34 >= 0, s34 <= s3 + 1, s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + s35 :|: s35 >= 0, s35 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s54 :|: s52 >= 0, s52 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s53 >= 0, s53 <= 2 * (1 + z') + s52, s54 >= 0, s54 <= 2 * (1 + z') + s53, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> s24 :|: s24 >= 0, s24 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 7 + 16*z + 48*z' }-> s89 :|: s89 >= 0, s89 <= 32 * z, z' >= 0, z >= 0 add(z, z') -{ 6 + 16*z + 48*z' }-> s90 :|: s90 >= 0, s90 <= 32 * z, z' >= 0, z >= 0 add'(z, z', z'') -{ 5 + 16*z + 48*z' }-> s91 :|: s91 >= 0, s91 <= 32 * z, z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 3 + 16*@xs + 48*z' }-> s92 :|: s92 >= 0, s92 <= 32 * @xs + 28, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 19 + 48*@ys + 16*z1 }-> s93 :|: s93 >= 0, s93 <= s84 + 32 * z1, s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + @y, s56 >= 0, s56 <= 2 * s55 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 6 + 16*z' + 48*z'' }-> 1 + @z + s94 :|: s94 >= 0, s94 <= 32 * z', z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 10 + 10*z }-> s79 :|: s79 >= 0, s79 <= inf, z >= 0 bitToInt(z) -{ 9 + 10*z }-> s80 :|: s80 >= 0, s80 <= inf', z >= 0 bitToInt'(z, z') -{ 3 + 10*z }-> s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 12 + 10*@xs }-> s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + s82, s73 >= 0, s73 <= 4 * (z' * @x) + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 8 }-> s86 :|: s86 >= 0, s86 <= z + 3, s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 6 }-> s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 2 }-> s64 :|: s64 >= 0, s64 <= 2 * 0 + (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 12 }-> 1 + s87 + s67 :|: s87 >= 0, s87 <= inf2, s65 >= 0, s65 <= 2 * s50 + z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + z'', s50 >= 0, s50 <= 2 * z + z', s31 >= 0, s31 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> s61 :|: s61 >= 0, s61 <= z + 1, z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> s49 :|: s49 >= 0, s49 <= 2 * z + z', z >= 0, z' >= 0 mod(z, z') -{ 4 }-> s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 1, s78 >= 0, s78 <= 2 * z + s77, s62 >= 0, s62 <= z + 1, z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> s20 :|: s20 >= 0, s20 <= 2 * z + z', z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 13 }-> sub'#3(1 + s88 + s71, z1, @ys) :|: s88 >= 0, s88 <= inf3, s68 >= 0, s68 <= 2 * z'' + @y, s69 >= 0, s69 <= 2 * s68 + z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + @y, s60 >= 0, s60 <= 2 * s59 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 4 }-> 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= z' + @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 12 }-> s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + z'', s21 >= 0, s21 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 9 }-> s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0 sum#2(z, z') -{ 7 }-> s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 5 }-> s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 Function symbols to be analyzed: {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] #eq: runtime: O(1) [0], size: O(1) [2] #less: runtime: O(1) [1], size: O(1) [2] #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #div: runtime: O(1) [0], size: O(n^1) [1 + z] sum#3: runtime: O(1) [5], size: O(1) [7] sub'#4: runtime: O(1) [4], size: O(n^1) [1 + z + z'] #equal: runtime: O(1) [1], size: O(1) [2] minus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] div: runtime: O(1) [1], size: O(n^1) [1 + z] sum#2: runtime: O(1) [7], size: O(1) [7] compare#5: runtime: O(1) [4], size: O(1) [3] times: runtime: O(1) [1], size: O(n^2) [1 + 4*z*z'] bitToInt': runtime: O(n^1) [8 + 10*z], size: INF bitToInt'#1: runtime: O(n^1) [2 + 10*z], size: INF sum#1: runtime: O(1) [9], size: O(1) [7] compare#4: runtime: O(1) [6], size: O(n^1) [3 + z'] mod: runtime: O(1) [4], size: INF bitToInt: runtime: O(n^1) [10 + 10*z], size: INF sum: runtime: O(1) [12], size: O(1) [7] add'#2: runtime: O(n^1) [2 + 48*z + 16*z1], size: O(n^1) [28 + 32*z1] add'#1: runtime: O(n^1) [4 + 16*z + 48*z'], size: O(n^1) [32*z] add': runtime: O(n^1) [5 + 16*z + 48*z'], size: O(n^1) [32*z] add'#3: runtime: O(n^1) [6 + 16*z' + 48*z''], size: O(n^1) [z + 32*z'] compare#3: runtime: O(1) [8], size: O(n^1) [3 + z] ---------------------------------------- (257) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: diff after applying outer abstraction to obtain an ITS, resulting in: INF with polynomial bound: ? ---------------------------------------- (258) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + z', s26 >= 0, s26 <= s25 + 2, s27 >= 0, s27 <= s26 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + z', s29 >= 0, s29 <= s28 + 2, s30 >= 0, s30 <= s29 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + s32 :|: s32 >= 0, s32 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #equal(z, z') -{ 1 }-> s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s51 :|: s51 >= 0, s51 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + s33 :|: s33 >= 0, s33 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + s34 :|: s34 >= 0, s34 <= s3 + 1, s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + s35 :|: s35 >= 0, s35 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s54 :|: s52 >= 0, s52 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s53 >= 0, s53 <= 2 * (1 + z') + s52, s54 >= 0, s54 <= 2 * (1 + z') + s53, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> s24 :|: s24 >= 0, s24 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 7 + 16*z + 48*z' }-> s89 :|: s89 >= 0, s89 <= 32 * z, z' >= 0, z >= 0 add(z, z') -{ 6 + 16*z + 48*z' }-> s90 :|: s90 >= 0, s90 <= 32 * z, z' >= 0, z >= 0 add'(z, z', z'') -{ 5 + 16*z + 48*z' }-> s91 :|: s91 >= 0, s91 <= 32 * z, z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 3 + 16*@xs + 48*z' }-> s92 :|: s92 >= 0, s92 <= 32 * @xs + 28, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 19 + 48*@ys + 16*z1 }-> s93 :|: s93 >= 0, s93 <= s84 + 32 * z1, s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + @y, s56 >= 0, s56 <= 2 * s55 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 6 + 16*z' + 48*z'' }-> 1 + @z + s94 :|: s94 >= 0, s94 <= 32 * z', z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 10 + 10*z }-> s79 :|: s79 >= 0, s79 <= inf, z >= 0 bitToInt(z) -{ 9 + 10*z }-> s80 :|: s80 >= 0, s80 <= inf', z >= 0 bitToInt'(z, z') -{ 3 + 10*z }-> s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 12 + 10*@xs }-> s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + s82, s73 >= 0, s73 <= 4 * (z' * @x) + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 8 }-> s86 :|: s86 >= 0, s86 <= z + 3, s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 6 }-> s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 2 }-> s64 :|: s64 >= 0, s64 <= 2 * 0 + (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 12 }-> 1 + s87 + s67 :|: s87 >= 0, s87 <= inf2, s65 >= 0, s65 <= 2 * s50 + z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + z'', s50 >= 0, s50 <= 2 * z + z', s31 >= 0, s31 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> s61 :|: s61 >= 0, s61 <= z + 1, z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> s49 :|: s49 >= 0, s49 <= 2 * z + z', z >= 0, z' >= 0 mod(z, z') -{ 4 }-> s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 1, s78 >= 0, s78 <= 2 * z + s77, s62 >= 0, s62 <= z + 1, z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> s20 :|: s20 >= 0, s20 <= 2 * z + z', z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 13 }-> sub'#3(1 + s88 + s71, z1, @ys) :|: s88 >= 0, s88 <= inf3, s68 >= 0, s68 <= 2 * z'' + @y, s69 >= 0, s69 <= 2 * s68 + z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + @y, s60 >= 0, s60 <= 2 * s59 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 4 }-> 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= z' + @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 12 }-> s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + z'', s21 >= 0, s21 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 9 }-> s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0 sum#2(z, z') -{ 7 }-> s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 5 }-> s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 Function symbols to be analyzed: {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] #eq: runtime: O(1) [0], size: O(1) [2] #less: runtime: O(1) [1], size: O(1) [2] #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #div: runtime: O(1) [0], size: O(n^1) [1 + z] sum#3: runtime: O(1) [5], size: O(1) [7] sub'#4: runtime: O(1) [4], size: O(n^1) [1 + z + z'] #equal: runtime: O(1) [1], size: O(1) [2] minus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] div: runtime: O(1) [1], size: O(n^1) [1 + z] sum#2: runtime: O(1) [7], size: O(1) [7] compare#5: runtime: O(1) [4], size: O(1) [3] times: runtime: O(1) [1], size: O(n^2) [1 + 4*z*z'] bitToInt': runtime: O(n^1) [8 + 10*z], size: INF bitToInt'#1: runtime: O(n^1) [2 + 10*z], size: INF sum#1: runtime: O(1) [9], size: O(1) [7] compare#4: runtime: O(1) [6], size: O(n^1) [3 + z'] mod: runtime: O(1) [4], size: INF bitToInt: runtime: O(n^1) [10 + 10*z], size: INF sum: runtime: O(1) [12], size: O(1) [7] add'#2: runtime: O(n^1) [2 + 48*z + 16*z1], size: O(n^1) [28 + 32*z1] add'#1: runtime: O(n^1) [4 + 16*z + 48*z'], size: O(n^1) [32*z] add': runtime: O(n^1) [5 + 16*z + 48*z'], size: O(n^1) [32*z] add'#3: runtime: O(n^1) [6 + 16*z' + 48*z''], size: O(n^1) [z + 32*z'] compare#3: runtime: O(1) [8], size: O(n^1) [3 + z] diff: runtime: ?, size: INF ---------------------------------------- (259) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: diff after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 12 ---------------------------------------- (260) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + z', s26 >= 0, s26 <= s25 + 2, s27 >= 0, s27 <= s26 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + z', s29 >= 0, s29 <= s28 + 2, s30 >= 0, s30 <= s29 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + s32 :|: s32 >= 0, s32 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #equal(z, z') -{ 1 }-> s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s51 :|: s51 >= 0, s51 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + s33 :|: s33 >= 0, s33 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + s34 :|: s34 >= 0, s34 <= s3 + 1, s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + s35 :|: s35 >= 0, s35 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s54 :|: s52 >= 0, s52 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s53 >= 0, s53 <= 2 * (1 + z') + s52, s54 >= 0, s54 <= 2 * (1 + z') + s53, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> s24 :|: s24 >= 0, s24 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 7 + 16*z + 48*z' }-> s89 :|: s89 >= 0, s89 <= 32 * z, z' >= 0, z >= 0 add(z, z') -{ 6 + 16*z + 48*z' }-> s90 :|: s90 >= 0, s90 <= 32 * z, z' >= 0, z >= 0 add'(z, z', z'') -{ 5 + 16*z + 48*z' }-> s91 :|: s91 >= 0, s91 <= 32 * z, z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 3 + 16*@xs + 48*z' }-> s92 :|: s92 >= 0, s92 <= 32 * @xs + 28, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 19 + 48*@ys + 16*z1 }-> s93 :|: s93 >= 0, s93 <= s84 + 32 * z1, s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + @y, s56 >= 0, s56 <= 2 * s55 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 6 + 16*z' + 48*z'' }-> 1 + @z + s94 :|: s94 >= 0, s94 <= 32 * z', z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 10 + 10*z }-> s79 :|: s79 >= 0, s79 <= inf, z >= 0 bitToInt(z) -{ 9 + 10*z }-> s80 :|: s80 >= 0, s80 <= inf', z >= 0 bitToInt'(z, z') -{ 3 + 10*z }-> s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 12 + 10*@xs }-> s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + s82, s73 >= 0, s73 <= 4 * (z' * @x) + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 8 }-> s86 :|: s86 >= 0, s86 <= z + 3, s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 6 }-> s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 2 }-> s64 :|: s64 >= 0, s64 <= 2 * 0 + (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 12 }-> 1 + s87 + s67 :|: s87 >= 0, s87 <= inf2, s65 >= 0, s65 <= 2 * s50 + z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + z'', s50 >= 0, s50 <= 2 * z + z', s31 >= 0, s31 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> s61 :|: s61 >= 0, s61 <= z + 1, z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> s49 :|: s49 >= 0, s49 <= 2 * z + z', z >= 0, z' >= 0 mod(z, z') -{ 4 }-> s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 1, s78 >= 0, s78 <= 2 * z + s77, s62 >= 0, s62 <= z + 1, z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> s20 :|: s20 >= 0, s20 <= 2 * z + z', z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 13 }-> sub'#3(1 + s88 + s71, z1, @ys) :|: s88 >= 0, s88 <= inf3, s68 >= 0, s68 <= 2 * z'' + @y, s69 >= 0, s69 <= 2 * s68 + z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + @y, s60 >= 0, s60 <= 2 * s59 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 4 }-> 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= z' + @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 12 }-> s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + z'', s21 >= 0, s21 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 9 }-> s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0 sum#2(z, z') -{ 7 }-> s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 5 }-> s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 Function symbols to be analyzed: {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] #eq: runtime: O(1) [0], size: O(1) [2] #less: runtime: O(1) [1], size: O(1) [2] #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #div: runtime: O(1) [0], size: O(n^1) [1 + z] sum#3: runtime: O(1) [5], size: O(1) [7] sub'#4: runtime: O(1) [4], size: O(n^1) [1 + z + z'] #equal: runtime: O(1) [1], size: O(1) [2] minus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] div: runtime: O(1) [1], size: O(n^1) [1 + z] sum#2: runtime: O(1) [7], size: O(1) [7] compare#5: runtime: O(1) [4], size: O(1) [3] times: runtime: O(1) [1], size: O(n^2) [1 + 4*z*z'] bitToInt': runtime: O(n^1) [8 + 10*z], size: INF bitToInt'#1: runtime: O(n^1) [2 + 10*z], size: INF sum#1: runtime: O(1) [9], size: O(1) [7] compare#4: runtime: O(1) [6], size: O(n^1) [3 + z'] mod: runtime: O(1) [4], size: INF bitToInt: runtime: O(n^1) [10 + 10*z], size: INF sum: runtime: O(1) [12], size: O(1) [7] add'#2: runtime: O(n^1) [2 + 48*z + 16*z1], size: O(n^1) [28 + 32*z1] add'#1: runtime: O(n^1) [4 + 16*z + 48*z'], size: O(n^1) [32*z] add': runtime: O(n^1) [5 + 16*z + 48*z'], size: O(n^1) [32*z] add'#3: runtime: O(n^1) [6 + 16*z' + 48*z''], size: O(n^1) [z + 32*z'] compare#3: runtime: O(1) [8], size: O(n^1) [3 + z] diff: runtime: O(1) [12], size: INF ---------------------------------------- (261) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (262) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + z', s26 >= 0, s26 <= s25 + 2, s27 >= 0, s27 <= s26 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + z', s29 >= 0, s29 <= s28 + 2, s30 >= 0, s30 <= s29 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + s32 :|: s32 >= 0, s32 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #equal(z, z') -{ 1 }-> s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s51 :|: s51 >= 0, s51 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + s33 :|: s33 >= 0, s33 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + s34 :|: s34 >= 0, s34 <= s3 + 1, s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + s35 :|: s35 >= 0, s35 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s54 :|: s52 >= 0, s52 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s53 >= 0, s53 <= 2 * (1 + z') + s52, s54 >= 0, s54 <= 2 * (1 + z') + s53, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> s24 :|: s24 >= 0, s24 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 7 + 16*z + 48*z' }-> s89 :|: s89 >= 0, s89 <= 32 * z, z' >= 0, z >= 0 add(z, z') -{ 6 + 16*z + 48*z' }-> s90 :|: s90 >= 0, s90 <= 32 * z, z' >= 0, z >= 0 add'(z, z', z'') -{ 5 + 16*z + 48*z' }-> s91 :|: s91 >= 0, s91 <= 32 * z, z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 3 + 16*@xs + 48*z' }-> s92 :|: s92 >= 0, s92 <= 32 * @xs + 28, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 19 + 48*@ys + 16*z1 }-> s93 :|: s93 >= 0, s93 <= s84 + 32 * z1, s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + @y, s56 >= 0, s56 <= 2 * s55 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 6 + 16*z' + 48*z'' }-> 1 + @z + s94 :|: s94 >= 0, s94 <= 32 * z', z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 10 + 10*z }-> s79 :|: s79 >= 0, s79 <= inf, z >= 0 bitToInt(z) -{ 9 + 10*z }-> s80 :|: s80 >= 0, s80 <= inf', z >= 0 bitToInt'(z, z') -{ 3 + 10*z }-> s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 12 + 10*@xs }-> s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + s82, s73 >= 0, s73 <= 4 * (z' * @x) + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 8 }-> s86 :|: s86 >= 0, s86 <= z + 3, s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 6 }-> s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 2 }-> s64 :|: s64 >= 0, s64 <= 2 * 0 + (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 12 }-> 1 + s87 + s67 :|: s87 >= 0, s87 <= inf2, s65 >= 0, s65 <= 2 * s50 + z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + z'', s50 >= 0, s50 <= 2 * z + z', s31 >= 0, s31 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> s61 :|: s61 >= 0, s61 <= z + 1, z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> s49 :|: s49 >= 0, s49 <= 2 * z + z', z >= 0, z' >= 0 mod(z, z') -{ 4 }-> s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 1, s78 >= 0, s78 <= 2 * z + s77, s62 >= 0, s62 <= z + 1, z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> s20 :|: s20 >= 0, s20 <= 2 * z + z', z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 13 }-> sub'#3(1 + s88 + s71, z1, @ys) :|: s88 >= 0, s88 <= inf3, s68 >= 0, s68 <= 2 * z'' + @y, s69 >= 0, s69 <= 2 * s68 + z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + @y, s60 >= 0, s60 <= 2 * s59 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 4 }-> 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= z' + @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 12 }-> s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + z'', s21 >= 0, s21 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 9 }-> s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0 sum#2(z, z') -{ 7 }-> s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 5 }-> s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 Function symbols to be analyzed: {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] #eq: runtime: O(1) [0], size: O(1) [2] #less: runtime: O(1) [1], size: O(1) [2] #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #div: runtime: O(1) [0], size: O(n^1) [1 + z] sum#3: runtime: O(1) [5], size: O(1) [7] sub'#4: runtime: O(1) [4], size: O(n^1) [1 + z + z'] #equal: runtime: O(1) [1], size: O(1) [2] minus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] div: runtime: O(1) [1], size: O(n^1) [1 + z] sum#2: runtime: O(1) [7], size: O(1) [7] compare#5: runtime: O(1) [4], size: O(1) [3] times: runtime: O(1) [1], size: O(n^2) [1 + 4*z*z'] bitToInt': runtime: O(n^1) [8 + 10*z], size: INF bitToInt'#1: runtime: O(n^1) [2 + 10*z], size: INF sum#1: runtime: O(1) [9], size: O(1) [7] compare#4: runtime: O(1) [6], size: O(n^1) [3 + z'] mod: runtime: O(1) [4], size: INF bitToInt: runtime: O(n^1) [10 + 10*z], size: INF sum: runtime: O(1) [12], size: O(1) [7] add'#2: runtime: O(n^1) [2 + 48*z + 16*z1], size: O(n^1) [28 + 32*z1] add'#1: runtime: O(n^1) [4 + 16*z + 48*z'], size: O(n^1) [32*z] add': runtime: O(n^1) [5 + 16*z + 48*z'], size: O(n^1) [32*z] add'#3: runtime: O(n^1) [6 + 16*z' + 48*z''], size: O(n^1) [z + 32*z'] compare#3: runtime: O(1) [8], size: O(n^1) [3 + z] diff: runtime: O(1) [12], size: INF ---------------------------------------- (263) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: sub'#2 after applying outer abstraction to obtain an ITS, resulting in: INF with polynomial bound: ? Computed SIZE bound using CoFloCo for: sub'#1 after applying outer abstraction to obtain an ITS, resulting in: INF with polynomial bound: ? Computed SIZE bound using CoFloCo for: sub'#3 after applying outer abstraction to obtain an ITS, resulting in: INF with polynomial bound: ? ---------------------------------------- (264) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + z', s26 >= 0, s26 <= s25 + 2, s27 >= 0, s27 <= s26 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + z', s29 >= 0, s29 <= s28 + 2, s30 >= 0, s30 <= s29 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + s32 :|: s32 >= 0, s32 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #equal(z, z') -{ 1 }-> s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s51 :|: s51 >= 0, s51 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + s33 :|: s33 >= 0, s33 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + s34 :|: s34 >= 0, s34 <= s3 + 1, s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + s35 :|: s35 >= 0, s35 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s54 :|: s52 >= 0, s52 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s53 >= 0, s53 <= 2 * (1 + z') + s52, s54 >= 0, s54 <= 2 * (1 + z') + s53, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> s24 :|: s24 >= 0, s24 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 7 + 16*z + 48*z' }-> s89 :|: s89 >= 0, s89 <= 32 * z, z' >= 0, z >= 0 add(z, z') -{ 6 + 16*z + 48*z' }-> s90 :|: s90 >= 0, s90 <= 32 * z, z' >= 0, z >= 0 add'(z, z', z'') -{ 5 + 16*z + 48*z' }-> s91 :|: s91 >= 0, s91 <= 32 * z, z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 3 + 16*@xs + 48*z' }-> s92 :|: s92 >= 0, s92 <= 32 * @xs + 28, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 19 + 48*@ys + 16*z1 }-> s93 :|: s93 >= 0, s93 <= s84 + 32 * z1, s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + @y, s56 >= 0, s56 <= 2 * s55 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 6 + 16*z' + 48*z'' }-> 1 + @z + s94 :|: s94 >= 0, s94 <= 32 * z', z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 10 + 10*z }-> s79 :|: s79 >= 0, s79 <= inf, z >= 0 bitToInt(z) -{ 9 + 10*z }-> s80 :|: s80 >= 0, s80 <= inf', z >= 0 bitToInt'(z, z') -{ 3 + 10*z }-> s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 12 + 10*@xs }-> s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + s82, s73 >= 0, s73 <= 4 * (z' * @x) + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 8 }-> s86 :|: s86 >= 0, s86 <= z + 3, s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 6 }-> s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 2 }-> s64 :|: s64 >= 0, s64 <= 2 * 0 + (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 12 }-> 1 + s87 + s67 :|: s87 >= 0, s87 <= inf2, s65 >= 0, s65 <= 2 * s50 + z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + z'', s50 >= 0, s50 <= 2 * z + z', s31 >= 0, s31 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> s61 :|: s61 >= 0, s61 <= z + 1, z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> s49 :|: s49 >= 0, s49 <= 2 * z + z', z >= 0, z' >= 0 mod(z, z') -{ 4 }-> s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 1, s78 >= 0, s78 <= 2 * z + s77, s62 >= 0, s62 <= z + 1, z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> s20 :|: s20 >= 0, s20 <= 2 * z + z', z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 13 }-> sub'#3(1 + s88 + s71, z1, @ys) :|: s88 >= 0, s88 <= inf3, s68 >= 0, s68 <= 2 * z'' + @y, s69 >= 0, s69 <= 2 * s68 + z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + @y, s60 >= 0, s60 <= 2 * s59 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 4 }-> 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= z' + @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 12 }-> s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + z'', s21 >= 0, s21 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 9 }-> s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0 sum#2(z, z') -{ 7 }-> s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 5 }-> s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 Function symbols to be analyzed: {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] #eq: runtime: O(1) [0], size: O(1) [2] #less: runtime: O(1) [1], size: O(1) [2] #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #div: runtime: O(1) [0], size: O(n^1) [1 + z] sum#3: runtime: O(1) [5], size: O(1) [7] sub'#4: runtime: O(1) [4], size: O(n^1) [1 + z + z'] #equal: runtime: O(1) [1], size: O(1) [2] minus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] div: runtime: O(1) [1], size: O(n^1) [1 + z] sum#2: runtime: O(1) [7], size: O(1) [7] compare#5: runtime: O(1) [4], size: O(1) [3] times: runtime: O(1) [1], size: O(n^2) [1 + 4*z*z'] bitToInt': runtime: O(n^1) [8 + 10*z], size: INF bitToInt'#1: runtime: O(n^1) [2 + 10*z], size: INF sum#1: runtime: O(1) [9], size: O(1) [7] compare#4: runtime: O(1) [6], size: O(n^1) [3 + z'] mod: runtime: O(1) [4], size: INF bitToInt: runtime: O(n^1) [10 + 10*z], size: INF sum: runtime: O(1) [12], size: O(1) [7] add'#2: runtime: O(n^1) [2 + 48*z + 16*z1], size: O(n^1) [28 + 32*z1] add'#1: runtime: O(n^1) [4 + 16*z + 48*z'], size: O(n^1) [32*z] add': runtime: O(n^1) [5 + 16*z + 48*z'], size: O(n^1) [32*z] add'#3: runtime: O(n^1) [6 + 16*z' + 48*z''], size: O(n^1) [z + 32*z'] compare#3: runtime: O(1) [8], size: O(n^1) [3 + z] diff: runtime: O(1) [12], size: INF sub'#2: runtime: ?, size: INF sub'#1: runtime: ?, size: INF sub'#3: runtime: ?, size: INF ---------------------------------------- (265) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: sub'#2 after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 60 + 20*z1 Computed RUNTIME bound using CoFloCo for: sub'#1 after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 41 + 20*z Computed RUNTIME bound using CoFloCo for: sub'#3 after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 47 + 20*z' ---------------------------------------- (266) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + z', s26 >= 0, s26 <= s25 + 2, s27 >= 0, s27 <= s26 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + z', s29 >= 0, s29 <= s28 + 2, s30 >= 0, s30 <= s29 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + s32 :|: s32 >= 0, s32 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #equal(z, z') -{ 1 }-> s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s51 :|: s51 >= 0, s51 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + s33 :|: s33 >= 0, s33 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + s34 :|: s34 >= 0, s34 <= s3 + 1, s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + s35 :|: s35 >= 0, s35 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s54 :|: s52 >= 0, s52 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s53 >= 0, s53 <= 2 * (1 + z') + s52, s54 >= 0, s54 <= 2 * (1 + z') + s53, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> s24 :|: s24 >= 0, s24 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 7 + 16*z + 48*z' }-> s89 :|: s89 >= 0, s89 <= 32 * z, z' >= 0, z >= 0 add(z, z') -{ 6 + 16*z + 48*z' }-> s90 :|: s90 >= 0, s90 <= 32 * z, z' >= 0, z >= 0 add'(z, z', z'') -{ 5 + 16*z + 48*z' }-> s91 :|: s91 >= 0, s91 <= 32 * z, z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 3 + 16*@xs + 48*z' }-> s92 :|: s92 >= 0, s92 <= 32 * @xs + 28, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 19 + 48*@ys + 16*z1 }-> s93 :|: s93 >= 0, s93 <= s84 + 32 * z1, s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + @y, s56 >= 0, s56 <= 2 * s55 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 6 + 16*z' + 48*z'' }-> 1 + @z + s94 :|: s94 >= 0, s94 <= 32 * z', z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 10 + 10*z }-> s79 :|: s79 >= 0, s79 <= inf, z >= 0 bitToInt(z) -{ 9 + 10*z }-> s80 :|: s80 >= 0, s80 <= inf', z >= 0 bitToInt'(z, z') -{ 3 + 10*z }-> s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 12 + 10*@xs }-> s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + s82, s73 >= 0, s73 <= 4 * (z' * @x) + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 8 }-> s86 :|: s86 >= 0, s86 <= z + 3, s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 6 }-> s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 2 }-> s64 :|: s64 >= 0, s64 <= 2 * 0 + (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 12 }-> 1 + s87 + s67 :|: s87 >= 0, s87 <= inf2, s65 >= 0, s65 <= 2 * s50 + z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + z'', s50 >= 0, s50 <= 2 * z + z', s31 >= 0, s31 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> s61 :|: s61 >= 0, s61 <= z + 1, z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> s49 :|: s49 >= 0, s49 <= 2 * z + z', z >= 0, z' >= 0 mod(z, z') -{ 4 }-> s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 1, s78 >= 0, s78 <= 2 * z + s77, s62 >= 0, s62 <= z + 1, z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> s20 :|: s20 >= 0, s20 <= 2 * z + z', z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 1 }-> sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 13 }-> sub'#3(1 + s88 + s71, z1, @ys) :|: s88 >= 0, s88 <= inf3, s68 >= 0, s68 <= 2 * z'' + @y, s69 >= 0, s69 <= 2 * s68 + z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + @y, s60 >= 0, s60 <= 2 * s59 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 2 }-> sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 4 }-> 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= z' + @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 12 }-> s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + z'', s21 >= 0, s21 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 9 }-> s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0 sum#2(z, z') -{ 7 }-> s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 5 }-> s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 Function symbols to be analyzed: {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] #eq: runtime: O(1) [0], size: O(1) [2] #less: runtime: O(1) [1], size: O(1) [2] #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #div: runtime: O(1) [0], size: O(n^1) [1 + z] sum#3: runtime: O(1) [5], size: O(1) [7] sub'#4: runtime: O(1) [4], size: O(n^1) [1 + z + z'] #equal: runtime: O(1) [1], size: O(1) [2] minus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] div: runtime: O(1) [1], size: O(n^1) [1 + z] sum#2: runtime: O(1) [7], size: O(1) [7] compare#5: runtime: O(1) [4], size: O(1) [3] times: runtime: O(1) [1], size: O(n^2) [1 + 4*z*z'] bitToInt': runtime: O(n^1) [8 + 10*z], size: INF bitToInt'#1: runtime: O(n^1) [2 + 10*z], size: INF sum#1: runtime: O(1) [9], size: O(1) [7] compare#4: runtime: O(1) [6], size: O(n^1) [3 + z'] mod: runtime: O(1) [4], size: INF bitToInt: runtime: O(n^1) [10 + 10*z], size: INF sum: runtime: O(1) [12], size: O(1) [7] add'#2: runtime: O(n^1) [2 + 48*z + 16*z1], size: O(n^1) [28 + 32*z1] add'#1: runtime: O(n^1) [4 + 16*z + 48*z'], size: O(n^1) [32*z] add': runtime: O(n^1) [5 + 16*z + 48*z'], size: O(n^1) [32*z] add'#3: runtime: O(n^1) [6 + 16*z' + 48*z''], size: O(n^1) [z + 32*z'] compare#3: runtime: O(1) [8], size: O(n^1) [3 + z] diff: runtime: O(1) [12], size: INF sub'#2: runtime: O(n^1) [60 + 20*z1], size: INF sub'#1: runtime: O(n^1) [41 + 20*z], size: INF sub'#3: runtime: O(n^1) [47 + 20*z'], size: INF ---------------------------------------- (267) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (268) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + z', s26 >= 0, s26 <= s25 + 2, s27 >= 0, s27 <= s26 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + z', s29 >= 0, s29 <= s28 + 2, s30 >= 0, s30 <= s29 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + s32 :|: s32 >= 0, s32 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #equal(z, z') -{ 1 }-> s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s51 :|: s51 >= 0, s51 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + s33 :|: s33 >= 0, s33 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + s34 :|: s34 >= 0, s34 <= s3 + 1, s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + s35 :|: s35 >= 0, s35 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s54 :|: s52 >= 0, s52 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s53 >= 0, s53 <= 2 * (1 + z') + s52, s54 >= 0, s54 <= 2 * (1 + z') + s53, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> s24 :|: s24 >= 0, s24 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 7 + 16*z + 48*z' }-> s89 :|: s89 >= 0, s89 <= 32 * z, z' >= 0, z >= 0 add(z, z') -{ 6 + 16*z + 48*z' }-> s90 :|: s90 >= 0, s90 <= 32 * z, z' >= 0, z >= 0 add'(z, z', z'') -{ 5 + 16*z + 48*z' }-> s91 :|: s91 >= 0, s91 <= 32 * z, z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 3 + 16*@xs + 48*z' }-> s92 :|: s92 >= 0, s92 <= 32 * @xs + 28, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 19 + 48*@ys + 16*z1 }-> s93 :|: s93 >= 0, s93 <= s84 + 32 * z1, s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + @y, s56 >= 0, s56 <= 2 * s55 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 6 + 16*z' + 48*z'' }-> 1 + @z + s94 :|: s94 >= 0, s94 <= 32 * z', z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 10 + 10*z }-> s79 :|: s79 >= 0, s79 <= inf, z >= 0 bitToInt(z) -{ 9 + 10*z }-> s80 :|: s80 >= 0, s80 <= inf', z >= 0 bitToInt'(z, z') -{ 3 + 10*z }-> s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 12 + 10*@xs }-> s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + s82, s73 >= 0, s73 <= 4 * (z' * @x) + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 8 }-> s86 :|: s86 >= 0, s86 <= z + 3, s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 6 }-> s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 2 }-> s64 :|: s64 >= 0, s64 <= 2 * 0 + (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 12 }-> 1 + s87 + s67 :|: s87 >= 0, s87 <= inf2, s65 >= 0, s65 <= 2 * s50 + z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + z'', s50 >= 0, s50 <= 2 * z + z', s31 >= 0, s31 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> s61 :|: s61 >= 0, s61 <= z + 1, z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> s49 :|: s49 >= 0, s49 <= 2 * z + z', z >= 0, z' >= 0 mod(z, z') -{ 4 }-> s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 1, s78 >= 0, s78 <= 2 * z + s77, s62 >= 0, s62 <= z + 1, z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> s20 :|: s20 >= 0, s20 <= 2 * z + z', z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 42 + 20*z }-> s95 :|: s95 >= 0, s95 <= inf4, z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 61 + 20*@xs }-> s96 :|: s96 >= 0, s96 <= inf5, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 60 + 20*z1 }-> s99 :|: s99 >= 0, s99 <= inf7, s88 >= 0, s88 <= inf3, s68 >= 0, s68 <= 2 * z'' + @y, s69 >= 0, s69 <= 2 * s68 + z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + @y, s60 >= 0, s60 <= 2 * s59 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 47 + 20*z' }-> s98 :|: s97 >= 0, s97 <= inf6, s98 >= 0, s98 <= s97 + @z + 1, z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 4 }-> 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= z' + @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 12 }-> s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + z'', s21 >= 0, s21 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 9 }-> s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0 sum#2(z, z') -{ 7 }-> s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 5 }-> s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 Function symbols to be analyzed: {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] #eq: runtime: O(1) [0], size: O(1) [2] #less: runtime: O(1) [1], size: O(1) [2] #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #div: runtime: O(1) [0], size: O(n^1) [1 + z] sum#3: runtime: O(1) [5], size: O(1) [7] sub'#4: runtime: O(1) [4], size: O(n^1) [1 + z + z'] #equal: runtime: O(1) [1], size: O(1) [2] minus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] div: runtime: O(1) [1], size: O(n^1) [1 + z] sum#2: runtime: O(1) [7], size: O(1) [7] compare#5: runtime: O(1) [4], size: O(1) [3] times: runtime: O(1) [1], size: O(n^2) [1 + 4*z*z'] bitToInt': runtime: O(n^1) [8 + 10*z], size: INF bitToInt'#1: runtime: O(n^1) [2 + 10*z], size: INF sum#1: runtime: O(1) [9], size: O(1) [7] compare#4: runtime: O(1) [6], size: O(n^1) [3 + z'] mod: runtime: O(1) [4], size: INF bitToInt: runtime: O(n^1) [10 + 10*z], size: INF sum: runtime: O(1) [12], size: O(1) [7] add'#2: runtime: O(n^1) [2 + 48*z + 16*z1], size: O(n^1) [28 + 32*z1] add'#1: runtime: O(n^1) [4 + 16*z + 48*z'], size: O(n^1) [32*z] add': runtime: O(n^1) [5 + 16*z + 48*z'], size: O(n^1) [32*z] add'#3: runtime: O(n^1) [6 + 16*z' + 48*z''], size: O(n^1) [z + 32*z'] compare#3: runtime: O(1) [8], size: O(n^1) [3 + z] diff: runtime: O(1) [12], size: INF sub'#2: runtime: O(n^1) [60 + 20*z1], size: INF sub'#1: runtime: O(n^1) [41 + 20*z], size: INF sub'#3: runtime: O(n^1) [47 + 20*z'], size: INF ---------------------------------------- (269) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: add after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 32*z ---------------------------------------- (270) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + z', s26 >= 0, s26 <= s25 + 2, s27 >= 0, s27 <= s26 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + z', s29 >= 0, s29 <= s28 + 2, s30 >= 0, s30 <= s29 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + s32 :|: s32 >= 0, s32 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #equal(z, z') -{ 1 }-> s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s51 :|: s51 >= 0, s51 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + s33 :|: s33 >= 0, s33 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + s34 :|: s34 >= 0, s34 <= s3 + 1, s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + s35 :|: s35 >= 0, s35 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s54 :|: s52 >= 0, s52 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s53 >= 0, s53 <= 2 * (1 + z') + s52, s54 >= 0, s54 <= 2 * (1 + z') + s53, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> s24 :|: s24 >= 0, s24 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 7 + 16*z + 48*z' }-> s89 :|: s89 >= 0, s89 <= 32 * z, z' >= 0, z >= 0 add(z, z') -{ 6 + 16*z + 48*z' }-> s90 :|: s90 >= 0, s90 <= 32 * z, z' >= 0, z >= 0 add'(z, z', z'') -{ 5 + 16*z + 48*z' }-> s91 :|: s91 >= 0, s91 <= 32 * z, z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 3 + 16*@xs + 48*z' }-> s92 :|: s92 >= 0, s92 <= 32 * @xs + 28, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 19 + 48*@ys + 16*z1 }-> s93 :|: s93 >= 0, s93 <= s84 + 32 * z1, s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + @y, s56 >= 0, s56 <= 2 * s55 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 6 + 16*z' + 48*z'' }-> 1 + @z + s94 :|: s94 >= 0, s94 <= 32 * z', z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 10 + 10*z }-> s79 :|: s79 >= 0, s79 <= inf, z >= 0 bitToInt(z) -{ 9 + 10*z }-> s80 :|: s80 >= 0, s80 <= inf', z >= 0 bitToInt'(z, z') -{ 3 + 10*z }-> s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 12 + 10*@xs }-> s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + s82, s73 >= 0, s73 <= 4 * (z' * @x) + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 8 }-> s86 :|: s86 >= 0, s86 <= z + 3, s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 6 }-> s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 2 }-> s64 :|: s64 >= 0, s64 <= 2 * 0 + (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 12 }-> 1 + s87 + s67 :|: s87 >= 0, s87 <= inf2, s65 >= 0, s65 <= 2 * s50 + z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + z'', s50 >= 0, s50 <= 2 * z + z', s31 >= 0, s31 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> s61 :|: s61 >= 0, s61 <= z + 1, z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> s49 :|: s49 >= 0, s49 <= 2 * z + z', z >= 0, z' >= 0 mod(z, z') -{ 4 }-> s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 1, s78 >= 0, s78 <= 2 * z + s77, s62 >= 0, s62 <= z + 1, z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> s20 :|: s20 >= 0, s20 <= 2 * z + z', z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 42 + 20*z }-> s95 :|: s95 >= 0, s95 <= inf4, z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 61 + 20*@xs }-> s96 :|: s96 >= 0, s96 <= inf5, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 60 + 20*z1 }-> s99 :|: s99 >= 0, s99 <= inf7, s88 >= 0, s88 <= inf3, s68 >= 0, s68 <= 2 * z'' + @y, s69 >= 0, s69 <= 2 * s68 + z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + @y, s60 >= 0, s60 <= 2 * s59 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 47 + 20*z' }-> s98 :|: s97 >= 0, s97 <= inf6, s98 >= 0, s98 <= s97 + @z + 1, z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 4 }-> 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= z' + @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 12 }-> s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + z'', s21 >= 0, s21 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 9 }-> s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0 sum#2(z, z') -{ 7 }-> s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 5 }-> s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 Function symbols to be analyzed: {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] #eq: runtime: O(1) [0], size: O(1) [2] #less: runtime: O(1) [1], size: O(1) [2] #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #div: runtime: O(1) [0], size: O(n^1) [1 + z] sum#3: runtime: O(1) [5], size: O(1) [7] sub'#4: runtime: O(1) [4], size: O(n^1) [1 + z + z'] #equal: runtime: O(1) [1], size: O(1) [2] minus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] div: runtime: O(1) [1], size: O(n^1) [1 + z] sum#2: runtime: O(1) [7], size: O(1) [7] compare#5: runtime: O(1) [4], size: O(1) [3] times: runtime: O(1) [1], size: O(n^2) [1 + 4*z*z'] bitToInt': runtime: O(n^1) [8 + 10*z], size: INF bitToInt'#1: runtime: O(n^1) [2 + 10*z], size: INF sum#1: runtime: O(1) [9], size: O(1) [7] compare#4: runtime: O(1) [6], size: O(n^1) [3 + z'] mod: runtime: O(1) [4], size: INF bitToInt: runtime: O(n^1) [10 + 10*z], size: INF sum: runtime: O(1) [12], size: O(1) [7] add'#2: runtime: O(n^1) [2 + 48*z + 16*z1], size: O(n^1) [28 + 32*z1] add'#1: runtime: O(n^1) [4 + 16*z + 48*z'], size: O(n^1) [32*z] add': runtime: O(n^1) [5 + 16*z + 48*z'], size: O(n^1) [32*z] add'#3: runtime: O(n^1) [6 + 16*z' + 48*z''], size: O(n^1) [z + 32*z'] compare#3: runtime: O(1) [8], size: O(n^1) [3 + z] diff: runtime: O(1) [12], size: INF sub'#2: runtime: O(n^1) [60 + 20*z1], size: INF sub'#1: runtime: O(n^1) [41 + 20*z], size: INF sub'#3: runtime: O(n^1) [47 + 20*z'], size: INF add: runtime: ?, size: O(n^1) [32*z] ---------------------------------------- (271) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: add after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 7 + 16*z + 48*z' ---------------------------------------- (272) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + z', s26 >= 0, s26 <= s25 + 2, s27 >= 0, s27 <= s26 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + z', s29 >= 0, s29 <= s28 + 2, s30 >= 0, s30 <= s29 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + s32 :|: s32 >= 0, s32 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #equal(z, z') -{ 1 }-> s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s51 :|: s51 >= 0, s51 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + s33 :|: s33 >= 0, s33 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + s34 :|: s34 >= 0, s34 <= s3 + 1, s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + s35 :|: s35 >= 0, s35 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s54 :|: s52 >= 0, s52 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s53 >= 0, s53 <= 2 * (1 + z') + s52, s54 >= 0, s54 <= 2 * (1 + z') + s53, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> s24 :|: s24 >= 0, s24 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 7 + 16*z + 48*z' }-> s89 :|: s89 >= 0, s89 <= 32 * z, z' >= 0, z >= 0 add(z, z') -{ 6 + 16*z + 48*z' }-> s90 :|: s90 >= 0, s90 <= 32 * z, z' >= 0, z >= 0 add'(z, z', z'') -{ 5 + 16*z + 48*z' }-> s91 :|: s91 >= 0, s91 <= 32 * z, z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 3 + 16*@xs + 48*z' }-> s92 :|: s92 >= 0, s92 <= 32 * @xs + 28, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 19 + 48*@ys + 16*z1 }-> s93 :|: s93 >= 0, s93 <= s84 + 32 * z1, s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + @y, s56 >= 0, s56 <= 2 * s55 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 6 + 16*z' + 48*z'' }-> 1 + @z + s94 :|: s94 >= 0, s94 <= 32 * z', z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 10 + 10*z }-> s79 :|: s79 >= 0, s79 <= inf, z >= 0 bitToInt(z) -{ 9 + 10*z }-> s80 :|: s80 >= 0, s80 <= inf', z >= 0 bitToInt'(z, z') -{ 3 + 10*z }-> s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 12 + 10*@xs }-> s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + s82, s73 >= 0, s73 <= 4 * (z' * @x) + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 8 }-> s86 :|: s86 >= 0, s86 <= z + 3, s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 6 }-> s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 2 }-> s64 :|: s64 >= 0, s64 <= 2 * 0 + (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 12 }-> 1 + s87 + s67 :|: s87 >= 0, s87 <= inf2, s65 >= 0, s65 <= 2 * s50 + z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + z'', s50 >= 0, s50 <= 2 * z + z', s31 >= 0, s31 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> s61 :|: s61 >= 0, s61 <= z + 1, z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> s49 :|: s49 >= 0, s49 <= 2 * z + z', z >= 0, z' >= 0 mod(z, z') -{ 4 }-> s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 1, s78 >= 0, s78 <= 2 * z + s77, s62 >= 0, s62 <= z + 1, z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> add(z', z'') :|: z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> s20 :|: s20 >= 0, s20 <= 2 * z + z', z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 42 + 20*z }-> s95 :|: s95 >= 0, s95 <= inf4, z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 61 + 20*@xs }-> s96 :|: s96 >= 0, s96 <= inf5, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 60 + 20*z1 }-> s99 :|: s99 >= 0, s99 <= inf7, s88 >= 0, s88 <= inf3, s68 >= 0, s68 <= 2 * z'' + @y, s69 >= 0, s69 <= 2 * s68 + z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + @y, s60 >= 0, s60 <= 2 * s59 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 47 + 20*z' }-> s98 :|: s97 >= 0, s97 <= inf6, s98 >= 0, s98 <= s97 + @z + 1, z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 4 }-> 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= z' + @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 12 }-> s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + z'', s21 >= 0, s21 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 9 }-> s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0 sum#2(z, z') -{ 7 }-> s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 5 }-> s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 Function symbols to be analyzed: {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] #eq: runtime: O(1) [0], size: O(1) [2] #less: runtime: O(1) [1], size: O(1) [2] #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #div: runtime: O(1) [0], size: O(n^1) [1 + z] sum#3: runtime: O(1) [5], size: O(1) [7] sub'#4: runtime: O(1) [4], size: O(n^1) [1 + z + z'] #equal: runtime: O(1) [1], size: O(1) [2] minus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] div: runtime: O(1) [1], size: O(n^1) [1 + z] sum#2: runtime: O(1) [7], size: O(1) [7] compare#5: runtime: O(1) [4], size: O(1) [3] times: runtime: O(1) [1], size: O(n^2) [1 + 4*z*z'] bitToInt': runtime: O(n^1) [8 + 10*z], size: INF bitToInt'#1: runtime: O(n^1) [2 + 10*z], size: INF sum#1: runtime: O(1) [9], size: O(1) [7] compare#4: runtime: O(1) [6], size: O(n^1) [3 + z'] mod: runtime: O(1) [4], size: INF bitToInt: runtime: O(n^1) [10 + 10*z], size: INF sum: runtime: O(1) [12], size: O(1) [7] add'#2: runtime: O(n^1) [2 + 48*z + 16*z1], size: O(n^1) [28 + 32*z1] add'#1: runtime: O(n^1) [4 + 16*z + 48*z'], size: O(n^1) [32*z] add': runtime: O(n^1) [5 + 16*z + 48*z'], size: O(n^1) [32*z] add'#3: runtime: O(n^1) [6 + 16*z' + 48*z''], size: O(n^1) [z + 32*z'] compare#3: runtime: O(1) [8], size: O(n^1) [3 + z] diff: runtime: O(1) [12], size: INF sub'#2: runtime: O(n^1) [60 + 20*z1], size: INF sub'#1: runtime: O(n^1) [41 + 20*z], size: INF sub'#3: runtime: O(n^1) [47 + 20*z'], size: INF add: runtime: O(n^1) [7 + 16*z + 48*z'], size: O(n^1) [32*z] ---------------------------------------- (273) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (274) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + z', s26 >= 0, s26 <= s25 + 2, s27 >= 0, s27 <= s26 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + z', s29 >= 0, s29 <= s28 + 2, s30 >= 0, s30 <= s29 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + s32 :|: s32 >= 0, s32 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #equal(z, z') -{ 1 }-> s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s51 :|: s51 >= 0, s51 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + s33 :|: s33 >= 0, s33 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + s34 :|: s34 >= 0, s34 <= s3 + 1, s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + s35 :|: s35 >= 0, s35 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s54 :|: s52 >= 0, s52 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s53 >= 0, s53 <= 2 * (1 + z') + s52, s54 >= 0, s54 <= 2 * (1 + z') + s53, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> s24 :|: s24 >= 0, s24 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 7 + 16*z + 48*z' }-> s89 :|: s89 >= 0, s89 <= 32 * z, z' >= 0, z >= 0 add(z, z') -{ 6 + 16*z + 48*z' }-> s90 :|: s90 >= 0, s90 <= 32 * z, z' >= 0, z >= 0 add'(z, z', z'') -{ 5 + 16*z + 48*z' }-> s91 :|: s91 >= 0, s91 <= 32 * z, z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 3 + 16*@xs + 48*z' }-> s92 :|: s92 >= 0, s92 <= 32 * @xs + 28, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 19 + 48*@ys + 16*z1 }-> s93 :|: s93 >= 0, s93 <= s84 + 32 * z1, s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + @y, s56 >= 0, s56 <= 2 * s55 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 6 + 16*z' + 48*z'' }-> 1 + @z + s94 :|: s94 >= 0, s94 <= 32 * z', z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 10 + 10*z }-> s79 :|: s79 >= 0, s79 <= inf, z >= 0 bitToInt(z) -{ 9 + 10*z }-> s80 :|: s80 >= 0, s80 <= inf', z >= 0 bitToInt'(z, z') -{ 3 + 10*z }-> s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 12 + 10*@xs }-> s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + s82, s73 >= 0, s73 <= 4 * (z' * @x) + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 8 }-> s86 :|: s86 >= 0, s86 <= z + 3, s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 6 }-> s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 2 }-> s64 :|: s64 >= 0, s64 <= 2 * 0 + (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 12 }-> 1 + s87 + s67 :|: s87 >= 0, s87 <= inf2, s65 >= 0, s65 <= 2 * s50 + z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + z'', s50 >= 0, s50 <= 2 * z + z', s31 >= 0, s31 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> s61 :|: s61 >= 0, s61 <= z + 1, z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> s49 :|: s49 >= 0, s49 <= 2 * z + z', z >= 0, z' >= 0 mod(z, z') -{ 4 }-> s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 1, s78 >= 0, s78 <= 2 * z + s77, s62 >= 0, s62 <= z + 1, z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 8 + 16*z' + 48*z'' }-> s100 :|: s100 >= 0, s100 <= 32 * z', z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> s20 :|: s20 >= 0, s20 <= 2 * z + z', z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 42 + 20*z }-> s95 :|: s95 >= 0, s95 <= inf4, z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 61 + 20*@xs }-> s96 :|: s96 >= 0, s96 <= inf5, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 60 + 20*z1 }-> s99 :|: s99 >= 0, s99 <= inf7, s88 >= 0, s88 <= inf3, s68 >= 0, s68 <= 2 * z'' + @y, s69 >= 0, s69 <= 2 * s68 + z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + @y, s60 >= 0, s60 <= 2 * s59 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 47 + 20*z' }-> s98 :|: s97 >= 0, s97 <= inf6, s98 >= 0, s98 <= s97 + @z + 1, z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 4 }-> 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= z' + @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 12 }-> s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + z'', s21 >= 0, s21 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 9 }-> s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0 sum#2(z, z') -{ 7 }-> s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 5 }-> s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 Function symbols to be analyzed: {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] #eq: runtime: O(1) [0], size: O(1) [2] #less: runtime: O(1) [1], size: O(1) [2] #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #div: runtime: O(1) [0], size: O(n^1) [1 + z] sum#3: runtime: O(1) [5], size: O(1) [7] sub'#4: runtime: O(1) [4], size: O(n^1) [1 + z + z'] #equal: runtime: O(1) [1], size: O(1) [2] minus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] div: runtime: O(1) [1], size: O(n^1) [1 + z] sum#2: runtime: O(1) [7], size: O(1) [7] compare#5: runtime: O(1) [4], size: O(1) [3] times: runtime: O(1) [1], size: O(n^2) [1 + 4*z*z'] bitToInt': runtime: O(n^1) [8 + 10*z], size: INF bitToInt'#1: runtime: O(n^1) [2 + 10*z], size: INF sum#1: runtime: O(1) [9], size: O(1) [7] compare#4: runtime: O(1) [6], size: O(n^1) [3 + z'] mod: runtime: O(1) [4], size: INF bitToInt: runtime: O(n^1) [10 + 10*z], size: INF sum: runtime: O(1) [12], size: O(1) [7] add'#2: runtime: O(n^1) [2 + 48*z + 16*z1], size: O(n^1) [28 + 32*z1] add'#1: runtime: O(n^1) [4 + 16*z + 48*z'], size: O(n^1) [32*z] add': runtime: O(n^1) [5 + 16*z + 48*z'], size: O(n^1) [32*z] add'#3: runtime: O(n^1) [6 + 16*z' + 48*z''], size: O(n^1) [z + 32*z'] compare#3: runtime: O(1) [8], size: O(n^1) [3 + z] diff: runtime: O(1) [12], size: INF sub'#2: runtime: O(n^1) [60 + 20*z1], size: INF sub'#1: runtime: O(n^1) [41 + 20*z], size: INF sub'#3: runtime: O(n^1) [47 + 20*z'], size: INF add: runtime: O(n^1) [7 + 16*z + 48*z'], size: O(n^1) [32*z] ---------------------------------------- (275) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: compare#1 after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 3*z' Computed SIZE bound using CoFloCo for: compare#2 after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 3*z ---------------------------------------- (276) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + z', s26 >= 0, s26 <= s25 + 2, s27 >= 0, s27 <= s26 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + z', s29 >= 0, s29 <= s28 + 2, s30 >= 0, s30 <= s29 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + s32 :|: s32 >= 0, s32 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #equal(z, z') -{ 1 }-> s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s51 :|: s51 >= 0, s51 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + s33 :|: s33 >= 0, s33 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + s34 :|: s34 >= 0, s34 <= s3 + 1, s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + s35 :|: s35 >= 0, s35 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s54 :|: s52 >= 0, s52 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s53 >= 0, s53 <= 2 * (1 + z') + s52, s54 >= 0, s54 <= 2 * (1 + z') + s53, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> s24 :|: s24 >= 0, s24 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 7 + 16*z + 48*z' }-> s89 :|: s89 >= 0, s89 <= 32 * z, z' >= 0, z >= 0 add(z, z') -{ 6 + 16*z + 48*z' }-> s90 :|: s90 >= 0, s90 <= 32 * z, z' >= 0, z >= 0 add'(z, z', z'') -{ 5 + 16*z + 48*z' }-> s91 :|: s91 >= 0, s91 <= 32 * z, z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 3 + 16*@xs + 48*z' }-> s92 :|: s92 >= 0, s92 <= 32 * @xs + 28, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 19 + 48*@ys + 16*z1 }-> s93 :|: s93 >= 0, s93 <= s84 + 32 * z1, s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + @y, s56 >= 0, s56 <= 2 * s55 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 6 + 16*z' + 48*z'' }-> 1 + @z + s94 :|: s94 >= 0, s94 <= 32 * z', z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 10 + 10*z }-> s79 :|: s79 >= 0, s79 <= inf, z >= 0 bitToInt(z) -{ 9 + 10*z }-> s80 :|: s80 >= 0, s80 <= inf', z >= 0 bitToInt'(z, z') -{ 3 + 10*z }-> s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 12 + 10*@xs }-> s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + s82, s73 >= 0, s73 <= 4 * (z' * @x) + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 8 }-> s86 :|: s86 >= 0, s86 <= z + 3, s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 6 }-> s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 2 }-> s64 :|: s64 >= 0, s64 <= 2 * 0 + (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 12 }-> 1 + s87 + s67 :|: s87 >= 0, s87 <= inf2, s65 >= 0, s65 <= 2 * s50 + z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + z'', s50 >= 0, s50 <= 2 * z + z', s31 >= 0, s31 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> s61 :|: s61 >= 0, s61 <= z + 1, z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> s49 :|: s49 >= 0, s49 <= 2 * z + z', z >= 0, z' >= 0 mod(z, z') -{ 4 }-> s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 1, s78 >= 0, s78 <= 2 * z + s77, s62 >= 0, s62 <= z + 1, z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 8 + 16*z' + 48*z'' }-> s100 :|: s100 >= 0, s100 <= 32 * z', z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> s20 :|: s20 >= 0, s20 <= 2 * z + z', z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 42 + 20*z }-> s95 :|: s95 >= 0, s95 <= inf4, z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 61 + 20*@xs }-> s96 :|: s96 >= 0, s96 <= inf5, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 60 + 20*z1 }-> s99 :|: s99 >= 0, s99 <= inf7, s88 >= 0, s88 <= inf3, s68 >= 0, s68 <= 2 * z'' + @y, s69 >= 0, s69 <= 2 * s68 + z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + @y, s60 >= 0, s60 <= 2 * s59 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 47 + 20*z' }-> s98 :|: s97 >= 0, s97 <= inf6, s98 >= 0, s98 <= s97 + @z + 1, z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 4 }-> 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= z' + @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 12 }-> s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + z'', s21 >= 0, s21 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 9 }-> s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0 sum#2(z, z') -{ 7 }-> s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 5 }-> s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 Function symbols to be analyzed: {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] #eq: runtime: O(1) [0], size: O(1) [2] #less: runtime: O(1) [1], size: O(1) [2] #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #div: runtime: O(1) [0], size: O(n^1) [1 + z] sum#3: runtime: O(1) [5], size: O(1) [7] sub'#4: runtime: O(1) [4], size: O(n^1) [1 + z + z'] #equal: runtime: O(1) [1], size: O(1) [2] minus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] div: runtime: O(1) [1], size: O(n^1) [1 + z] sum#2: runtime: O(1) [7], size: O(1) [7] compare#5: runtime: O(1) [4], size: O(1) [3] times: runtime: O(1) [1], size: O(n^2) [1 + 4*z*z'] bitToInt': runtime: O(n^1) [8 + 10*z], size: INF bitToInt'#1: runtime: O(n^1) [2 + 10*z], size: INF sum#1: runtime: O(1) [9], size: O(1) [7] compare#4: runtime: O(1) [6], size: O(n^1) [3 + z'] mod: runtime: O(1) [4], size: INF bitToInt: runtime: O(n^1) [10 + 10*z], size: INF sum: runtime: O(1) [12], size: O(1) [7] add'#2: runtime: O(n^1) [2 + 48*z + 16*z1], size: O(n^1) [28 + 32*z1] add'#1: runtime: O(n^1) [4 + 16*z + 48*z'], size: O(n^1) [32*z] add': runtime: O(n^1) [5 + 16*z + 48*z'], size: O(n^1) [32*z] add'#3: runtime: O(n^1) [6 + 16*z' + 48*z''], size: O(n^1) [z + 32*z'] compare#3: runtime: O(1) [8], size: O(n^1) [3 + z] diff: runtime: O(1) [12], size: INF sub'#2: runtime: O(n^1) [60 + 20*z1], size: INF sub'#1: runtime: O(n^1) [41 + 20*z], size: INF sub'#3: runtime: O(n^1) [47 + 20*z'], size: INF add: runtime: O(n^1) [7 + 16*z + 48*z'], size: O(n^1) [32*z] compare#1: runtime: ?, size: O(n^1) [3*z'] compare#2: runtime: ?, size: O(n^1) [3*z] ---------------------------------------- (277) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: compare#1 after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 25 + 11*z' Computed RUNTIME bound using CoFloCo for: compare#2 after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 24 + 11*z ---------------------------------------- (278) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + z', s26 >= 0, s26 <= s25 + 2, s27 >= 0, s27 <= s26 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + z', s29 >= 0, s29 <= s28 + 2, s30 >= 0, s30 <= s29 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + s32 :|: s32 >= 0, s32 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #equal(z, z') -{ 1 }-> s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s51 :|: s51 >= 0, s51 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + s33 :|: s33 >= 0, s33 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + s34 :|: s34 >= 0, s34 <= s3 + 1, s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + s35 :|: s35 >= 0, s35 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s54 :|: s52 >= 0, s52 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s53 >= 0, s53 <= 2 * (1 + z') + s52, s54 >= 0, s54 <= 2 * (1 + z') + s53, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> s24 :|: s24 >= 0, s24 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 7 + 16*z + 48*z' }-> s89 :|: s89 >= 0, s89 <= 32 * z, z' >= 0, z >= 0 add(z, z') -{ 6 + 16*z + 48*z' }-> s90 :|: s90 >= 0, s90 <= 32 * z, z' >= 0, z >= 0 add'(z, z', z'') -{ 5 + 16*z + 48*z' }-> s91 :|: s91 >= 0, s91 <= 32 * z, z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 3 + 16*@xs + 48*z' }-> s92 :|: s92 >= 0, s92 <= 32 * @xs + 28, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 19 + 48*@ys + 16*z1 }-> s93 :|: s93 >= 0, s93 <= s84 + 32 * z1, s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + @y, s56 >= 0, s56 <= 2 * s55 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 6 + 16*z' + 48*z'' }-> 1 + @z + s94 :|: s94 >= 0, s94 <= 32 * z', z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 10 + 10*z }-> s79 :|: s79 >= 0, s79 <= inf, z >= 0 bitToInt(z) -{ 9 + 10*z }-> s80 :|: s80 >= 0, s80 <= inf', z >= 0 bitToInt'(z, z') -{ 3 + 10*z }-> s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 12 + 10*@xs }-> s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + s82, s73 >= 0, s73 <= 4 * (z' * @x) + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 1 }-> compare#1(z, z') :|: z' >= 0, z >= 0 compare#1(z, z') -{ 1 }-> compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 2 }-> compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 8 }-> s86 :|: s86 >= 0, s86 <= z + 3, s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 6 }-> s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 2 }-> s64 :|: s64 >= 0, s64 <= 2 * 0 + (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 12 }-> 1 + s87 + s67 :|: s87 >= 0, s87 <= inf2, s65 >= 0, s65 <= 2 * s50 + z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + z'', s50 >= 0, s50 <= 2 * z + z', s31 >= 0, s31 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> s61 :|: s61 >= 0, s61 <= z + 1, z >= 0, z' >= 0 leq(z, z') -{ 2 }-> #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0 minus(z, z') -{ 1 }-> s49 :|: s49 >= 0, s49 <= 2 * z + z', z >= 0, z' >= 0 mod(z, z') -{ 4 }-> s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 1, s78 >= 0, s78 <= 2 * z + s77, s62 >= 0, s62 <= z + 1, z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 8 + 16*z' + 48*z'' }-> s100 :|: s100 >= 0, s100 <= 32 * z', z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> s20 :|: s20 >= 0, s20 <= 2 * z + z', z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 42 + 20*z }-> s95 :|: s95 >= 0, s95 <= inf4, z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 61 + 20*@xs }-> s96 :|: s96 >= 0, s96 <= inf5, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 60 + 20*z1 }-> s99 :|: s99 >= 0, s99 <= inf7, s88 >= 0, s88 <= inf3, s68 >= 0, s68 <= 2 * z'' + @y, s69 >= 0, s69 <= 2 * s68 + z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + @y, s60 >= 0, s60 <= 2 * s59 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 47 + 20*z' }-> s98 :|: s97 >= 0, s97 <= inf6, s98 >= 0, s98 <= s97 + @z + 1, z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 4 }-> 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= z' + @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 12 }-> s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + z'', s21 >= 0, s21 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 9 }-> s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0 sum#2(z, z') -{ 7 }-> s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 5 }-> s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 Function symbols to be analyzed: {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] #eq: runtime: O(1) [0], size: O(1) [2] #less: runtime: O(1) [1], size: O(1) [2] #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #div: runtime: O(1) [0], size: O(n^1) [1 + z] sum#3: runtime: O(1) [5], size: O(1) [7] sub'#4: runtime: O(1) [4], size: O(n^1) [1 + z + z'] #equal: runtime: O(1) [1], size: O(1) [2] minus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] div: runtime: O(1) [1], size: O(n^1) [1 + z] sum#2: runtime: O(1) [7], size: O(1) [7] compare#5: runtime: O(1) [4], size: O(1) [3] times: runtime: O(1) [1], size: O(n^2) [1 + 4*z*z'] bitToInt': runtime: O(n^1) [8 + 10*z], size: INF bitToInt'#1: runtime: O(n^1) [2 + 10*z], size: INF sum#1: runtime: O(1) [9], size: O(1) [7] compare#4: runtime: O(1) [6], size: O(n^1) [3 + z'] mod: runtime: O(1) [4], size: INF bitToInt: runtime: O(n^1) [10 + 10*z], size: INF sum: runtime: O(1) [12], size: O(1) [7] add'#2: runtime: O(n^1) [2 + 48*z + 16*z1], size: O(n^1) [28 + 32*z1] add'#1: runtime: O(n^1) [4 + 16*z + 48*z'], size: O(n^1) [32*z] add': runtime: O(n^1) [5 + 16*z + 48*z'], size: O(n^1) [32*z] add'#3: runtime: O(n^1) [6 + 16*z' + 48*z''], size: O(n^1) [z + 32*z'] compare#3: runtime: O(1) [8], size: O(n^1) [3 + z] diff: runtime: O(1) [12], size: INF sub'#2: runtime: O(n^1) [60 + 20*z1], size: INF sub'#1: runtime: O(n^1) [41 + 20*z], size: INF sub'#3: runtime: O(n^1) [47 + 20*z'], size: INF add: runtime: O(n^1) [7 + 16*z + 48*z'], size: O(n^1) [32*z] compare#1: runtime: O(n^1) [25 + 11*z'], size: O(n^1) [3*z'] compare#2: runtime: O(n^1) [24 + 11*z], size: O(n^1) [3*z] ---------------------------------------- (279) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (280) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + z', s26 >= 0, s26 <= s25 + 2, s27 >= 0, s27 <= s26 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + z', s29 >= 0, s29 <= s28 + 2, s30 >= 0, s30 <= s29 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + s32 :|: s32 >= 0, s32 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #equal(z, z') -{ 1 }-> s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s51 :|: s51 >= 0, s51 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + s33 :|: s33 >= 0, s33 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + s34 :|: s34 >= 0, s34 <= s3 + 1, s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + s35 :|: s35 >= 0, s35 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s54 :|: s52 >= 0, s52 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s53 >= 0, s53 <= 2 * (1 + z') + s52, s54 >= 0, s54 <= 2 * (1 + z') + s53, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> s24 :|: s24 >= 0, s24 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 7 + 16*z + 48*z' }-> s89 :|: s89 >= 0, s89 <= 32 * z, z' >= 0, z >= 0 add(z, z') -{ 6 + 16*z + 48*z' }-> s90 :|: s90 >= 0, s90 <= 32 * z, z' >= 0, z >= 0 add'(z, z', z'') -{ 5 + 16*z + 48*z' }-> s91 :|: s91 >= 0, s91 <= 32 * z, z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 3 + 16*@xs + 48*z' }-> s92 :|: s92 >= 0, s92 <= 32 * @xs + 28, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 19 + 48*@ys + 16*z1 }-> s93 :|: s93 >= 0, s93 <= s84 + 32 * z1, s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + @y, s56 >= 0, s56 <= 2 * s55 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 6 + 16*z' + 48*z'' }-> 1 + @z + s94 :|: s94 >= 0, s94 <= 32 * z', z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 10 + 10*z }-> s79 :|: s79 >= 0, s79 <= inf, z >= 0 bitToInt(z) -{ 9 + 10*z }-> s80 :|: s80 >= 0, s80 <= inf', z >= 0 bitToInt'(z, z') -{ 3 + 10*z }-> s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 12 + 10*@xs }-> s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + s82, s73 >= 0, s73 <= 4 * (z' * @x) + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 26 + 11*z' }-> s101 :|: s101 >= 0, s101 <= 3 * z', z' >= 0, z >= 0 compare#1(z, z') -{ 25 + 11*z' }-> s102 :|: s102 >= 0, s102 <= 3 * z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 35 + 11*@ys }-> s104 :|: s103 >= 0, s103 <= 3 * @ys, s104 >= 0, s104 <= s103 + 3, z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 8 }-> s86 :|: s86 >= 0, s86 <= z + 3, s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 6 }-> s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 2 }-> s64 :|: s64 >= 0, s64 <= 2 * 0 + (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 12 }-> 1 + s87 + s67 :|: s87 >= 0, s87 <= inf2, s65 >= 0, s65 <= 2 * s50 + z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + z'', s50 >= 0, s50 <= 2 * z + z', s31 >= 0, s31 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> s61 :|: s61 >= 0, s61 <= z + 1, z >= 0, z' >= 0 leq(z, z') -{ 28 + 11*z' }-> s106 :|: s105 >= 0, s105 <= 3 * z', s106 >= 0, s106 <= 2, z' >= 0, z >= 0 minus(z, z') -{ 1 }-> s49 :|: s49 >= 0, s49 <= 2 * z + z', z >= 0, z' >= 0 mod(z, z') -{ 4 }-> s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 1, s78 >= 0, s78 <= 2 * z + s77, s62 >= 0, s62 <= z + 1, z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 8 + 16*z' + 48*z'' }-> s100 :|: s100 >= 0, s100 <= 32 * z', z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> s20 :|: s20 >= 0, s20 <= 2 * z + z', z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 42 + 20*z }-> s95 :|: s95 >= 0, s95 <= inf4, z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 61 + 20*@xs }-> s96 :|: s96 >= 0, s96 <= inf5, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 60 + 20*z1 }-> s99 :|: s99 >= 0, s99 <= inf7, s88 >= 0, s88 <= inf3, s68 >= 0, s68 <= 2 * z'' + @y, s69 >= 0, s69 <= 2 * s68 + z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + @y, s60 >= 0, s60 <= 2 * s59 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 47 + 20*z' }-> s98 :|: s97 >= 0, s97 <= inf6, s98 >= 0, s98 <= s97 + @z + 1, z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 4 }-> 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= z' + @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 12 }-> s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + z'', s21 >= 0, s21 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 9 }-> s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0 sum#2(z, z') -{ 7 }-> s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 5 }-> s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 Function symbols to be analyzed: {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] #eq: runtime: O(1) [0], size: O(1) [2] #less: runtime: O(1) [1], size: O(1) [2] #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #div: runtime: O(1) [0], size: O(n^1) [1 + z] sum#3: runtime: O(1) [5], size: O(1) [7] sub'#4: runtime: O(1) [4], size: O(n^1) [1 + z + z'] #equal: runtime: O(1) [1], size: O(1) [2] minus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] div: runtime: O(1) [1], size: O(n^1) [1 + z] sum#2: runtime: O(1) [7], size: O(1) [7] compare#5: runtime: O(1) [4], size: O(1) [3] times: runtime: O(1) [1], size: O(n^2) [1 + 4*z*z'] bitToInt': runtime: O(n^1) [8 + 10*z], size: INF bitToInt'#1: runtime: O(n^1) [2 + 10*z], size: INF sum#1: runtime: O(1) [9], size: O(1) [7] compare#4: runtime: O(1) [6], size: O(n^1) [3 + z'] mod: runtime: O(1) [4], size: INF bitToInt: runtime: O(n^1) [10 + 10*z], size: INF sum: runtime: O(1) [12], size: O(1) [7] add'#2: runtime: O(n^1) [2 + 48*z + 16*z1], size: O(n^1) [28 + 32*z1] add'#1: runtime: O(n^1) [4 + 16*z + 48*z'], size: O(n^1) [32*z] add': runtime: O(n^1) [5 + 16*z + 48*z'], size: O(n^1) [32*z] add'#3: runtime: O(n^1) [6 + 16*z' + 48*z''], size: O(n^1) [z + 32*z'] compare#3: runtime: O(1) [8], size: O(n^1) [3 + z] diff: runtime: O(1) [12], size: INF sub'#2: runtime: O(n^1) [60 + 20*z1], size: INF sub'#1: runtime: O(n^1) [41 + 20*z], size: INF sub'#3: runtime: O(n^1) [47 + 20*z'], size: INF add: runtime: O(n^1) [7 + 16*z + 48*z'], size: O(n^1) [32*z] compare#1: runtime: O(n^1) [25 + 11*z'], size: O(n^1) [3*z'] compare#2: runtime: O(n^1) [24 + 11*z], size: O(n^1) [3*z] ---------------------------------------- (281) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: sub' after applying outer abstraction to obtain an ITS, resulting in: INF with polynomial bound: ? ---------------------------------------- (282) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + z', s26 >= 0, s26 <= s25 + 2, s27 >= 0, s27 <= s26 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + z', s29 >= 0, s29 <= s28 + 2, s30 >= 0, s30 <= s29 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + s32 :|: s32 >= 0, s32 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #equal(z, z') -{ 1 }-> s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s51 :|: s51 >= 0, s51 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + s33 :|: s33 >= 0, s33 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + s34 :|: s34 >= 0, s34 <= s3 + 1, s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + s35 :|: s35 >= 0, s35 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s54 :|: s52 >= 0, s52 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s53 >= 0, s53 <= 2 * (1 + z') + s52, s54 >= 0, s54 <= 2 * (1 + z') + s53, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> s24 :|: s24 >= 0, s24 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 7 + 16*z + 48*z' }-> s89 :|: s89 >= 0, s89 <= 32 * z, z' >= 0, z >= 0 add(z, z') -{ 6 + 16*z + 48*z' }-> s90 :|: s90 >= 0, s90 <= 32 * z, z' >= 0, z >= 0 add'(z, z', z'') -{ 5 + 16*z + 48*z' }-> s91 :|: s91 >= 0, s91 <= 32 * z, z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 3 + 16*@xs + 48*z' }-> s92 :|: s92 >= 0, s92 <= 32 * @xs + 28, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 19 + 48*@ys + 16*z1 }-> s93 :|: s93 >= 0, s93 <= s84 + 32 * z1, s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + @y, s56 >= 0, s56 <= 2 * s55 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 6 + 16*z' + 48*z'' }-> 1 + @z + s94 :|: s94 >= 0, s94 <= 32 * z', z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 10 + 10*z }-> s79 :|: s79 >= 0, s79 <= inf, z >= 0 bitToInt(z) -{ 9 + 10*z }-> s80 :|: s80 >= 0, s80 <= inf', z >= 0 bitToInt'(z, z') -{ 3 + 10*z }-> s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 12 + 10*@xs }-> s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + s82, s73 >= 0, s73 <= 4 * (z' * @x) + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 26 + 11*z' }-> s101 :|: s101 >= 0, s101 <= 3 * z', z' >= 0, z >= 0 compare#1(z, z') -{ 25 + 11*z' }-> s102 :|: s102 >= 0, s102 <= 3 * z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 35 + 11*@ys }-> s104 :|: s103 >= 0, s103 <= 3 * @ys, s104 >= 0, s104 <= s103 + 3, z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 8 }-> s86 :|: s86 >= 0, s86 <= z + 3, s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 6 }-> s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 2 }-> s64 :|: s64 >= 0, s64 <= 2 * 0 + (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 12 }-> 1 + s87 + s67 :|: s87 >= 0, s87 <= inf2, s65 >= 0, s65 <= 2 * s50 + z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + z'', s50 >= 0, s50 <= 2 * z + z', s31 >= 0, s31 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> s61 :|: s61 >= 0, s61 <= z + 1, z >= 0, z' >= 0 leq(z, z') -{ 28 + 11*z' }-> s106 :|: s105 >= 0, s105 <= 3 * z', s106 >= 0, s106 <= 2, z' >= 0, z >= 0 minus(z, z') -{ 1 }-> s49 :|: s49 >= 0, s49 <= 2 * z + z', z >= 0, z' >= 0 mod(z, z') -{ 4 }-> s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 1, s78 >= 0, s78 <= 2 * z + s77, s62 >= 0, s62 <= z + 1, z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 8 + 16*z' + 48*z'' }-> s100 :|: s100 >= 0, s100 <= 32 * z', z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> s20 :|: s20 >= 0, s20 <= 2 * z + z', z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 42 + 20*z }-> s95 :|: s95 >= 0, s95 <= inf4, z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 61 + 20*@xs }-> s96 :|: s96 >= 0, s96 <= inf5, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 60 + 20*z1 }-> s99 :|: s99 >= 0, s99 <= inf7, s88 >= 0, s88 <= inf3, s68 >= 0, s68 <= 2 * z'' + @y, s69 >= 0, s69 <= 2 * s68 + z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + @y, s60 >= 0, s60 <= 2 * s59 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 47 + 20*z' }-> s98 :|: s97 >= 0, s97 <= inf6, s98 >= 0, s98 <= s97 + @z + 1, z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 4 }-> 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= z' + @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 12 }-> s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + z'', s21 >= 0, s21 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 9 }-> s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0 sum#2(z, z') -{ 7 }-> s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 5 }-> s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 Function symbols to be analyzed: {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] #eq: runtime: O(1) [0], size: O(1) [2] #less: runtime: O(1) [1], size: O(1) [2] #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #div: runtime: O(1) [0], size: O(n^1) [1 + z] sum#3: runtime: O(1) [5], size: O(1) [7] sub'#4: runtime: O(1) [4], size: O(n^1) [1 + z + z'] #equal: runtime: O(1) [1], size: O(1) [2] minus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] div: runtime: O(1) [1], size: O(n^1) [1 + z] sum#2: runtime: O(1) [7], size: O(1) [7] compare#5: runtime: O(1) [4], size: O(1) [3] times: runtime: O(1) [1], size: O(n^2) [1 + 4*z*z'] bitToInt': runtime: O(n^1) [8 + 10*z], size: INF bitToInt'#1: runtime: O(n^1) [2 + 10*z], size: INF sum#1: runtime: O(1) [9], size: O(1) [7] compare#4: runtime: O(1) [6], size: O(n^1) [3 + z'] mod: runtime: O(1) [4], size: INF bitToInt: runtime: O(n^1) [10 + 10*z], size: INF sum: runtime: O(1) [12], size: O(1) [7] add'#2: runtime: O(n^1) [2 + 48*z + 16*z1], size: O(n^1) [28 + 32*z1] add'#1: runtime: O(n^1) [4 + 16*z + 48*z'], size: O(n^1) [32*z] add': runtime: O(n^1) [5 + 16*z + 48*z'], size: O(n^1) [32*z] add'#3: runtime: O(n^1) [6 + 16*z' + 48*z''], size: O(n^1) [z + 32*z'] compare#3: runtime: O(1) [8], size: O(n^1) [3 + z] diff: runtime: O(1) [12], size: INF sub'#2: runtime: O(n^1) [60 + 20*z1], size: INF sub'#1: runtime: O(n^1) [41 + 20*z], size: INF sub'#3: runtime: O(n^1) [47 + 20*z'], size: INF add: runtime: O(n^1) [7 + 16*z + 48*z'], size: O(n^1) [32*z] compare#1: runtime: O(n^1) [25 + 11*z'], size: O(n^1) [3*z'] compare#2: runtime: O(n^1) [24 + 11*z], size: O(n^1) [3*z] sub': runtime: ?, size: INF ---------------------------------------- (283) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using KoAT for: sub' after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 42 + 20*z ---------------------------------------- (284) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + z', s26 >= 0, s26 <= s25 + 2, s27 >= 0, s27 <= s26 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + z', s29 >= 0, s29 <= s28 + 2, s30 >= 0, s30 <= s29 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + s32 :|: s32 >= 0, s32 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #equal(z, z') -{ 1 }-> s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s51 :|: s51 >= 0, s51 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + s33 :|: s33 >= 0, s33 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + s34 :|: s34 >= 0, s34 <= s3 + 1, s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + s35 :|: s35 >= 0, s35 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s54 :|: s52 >= 0, s52 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s53 >= 0, s53 <= 2 * (1 + z') + s52, s54 >= 0, s54 <= 2 * (1 + z') + s53, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> s24 :|: s24 >= 0, s24 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 7 + 16*z + 48*z' }-> s89 :|: s89 >= 0, s89 <= 32 * z, z' >= 0, z >= 0 add(z, z') -{ 6 + 16*z + 48*z' }-> s90 :|: s90 >= 0, s90 <= 32 * z, z' >= 0, z >= 0 add'(z, z', z'') -{ 5 + 16*z + 48*z' }-> s91 :|: s91 >= 0, s91 <= 32 * z, z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 3 + 16*@xs + 48*z' }-> s92 :|: s92 >= 0, s92 <= 32 * @xs + 28, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 19 + 48*@ys + 16*z1 }-> s93 :|: s93 >= 0, s93 <= s84 + 32 * z1, s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + @y, s56 >= 0, s56 <= 2 * s55 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 6 + 16*z' + 48*z'' }-> 1 + @z + s94 :|: s94 >= 0, s94 <= 32 * z', z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 10 + 10*z }-> s79 :|: s79 >= 0, s79 <= inf, z >= 0 bitToInt(z) -{ 9 + 10*z }-> s80 :|: s80 >= 0, s80 <= inf', z >= 0 bitToInt'(z, z') -{ 3 + 10*z }-> s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 12 + 10*@xs }-> s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + s82, s73 >= 0, s73 <= 4 * (z' * @x) + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 26 + 11*z' }-> s101 :|: s101 >= 0, s101 <= 3 * z', z' >= 0, z >= 0 compare#1(z, z') -{ 25 + 11*z' }-> s102 :|: s102 >= 0, s102 <= 3 * z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 35 + 11*@ys }-> s104 :|: s103 >= 0, s103 <= 3 * @ys, s104 >= 0, s104 <= s103 + 3, z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 8 }-> s86 :|: s86 >= 0, s86 <= z + 3, s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 6 }-> s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 2 }-> s64 :|: s64 >= 0, s64 <= 2 * 0 + (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 12 }-> 1 + s87 + s67 :|: s87 >= 0, s87 <= inf2, s65 >= 0, s65 <= 2 * s50 + z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + z'', s50 >= 0, s50 <= 2 * z + z', s31 >= 0, s31 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> s61 :|: s61 >= 0, s61 <= z + 1, z >= 0, z' >= 0 leq(z, z') -{ 28 + 11*z' }-> s106 :|: s105 >= 0, s105 <= 3 * z', s106 >= 0, s106 <= 2, z' >= 0, z >= 0 minus(z, z') -{ 1 }-> s49 :|: s49 >= 0, s49 <= 2 * z + z', z >= 0, z' >= 0 mod(z, z') -{ 4 }-> s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 1, s78 >= 0, s78 <= 2 * z + s77, s62 >= 0, s62 <= z + 1, z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 8 + 16*z' + 48*z'' }-> s100 :|: s100 >= 0, s100 <= 32 * z', z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> s20 :|: s20 >= 0, s20 <= 2 * z + z', z >= 0, z' >= 0 sub(z, z') -{ 2 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub(z, z') -{ 1 }-> sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 42 + 20*z }-> s95 :|: s95 >= 0, s95 <= inf4, z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 61 + 20*@xs }-> s96 :|: s96 >= 0, s96 <= inf5, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 60 + 20*z1 }-> s99 :|: s99 >= 0, s99 <= inf7, s88 >= 0, s88 <= inf3, s68 >= 0, s68 <= 2 * z'' + @y, s69 >= 0, s69 <= 2 * s68 + z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + @y, s60 >= 0, s60 <= 2 * s59 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 47 + 20*z' }-> s98 :|: s97 >= 0, s97 <= inf6, s98 >= 0, s98 <= s97 + @z + 1, z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 4 }-> 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= z' + @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 12 }-> s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + z'', s21 >= 0, s21 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 9 }-> s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0 sum#2(z, z') -{ 7 }-> s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 5 }-> s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 Function symbols to be analyzed: {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] #eq: runtime: O(1) [0], size: O(1) [2] #less: runtime: O(1) [1], size: O(1) [2] #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #div: runtime: O(1) [0], size: O(n^1) [1 + z] sum#3: runtime: O(1) [5], size: O(1) [7] sub'#4: runtime: O(1) [4], size: O(n^1) [1 + z + z'] #equal: runtime: O(1) [1], size: O(1) [2] minus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] div: runtime: O(1) [1], size: O(n^1) [1 + z] sum#2: runtime: O(1) [7], size: O(1) [7] compare#5: runtime: O(1) [4], size: O(1) [3] times: runtime: O(1) [1], size: O(n^2) [1 + 4*z*z'] bitToInt': runtime: O(n^1) [8 + 10*z], size: INF bitToInt'#1: runtime: O(n^1) [2 + 10*z], size: INF sum#1: runtime: O(1) [9], size: O(1) [7] compare#4: runtime: O(1) [6], size: O(n^1) [3 + z'] mod: runtime: O(1) [4], size: INF bitToInt: runtime: O(n^1) [10 + 10*z], size: INF sum: runtime: O(1) [12], size: O(1) [7] add'#2: runtime: O(n^1) [2 + 48*z + 16*z1], size: O(n^1) [28 + 32*z1] add'#1: runtime: O(n^1) [4 + 16*z + 48*z'], size: O(n^1) [32*z] add': runtime: O(n^1) [5 + 16*z + 48*z'], size: O(n^1) [32*z] add'#3: runtime: O(n^1) [6 + 16*z' + 48*z''], size: O(n^1) [z + 32*z'] compare#3: runtime: O(1) [8], size: O(n^1) [3 + z] diff: runtime: O(1) [12], size: INF sub'#2: runtime: O(n^1) [60 + 20*z1], size: INF sub'#1: runtime: O(n^1) [41 + 20*z], size: INF sub'#3: runtime: O(n^1) [47 + 20*z'], size: INF add: runtime: O(n^1) [7 + 16*z + 48*z'], size: O(n^1) [32*z] compare#1: runtime: O(n^1) [25 + 11*z'], size: O(n^1) [3*z'] compare#2: runtime: O(n^1) [24 + 11*z], size: O(n^1) [3*z] sub': runtime: O(n^1) [42 + 20*z], size: INF ---------------------------------------- (285) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (286) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + z', s26 >= 0, s26 <= s25 + 2, s27 >= 0, s27 <= s26 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + z', s29 >= 0, s29 <= s28 + 2, s30 >= 0, s30 <= s29 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + s32 :|: s32 >= 0, s32 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #equal(z, z') -{ 1 }-> s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s51 :|: s51 >= 0, s51 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + s33 :|: s33 >= 0, s33 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + s34 :|: s34 >= 0, s34 <= s3 + 1, s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + s35 :|: s35 >= 0, s35 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s54 :|: s52 >= 0, s52 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s53 >= 0, s53 <= 2 * (1 + z') + s52, s54 >= 0, s54 <= 2 * (1 + z') + s53, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> s24 :|: s24 >= 0, s24 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 7 + 16*z + 48*z' }-> s89 :|: s89 >= 0, s89 <= 32 * z, z' >= 0, z >= 0 add(z, z') -{ 6 + 16*z + 48*z' }-> s90 :|: s90 >= 0, s90 <= 32 * z, z' >= 0, z >= 0 add'(z, z', z'') -{ 5 + 16*z + 48*z' }-> s91 :|: s91 >= 0, s91 <= 32 * z, z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 3 + 16*@xs + 48*z' }-> s92 :|: s92 >= 0, s92 <= 32 * @xs + 28, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 19 + 48*@ys + 16*z1 }-> s93 :|: s93 >= 0, s93 <= s84 + 32 * z1, s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + @y, s56 >= 0, s56 <= 2 * s55 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 6 + 16*z' + 48*z'' }-> 1 + @z + s94 :|: s94 >= 0, s94 <= 32 * z', z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 10 + 10*z }-> s79 :|: s79 >= 0, s79 <= inf, z >= 0 bitToInt(z) -{ 9 + 10*z }-> s80 :|: s80 >= 0, s80 <= inf', z >= 0 bitToInt'(z, z') -{ 3 + 10*z }-> s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 12 + 10*@xs }-> s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + s82, s73 >= 0, s73 <= 4 * (z' * @x) + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 26 + 11*z' }-> s101 :|: s101 >= 0, s101 <= 3 * z', z' >= 0, z >= 0 compare#1(z, z') -{ 25 + 11*z' }-> s102 :|: s102 >= 0, s102 <= 3 * z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 35 + 11*@ys }-> s104 :|: s103 >= 0, s103 <= 3 * @ys, s104 >= 0, s104 <= s103 + 3, z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 8 }-> s86 :|: s86 >= 0, s86 <= z + 3, s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 6 }-> s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 2 }-> s64 :|: s64 >= 0, s64 <= 2 * 0 + (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 12 }-> 1 + s87 + s67 :|: s87 >= 0, s87 <= inf2, s65 >= 0, s65 <= 2 * s50 + z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + z'', s50 >= 0, s50 <= 2 * z + z', s31 >= 0, s31 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> s61 :|: s61 >= 0, s61 <= z + 1, z >= 0, z' >= 0 leq(z, z') -{ 28 + 11*z' }-> s106 :|: s105 >= 0, s105 <= 3 * z', s106 >= 0, s106 <= 2, z' >= 0, z >= 0 minus(z, z') -{ 1 }-> s49 :|: s49 >= 0, s49 <= 2 * z + z', z >= 0, z' >= 0 mod(z, z') -{ 4 }-> s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 1, s78 >= 0, s78 <= 2 * z + s77, s62 >= 0, s62 <= z + 1, z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 8 + 16*z' + 48*z'' }-> s100 :|: s100 >= 0, s100 <= 32 * z', z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> s20 :|: s20 >= 0, s20 <= 2 * z + z', z >= 0, z' >= 0 sub(z, z') -{ 45 + 20*z }-> s108 :|: s107 >= 0, s107 <= inf8, s108 >= 0, s108 <= s107, z' >= 0, z >= 0 sub(z, z') -{ 44 + 20*z }-> s110 :|: s109 >= 0, s109 <= inf9, s110 >= 0, s110 <= s109, z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 42 + 20*z }-> s95 :|: s95 >= 0, s95 <= inf4, z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 61 + 20*@xs }-> s96 :|: s96 >= 0, s96 <= inf5, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 60 + 20*z1 }-> s99 :|: s99 >= 0, s99 <= inf7, s88 >= 0, s88 <= inf3, s68 >= 0, s68 <= 2 * z'' + @y, s69 >= 0, s69 <= 2 * s68 + z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + @y, s60 >= 0, s60 <= 2 * s59 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 47 + 20*z' }-> s98 :|: s97 >= 0, s97 <= inf6, s98 >= 0, s98 <= s97 + @z + 1, z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 4 }-> 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= z' + @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 12 }-> s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + z'', s21 >= 0, s21 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 9 }-> s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0 sum#2(z, z') -{ 7 }-> s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 5 }-> s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 Function symbols to be analyzed: {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] #eq: runtime: O(1) [0], size: O(1) [2] #less: runtime: O(1) [1], size: O(1) [2] #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #div: runtime: O(1) [0], size: O(n^1) [1 + z] sum#3: runtime: O(1) [5], size: O(1) [7] sub'#4: runtime: O(1) [4], size: O(n^1) [1 + z + z'] #equal: runtime: O(1) [1], size: O(1) [2] minus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] div: runtime: O(1) [1], size: O(n^1) [1 + z] sum#2: runtime: O(1) [7], size: O(1) [7] compare#5: runtime: O(1) [4], size: O(1) [3] times: runtime: O(1) [1], size: O(n^2) [1 + 4*z*z'] bitToInt': runtime: O(n^1) [8 + 10*z], size: INF bitToInt'#1: runtime: O(n^1) [2 + 10*z], size: INF sum#1: runtime: O(1) [9], size: O(1) [7] compare#4: runtime: O(1) [6], size: O(n^1) [3 + z'] mod: runtime: O(1) [4], size: INF bitToInt: runtime: O(n^1) [10 + 10*z], size: INF sum: runtime: O(1) [12], size: O(1) [7] add'#2: runtime: O(n^1) [2 + 48*z + 16*z1], size: O(n^1) [28 + 32*z1] add'#1: runtime: O(n^1) [4 + 16*z + 48*z'], size: O(n^1) [32*z] add': runtime: O(n^1) [5 + 16*z + 48*z'], size: O(n^1) [32*z] add'#3: runtime: O(n^1) [6 + 16*z' + 48*z''], size: O(n^1) [z + 32*z'] compare#3: runtime: O(1) [8], size: O(n^1) [3 + z] diff: runtime: O(1) [12], size: INF sub'#2: runtime: O(n^1) [60 + 20*z1], size: INF sub'#1: runtime: O(n^1) [41 + 20*z], size: INF sub'#3: runtime: O(n^1) [47 + 20*z'], size: INF add: runtime: O(n^1) [7 + 16*z + 48*z'], size: O(n^1) [32*z] compare#1: runtime: O(n^1) [25 + 11*z'], size: O(n^1) [3*z'] compare#2: runtime: O(n^1) [24 + 11*z], size: O(n^1) [3*z] sub': runtime: O(n^1) [42 + 20*z], size: INF ---------------------------------------- (287) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: mult#3 after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 32*z' + z'' ---------------------------------------- (288) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + z', s26 >= 0, s26 <= s25 + 2, s27 >= 0, s27 <= s26 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + z', s29 >= 0, s29 <= s28 + 2, s30 >= 0, s30 <= s29 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + s32 :|: s32 >= 0, s32 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #equal(z, z') -{ 1 }-> s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s51 :|: s51 >= 0, s51 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + s33 :|: s33 >= 0, s33 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + s34 :|: s34 >= 0, s34 <= s3 + 1, s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + s35 :|: s35 >= 0, s35 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s54 :|: s52 >= 0, s52 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s53 >= 0, s53 <= 2 * (1 + z') + s52, s54 >= 0, s54 <= 2 * (1 + z') + s53, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> s24 :|: s24 >= 0, s24 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 7 + 16*z + 48*z' }-> s89 :|: s89 >= 0, s89 <= 32 * z, z' >= 0, z >= 0 add(z, z') -{ 6 + 16*z + 48*z' }-> s90 :|: s90 >= 0, s90 <= 32 * z, z' >= 0, z >= 0 add'(z, z', z'') -{ 5 + 16*z + 48*z' }-> s91 :|: s91 >= 0, s91 <= 32 * z, z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 3 + 16*@xs + 48*z' }-> s92 :|: s92 >= 0, s92 <= 32 * @xs + 28, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 19 + 48*@ys + 16*z1 }-> s93 :|: s93 >= 0, s93 <= s84 + 32 * z1, s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + @y, s56 >= 0, s56 <= 2 * s55 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 6 + 16*z' + 48*z'' }-> 1 + @z + s94 :|: s94 >= 0, s94 <= 32 * z', z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 10 + 10*z }-> s79 :|: s79 >= 0, s79 <= inf, z >= 0 bitToInt(z) -{ 9 + 10*z }-> s80 :|: s80 >= 0, s80 <= inf', z >= 0 bitToInt'(z, z') -{ 3 + 10*z }-> s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 12 + 10*@xs }-> s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + s82, s73 >= 0, s73 <= 4 * (z' * @x) + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 26 + 11*z' }-> s101 :|: s101 >= 0, s101 <= 3 * z', z' >= 0, z >= 0 compare#1(z, z') -{ 25 + 11*z' }-> s102 :|: s102 >= 0, s102 <= 3 * z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 35 + 11*@ys }-> s104 :|: s103 >= 0, s103 <= 3 * @ys, s104 >= 0, s104 <= s103 + 3, z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 8 }-> s86 :|: s86 >= 0, s86 <= z + 3, s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 6 }-> s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 2 }-> s64 :|: s64 >= 0, s64 <= 2 * 0 + (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 12 }-> 1 + s87 + s67 :|: s87 >= 0, s87 <= inf2, s65 >= 0, s65 <= 2 * s50 + z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + z'', s50 >= 0, s50 <= 2 * z + z', s31 >= 0, s31 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> s61 :|: s61 >= 0, s61 <= z + 1, z >= 0, z' >= 0 leq(z, z') -{ 28 + 11*z' }-> s106 :|: s105 >= 0, s105 <= 3 * z', s106 >= 0, s106 <= 2, z' >= 0, z >= 0 minus(z, z') -{ 1 }-> s49 :|: s49 >= 0, s49 <= 2 * z + z', z >= 0, z' >= 0 mod(z, z') -{ 4 }-> s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 1, s78 >= 0, s78 <= 2 * z + s77, s62 >= 0, s62 <= z + 1, z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 8 + 16*z' + 48*z'' }-> s100 :|: s100 >= 0, s100 <= 32 * z', z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> s20 :|: s20 >= 0, s20 <= 2 * z + z', z >= 0, z' >= 0 sub(z, z') -{ 45 + 20*z }-> s108 :|: s107 >= 0, s107 <= inf8, s108 >= 0, s108 <= s107, z' >= 0, z >= 0 sub(z, z') -{ 44 + 20*z }-> s110 :|: s109 >= 0, s109 <= inf9, s110 >= 0, s110 <= s109, z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 42 + 20*z }-> s95 :|: s95 >= 0, s95 <= inf4, z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 61 + 20*@xs }-> s96 :|: s96 >= 0, s96 <= inf5, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 60 + 20*z1 }-> s99 :|: s99 >= 0, s99 <= inf7, s88 >= 0, s88 <= inf3, s68 >= 0, s68 <= 2 * z'' + @y, s69 >= 0, s69 <= 2 * s68 + z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + @y, s60 >= 0, s60 <= 2 * s59 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 47 + 20*z' }-> s98 :|: s97 >= 0, s97 <= inf6, s98 >= 0, s98 <= s97 + @z + 1, z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 4 }-> 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= z' + @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 12 }-> s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + z'', s21 >= 0, s21 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 9 }-> s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0 sum#2(z, z') -{ 7 }-> s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 5 }-> s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 Function symbols to be analyzed: {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] #eq: runtime: O(1) [0], size: O(1) [2] #less: runtime: O(1) [1], size: O(1) [2] #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #div: runtime: O(1) [0], size: O(n^1) [1 + z] sum#3: runtime: O(1) [5], size: O(1) [7] sub'#4: runtime: O(1) [4], size: O(n^1) [1 + z + z'] #equal: runtime: O(1) [1], size: O(1) [2] minus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] div: runtime: O(1) [1], size: O(n^1) [1 + z] sum#2: runtime: O(1) [7], size: O(1) [7] compare#5: runtime: O(1) [4], size: O(1) [3] times: runtime: O(1) [1], size: O(n^2) [1 + 4*z*z'] bitToInt': runtime: O(n^1) [8 + 10*z], size: INF bitToInt'#1: runtime: O(n^1) [2 + 10*z], size: INF sum#1: runtime: O(1) [9], size: O(1) [7] compare#4: runtime: O(1) [6], size: O(n^1) [3 + z'] mod: runtime: O(1) [4], size: INF bitToInt: runtime: O(n^1) [10 + 10*z], size: INF sum: runtime: O(1) [12], size: O(1) [7] add'#2: runtime: O(n^1) [2 + 48*z + 16*z1], size: O(n^1) [28 + 32*z1] add'#1: runtime: O(n^1) [4 + 16*z + 48*z'], size: O(n^1) [32*z] add': runtime: O(n^1) [5 + 16*z + 48*z'], size: O(n^1) [32*z] add'#3: runtime: O(n^1) [6 + 16*z' + 48*z''], size: O(n^1) [z + 32*z'] compare#3: runtime: O(1) [8], size: O(n^1) [3 + z] diff: runtime: O(1) [12], size: INF sub'#2: runtime: O(n^1) [60 + 20*z1], size: INF sub'#1: runtime: O(n^1) [41 + 20*z], size: INF sub'#3: runtime: O(n^1) [47 + 20*z'], size: INF add: runtime: O(n^1) [7 + 16*z + 48*z'], size: O(n^1) [32*z] compare#1: runtime: O(n^1) [25 + 11*z'], size: O(n^1) [3*z'] compare#2: runtime: O(n^1) [24 + 11*z], size: O(n^1) [3*z] sub': runtime: O(n^1) [42 + 20*z], size: INF mult#3: runtime: ?, size: O(n^1) [32*z' + z''] ---------------------------------------- (289) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: mult#3 after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 8 + 16*z' + 48*z'' ---------------------------------------- (290) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + z', s26 >= 0, s26 <= s25 + 2, s27 >= 0, s27 <= s26 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + z', s29 >= 0, s29 <= s28 + 2, s30 >= 0, s30 <= s29 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + s32 :|: s32 >= 0, s32 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #equal(z, z') -{ 1 }-> s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s51 :|: s51 >= 0, s51 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + s33 :|: s33 >= 0, s33 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + s34 :|: s34 >= 0, s34 <= s3 + 1, s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + s35 :|: s35 >= 0, s35 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s54 :|: s52 >= 0, s52 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s53 >= 0, s53 <= 2 * (1 + z') + s52, s54 >= 0, s54 <= 2 * (1 + z') + s53, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> s24 :|: s24 >= 0, s24 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 7 + 16*z + 48*z' }-> s89 :|: s89 >= 0, s89 <= 32 * z, z' >= 0, z >= 0 add(z, z') -{ 6 + 16*z + 48*z' }-> s90 :|: s90 >= 0, s90 <= 32 * z, z' >= 0, z >= 0 add'(z, z', z'') -{ 5 + 16*z + 48*z' }-> s91 :|: s91 >= 0, s91 <= 32 * z, z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 3 + 16*@xs + 48*z' }-> s92 :|: s92 >= 0, s92 <= 32 * @xs + 28, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 19 + 48*@ys + 16*z1 }-> s93 :|: s93 >= 0, s93 <= s84 + 32 * z1, s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + @y, s56 >= 0, s56 <= 2 * s55 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 6 + 16*z' + 48*z'' }-> 1 + @z + s94 :|: s94 >= 0, s94 <= 32 * z', z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 10 + 10*z }-> s79 :|: s79 >= 0, s79 <= inf, z >= 0 bitToInt(z) -{ 9 + 10*z }-> s80 :|: s80 >= 0, s80 <= inf', z >= 0 bitToInt'(z, z') -{ 3 + 10*z }-> s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 12 + 10*@xs }-> s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + s82, s73 >= 0, s73 <= 4 * (z' * @x) + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 26 + 11*z' }-> s101 :|: s101 >= 0, s101 <= 3 * z', z' >= 0, z >= 0 compare#1(z, z') -{ 25 + 11*z' }-> s102 :|: s102 >= 0, s102 <= 3 * z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 35 + 11*@ys }-> s104 :|: s103 >= 0, s103 <= 3 * @ys, s104 >= 0, s104 <= s103 + 3, z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 8 }-> s86 :|: s86 >= 0, s86 <= z + 3, s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 6 }-> s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 2 }-> s64 :|: s64 >= 0, s64 <= 2 * 0 + (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 12 }-> 1 + s87 + s67 :|: s87 >= 0, s87 <= inf2, s65 >= 0, s65 <= 2 * s50 + z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + z'', s50 >= 0, s50 <= 2 * z + z', s31 >= 0, s31 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> s61 :|: s61 >= 0, s61 <= z + 1, z >= 0, z' >= 0 leq(z, z') -{ 28 + 11*z' }-> s106 :|: s105 >= 0, s105 <= 3 * z', s106 >= 0, s106 <= 2, z' >= 0, z >= 0 minus(z, z') -{ 1 }-> s49 :|: s49 >= 0, s49 <= 2 * z + z', z >= 0, z' >= 0 mod(z, z') -{ 4 }-> s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 1, s78 >= 0, s78 <= 2 * z + s77, s62 >= 0, s62 <= z + 1, z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 2 }-> mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 8 + 16*z' + 48*z'' }-> s100 :|: s100 >= 0, s100 <= 32 * z', z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> s20 :|: s20 >= 0, s20 <= 2 * z + z', z >= 0, z' >= 0 sub(z, z') -{ 45 + 20*z }-> s108 :|: s107 >= 0, s107 <= inf8, s108 >= 0, s108 <= s107, z' >= 0, z >= 0 sub(z, z') -{ 44 + 20*z }-> s110 :|: s109 >= 0, s109 <= inf9, s110 >= 0, s110 <= s109, z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 42 + 20*z }-> s95 :|: s95 >= 0, s95 <= inf4, z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 61 + 20*@xs }-> s96 :|: s96 >= 0, s96 <= inf5, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 60 + 20*z1 }-> s99 :|: s99 >= 0, s99 <= inf7, s88 >= 0, s88 <= inf3, s68 >= 0, s68 <= 2 * z'' + @y, s69 >= 0, s69 <= 2 * s68 + z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + @y, s60 >= 0, s60 <= 2 * s59 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 47 + 20*z' }-> s98 :|: s97 >= 0, s97 <= inf6, s98 >= 0, s98 <= s97 + @z + 1, z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 4 }-> 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= z' + @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 12 }-> s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + z'', s21 >= 0, s21 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 9 }-> s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0 sum#2(z, z') -{ 7 }-> s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 5 }-> s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 Function symbols to be analyzed: {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] #eq: runtime: O(1) [0], size: O(1) [2] #less: runtime: O(1) [1], size: O(1) [2] #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #div: runtime: O(1) [0], size: O(n^1) [1 + z] sum#3: runtime: O(1) [5], size: O(1) [7] sub'#4: runtime: O(1) [4], size: O(n^1) [1 + z + z'] #equal: runtime: O(1) [1], size: O(1) [2] minus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] div: runtime: O(1) [1], size: O(n^1) [1 + z] sum#2: runtime: O(1) [7], size: O(1) [7] compare#5: runtime: O(1) [4], size: O(1) [3] times: runtime: O(1) [1], size: O(n^2) [1 + 4*z*z'] bitToInt': runtime: O(n^1) [8 + 10*z], size: INF bitToInt'#1: runtime: O(n^1) [2 + 10*z], size: INF sum#1: runtime: O(1) [9], size: O(1) [7] compare#4: runtime: O(1) [6], size: O(n^1) [3 + z'] mod: runtime: O(1) [4], size: INF bitToInt: runtime: O(n^1) [10 + 10*z], size: INF sum: runtime: O(1) [12], size: O(1) [7] add'#2: runtime: O(n^1) [2 + 48*z + 16*z1], size: O(n^1) [28 + 32*z1] add'#1: runtime: O(n^1) [4 + 16*z + 48*z'], size: O(n^1) [32*z] add': runtime: O(n^1) [5 + 16*z + 48*z'], size: O(n^1) [32*z] add'#3: runtime: O(n^1) [6 + 16*z' + 48*z''], size: O(n^1) [z + 32*z'] compare#3: runtime: O(1) [8], size: O(n^1) [3 + z] diff: runtime: O(1) [12], size: INF sub'#2: runtime: O(n^1) [60 + 20*z1], size: INF sub'#1: runtime: O(n^1) [41 + 20*z], size: INF sub'#3: runtime: O(n^1) [47 + 20*z'], size: INF add: runtime: O(n^1) [7 + 16*z + 48*z'], size: O(n^1) [32*z] compare#1: runtime: O(n^1) [25 + 11*z'], size: O(n^1) [3*z'] compare#2: runtime: O(n^1) [24 + 11*z], size: O(n^1) [3*z] sub': runtime: O(n^1) [42 + 20*z], size: INF mult#3: runtime: O(n^1) [8 + 16*z' + 48*z''], size: O(n^1) [32*z' + z''] ---------------------------------------- (291) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (292) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + z', s26 >= 0, s26 <= s25 + 2, s27 >= 0, s27 <= s26 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + z', s29 >= 0, s29 <= s28 + 2, s30 >= 0, s30 <= s29 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + s32 :|: s32 >= 0, s32 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #equal(z, z') -{ 1 }-> s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s51 :|: s51 >= 0, s51 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + s33 :|: s33 >= 0, s33 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + s34 :|: s34 >= 0, s34 <= s3 + 1, s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + s35 :|: s35 >= 0, s35 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s54 :|: s52 >= 0, s52 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s53 >= 0, s53 <= 2 * (1 + z') + s52, s54 >= 0, s54 <= 2 * (1 + z') + s53, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> s24 :|: s24 >= 0, s24 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 7 + 16*z + 48*z' }-> s89 :|: s89 >= 0, s89 <= 32 * z, z' >= 0, z >= 0 add(z, z') -{ 6 + 16*z + 48*z' }-> s90 :|: s90 >= 0, s90 <= 32 * z, z' >= 0, z >= 0 add'(z, z', z'') -{ 5 + 16*z + 48*z' }-> s91 :|: s91 >= 0, s91 <= 32 * z, z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 3 + 16*@xs + 48*z' }-> s92 :|: s92 >= 0, s92 <= 32 * @xs + 28, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 19 + 48*@ys + 16*z1 }-> s93 :|: s93 >= 0, s93 <= s84 + 32 * z1, s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + @y, s56 >= 0, s56 <= 2 * s55 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 6 + 16*z' + 48*z'' }-> 1 + @z + s94 :|: s94 >= 0, s94 <= 32 * z', z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 10 + 10*z }-> s79 :|: s79 >= 0, s79 <= inf, z >= 0 bitToInt(z) -{ 9 + 10*z }-> s80 :|: s80 >= 0, s80 <= inf', z >= 0 bitToInt'(z, z') -{ 3 + 10*z }-> s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 12 + 10*@xs }-> s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + s82, s73 >= 0, s73 <= 4 * (z' * @x) + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 26 + 11*z' }-> s101 :|: s101 >= 0, s101 <= 3 * z', z' >= 0, z >= 0 compare#1(z, z') -{ 25 + 11*z' }-> s102 :|: s102 >= 0, s102 <= 3 * z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 35 + 11*@ys }-> s104 :|: s103 >= 0, s103 <= 3 * @ys, s104 >= 0, s104 <= s103 + 3, z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 8 }-> s86 :|: s86 >= 0, s86 <= z + 3, s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 6 }-> s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 2 }-> s64 :|: s64 >= 0, s64 <= 2 * 0 + (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 12 }-> 1 + s87 + s67 :|: s87 >= 0, s87 <= inf2, s65 >= 0, s65 <= 2 * s50 + z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + z'', s50 >= 0, s50 <= 2 * z + z', s31 >= 0, s31 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> s61 :|: s61 >= 0, s61 <= z + 1, z >= 0, z' >= 0 leq(z, z') -{ 28 + 11*z' }-> s106 :|: s105 >= 0, s105 <= 3 * z', s106 >= 0, s106 <= 2, z' >= 0, z >= 0 minus(z, z') -{ 1 }-> s49 :|: s49 >= 0, s49 <= 2 * z + z', z >= 0, z' >= 0 mod(z, z') -{ 4 }-> s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 1, s78 >= 0, s78 <= 2 * z + s77, s62 >= 0, s62 <= z + 1, z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 10 + 48*z + 16*z' }-> s111 :|: s111 >= 0, s111 <= 32 * z' + z, s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 8 + 16*z' + 48*z'' }-> s100 :|: s100 >= 0, s100 <= 32 * z', z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> s20 :|: s20 >= 0, s20 <= 2 * z + z', z >= 0, z' >= 0 sub(z, z') -{ 45 + 20*z }-> s108 :|: s107 >= 0, s107 <= inf8, s108 >= 0, s108 <= s107, z' >= 0, z >= 0 sub(z, z') -{ 44 + 20*z }-> s110 :|: s109 >= 0, s109 <= inf9, s110 >= 0, s110 <= s109, z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 42 + 20*z }-> s95 :|: s95 >= 0, s95 <= inf4, z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 61 + 20*@xs }-> s96 :|: s96 >= 0, s96 <= inf5, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 60 + 20*z1 }-> s99 :|: s99 >= 0, s99 <= inf7, s88 >= 0, s88 <= inf3, s68 >= 0, s68 <= 2 * z'' + @y, s69 >= 0, s69 <= 2 * s68 + z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + @y, s60 >= 0, s60 <= 2 * s59 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 47 + 20*z' }-> s98 :|: s97 >= 0, s97 <= inf6, s98 >= 0, s98 <= s97 + @z + 1, z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 4 }-> 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= z' + @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 12 }-> s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + z'', s21 >= 0, s21 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 9 }-> s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0 sum#2(z, z') -{ 7 }-> s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 5 }-> s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 Function symbols to be analyzed: {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] #eq: runtime: O(1) [0], size: O(1) [2] #less: runtime: O(1) [1], size: O(1) [2] #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #div: runtime: O(1) [0], size: O(n^1) [1 + z] sum#3: runtime: O(1) [5], size: O(1) [7] sub'#4: runtime: O(1) [4], size: O(n^1) [1 + z + z'] #equal: runtime: O(1) [1], size: O(1) [2] minus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] div: runtime: O(1) [1], size: O(n^1) [1 + z] sum#2: runtime: O(1) [7], size: O(1) [7] compare#5: runtime: O(1) [4], size: O(1) [3] times: runtime: O(1) [1], size: O(n^2) [1 + 4*z*z'] bitToInt': runtime: O(n^1) [8 + 10*z], size: INF bitToInt'#1: runtime: O(n^1) [2 + 10*z], size: INF sum#1: runtime: O(1) [9], size: O(1) [7] compare#4: runtime: O(1) [6], size: O(n^1) [3 + z'] mod: runtime: O(1) [4], size: INF bitToInt: runtime: O(n^1) [10 + 10*z], size: INF sum: runtime: O(1) [12], size: O(1) [7] add'#2: runtime: O(n^1) [2 + 48*z + 16*z1], size: O(n^1) [28 + 32*z1] add'#1: runtime: O(n^1) [4 + 16*z + 48*z'], size: O(n^1) [32*z] add': runtime: O(n^1) [5 + 16*z + 48*z'], size: O(n^1) [32*z] add'#3: runtime: O(n^1) [6 + 16*z' + 48*z''], size: O(n^1) [z + 32*z'] compare#3: runtime: O(1) [8], size: O(n^1) [3 + z] diff: runtime: O(1) [12], size: INF sub'#2: runtime: O(n^1) [60 + 20*z1], size: INF sub'#1: runtime: O(n^1) [41 + 20*z], size: INF sub'#3: runtime: O(n^1) [47 + 20*z'], size: INF add: runtime: O(n^1) [7 + 16*z + 48*z'], size: O(n^1) [32*z] compare#1: runtime: O(n^1) [25 + 11*z'], size: O(n^1) [3*z'] compare#2: runtime: O(n^1) [24 + 11*z], size: O(n^1) [3*z] sub': runtime: O(n^1) [42 + 20*z], size: INF mult#3: runtime: O(n^1) [8 + 16*z' + 48*z''], size: O(n^1) [32*z' + z''] ---------------------------------------- (293) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: leq after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 2 ---------------------------------------- (294) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + z', s26 >= 0, s26 <= s25 + 2, s27 >= 0, s27 <= s26 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + z', s29 >= 0, s29 <= s28 + 2, s30 >= 0, s30 <= s29 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + s32 :|: s32 >= 0, s32 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #equal(z, z') -{ 1 }-> s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s51 :|: s51 >= 0, s51 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + s33 :|: s33 >= 0, s33 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + s34 :|: s34 >= 0, s34 <= s3 + 1, s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + s35 :|: s35 >= 0, s35 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s54 :|: s52 >= 0, s52 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s53 >= 0, s53 <= 2 * (1 + z') + s52, s54 >= 0, s54 <= 2 * (1 + z') + s53, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> s24 :|: s24 >= 0, s24 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 7 + 16*z + 48*z' }-> s89 :|: s89 >= 0, s89 <= 32 * z, z' >= 0, z >= 0 add(z, z') -{ 6 + 16*z + 48*z' }-> s90 :|: s90 >= 0, s90 <= 32 * z, z' >= 0, z >= 0 add'(z, z', z'') -{ 5 + 16*z + 48*z' }-> s91 :|: s91 >= 0, s91 <= 32 * z, z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 3 + 16*@xs + 48*z' }-> s92 :|: s92 >= 0, s92 <= 32 * @xs + 28, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 19 + 48*@ys + 16*z1 }-> s93 :|: s93 >= 0, s93 <= s84 + 32 * z1, s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + @y, s56 >= 0, s56 <= 2 * s55 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 6 + 16*z' + 48*z'' }-> 1 + @z + s94 :|: s94 >= 0, s94 <= 32 * z', z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 10 + 10*z }-> s79 :|: s79 >= 0, s79 <= inf, z >= 0 bitToInt(z) -{ 9 + 10*z }-> s80 :|: s80 >= 0, s80 <= inf', z >= 0 bitToInt'(z, z') -{ 3 + 10*z }-> s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 12 + 10*@xs }-> s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + s82, s73 >= 0, s73 <= 4 * (z' * @x) + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 26 + 11*z' }-> s101 :|: s101 >= 0, s101 <= 3 * z', z' >= 0, z >= 0 compare#1(z, z') -{ 25 + 11*z' }-> s102 :|: s102 >= 0, s102 <= 3 * z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 35 + 11*@ys }-> s104 :|: s103 >= 0, s103 <= 3 * @ys, s104 >= 0, s104 <= s103 + 3, z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 8 }-> s86 :|: s86 >= 0, s86 <= z + 3, s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 6 }-> s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 2 }-> s64 :|: s64 >= 0, s64 <= 2 * 0 + (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 12 }-> 1 + s87 + s67 :|: s87 >= 0, s87 <= inf2, s65 >= 0, s65 <= 2 * s50 + z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + z'', s50 >= 0, s50 <= 2 * z + z', s31 >= 0, s31 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> s61 :|: s61 >= 0, s61 <= z + 1, z >= 0, z' >= 0 leq(z, z') -{ 28 + 11*z' }-> s106 :|: s105 >= 0, s105 <= 3 * z', s106 >= 0, s106 <= 2, z' >= 0, z >= 0 minus(z, z') -{ 1 }-> s49 :|: s49 >= 0, s49 <= 2 * z + z', z >= 0, z' >= 0 mod(z, z') -{ 4 }-> s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 1, s78 >= 0, s78 <= 2 * z + s77, s62 >= 0, s62 <= z + 1, z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 10 + 48*z + 16*z' }-> s111 :|: s111 >= 0, s111 <= 32 * z' + z, s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 8 + 16*z' + 48*z'' }-> s100 :|: s100 >= 0, s100 <= 32 * z', z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> s20 :|: s20 >= 0, s20 <= 2 * z + z', z >= 0, z' >= 0 sub(z, z') -{ 45 + 20*z }-> s108 :|: s107 >= 0, s107 <= inf8, s108 >= 0, s108 <= s107, z' >= 0, z >= 0 sub(z, z') -{ 44 + 20*z }-> s110 :|: s109 >= 0, s109 <= inf9, s110 >= 0, s110 <= s109, z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 42 + 20*z }-> s95 :|: s95 >= 0, s95 <= inf4, z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 61 + 20*@xs }-> s96 :|: s96 >= 0, s96 <= inf5, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 60 + 20*z1 }-> s99 :|: s99 >= 0, s99 <= inf7, s88 >= 0, s88 <= inf3, s68 >= 0, s68 <= 2 * z'' + @y, s69 >= 0, s69 <= 2 * s68 + z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + @y, s60 >= 0, s60 <= 2 * s59 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 47 + 20*z' }-> s98 :|: s97 >= 0, s97 <= inf6, s98 >= 0, s98 <= s97 + @z + 1, z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 4 }-> 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= z' + @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 12 }-> s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + z'', s21 >= 0, s21 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 9 }-> s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0 sum#2(z, z') -{ 7 }-> s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 5 }-> s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 Function symbols to be analyzed: {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] #eq: runtime: O(1) [0], size: O(1) [2] #less: runtime: O(1) [1], size: O(1) [2] #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #div: runtime: O(1) [0], size: O(n^1) [1 + z] sum#3: runtime: O(1) [5], size: O(1) [7] sub'#4: runtime: O(1) [4], size: O(n^1) [1 + z + z'] #equal: runtime: O(1) [1], size: O(1) [2] minus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] div: runtime: O(1) [1], size: O(n^1) [1 + z] sum#2: runtime: O(1) [7], size: O(1) [7] compare#5: runtime: O(1) [4], size: O(1) [3] times: runtime: O(1) [1], size: O(n^2) [1 + 4*z*z'] bitToInt': runtime: O(n^1) [8 + 10*z], size: INF bitToInt'#1: runtime: O(n^1) [2 + 10*z], size: INF sum#1: runtime: O(1) [9], size: O(1) [7] compare#4: runtime: O(1) [6], size: O(n^1) [3 + z'] mod: runtime: O(1) [4], size: INF bitToInt: runtime: O(n^1) [10 + 10*z], size: INF sum: runtime: O(1) [12], size: O(1) [7] add'#2: runtime: O(n^1) [2 + 48*z + 16*z1], size: O(n^1) [28 + 32*z1] add'#1: runtime: O(n^1) [4 + 16*z + 48*z'], size: O(n^1) [32*z] add': runtime: O(n^1) [5 + 16*z + 48*z'], size: O(n^1) [32*z] add'#3: runtime: O(n^1) [6 + 16*z' + 48*z''], size: O(n^1) [z + 32*z'] compare#3: runtime: O(1) [8], size: O(n^1) [3 + z] diff: runtime: O(1) [12], size: INF sub'#2: runtime: O(n^1) [60 + 20*z1], size: INF sub'#1: runtime: O(n^1) [41 + 20*z], size: INF sub'#3: runtime: O(n^1) [47 + 20*z'], size: INF add: runtime: O(n^1) [7 + 16*z + 48*z'], size: O(n^1) [32*z] compare#1: runtime: O(n^1) [25 + 11*z'], size: O(n^1) [3*z'] compare#2: runtime: O(n^1) [24 + 11*z], size: O(n^1) [3*z] sub': runtime: O(n^1) [42 + 20*z], size: INF mult#3: runtime: O(n^1) [8 + 16*z' + 48*z''], size: O(n^1) [32*z' + z''] leq: runtime: ?, size: O(1) [2] ---------------------------------------- (295) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: leq after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 28 + 11*z' ---------------------------------------- (296) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + z', s26 >= 0, s26 <= s25 + 2, s27 >= 0, s27 <= s26 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + z', s29 >= 0, s29 <= s28 + 2, s30 >= 0, s30 <= s29 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + s32 :|: s32 >= 0, s32 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #equal(z, z') -{ 1 }-> s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s51 :|: s51 >= 0, s51 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + s33 :|: s33 >= 0, s33 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + s34 :|: s34 >= 0, s34 <= s3 + 1, s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + s35 :|: s35 >= 0, s35 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s54 :|: s52 >= 0, s52 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s53 >= 0, s53 <= 2 * (1 + z') + s52, s54 >= 0, s54 <= 2 * (1 + z') + s53, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> s24 :|: s24 >= 0, s24 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 7 + 16*z + 48*z' }-> s89 :|: s89 >= 0, s89 <= 32 * z, z' >= 0, z >= 0 add(z, z') -{ 6 + 16*z + 48*z' }-> s90 :|: s90 >= 0, s90 <= 32 * z, z' >= 0, z >= 0 add'(z, z', z'') -{ 5 + 16*z + 48*z' }-> s91 :|: s91 >= 0, s91 <= 32 * z, z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 3 + 16*@xs + 48*z' }-> s92 :|: s92 >= 0, s92 <= 32 * @xs + 28, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 19 + 48*@ys + 16*z1 }-> s93 :|: s93 >= 0, s93 <= s84 + 32 * z1, s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + @y, s56 >= 0, s56 <= 2 * s55 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 6 + 16*z' + 48*z'' }-> 1 + @z + s94 :|: s94 >= 0, s94 <= 32 * z', z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 10 + 10*z }-> s79 :|: s79 >= 0, s79 <= inf, z >= 0 bitToInt(z) -{ 9 + 10*z }-> s80 :|: s80 >= 0, s80 <= inf', z >= 0 bitToInt'(z, z') -{ 3 + 10*z }-> s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 12 + 10*@xs }-> s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + s82, s73 >= 0, s73 <= 4 * (z' * @x) + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 26 + 11*z' }-> s101 :|: s101 >= 0, s101 <= 3 * z', z' >= 0, z >= 0 compare#1(z, z') -{ 25 + 11*z' }-> s102 :|: s102 >= 0, s102 <= 3 * z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 35 + 11*@ys }-> s104 :|: s103 >= 0, s103 <= 3 * @ys, s104 >= 0, s104 <= s103 + 3, z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 8 }-> s86 :|: s86 >= 0, s86 <= z + 3, s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 6 }-> s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 2 }-> s64 :|: s64 >= 0, s64 <= 2 * 0 + (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 12 }-> 1 + s87 + s67 :|: s87 >= 0, s87 <= inf2, s65 >= 0, s65 <= 2 * s50 + z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + z'', s50 >= 0, s50 <= 2 * z + z', s31 >= 0, s31 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> s61 :|: s61 >= 0, s61 <= z + 1, z >= 0, z' >= 0 leq(z, z') -{ 28 + 11*z' }-> s106 :|: s105 >= 0, s105 <= 3 * z', s106 >= 0, s106 <= 2, z' >= 0, z >= 0 minus(z, z') -{ 1 }-> s49 :|: s49 >= 0, s49 <= 2 * z + z', z >= 0, z' >= 0 mod(z, z') -{ 4 }-> s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 1, s78 >= 0, s78 <= 2 * z + s77, s62 >= 0, s62 <= z + 1, z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 10 + 48*z + 16*z' }-> s111 :|: s111 >= 0, s111 <= 32 * z' + z, s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 8 + 16*z' + 48*z'' }-> s100 :|: s100 >= 0, s100 <= 32 * z', z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> s20 :|: s20 >= 0, s20 <= 2 * z + z', z >= 0, z' >= 0 sub(z, z') -{ 45 + 20*z }-> s108 :|: s107 >= 0, s107 <= inf8, s108 >= 0, s108 <= s107, z' >= 0, z >= 0 sub(z, z') -{ 44 + 20*z }-> s110 :|: s109 >= 0, s109 <= inf9, s110 >= 0, s110 <= s109, z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 42 + 20*z }-> s95 :|: s95 >= 0, s95 <= inf4, z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 61 + 20*@xs }-> s96 :|: s96 >= 0, s96 <= inf5, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 60 + 20*z1 }-> s99 :|: s99 >= 0, s99 <= inf7, s88 >= 0, s88 <= inf3, s68 >= 0, s68 <= 2 * z'' + @y, s69 >= 0, s69 <= 2 * s68 + z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + @y, s60 >= 0, s60 <= 2 * s59 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 47 + 20*z' }-> s98 :|: s97 >= 0, s97 <= inf6, s98 >= 0, s98 <= s97 + @z + 1, z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 4 }-> 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= z' + @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 12 }-> s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + z'', s21 >= 0, s21 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 9 }-> s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0 sum#2(z, z') -{ 7 }-> s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 5 }-> s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 Function symbols to be analyzed: {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] #eq: runtime: O(1) [0], size: O(1) [2] #less: runtime: O(1) [1], size: O(1) [2] #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #div: runtime: O(1) [0], size: O(n^1) [1 + z] sum#3: runtime: O(1) [5], size: O(1) [7] sub'#4: runtime: O(1) [4], size: O(n^1) [1 + z + z'] #equal: runtime: O(1) [1], size: O(1) [2] minus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] div: runtime: O(1) [1], size: O(n^1) [1 + z] sum#2: runtime: O(1) [7], size: O(1) [7] compare#5: runtime: O(1) [4], size: O(1) [3] times: runtime: O(1) [1], size: O(n^2) [1 + 4*z*z'] bitToInt': runtime: O(n^1) [8 + 10*z], size: INF bitToInt'#1: runtime: O(n^1) [2 + 10*z], size: INF sum#1: runtime: O(1) [9], size: O(1) [7] compare#4: runtime: O(1) [6], size: O(n^1) [3 + z'] mod: runtime: O(1) [4], size: INF bitToInt: runtime: O(n^1) [10 + 10*z], size: INF sum: runtime: O(1) [12], size: O(1) [7] add'#2: runtime: O(n^1) [2 + 48*z + 16*z1], size: O(n^1) [28 + 32*z1] add'#1: runtime: O(n^1) [4 + 16*z + 48*z'], size: O(n^1) [32*z] add': runtime: O(n^1) [5 + 16*z + 48*z'], size: O(n^1) [32*z] add'#3: runtime: O(n^1) [6 + 16*z' + 48*z''], size: O(n^1) [z + 32*z'] compare#3: runtime: O(1) [8], size: O(n^1) [3 + z] diff: runtime: O(1) [12], size: INF sub'#2: runtime: O(n^1) [60 + 20*z1], size: INF sub'#1: runtime: O(n^1) [41 + 20*z], size: INF sub'#3: runtime: O(n^1) [47 + 20*z'], size: INF add: runtime: O(n^1) [7 + 16*z + 48*z'], size: O(n^1) [32*z] compare#1: runtime: O(n^1) [25 + 11*z'], size: O(n^1) [3*z'] compare#2: runtime: O(n^1) [24 + 11*z], size: O(n^1) [3*z] sub': runtime: O(n^1) [42 + 20*z], size: INF mult#3: runtime: O(n^1) [8 + 16*z' + 48*z''], size: O(n^1) [32*z' + z''] leq: runtime: O(n^1) [28 + 11*z'], size: O(1) [2] ---------------------------------------- (297) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (298) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + z', s26 >= 0, s26 <= s25 + 2, s27 >= 0, s27 <= s26 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + z', s29 >= 0, s29 <= s28 + 2, s30 >= 0, s30 <= s29 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + s32 :|: s32 >= 0, s32 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #equal(z, z') -{ 1 }-> s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s51 :|: s51 >= 0, s51 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + s33 :|: s33 >= 0, s33 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + s34 :|: s34 >= 0, s34 <= s3 + 1, s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + s35 :|: s35 >= 0, s35 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s54 :|: s52 >= 0, s52 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s53 >= 0, s53 <= 2 * (1 + z') + s52, s54 >= 0, s54 <= 2 * (1 + z') + s53, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> s24 :|: s24 >= 0, s24 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 7 + 16*z + 48*z' }-> s89 :|: s89 >= 0, s89 <= 32 * z, z' >= 0, z >= 0 add(z, z') -{ 6 + 16*z + 48*z' }-> s90 :|: s90 >= 0, s90 <= 32 * z, z' >= 0, z >= 0 add'(z, z', z'') -{ 5 + 16*z + 48*z' }-> s91 :|: s91 >= 0, s91 <= 32 * z, z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 3 + 16*@xs + 48*z' }-> s92 :|: s92 >= 0, s92 <= 32 * @xs + 28, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 19 + 48*@ys + 16*z1 }-> s93 :|: s93 >= 0, s93 <= s84 + 32 * z1, s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + @y, s56 >= 0, s56 <= 2 * s55 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 6 + 16*z' + 48*z'' }-> 1 + @z + s94 :|: s94 >= 0, s94 <= 32 * z', z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 10 + 10*z }-> s79 :|: s79 >= 0, s79 <= inf, z >= 0 bitToInt(z) -{ 9 + 10*z }-> s80 :|: s80 >= 0, s80 <= inf', z >= 0 bitToInt'(z, z') -{ 3 + 10*z }-> s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 12 + 10*@xs }-> s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + s82, s73 >= 0, s73 <= 4 * (z' * @x) + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 26 + 11*z' }-> s101 :|: s101 >= 0, s101 <= 3 * z', z' >= 0, z >= 0 compare#1(z, z') -{ 25 + 11*z' }-> s102 :|: s102 >= 0, s102 <= 3 * z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 35 + 11*@ys }-> s104 :|: s103 >= 0, s103 <= 3 * @ys, s104 >= 0, s104 <= s103 + 3, z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 8 }-> s86 :|: s86 >= 0, s86 <= z + 3, s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 6 }-> s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 2 }-> s64 :|: s64 >= 0, s64 <= 2 * 0 + (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 12 }-> 1 + s87 + s67 :|: s87 >= 0, s87 <= inf2, s65 >= 0, s65 <= 2 * s50 + z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + z'', s50 >= 0, s50 <= 2 * z + z', s31 >= 0, s31 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> s61 :|: s61 >= 0, s61 <= z + 1, z >= 0, z' >= 0 leq(z, z') -{ 28 + 11*z' }-> s106 :|: s105 >= 0, s105 <= 3 * z', s106 >= 0, s106 <= 2, z' >= 0, z >= 0 minus(z, z') -{ 1 }-> s49 :|: s49 >= 0, s49 <= 2 * z + z', z >= 0, z' >= 0 mod(z, z') -{ 4 }-> s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 1, s78 >= 0, s78 <= 2 * z + s77, s62 >= 0, s62 <= z + 1, z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 10 + 48*z + 16*z' }-> s111 :|: s111 >= 0, s111 <= 32 * z' + z, s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 8 + 16*z' + 48*z'' }-> s100 :|: s100 >= 0, s100 <= 32 * z', z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> s20 :|: s20 >= 0, s20 <= 2 * z + z', z >= 0, z' >= 0 sub(z, z') -{ 45 + 20*z }-> s108 :|: s107 >= 0, s107 <= inf8, s108 >= 0, s108 <= s107, z' >= 0, z >= 0 sub(z, z') -{ 44 + 20*z }-> s110 :|: s109 >= 0, s109 <= inf9, s110 >= 0, s110 <= s109, z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 42 + 20*z }-> s95 :|: s95 >= 0, s95 <= inf4, z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 61 + 20*@xs }-> s96 :|: s96 >= 0, s96 <= inf5, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 60 + 20*z1 }-> s99 :|: s99 >= 0, s99 <= inf7, s88 >= 0, s88 <= inf3, s68 >= 0, s68 <= 2 * z'' + @y, s69 >= 0, s69 <= 2 * s68 + z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + @y, s60 >= 0, s60 <= 2 * s59 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 47 + 20*z' }-> s98 :|: s97 >= 0, s97 <= inf6, s98 >= 0, s98 <= s97 + @z + 1, z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 4 }-> 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= z' + @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 12 }-> s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + z'', s21 >= 0, s21 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 9 }-> s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0 sum#2(z, z') -{ 7 }-> s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 5 }-> s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 Function symbols to be analyzed: {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] #eq: runtime: O(1) [0], size: O(1) [2] #less: runtime: O(1) [1], size: O(1) [2] #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #div: runtime: O(1) [0], size: O(n^1) [1 + z] sum#3: runtime: O(1) [5], size: O(1) [7] sub'#4: runtime: O(1) [4], size: O(n^1) [1 + z + z'] #equal: runtime: O(1) [1], size: O(1) [2] minus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] div: runtime: O(1) [1], size: O(n^1) [1 + z] sum#2: runtime: O(1) [7], size: O(1) [7] compare#5: runtime: O(1) [4], size: O(1) [3] times: runtime: O(1) [1], size: O(n^2) [1 + 4*z*z'] bitToInt': runtime: O(n^1) [8 + 10*z], size: INF bitToInt'#1: runtime: O(n^1) [2 + 10*z], size: INF sum#1: runtime: O(1) [9], size: O(1) [7] compare#4: runtime: O(1) [6], size: O(n^1) [3 + z'] mod: runtime: O(1) [4], size: INF bitToInt: runtime: O(n^1) [10 + 10*z], size: INF sum: runtime: O(1) [12], size: O(1) [7] add'#2: runtime: O(n^1) [2 + 48*z + 16*z1], size: O(n^1) [28 + 32*z1] add'#1: runtime: O(n^1) [4 + 16*z + 48*z'], size: O(n^1) [32*z] add': runtime: O(n^1) [5 + 16*z + 48*z'], size: O(n^1) [32*z] add'#3: runtime: O(n^1) [6 + 16*z' + 48*z''], size: O(n^1) [z + 32*z'] compare#3: runtime: O(1) [8], size: O(n^1) [3 + z] diff: runtime: O(1) [12], size: INF sub'#2: runtime: O(n^1) [60 + 20*z1], size: INF sub'#1: runtime: O(n^1) [41 + 20*z], size: INF sub'#3: runtime: O(n^1) [47 + 20*z'], size: INF add: runtime: O(n^1) [7 + 16*z + 48*z'], size: O(n^1) [32*z] compare#1: runtime: O(n^1) [25 + 11*z'], size: O(n^1) [3*z'] compare#2: runtime: O(n^1) [24 + 11*z], size: O(n^1) [3*z] sub': runtime: O(n^1) [42 + 20*z], size: INF mult#3: runtime: O(n^1) [8 + 16*z' + 48*z''], size: O(n^1) [32*z' + z''] leq: runtime: O(n^1) [28 + 11*z'], size: O(1) [2] ---------------------------------------- (299) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: compare after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 3*z' ---------------------------------------- (300) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + z', s26 >= 0, s26 <= s25 + 2, s27 >= 0, s27 <= s26 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + z', s29 >= 0, s29 <= s28 + 2, s30 >= 0, s30 <= s29 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + s32 :|: s32 >= 0, s32 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #equal(z, z') -{ 1 }-> s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s51 :|: s51 >= 0, s51 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + s33 :|: s33 >= 0, s33 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + s34 :|: s34 >= 0, s34 <= s3 + 1, s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + s35 :|: s35 >= 0, s35 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s54 :|: s52 >= 0, s52 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s53 >= 0, s53 <= 2 * (1 + z') + s52, s54 >= 0, s54 <= 2 * (1 + z') + s53, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> s24 :|: s24 >= 0, s24 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 7 + 16*z + 48*z' }-> s89 :|: s89 >= 0, s89 <= 32 * z, z' >= 0, z >= 0 add(z, z') -{ 6 + 16*z + 48*z' }-> s90 :|: s90 >= 0, s90 <= 32 * z, z' >= 0, z >= 0 add'(z, z', z'') -{ 5 + 16*z + 48*z' }-> s91 :|: s91 >= 0, s91 <= 32 * z, z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 3 + 16*@xs + 48*z' }-> s92 :|: s92 >= 0, s92 <= 32 * @xs + 28, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 19 + 48*@ys + 16*z1 }-> s93 :|: s93 >= 0, s93 <= s84 + 32 * z1, s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + @y, s56 >= 0, s56 <= 2 * s55 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 6 + 16*z' + 48*z'' }-> 1 + @z + s94 :|: s94 >= 0, s94 <= 32 * z', z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 10 + 10*z }-> s79 :|: s79 >= 0, s79 <= inf, z >= 0 bitToInt(z) -{ 9 + 10*z }-> s80 :|: s80 >= 0, s80 <= inf', z >= 0 bitToInt'(z, z') -{ 3 + 10*z }-> s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 12 + 10*@xs }-> s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + s82, s73 >= 0, s73 <= 4 * (z' * @x) + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 26 + 11*z' }-> s101 :|: s101 >= 0, s101 <= 3 * z', z' >= 0, z >= 0 compare#1(z, z') -{ 25 + 11*z' }-> s102 :|: s102 >= 0, s102 <= 3 * z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 35 + 11*@ys }-> s104 :|: s103 >= 0, s103 <= 3 * @ys, s104 >= 0, s104 <= s103 + 3, z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 8 }-> s86 :|: s86 >= 0, s86 <= z + 3, s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 6 }-> s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 2 }-> s64 :|: s64 >= 0, s64 <= 2 * 0 + (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 12 }-> 1 + s87 + s67 :|: s87 >= 0, s87 <= inf2, s65 >= 0, s65 <= 2 * s50 + z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + z'', s50 >= 0, s50 <= 2 * z + z', s31 >= 0, s31 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> s61 :|: s61 >= 0, s61 <= z + 1, z >= 0, z' >= 0 leq(z, z') -{ 28 + 11*z' }-> s106 :|: s105 >= 0, s105 <= 3 * z', s106 >= 0, s106 <= 2, z' >= 0, z >= 0 minus(z, z') -{ 1 }-> s49 :|: s49 >= 0, s49 <= 2 * z + z', z >= 0, z' >= 0 mod(z, z') -{ 4 }-> s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 1, s78 >= 0, s78 <= 2 * z + s77, s62 >= 0, s62 <= z + 1, z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 10 + 48*z + 16*z' }-> s111 :|: s111 >= 0, s111 <= 32 * z' + z, s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 8 + 16*z' + 48*z'' }-> s100 :|: s100 >= 0, s100 <= 32 * z', z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> s20 :|: s20 >= 0, s20 <= 2 * z + z', z >= 0, z' >= 0 sub(z, z') -{ 45 + 20*z }-> s108 :|: s107 >= 0, s107 <= inf8, s108 >= 0, s108 <= s107, z' >= 0, z >= 0 sub(z, z') -{ 44 + 20*z }-> s110 :|: s109 >= 0, s109 <= inf9, s110 >= 0, s110 <= s109, z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 42 + 20*z }-> s95 :|: s95 >= 0, s95 <= inf4, z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 61 + 20*@xs }-> s96 :|: s96 >= 0, s96 <= inf5, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 60 + 20*z1 }-> s99 :|: s99 >= 0, s99 <= inf7, s88 >= 0, s88 <= inf3, s68 >= 0, s68 <= 2 * z'' + @y, s69 >= 0, s69 <= 2 * s68 + z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + @y, s60 >= 0, s60 <= 2 * s59 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 47 + 20*z' }-> s98 :|: s97 >= 0, s97 <= inf6, s98 >= 0, s98 <= s97 + @z + 1, z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 4 }-> 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= z' + @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 12 }-> s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + z'', s21 >= 0, s21 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 9 }-> s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0 sum#2(z, z') -{ 7 }-> s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 5 }-> s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 Function symbols to be analyzed: {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] #eq: runtime: O(1) [0], size: O(1) [2] #less: runtime: O(1) [1], size: O(1) [2] #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #div: runtime: O(1) [0], size: O(n^1) [1 + z] sum#3: runtime: O(1) [5], size: O(1) [7] sub'#4: runtime: O(1) [4], size: O(n^1) [1 + z + z'] #equal: runtime: O(1) [1], size: O(1) [2] minus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] div: runtime: O(1) [1], size: O(n^1) [1 + z] sum#2: runtime: O(1) [7], size: O(1) [7] compare#5: runtime: O(1) [4], size: O(1) [3] times: runtime: O(1) [1], size: O(n^2) [1 + 4*z*z'] bitToInt': runtime: O(n^1) [8 + 10*z], size: INF bitToInt'#1: runtime: O(n^1) [2 + 10*z], size: INF sum#1: runtime: O(1) [9], size: O(1) [7] compare#4: runtime: O(1) [6], size: O(n^1) [3 + z'] mod: runtime: O(1) [4], size: INF bitToInt: runtime: O(n^1) [10 + 10*z], size: INF sum: runtime: O(1) [12], size: O(1) [7] add'#2: runtime: O(n^1) [2 + 48*z + 16*z1], size: O(n^1) [28 + 32*z1] add'#1: runtime: O(n^1) [4 + 16*z + 48*z'], size: O(n^1) [32*z] add': runtime: O(n^1) [5 + 16*z + 48*z'], size: O(n^1) [32*z] add'#3: runtime: O(n^1) [6 + 16*z' + 48*z''], size: O(n^1) [z + 32*z'] compare#3: runtime: O(1) [8], size: O(n^1) [3 + z] diff: runtime: O(1) [12], size: INF sub'#2: runtime: O(n^1) [60 + 20*z1], size: INF sub'#1: runtime: O(n^1) [41 + 20*z], size: INF sub'#3: runtime: O(n^1) [47 + 20*z'], size: INF add: runtime: O(n^1) [7 + 16*z + 48*z'], size: O(n^1) [32*z] compare#1: runtime: O(n^1) [25 + 11*z'], size: O(n^1) [3*z'] compare#2: runtime: O(n^1) [24 + 11*z], size: O(n^1) [3*z] sub': runtime: O(n^1) [42 + 20*z], size: INF mult#3: runtime: O(n^1) [8 + 16*z' + 48*z''], size: O(n^1) [32*z' + z''] leq: runtime: O(n^1) [28 + 11*z'], size: O(1) [2] compare: runtime: ?, size: O(n^1) [3*z'] ---------------------------------------- (301) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: compare after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 26 + 11*z' ---------------------------------------- (302) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + z', s26 >= 0, s26 <= s25 + 2, s27 >= 0, s27 <= s26 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + z', s29 >= 0, s29 <= s28 + 2, s30 >= 0, s30 <= s29 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + s32 :|: s32 >= 0, s32 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #equal(z, z') -{ 1 }-> s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s51 :|: s51 >= 0, s51 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + s33 :|: s33 >= 0, s33 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + s34 :|: s34 >= 0, s34 <= s3 + 1, s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + s35 :|: s35 >= 0, s35 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s54 :|: s52 >= 0, s52 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s53 >= 0, s53 <= 2 * (1 + z') + s52, s54 >= 0, s54 <= 2 * (1 + z') + s53, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> s24 :|: s24 >= 0, s24 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 7 + 16*z + 48*z' }-> s89 :|: s89 >= 0, s89 <= 32 * z, z' >= 0, z >= 0 add(z, z') -{ 6 + 16*z + 48*z' }-> s90 :|: s90 >= 0, s90 <= 32 * z, z' >= 0, z >= 0 add'(z, z', z'') -{ 5 + 16*z + 48*z' }-> s91 :|: s91 >= 0, s91 <= 32 * z, z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 3 + 16*@xs + 48*z' }-> s92 :|: s92 >= 0, s92 <= 32 * @xs + 28, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 19 + 48*@ys + 16*z1 }-> s93 :|: s93 >= 0, s93 <= s84 + 32 * z1, s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + @y, s56 >= 0, s56 <= 2 * s55 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 6 + 16*z' + 48*z'' }-> 1 + @z + s94 :|: s94 >= 0, s94 <= 32 * z', z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 10 + 10*z }-> s79 :|: s79 >= 0, s79 <= inf, z >= 0 bitToInt(z) -{ 9 + 10*z }-> s80 :|: s80 >= 0, s80 <= inf', z >= 0 bitToInt'(z, z') -{ 3 + 10*z }-> s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 12 + 10*@xs }-> s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + s82, s73 >= 0, s73 <= 4 * (z' * @x) + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 26 + 11*z' }-> s101 :|: s101 >= 0, s101 <= 3 * z', z' >= 0, z >= 0 compare#1(z, z') -{ 25 + 11*z' }-> s102 :|: s102 >= 0, s102 <= 3 * z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 35 + 11*@ys }-> s104 :|: s103 >= 0, s103 <= 3 * @ys, s104 >= 0, s104 <= s103 + 3, z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 8 }-> s86 :|: s86 >= 0, s86 <= z + 3, s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 6 }-> s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 2 }-> s64 :|: s64 >= 0, s64 <= 2 * 0 + (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 12 }-> 1 + s87 + s67 :|: s87 >= 0, s87 <= inf2, s65 >= 0, s65 <= 2 * s50 + z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + z'', s50 >= 0, s50 <= 2 * z + z', s31 >= 0, s31 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> s61 :|: s61 >= 0, s61 <= z + 1, z >= 0, z' >= 0 leq(z, z') -{ 28 + 11*z' }-> s106 :|: s105 >= 0, s105 <= 3 * z', s106 >= 0, s106 <= 2, z' >= 0, z >= 0 minus(z, z') -{ 1 }-> s49 :|: s49 >= 0, s49 <= 2 * z + z', z >= 0, z' >= 0 mod(z, z') -{ 4 }-> s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 1, s78 >= 0, s78 <= 2 * z + s77, s62 >= 0, s62 <= z + 1, z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 10 + 48*z + 16*z' }-> s111 :|: s111 >= 0, s111 <= 32 * z' + z, s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 8 + 16*z' + 48*z'' }-> s100 :|: s100 >= 0, s100 <= 32 * z', z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> s20 :|: s20 >= 0, s20 <= 2 * z + z', z >= 0, z' >= 0 sub(z, z') -{ 45 + 20*z }-> s108 :|: s107 >= 0, s107 <= inf8, s108 >= 0, s108 <= s107, z' >= 0, z >= 0 sub(z, z') -{ 44 + 20*z }-> s110 :|: s109 >= 0, s109 <= inf9, s110 >= 0, s110 <= s109, z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 42 + 20*z }-> s95 :|: s95 >= 0, s95 <= inf4, z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 61 + 20*@xs }-> s96 :|: s96 >= 0, s96 <= inf5, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 60 + 20*z1 }-> s99 :|: s99 >= 0, s99 <= inf7, s88 >= 0, s88 <= inf3, s68 >= 0, s68 <= 2 * z'' + @y, s69 >= 0, s69 <= 2 * s68 + z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + @y, s60 >= 0, s60 <= 2 * s59 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 47 + 20*z' }-> s98 :|: s97 >= 0, s97 <= inf6, s98 >= 0, s98 <= s97 + @z + 1, z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 4 }-> 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= z' + @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 12 }-> s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + z'', s21 >= 0, s21 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 9 }-> s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0 sum#2(z, z') -{ 7 }-> s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 5 }-> s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 Function symbols to be analyzed: {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] #eq: runtime: O(1) [0], size: O(1) [2] #less: runtime: O(1) [1], size: O(1) [2] #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #div: runtime: O(1) [0], size: O(n^1) [1 + z] sum#3: runtime: O(1) [5], size: O(1) [7] sub'#4: runtime: O(1) [4], size: O(n^1) [1 + z + z'] #equal: runtime: O(1) [1], size: O(1) [2] minus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] div: runtime: O(1) [1], size: O(n^1) [1 + z] sum#2: runtime: O(1) [7], size: O(1) [7] compare#5: runtime: O(1) [4], size: O(1) [3] times: runtime: O(1) [1], size: O(n^2) [1 + 4*z*z'] bitToInt': runtime: O(n^1) [8 + 10*z], size: INF bitToInt'#1: runtime: O(n^1) [2 + 10*z], size: INF sum#1: runtime: O(1) [9], size: O(1) [7] compare#4: runtime: O(1) [6], size: O(n^1) [3 + z'] mod: runtime: O(1) [4], size: INF bitToInt: runtime: O(n^1) [10 + 10*z], size: INF sum: runtime: O(1) [12], size: O(1) [7] add'#2: runtime: O(n^1) [2 + 48*z + 16*z1], size: O(n^1) [28 + 32*z1] add'#1: runtime: O(n^1) [4 + 16*z + 48*z'], size: O(n^1) [32*z] add': runtime: O(n^1) [5 + 16*z + 48*z'], size: O(n^1) [32*z] add'#3: runtime: O(n^1) [6 + 16*z' + 48*z''], size: O(n^1) [z + 32*z'] compare#3: runtime: O(1) [8], size: O(n^1) [3 + z] diff: runtime: O(1) [12], size: INF sub'#2: runtime: O(n^1) [60 + 20*z1], size: INF sub'#1: runtime: O(n^1) [41 + 20*z], size: INF sub'#3: runtime: O(n^1) [47 + 20*z'], size: INF add: runtime: O(n^1) [7 + 16*z + 48*z'], size: O(n^1) [32*z] compare#1: runtime: O(n^1) [25 + 11*z'], size: O(n^1) [3*z'] compare#2: runtime: O(n^1) [24 + 11*z], size: O(n^1) [3*z] sub': runtime: O(n^1) [42 + 20*z], size: INF mult#3: runtime: O(n^1) [8 + 16*z' + 48*z''], size: O(n^1) [32*z' + z''] leq: runtime: O(n^1) [28 + 11*z'], size: O(1) [2] compare: runtime: O(n^1) [26 + 11*z'], size: O(n^1) [3*z'] ---------------------------------------- (303) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (304) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + z', s26 >= 0, s26 <= s25 + 2, s27 >= 0, s27 <= s26 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + z', s29 >= 0, s29 <= s28 + 2, s30 >= 0, s30 <= s29 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + s32 :|: s32 >= 0, s32 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #equal(z, z') -{ 1 }-> s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s51 :|: s51 >= 0, s51 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + s33 :|: s33 >= 0, s33 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + s34 :|: s34 >= 0, s34 <= s3 + 1, s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + s35 :|: s35 >= 0, s35 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s54 :|: s52 >= 0, s52 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s53 >= 0, s53 <= 2 * (1 + z') + s52, s54 >= 0, s54 <= 2 * (1 + z') + s53, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> s24 :|: s24 >= 0, s24 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 7 + 16*z + 48*z' }-> s89 :|: s89 >= 0, s89 <= 32 * z, z' >= 0, z >= 0 add(z, z') -{ 6 + 16*z + 48*z' }-> s90 :|: s90 >= 0, s90 <= 32 * z, z' >= 0, z >= 0 add'(z, z', z'') -{ 5 + 16*z + 48*z' }-> s91 :|: s91 >= 0, s91 <= 32 * z, z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 3 + 16*@xs + 48*z' }-> s92 :|: s92 >= 0, s92 <= 32 * @xs + 28, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 19 + 48*@ys + 16*z1 }-> s93 :|: s93 >= 0, s93 <= s84 + 32 * z1, s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + @y, s56 >= 0, s56 <= 2 * s55 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 6 + 16*z' + 48*z'' }-> 1 + @z + s94 :|: s94 >= 0, s94 <= 32 * z', z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 10 + 10*z }-> s79 :|: s79 >= 0, s79 <= inf, z >= 0 bitToInt(z) -{ 9 + 10*z }-> s80 :|: s80 >= 0, s80 <= inf', z >= 0 bitToInt'(z, z') -{ 3 + 10*z }-> s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 12 + 10*@xs }-> s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + s82, s73 >= 0, s73 <= 4 * (z' * @x) + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 26 + 11*z' }-> s101 :|: s101 >= 0, s101 <= 3 * z', z' >= 0, z >= 0 compare#1(z, z') -{ 25 + 11*z' }-> s102 :|: s102 >= 0, s102 <= 3 * z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 35 + 11*@ys }-> s104 :|: s103 >= 0, s103 <= 3 * @ys, s104 >= 0, s104 <= s103 + 3, z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 8 }-> s86 :|: s86 >= 0, s86 <= z + 3, s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 6 }-> s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 2 }-> s64 :|: s64 >= 0, s64 <= 2 * 0 + (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 12 }-> 1 + s87 + s67 :|: s87 >= 0, s87 <= inf2, s65 >= 0, s65 <= 2 * s50 + z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + z'', s50 >= 0, s50 <= 2 * z + z', s31 >= 0, s31 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> s61 :|: s61 >= 0, s61 <= z + 1, z >= 0, z' >= 0 leq(z, z') -{ 28 + 11*z' }-> s106 :|: s105 >= 0, s105 <= 3 * z', s106 >= 0, s106 <= 2, z' >= 0, z >= 0 minus(z, z') -{ 1 }-> s49 :|: s49 >= 0, s49 <= 2 * z + z', z >= 0, z' >= 0 mod(z, z') -{ 4 }-> s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 1, s78 >= 0, s78 <= 2 * z + s77, s62 >= 0, s62 <= z + 1, z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 10 + 48*z + 16*z' }-> s111 :|: s111 >= 0, s111 <= 32 * z' + z, s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 8 + 16*z' + 48*z'' }-> s100 :|: s100 >= 0, s100 <= 32 * z', z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> s20 :|: s20 >= 0, s20 <= 2 * z + z', z >= 0, z' >= 0 sub(z, z') -{ 45 + 20*z }-> s108 :|: s107 >= 0, s107 <= inf8, s108 >= 0, s108 <= s107, z' >= 0, z >= 0 sub(z, z') -{ 44 + 20*z }-> s110 :|: s109 >= 0, s109 <= inf9, s110 >= 0, s110 <= s109, z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 42 + 20*z }-> s95 :|: s95 >= 0, s95 <= inf4, z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 61 + 20*@xs }-> s96 :|: s96 >= 0, s96 <= inf5, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 60 + 20*z1 }-> s99 :|: s99 >= 0, s99 <= inf7, s88 >= 0, s88 <= inf3, s68 >= 0, s68 <= 2 * z'' + @y, s69 >= 0, s69 <= 2 * s68 + z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + @y, s60 >= 0, s60 <= 2 * s59 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 47 + 20*z' }-> s98 :|: s97 >= 0, s97 <= inf6, s98 >= 0, s98 <= s97 + @z + 1, z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 4 }-> 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= z' + @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 12 }-> s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + z'', s21 >= 0, s21 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 9 }-> s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0 sum#2(z, z') -{ 7 }-> s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 5 }-> s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 Function symbols to be analyzed: {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] #eq: runtime: O(1) [0], size: O(1) [2] #less: runtime: O(1) [1], size: O(1) [2] #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #div: runtime: O(1) [0], size: O(n^1) [1 + z] sum#3: runtime: O(1) [5], size: O(1) [7] sub'#4: runtime: O(1) [4], size: O(n^1) [1 + z + z'] #equal: runtime: O(1) [1], size: O(1) [2] minus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] div: runtime: O(1) [1], size: O(n^1) [1 + z] sum#2: runtime: O(1) [7], size: O(1) [7] compare#5: runtime: O(1) [4], size: O(1) [3] times: runtime: O(1) [1], size: O(n^2) [1 + 4*z*z'] bitToInt': runtime: O(n^1) [8 + 10*z], size: INF bitToInt'#1: runtime: O(n^1) [2 + 10*z], size: INF sum#1: runtime: O(1) [9], size: O(1) [7] compare#4: runtime: O(1) [6], size: O(n^1) [3 + z'] mod: runtime: O(1) [4], size: INF bitToInt: runtime: O(n^1) [10 + 10*z], size: INF sum: runtime: O(1) [12], size: O(1) [7] add'#2: runtime: O(n^1) [2 + 48*z + 16*z1], size: O(n^1) [28 + 32*z1] add'#1: runtime: O(n^1) [4 + 16*z + 48*z'], size: O(n^1) [32*z] add': runtime: O(n^1) [5 + 16*z + 48*z'], size: O(n^1) [32*z] add'#3: runtime: O(n^1) [6 + 16*z' + 48*z''], size: O(n^1) [z + 32*z'] compare#3: runtime: O(1) [8], size: O(n^1) [3 + z] diff: runtime: O(1) [12], size: INF sub'#2: runtime: O(n^1) [60 + 20*z1], size: INF sub'#1: runtime: O(n^1) [41 + 20*z], size: INF sub'#3: runtime: O(n^1) [47 + 20*z'], size: INF add: runtime: O(n^1) [7 + 16*z + 48*z'], size: O(n^1) [32*z] compare#1: runtime: O(n^1) [25 + 11*z'], size: O(n^1) [3*z'] compare#2: runtime: O(n^1) [24 + 11*z], size: O(n^1) [3*z] sub': runtime: O(n^1) [42 + 20*z], size: INF mult#3: runtime: O(n^1) [8 + 16*z' + 48*z''], size: O(n^1) [32*z' + z''] leq: runtime: O(n^1) [28 + 11*z'], size: O(1) [2] compare: runtime: O(n^1) [26 + 11*z'], size: O(n^1) [3*z'] ---------------------------------------- (305) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: sub after applying outer abstraction to obtain an ITS, resulting in: INF with polynomial bound: ? ---------------------------------------- (306) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + z', s26 >= 0, s26 <= s25 + 2, s27 >= 0, s27 <= s26 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + z', s29 >= 0, s29 <= s28 + 2, s30 >= 0, s30 <= s29 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + s32 :|: s32 >= 0, s32 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #equal(z, z') -{ 1 }-> s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s51 :|: s51 >= 0, s51 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + s33 :|: s33 >= 0, s33 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + s34 :|: s34 >= 0, s34 <= s3 + 1, s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + s35 :|: s35 >= 0, s35 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s54 :|: s52 >= 0, s52 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s53 >= 0, s53 <= 2 * (1 + z') + s52, s54 >= 0, s54 <= 2 * (1 + z') + s53, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> s24 :|: s24 >= 0, s24 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 7 + 16*z + 48*z' }-> s89 :|: s89 >= 0, s89 <= 32 * z, z' >= 0, z >= 0 add(z, z') -{ 6 + 16*z + 48*z' }-> s90 :|: s90 >= 0, s90 <= 32 * z, z' >= 0, z >= 0 add'(z, z', z'') -{ 5 + 16*z + 48*z' }-> s91 :|: s91 >= 0, s91 <= 32 * z, z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 3 + 16*@xs + 48*z' }-> s92 :|: s92 >= 0, s92 <= 32 * @xs + 28, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 19 + 48*@ys + 16*z1 }-> s93 :|: s93 >= 0, s93 <= s84 + 32 * z1, s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + @y, s56 >= 0, s56 <= 2 * s55 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 6 + 16*z' + 48*z'' }-> 1 + @z + s94 :|: s94 >= 0, s94 <= 32 * z', z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 10 + 10*z }-> s79 :|: s79 >= 0, s79 <= inf, z >= 0 bitToInt(z) -{ 9 + 10*z }-> s80 :|: s80 >= 0, s80 <= inf', z >= 0 bitToInt'(z, z') -{ 3 + 10*z }-> s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 12 + 10*@xs }-> s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + s82, s73 >= 0, s73 <= 4 * (z' * @x) + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 26 + 11*z' }-> s101 :|: s101 >= 0, s101 <= 3 * z', z' >= 0, z >= 0 compare#1(z, z') -{ 25 + 11*z' }-> s102 :|: s102 >= 0, s102 <= 3 * z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 35 + 11*@ys }-> s104 :|: s103 >= 0, s103 <= 3 * @ys, s104 >= 0, s104 <= s103 + 3, z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 8 }-> s86 :|: s86 >= 0, s86 <= z + 3, s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 6 }-> s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 2 }-> s64 :|: s64 >= 0, s64 <= 2 * 0 + (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 12 }-> 1 + s87 + s67 :|: s87 >= 0, s87 <= inf2, s65 >= 0, s65 <= 2 * s50 + z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + z'', s50 >= 0, s50 <= 2 * z + z', s31 >= 0, s31 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> s61 :|: s61 >= 0, s61 <= z + 1, z >= 0, z' >= 0 leq(z, z') -{ 28 + 11*z' }-> s106 :|: s105 >= 0, s105 <= 3 * z', s106 >= 0, s106 <= 2, z' >= 0, z >= 0 minus(z, z') -{ 1 }-> s49 :|: s49 >= 0, s49 <= 2 * z + z', z >= 0, z' >= 0 mod(z, z') -{ 4 }-> s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 1, s78 >= 0, s78 <= 2 * z + s77, s62 >= 0, s62 <= z + 1, z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 10 + 48*z + 16*z' }-> s111 :|: s111 >= 0, s111 <= 32 * z' + z, s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 8 + 16*z' + 48*z'' }-> s100 :|: s100 >= 0, s100 <= 32 * z', z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> s20 :|: s20 >= 0, s20 <= 2 * z + z', z >= 0, z' >= 0 sub(z, z') -{ 45 + 20*z }-> s108 :|: s107 >= 0, s107 <= inf8, s108 >= 0, s108 <= s107, z' >= 0, z >= 0 sub(z, z') -{ 44 + 20*z }-> s110 :|: s109 >= 0, s109 <= inf9, s110 >= 0, s110 <= s109, z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 42 + 20*z }-> s95 :|: s95 >= 0, s95 <= inf4, z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 61 + 20*@xs }-> s96 :|: s96 >= 0, s96 <= inf5, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 60 + 20*z1 }-> s99 :|: s99 >= 0, s99 <= inf7, s88 >= 0, s88 <= inf3, s68 >= 0, s68 <= 2 * z'' + @y, s69 >= 0, s69 <= 2 * s68 + z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + @y, s60 >= 0, s60 <= 2 * s59 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 47 + 20*z' }-> s98 :|: s97 >= 0, s97 <= inf6, s98 >= 0, s98 <= s97 + @z + 1, z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 4 }-> 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= z' + @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 12 }-> s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + z'', s21 >= 0, s21 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 9 }-> s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0 sum#2(z, z') -{ 7 }-> s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 5 }-> s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 Function symbols to be analyzed: {sub}, {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] #eq: runtime: O(1) [0], size: O(1) [2] #less: runtime: O(1) [1], size: O(1) [2] #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #div: runtime: O(1) [0], size: O(n^1) [1 + z] sum#3: runtime: O(1) [5], size: O(1) [7] sub'#4: runtime: O(1) [4], size: O(n^1) [1 + z + z'] #equal: runtime: O(1) [1], size: O(1) [2] minus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] div: runtime: O(1) [1], size: O(n^1) [1 + z] sum#2: runtime: O(1) [7], size: O(1) [7] compare#5: runtime: O(1) [4], size: O(1) [3] times: runtime: O(1) [1], size: O(n^2) [1 + 4*z*z'] bitToInt': runtime: O(n^1) [8 + 10*z], size: INF bitToInt'#1: runtime: O(n^1) [2 + 10*z], size: INF sum#1: runtime: O(1) [9], size: O(1) [7] compare#4: runtime: O(1) [6], size: O(n^1) [3 + z'] mod: runtime: O(1) [4], size: INF bitToInt: runtime: O(n^1) [10 + 10*z], size: INF sum: runtime: O(1) [12], size: O(1) [7] add'#2: runtime: O(n^1) [2 + 48*z + 16*z1], size: O(n^1) [28 + 32*z1] add'#1: runtime: O(n^1) [4 + 16*z + 48*z'], size: O(n^1) [32*z] add': runtime: O(n^1) [5 + 16*z + 48*z'], size: O(n^1) [32*z] add'#3: runtime: O(n^1) [6 + 16*z' + 48*z''], size: O(n^1) [z + 32*z'] compare#3: runtime: O(1) [8], size: O(n^1) [3 + z] diff: runtime: O(1) [12], size: INF sub'#2: runtime: O(n^1) [60 + 20*z1], size: INF sub'#1: runtime: O(n^1) [41 + 20*z], size: INF sub'#3: runtime: O(n^1) [47 + 20*z'], size: INF add: runtime: O(n^1) [7 + 16*z + 48*z'], size: O(n^1) [32*z] compare#1: runtime: O(n^1) [25 + 11*z'], size: O(n^1) [3*z'] compare#2: runtime: O(n^1) [24 + 11*z], size: O(n^1) [3*z] sub': runtime: O(n^1) [42 + 20*z], size: INF mult#3: runtime: O(n^1) [8 + 16*z' + 48*z''], size: O(n^1) [32*z' + z''] leq: runtime: O(n^1) [28 + 11*z'], size: O(1) [2] compare: runtime: O(n^1) [26 + 11*z'], size: O(n^1) [3*z'] sub: runtime: ?, size: INF ---------------------------------------- (307) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: sub after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 45 + 20*z ---------------------------------------- (308) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + z', s26 >= 0, s26 <= s25 + 2, s27 >= 0, s27 <= s26 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + z', s29 >= 0, s29 <= s28 + 2, s30 >= 0, s30 <= s29 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + s32 :|: s32 >= 0, s32 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #equal(z, z') -{ 1 }-> s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s51 :|: s51 >= 0, s51 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + s33 :|: s33 >= 0, s33 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + s34 :|: s34 >= 0, s34 <= s3 + 1, s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + s35 :|: s35 >= 0, s35 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s54 :|: s52 >= 0, s52 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s53 >= 0, s53 <= 2 * (1 + z') + s52, s54 >= 0, s54 <= 2 * (1 + z') + s53, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> s24 :|: s24 >= 0, s24 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 7 + 16*z + 48*z' }-> s89 :|: s89 >= 0, s89 <= 32 * z, z' >= 0, z >= 0 add(z, z') -{ 6 + 16*z + 48*z' }-> s90 :|: s90 >= 0, s90 <= 32 * z, z' >= 0, z >= 0 add'(z, z', z'') -{ 5 + 16*z + 48*z' }-> s91 :|: s91 >= 0, s91 <= 32 * z, z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 3 + 16*@xs + 48*z' }-> s92 :|: s92 >= 0, s92 <= 32 * @xs + 28, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 19 + 48*@ys + 16*z1 }-> s93 :|: s93 >= 0, s93 <= s84 + 32 * z1, s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + @y, s56 >= 0, s56 <= 2 * s55 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 6 + 16*z' + 48*z'' }-> 1 + @z + s94 :|: s94 >= 0, s94 <= 32 * z', z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 10 + 10*z }-> s79 :|: s79 >= 0, s79 <= inf, z >= 0 bitToInt(z) -{ 9 + 10*z }-> s80 :|: s80 >= 0, s80 <= inf', z >= 0 bitToInt'(z, z') -{ 3 + 10*z }-> s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 12 + 10*@xs }-> s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + s82, s73 >= 0, s73 <= 4 * (z' * @x) + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 26 + 11*z' }-> s101 :|: s101 >= 0, s101 <= 3 * z', z' >= 0, z >= 0 compare#1(z, z') -{ 25 + 11*z' }-> s102 :|: s102 >= 0, s102 <= 3 * z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 35 + 11*@ys }-> s104 :|: s103 >= 0, s103 <= 3 * @ys, s104 >= 0, s104 <= s103 + 3, z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 8 }-> s86 :|: s86 >= 0, s86 <= z + 3, s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 6 }-> s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 2 }-> s64 :|: s64 >= 0, s64 <= 2 * 0 + (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 12 }-> 1 + s87 + s67 :|: s87 >= 0, s87 <= inf2, s65 >= 0, s65 <= 2 * s50 + z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + z'', s50 >= 0, s50 <= 2 * z + z', s31 >= 0, s31 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> s61 :|: s61 >= 0, s61 <= z + 1, z >= 0, z' >= 0 leq(z, z') -{ 28 + 11*z' }-> s106 :|: s105 >= 0, s105 <= 3 * z', s106 >= 0, s106 <= 2, z' >= 0, z >= 0 minus(z, z') -{ 1 }-> s49 :|: s49 >= 0, s49 <= 2 * z + z', z >= 0, z' >= 0 mod(z, z') -{ 4 }-> s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 1, s78 >= 0, s78 <= 2 * z + s77, s62 >= 0, s62 <= z + 1, z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 10 + 48*z + 16*z' }-> s111 :|: s111 >= 0, s111 <= 32 * z' + z, s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 8 + 16*z' + 48*z'' }-> s100 :|: s100 >= 0, s100 <= 32 * z', z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> s20 :|: s20 >= 0, s20 <= 2 * z + z', z >= 0, z' >= 0 sub(z, z') -{ 45 + 20*z }-> s108 :|: s107 >= 0, s107 <= inf8, s108 >= 0, s108 <= s107, z' >= 0, z >= 0 sub(z, z') -{ 44 + 20*z }-> s110 :|: s109 >= 0, s109 <= inf9, s110 >= 0, s110 <= s109, z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 42 + 20*z }-> s95 :|: s95 >= 0, s95 <= inf4, z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 61 + 20*@xs }-> s96 :|: s96 >= 0, s96 <= inf5, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 60 + 20*z1 }-> s99 :|: s99 >= 0, s99 <= inf7, s88 >= 0, s88 <= inf3, s68 >= 0, s68 <= 2 * z'' + @y, s69 >= 0, s69 <= 2 * s68 + z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + @y, s60 >= 0, s60 <= 2 * s59 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 47 + 20*z' }-> s98 :|: s97 >= 0, s97 <= inf6, s98 >= 0, s98 <= s97 + @z + 1, z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 4 }-> 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= z' + @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 12 }-> s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + z'', s21 >= 0, s21 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 9 }-> s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0 sum#2(z, z') -{ 7 }-> s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 5 }-> s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 Function symbols to be analyzed: {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] #eq: runtime: O(1) [0], size: O(1) [2] #less: runtime: O(1) [1], size: O(1) [2] #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #div: runtime: O(1) [0], size: O(n^1) [1 + z] sum#3: runtime: O(1) [5], size: O(1) [7] sub'#4: runtime: O(1) [4], size: O(n^1) [1 + z + z'] #equal: runtime: O(1) [1], size: O(1) [2] minus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] div: runtime: O(1) [1], size: O(n^1) [1 + z] sum#2: runtime: O(1) [7], size: O(1) [7] compare#5: runtime: O(1) [4], size: O(1) [3] times: runtime: O(1) [1], size: O(n^2) [1 + 4*z*z'] bitToInt': runtime: O(n^1) [8 + 10*z], size: INF bitToInt'#1: runtime: O(n^1) [2 + 10*z], size: INF sum#1: runtime: O(1) [9], size: O(1) [7] compare#4: runtime: O(1) [6], size: O(n^1) [3 + z'] mod: runtime: O(1) [4], size: INF bitToInt: runtime: O(n^1) [10 + 10*z], size: INF sum: runtime: O(1) [12], size: O(1) [7] add'#2: runtime: O(n^1) [2 + 48*z + 16*z1], size: O(n^1) [28 + 32*z1] add'#1: runtime: O(n^1) [4 + 16*z + 48*z'], size: O(n^1) [32*z] add': runtime: O(n^1) [5 + 16*z + 48*z'], size: O(n^1) [32*z] add'#3: runtime: O(n^1) [6 + 16*z' + 48*z''], size: O(n^1) [z + 32*z'] compare#3: runtime: O(1) [8], size: O(n^1) [3 + z] diff: runtime: O(1) [12], size: INF sub'#2: runtime: O(n^1) [60 + 20*z1], size: INF sub'#1: runtime: O(n^1) [41 + 20*z], size: INF sub'#3: runtime: O(n^1) [47 + 20*z'], size: INF add: runtime: O(n^1) [7 + 16*z + 48*z'], size: O(n^1) [32*z] compare#1: runtime: O(n^1) [25 + 11*z'], size: O(n^1) [3*z'] compare#2: runtime: O(n^1) [24 + 11*z], size: O(n^1) [3*z] sub': runtime: O(n^1) [42 + 20*z], size: INF mult#3: runtime: O(n^1) [8 + 16*z' + 48*z''], size: O(n^1) [32*z' + z''] leq: runtime: O(n^1) [28 + 11*z'], size: O(1) [2] compare: runtime: O(n^1) [26 + 11*z'], size: O(n^1) [3*z'] sub: runtime: O(n^1) [45 + 20*z], size: INF ---------------------------------------- (309) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (310) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + z', s26 >= 0, s26 <= s25 + 2, s27 >= 0, s27 <= s26 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + z', s29 >= 0, s29 <= s28 + 2, s30 >= 0, s30 <= s29 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + s32 :|: s32 >= 0, s32 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #equal(z, z') -{ 1 }-> s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s51 :|: s51 >= 0, s51 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + s33 :|: s33 >= 0, s33 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + s34 :|: s34 >= 0, s34 <= s3 + 1, s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + s35 :|: s35 >= 0, s35 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s54 :|: s52 >= 0, s52 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s53 >= 0, s53 <= 2 * (1 + z') + s52, s54 >= 0, s54 <= 2 * (1 + z') + s53, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> s24 :|: s24 >= 0, s24 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 7 + 16*z + 48*z' }-> s89 :|: s89 >= 0, s89 <= 32 * z, z' >= 0, z >= 0 add(z, z') -{ 6 + 16*z + 48*z' }-> s90 :|: s90 >= 0, s90 <= 32 * z, z' >= 0, z >= 0 add'(z, z', z'') -{ 5 + 16*z + 48*z' }-> s91 :|: s91 >= 0, s91 <= 32 * z, z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 3 + 16*@xs + 48*z' }-> s92 :|: s92 >= 0, s92 <= 32 * @xs + 28, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 19 + 48*@ys + 16*z1 }-> s93 :|: s93 >= 0, s93 <= s84 + 32 * z1, s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + @y, s56 >= 0, s56 <= 2 * s55 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 6 + 16*z' + 48*z'' }-> 1 + @z + s94 :|: s94 >= 0, s94 <= 32 * z', z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 10 + 10*z }-> s79 :|: s79 >= 0, s79 <= inf, z >= 0 bitToInt(z) -{ 9 + 10*z }-> s80 :|: s80 >= 0, s80 <= inf', z >= 0 bitToInt'(z, z') -{ 3 + 10*z }-> s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 12 + 10*@xs }-> s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + s82, s73 >= 0, s73 <= 4 * (z' * @x) + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 26 + 11*z' }-> s101 :|: s101 >= 0, s101 <= 3 * z', z' >= 0, z >= 0 compare#1(z, z') -{ 25 + 11*z' }-> s102 :|: s102 >= 0, s102 <= 3 * z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 35 + 11*@ys }-> s104 :|: s103 >= 0, s103 <= 3 * @ys, s104 >= 0, s104 <= s103 + 3, z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 8 }-> s86 :|: s86 >= 0, s86 <= z + 3, s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 6 }-> s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 2 }-> s64 :|: s64 >= 0, s64 <= 2 * 0 + (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 12 }-> 1 + s87 + s67 :|: s87 >= 0, s87 <= inf2, s65 >= 0, s65 <= 2 * s50 + z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + z'', s50 >= 0, s50 <= 2 * z + z', s31 >= 0, s31 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> s61 :|: s61 >= 0, s61 <= z + 1, z >= 0, z' >= 0 leq(z, z') -{ 28 + 11*z' }-> s106 :|: s105 >= 0, s105 <= 3 * z', s106 >= 0, s106 <= 2, z' >= 0, z >= 0 minus(z, z') -{ 1 }-> s49 :|: s49 >= 0, s49 <= 2 * z + z', z >= 0, z' >= 0 mod(z, z') -{ 4 }-> s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 1, s78 >= 0, s78 <= 2 * z + s77, s62 >= 0, s62 <= z + 1, z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 10 + 48*z + 16*z' }-> s111 :|: s111 >= 0, s111 <= 32 * z' + z, s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 8 + 16*z' + 48*z'' }-> s100 :|: s100 >= 0, s100 <= 32 * z', z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> s20 :|: s20 >= 0, s20 <= 2 * z + z', z >= 0, z' >= 0 sub(z, z') -{ 45 + 20*z }-> s108 :|: s107 >= 0, s107 <= inf8, s108 >= 0, s108 <= s107, z' >= 0, z >= 0 sub(z, z') -{ 44 + 20*z }-> s110 :|: s109 >= 0, s109 <= inf9, s110 >= 0, s110 <= s109, z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 42 + 20*z }-> s95 :|: s95 >= 0, s95 <= inf4, z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 61 + 20*@xs }-> s96 :|: s96 >= 0, s96 <= inf5, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 60 + 20*z1 }-> s99 :|: s99 >= 0, s99 <= inf7, s88 >= 0, s88 <= inf3, s68 >= 0, s68 <= 2 * z'' + @y, s69 >= 0, s69 <= 2 * s68 + z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + @y, s60 >= 0, s60 <= 2 * s59 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 47 + 20*z' }-> s98 :|: s97 >= 0, s97 <= inf6, s98 >= 0, s98 <= s97 + @z + 1, z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 4 }-> 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= z' + @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 12 }-> s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + z'', s21 >= 0, s21 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 9 }-> s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0 sum#2(z, z') -{ 7 }-> s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 5 }-> s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 Function symbols to be analyzed: {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] #eq: runtime: O(1) [0], size: O(1) [2] #less: runtime: O(1) [1], size: O(1) [2] #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #div: runtime: O(1) [0], size: O(n^1) [1 + z] sum#3: runtime: O(1) [5], size: O(1) [7] sub'#4: runtime: O(1) [4], size: O(n^1) [1 + z + z'] #equal: runtime: O(1) [1], size: O(1) [2] minus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] div: runtime: O(1) [1], size: O(n^1) [1 + z] sum#2: runtime: O(1) [7], size: O(1) [7] compare#5: runtime: O(1) [4], size: O(1) [3] times: runtime: O(1) [1], size: O(n^2) [1 + 4*z*z'] bitToInt': runtime: O(n^1) [8 + 10*z], size: INF bitToInt'#1: runtime: O(n^1) [2 + 10*z], size: INF sum#1: runtime: O(1) [9], size: O(1) [7] compare#4: runtime: O(1) [6], size: O(n^1) [3 + z'] mod: runtime: O(1) [4], size: INF bitToInt: runtime: O(n^1) [10 + 10*z], size: INF sum: runtime: O(1) [12], size: O(1) [7] add'#2: runtime: O(n^1) [2 + 48*z + 16*z1], size: O(n^1) [28 + 32*z1] add'#1: runtime: O(n^1) [4 + 16*z + 48*z'], size: O(n^1) [32*z] add': runtime: O(n^1) [5 + 16*z + 48*z'], size: O(n^1) [32*z] add'#3: runtime: O(n^1) [6 + 16*z' + 48*z''], size: O(n^1) [z + 32*z'] compare#3: runtime: O(1) [8], size: O(n^1) [3 + z] diff: runtime: O(1) [12], size: INF sub'#2: runtime: O(n^1) [60 + 20*z1], size: INF sub'#1: runtime: O(n^1) [41 + 20*z], size: INF sub'#3: runtime: O(n^1) [47 + 20*z'], size: INF add: runtime: O(n^1) [7 + 16*z + 48*z'], size: O(n^1) [32*z] compare#1: runtime: O(n^1) [25 + 11*z'], size: O(n^1) [3*z'] compare#2: runtime: O(n^1) [24 + 11*z], size: O(n^1) [3*z] sub': runtime: O(n^1) [42 + 20*z], size: INF mult#3: runtime: O(n^1) [8 + 16*z' + 48*z''], size: O(n^1) [32*z' + z''] leq: runtime: O(n^1) [28 + 11*z'], size: O(1) [2] compare: runtime: O(n^1) [26 + 11*z'], size: O(n^1) [3*z'] sub: runtime: O(n^1) [45 + 20*z], size: INF ---------------------------------------- (311) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: mult#2 after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: z + 32*z' ---------------------------------------- (312) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + z', s26 >= 0, s26 <= s25 + 2, s27 >= 0, s27 <= s26 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + z', s29 >= 0, s29 <= s28 + 2, s30 >= 0, s30 <= s29 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + s32 :|: s32 >= 0, s32 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #equal(z, z') -{ 1 }-> s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s51 :|: s51 >= 0, s51 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + s33 :|: s33 >= 0, s33 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + s34 :|: s34 >= 0, s34 <= s3 + 1, s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + s35 :|: s35 >= 0, s35 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s54 :|: s52 >= 0, s52 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s53 >= 0, s53 <= 2 * (1 + z') + s52, s54 >= 0, s54 <= 2 * (1 + z') + s53, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> s24 :|: s24 >= 0, s24 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 7 + 16*z + 48*z' }-> s89 :|: s89 >= 0, s89 <= 32 * z, z' >= 0, z >= 0 add(z, z') -{ 6 + 16*z + 48*z' }-> s90 :|: s90 >= 0, s90 <= 32 * z, z' >= 0, z >= 0 add'(z, z', z'') -{ 5 + 16*z + 48*z' }-> s91 :|: s91 >= 0, s91 <= 32 * z, z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 3 + 16*@xs + 48*z' }-> s92 :|: s92 >= 0, s92 <= 32 * @xs + 28, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 19 + 48*@ys + 16*z1 }-> s93 :|: s93 >= 0, s93 <= s84 + 32 * z1, s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + @y, s56 >= 0, s56 <= 2 * s55 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 6 + 16*z' + 48*z'' }-> 1 + @z + s94 :|: s94 >= 0, s94 <= 32 * z', z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 10 + 10*z }-> s79 :|: s79 >= 0, s79 <= inf, z >= 0 bitToInt(z) -{ 9 + 10*z }-> s80 :|: s80 >= 0, s80 <= inf', z >= 0 bitToInt'(z, z') -{ 3 + 10*z }-> s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 12 + 10*@xs }-> s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + s82, s73 >= 0, s73 <= 4 * (z' * @x) + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 26 + 11*z' }-> s101 :|: s101 >= 0, s101 <= 3 * z', z' >= 0, z >= 0 compare#1(z, z') -{ 25 + 11*z' }-> s102 :|: s102 >= 0, s102 <= 3 * z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 35 + 11*@ys }-> s104 :|: s103 >= 0, s103 <= 3 * @ys, s104 >= 0, s104 <= s103 + 3, z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 8 }-> s86 :|: s86 >= 0, s86 <= z + 3, s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 6 }-> s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 2 }-> s64 :|: s64 >= 0, s64 <= 2 * 0 + (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 12 }-> 1 + s87 + s67 :|: s87 >= 0, s87 <= inf2, s65 >= 0, s65 <= 2 * s50 + z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + z'', s50 >= 0, s50 <= 2 * z + z', s31 >= 0, s31 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> s61 :|: s61 >= 0, s61 <= z + 1, z >= 0, z' >= 0 leq(z, z') -{ 28 + 11*z' }-> s106 :|: s105 >= 0, s105 <= 3 * z', s106 >= 0, s106 <= 2, z' >= 0, z >= 0 minus(z, z') -{ 1 }-> s49 :|: s49 >= 0, s49 <= 2 * z + z', z >= 0, z' >= 0 mod(z, z') -{ 4 }-> s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 1, s78 >= 0, s78 <= 2 * z + s77, s62 >= 0, s62 <= z + 1, z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 10 + 48*z + 16*z' }-> s111 :|: s111 >= 0, s111 <= 32 * z' + z, s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 8 + 16*z' + 48*z'' }-> s100 :|: s100 >= 0, s100 <= 32 * z', z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> s20 :|: s20 >= 0, s20 <= 2 * z + z', z >= 0, z' >= 0 sub(z, z') -{ 45 + 20*z }-> s108 :|: s107 >= 0, s107 <= inf8, s108 >= 0, s108 <= s107, z' >= 0, z >= 0 sub(z, z') -{ 44 + 20*z }-> s110 :|: s109 >= 0, s109 <= inf9, s110 >= 0, s110 <= s109, z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 42 + 20*z }-> s95 :|: s95 >= 0, s95 <= inf4, z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 61 + 20*@xs }-> s96 :|: s96 >= 0, s96 <= inf5, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 60 + 20*z1 }-> s99 :|: s99 >= 0, s99 <= inf7, s88 >= 0, s88 <= inf3, s68 >= 0, s68 <= 2 * z'' + @y, s69 >= 0, s69 <= 2 * s68 + z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + @y, s60 >= 0, s60 <= 2 * s59 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 47 + 20*z' }-> s98 :|: s97 >= 0, s97 <= inf6, s98 >= 0, s98 <= s97 + @z + 1, z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 4 }-> 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= z' + @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 12 }-> s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + z'', s21 >= 0, s21 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 9 }-> s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0 sum#2(z, z') -{ 7 }-> s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 5 }-> s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 Function symbols to be analyzed: {mult#2}, {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] #eq: runtime: O(1) [0], size: O(1) [2] #less: runtime: O(1) [1], size: O(1) [2] #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #div: runtime: O(1) [0], size: O(n^1) [1 + z] sum#3: runtime: O(1) [5], size: O(1) [7] sub'#4: runtime: O(1) [4], size: O(n^1) [1 + z + z'] #equal: runtime: O(1) [1], size: O(1) [2] minus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] div: runtime: O(1) [1], size: O(n^1) [1 + z] sum#2: runtime: O(1) [7], size: O(1) [7] compare#5: runtime: O(1) [4], size: O(1) [3] times: runtime: O(1) [1], size: O(n^2) [1 + 4*z*z'] bitToInt': runtime: O(n^1) [8 + 10*z], size: INF bitToInt'#1: runtime: O(n^1) [2 + 10*z], size: INF sum#1: runtime: O(1) [9], size: O(1) [7] compare#4: runtime: O(1) [6], size: O(n^1) [3 + z'] mod: runtime: O(1) [4], size: INF bitToInt: runtime: O(n^1) [10 + 10*z], size: INF sum: runtime: O(1) [12], size: O(1) [7] add'#2: runtime: O(n^1) [2 + 48*z + 16*z1], size: O(n^1) [28 + 32*z1] add'#1: runtime: O(n^1) [4 + 16*z + 48*z'], size: O(n^1) [32*z] add': runtime: O(n^1) [5 + 16*z + 48*z'], size: O(n^1) [32*z] add'#3: runtime: O(n^1) [6 + 16*z' + 48*z''], size: O(n^1) [z + 32*z'] compare#3: runtime: O(1) [8], size: O(n^1) [3 + z] diff: runtime: O(1) [12], size: INF sub'#2: runtime: O(n^1) [60 + 20*z1], size: INF sub'#1: runtime: O(n^1) [41 + 20*z], size: INF sub'#3: runtime: O(n^1) [47 + 20*z'], size: INF add: runtime: O(n^1) [7 + 16*z + 48*z'], size: O(n^1) [32*z] compare#1: runtime: O(n^1) [25 + 11*z'], size: O(n^1) [3*z'] compare#2: runtime: O(n^1) [24 + 11*z], size: O(n^1) [3*z] sub': runtime: O(n^1) [42 + 20*z], size: INF mult#3: runtime: O(n^1) [8 + 16*z' + 48*z''], size: O(n^1) [32*z' + z''] leq: runtime: O(n^1) [28 + 11*z'], size: O(1) [2] compare: runtime: O(n^1) [26 + 11*z'], size: O(n^1) [3*z'] sub: runtime: O(n^1) [45 + 20*z], size: INF mult#2: runtime: ?, size: O(n^1) [z + 32*z'] ---------------------------------------- (313) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: mult#2 after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 10 + 48*z + 16*z' ---------------------------------------- (314) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + z', s26 >= 0, s26 <= s25 + 2, s27 >= 0, s27 <= s26 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + z', s29 >= 0, s29 <= s28 + 2, s30 >= 0, s30 <= s29 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + s32 :|: s32 >= 0, s32 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #equal(z, z') -{ 1 }-> s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s51 :|: s51 >= 0, s51 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + s33 :|: s33 >= 0, s33 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + s34 :|: s34 >= 0, s34 <= s3 + 1, s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + s35 :|: s35 >= 0, s35 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s54 :|: s52 >= 0, s52 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s53 >= 0, s53 <= 2 * (1 + z') + s52, s54 >= 0, s54 <= 2 * (1 + z') + s53, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> s24 :|: s24 >= 0, s24 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 7 + 16*z + 48*z' }-> s89 :|: s89 >= 0, s89 <= 32 * z, z' >= 0, z >= 0 add(z, z') -{ 6 + 16*z + 48*z' }-> s90 :|: s90 >= 0, s90 <= 32 * z, z' >= 0, z >= 0 add'(z, z', z'') -{ 5 + 16*z + 48*z' }-> s91 :|: s91 >= 0, s91 <= 32 * z, z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 3 + 16*@xs + 48*z' }-> s92 :|: s92 >= 0, s92 <= 32 * @xs + 28, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 19 + 48*@ys + 16*z1 }-> s93 :|: s93 >= 0, s93 <= s84 + 32 * z1, s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + @y, s56 >= 0, s56 <= 2 * s55 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 6 + 16*z' + 48*z'' }-> 1 + @z + s94 :|: s94 >= 0, s94 <= 32 * z', z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 10 + 10*z }-> s79 :|: s79 >= 0, s79 <= inf, z >= 0 bitToInt(z) -{ 9 + 10*z }-> s80 :|: s80 >= 0, s80 <= inf', z >= 0 bitToInt'(z, z') -{ 3 + 10*z }-> s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 12 + 10*@xs }-> s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + s82, s73 >= 0, s73 <= 4 * (z' * @x) + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 26 + 11*z' }-> s101 :|: s101 >= 0, s101 <= 3 * z', z' >= 0, z >= 0 compare#1(z, z') -{ 25 + 11*z' }-> s102 :|: s102 >= 0, s102 <= 3 * z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 35 + 11*@ys }-> s104 :|: s103 >= 0, s103 <= 3 * @ys, s104 >= 0, s104 <= s103 + 3, z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 8 }-> s86 :|: s86 >= 0, s86 <= z + 3, s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 6 }-> s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 2 }-> s64 :|: s64 >= 0, s64 <= 2 * 0 + (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 12 }-> 1 + s87 + s67 :|: s87 >= 0, s87 <= inf2, s65 >= 0, s65 <= 2 * s50 + z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + z'', s50 >= 0, s50 <= 2 * z + z', s31 >= 0, s31 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> s61 :|: s61 >= 0, s61 <= z + 1, z >= 0, z' >= 0 leq(z, z') -{ 28 + 11*z' }-> s106 :|: s105 >= 0, s105 <= 3 * z', s106 >= 0, s106 <= 2, z' >= 0, z >= 0 minus(z, z') -{ 1 }-> s49 :|: s49 >= 0, s49 <= 2 * z + z', z >= 0, z' >= 0 mod(z, z') -{ 4 }-> s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 1, s78 >= 0, s78 <= 2 * z + s77, s62 >= 0, s62 <= z + 1, z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 10 + 48*z + 16*z' }-> s111 :|: s111 >= 0, s111 <= 32 * z' + z, s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 8 + 16*z' + 48*z'' }-> s100 :|: s100 >= 0, s100 <= 32 * z', z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> s20 :|: s20 >= 0, s20 <= 2 * z + z', z >= 0, z' >= 0 sub(z, z') -{ 45 + 20*z }-> s108 :|: s107 >= 0, s107 <= inf8, s108 >= 0, s108 <= s107, z' >= 0, z >= 0 sub(z, z') -{ 44 + 20*z }-> s110 :|: s109 >= 0, s109 <= inf9, s110 >= 0, s110 <= s109, z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 42 + 20*z }-> s95 :|: s95 >= 0, s95 <= inf4, z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 61 + 20*@xs }-> s96 :|: s96 >= 0, s96 <= inf5, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 60 + 20*z1 }-> s99 :|: s99 >= 0, s99 <= inf7, s88 >= 0, s88 <= inf3, s68 >= 0, s68 <= 2 * z'' + @y, s69 >= 0, s69 <= 2 * s68 + z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + @y, s60 >= 0, s60 <= 2 * s59 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 47 + 20*z' }-> s98 :|: s97 >= 0, s97 <= inf6, s98 >= 0, s98 <= s97 + @z + 1, z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 4 }-> 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= z' + @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 12 }-> s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + z'', s21 >= 0, s21 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 9 }-> s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0 sum#2(z, z') -{ 7 }-> s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 5 }-> s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 Function symbols to be analyzed: {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] #eq: runtime: O(1) [0], size: O(1) [2] #less: runtime: O(1) [1], size: O(1) [2] #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #div: runtime: O(1) [0], size: O(n^1) [1 + z] sum#3: runtime: O(1) [5], size: O(1) [7] sub'#4: runtime: O(1) [4], size: O(n^1) [1 + z + z'] #equal: runtime: O(1) [1], size: O(1) [2] minus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] div: runtime: O(1) [1], size: O(n^1) [1 + z] sum#2: runtime: O(1) [7], size: O(1) [7] compare#5: runtime: O(1) [4], size: O(1) [3] times: runtime: O(1) [1], size: O(n^2) [1 + 4*z*z'] bitToInt': runtime: O(n^1) [8 + 10*z], size: INF bitToInt'#1: runtime: O(n^1) [2 + 10*z], size: INF sum#1: runtime: O(1) [9], size: O(1) [7] compare#4: runtime: O(1) [6], size: O(n^1) [3 + z'] mod: runtime: O(1) [4], size: INF bitToInt: runtime: O(n^1) [10 + 10*z], size: INF sum: runtime: O(1) [12], size: O(1) [7] add'#2: runtime: O(n^1) [2 + 48*z + 16*z1], size: O(n^1) [28 + 32*z1] add'#1: runtime: O(n^1) [4 + 16*z + 48*z'], size: O(n^1) [32*z] add': runtime: O(n^1) [5 + 16*z + 48*z'], size: O(n^1) [32*z] add'#3: runtime: O(n^1) [6 + 16*z' + 48*z''], size: O(n^1) [z + 32*z'] compare#3: runtime: O(1) [8], size: O(n^1) [3 + z] diff: runtime: O(1) [12], size: INF sub'#2: runtime: O(n^1) [60 + 20*z1], size: INF sub'#1: runtime: O(n^1) [41 + 20*z], size: INF sub'#3: runtime: O(n^1) [47 + 20*z'], size: INF add: runtime: O(n^1) [7 + 16*z + 48*z'], size: O(n^1) [32*z] compare#1: runtime: O(n^1) [25 + 11*z'], size: O(n^1) [3*z'] compare#2: runtime: O(n^1) [24 + 11*z], size: O(n^1) [3*z] sub': runtime: O(n^1) [42 + 20*z], size: INF mult#3: runtime: O(n^1) [8 + 16*z' + 48*z''], size: O(n^1) [32*z' + z''] leq: runtime: O(n^1) [28 + 11*z'], size: O(1) [2] compare: runtime: O(n^1) [26 + 11*z'], size: O(n^1) [3*z'] sub: runtime: O(n^1) [45 + 20*z], size: INF mult#2: runtime: O(n^1) [10 + 48*z + 16*z'], size: O(n^1) [z + 32*z'] ---------------------------------------- (315) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (316) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + z', s26 >= 0, s26 <= s25 + 2, s27 >= 0, s27 <= s26 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + z', s29 >= 0, s29 <= s28 + 2, s30 >= 0, s30 <= s29 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + s32 :|: s32 >= 0, s32 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #equal(z, z') -{ 1 }-> s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s51 :|: s51 >= 0, s51 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + s33 :|: s33 >= 0, s33 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + s34 :|: s34 >= 0, s34 <= s3 + 1, s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + s35 :|: s35 >= 0, s35 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s54 :|: s52 >= 0, s52 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s53 >= 0, s53 <= 2 * (1 + z') + s52, s54 >= 0, s54 <= 2 * (1 + z') + s53, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> s24 :|: s24 >= 0, s24 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 7 + 16*z + 48*z' }-> s89 :|: s89 >= 0, s89 <= 32 * z, z' >= 0, z >= 0 add(z, z') -{ 6 + 16*z + 48*z' }-> s90 :|: s90 >= 0, s90 <= 32 * z, z' >= 0, z >= 0 add'(z, z', z'') -{ 5 + 16*z + 48*z' }-> s91 :|: s91 >= 0, s91 <= 32 * z, z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 3 + 16*@xs + 48*z' }-> s92 :|: s92 >= 0, s92 <= 32 * @xs + 28, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 19 + 48*@ys + 16*z1 }-> s93 :|: s93 >= 0, s93 <= s84 + 32 * z1, s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + @y, s56 >= 0, s56 <= 2 * s55 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 6 + 16*z' + 48*z'' }-> 1 + @z + s94 :|: s94 >= 0, s94 <= 32 * z', z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 10 + 10*z }-> s79 :|: s79 >= 0, s79 <= inf, z >= 0 bitToInt(z) -{ 9 + 10*z }-> s80 :|: s80 >= 0, s80 <= inf', z >= 0 bitToInt'(z, z') -{ 3 + 10*z }-> s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 12 + 10*@xs }-> s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + s82, s73 >= 0, s73 <= 4 * (z' * @x) + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 26 + 11*z' }-> s101 :|: s101 >= 0, s101 <= 3 * z', z' >= 0, z >= 0 compare#1(z, z') -{ 25 + 11*z' }-> s102 :|: s102 >= 0, s102 <= 3 * z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 35 + 11*@ys }-> s104 :|: s103 >= 0, s103 <= 3 * @ys, s104 >= 0, s104 <= s103 + 3, z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 8 }-> s86 :|: s86 >= 0, s86 <= z + 3, s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 6 }-> s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 2 }-> s64 :|: s64 >= 0, s64 <= 2 * 0 + (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 12 }-> 1 + s87 + s67 :|: s87 >= 0, s87 <= inf2, s65 >= 0, s65 <= 2 * s50 + z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + z'', s50 >= 0, s50 <= 2 * z + z', s31 >= 0, s31 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> s61 :|: s61 >= 0, s61 <= z + 1, z >= 0, z' >= 0 leq(z, z') -{ 28 + 11*z' }-> s106 :|: s105 >= 0, s105 <= 3 * z', s106 >= 0, s106 <= 2, z' >= 0, z >= 0 minus(z, z') -{ 1 }-> s49 :|: s49 >= 0, s49 <= 2 * z + z', z >= 0, z' >= 0 mod(z, z') -{ 4 }-> s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 1, s78 >= 0, s78 <= 2 * z + s77, s62 >= 0, s62 <= z + 1, z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 10 + 48*z + 16*z' }-> s111 :|: s111 >= 0, s111 <= 32 * z' + z, s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 8 + 16*z' + 48*z'' }-> s100 :|: s100 >= 0, s100 <= 32 * z', z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> s20 :|: s20 >= 0, s20 <= 2 * z + z', z >= 0, z' >= 0 sub(z, z') -{ 45 + 20*z }-> s108 :|: s107 >= 0, s107 <= inf8, s108 >= 0, s108 <= s107, z' >= 0, z >= 0 sub(z, z') -{ 44 + 20*z }-> s110 :|: s109 >= 0, s109 <= inf9, s110 >= 0, s110 <= s109, z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 42 + 20*z }-> s95 :|: s95 >= 0, s95 <= inf4, z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 61 + 20*@xs }-> s96 :|: s96 >= 0, s96 <= inf5, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 60 + 20*z1 }-> s99 :|: s99 >= 0, s99 <= inf7, s88 >= 0, s88 <= inf3, s68 >= 0, s68 <= 2 * z'' + @y, s69 >= 0, s69 <= 2 * s68 + z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + @y, s60 >= 0, s60 <= 2 * s59 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 47 + 20*z' }-> s98 :|: s97 >= 0, s97 <= inf6, s98 >= 0, s98 <= s97 + @z + 1, z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 4 }-> 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= z' + @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 12 }-> s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + z'', s21 >= 0, s21 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 9 }-> s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0 sum#2(z, z') -{ 7 }-> s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 5 }-> s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 Function symbols to be analyzed: {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] #eq: runtime: O(1) [0], size: O(1) [2] #less: runtime: O(1) [1], size: O(1) [2] #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #div: runtime: O(1) [0], size: O(n^1) [1 + z] sum#3: runtime: O(1) [5], size: O(1) [7] sub'#4: runtime: O(1) [4], size: O(n^1) [1 + z + z'] #equal: runtime: O(1) [1], size: O(1) [2] minus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] div: runtime: O(1) [1], size: O(n^1) [1 + z] sum#2: runtime: O(1) [7], size: O(1) [7] compare#5: runtime: O(1) [4], size: O(1) [3] times: runtime: O(1) [1], size: O(n^2) [1 + 4*z*z'] bitToInt': runtime: O(n^1) [8 + 10*z], size: INF bitToInt'#1: runtime: O(n^1) [2 + 10*z], size: INF sum#1: runtime: O(1) [9], size: O(1) [7] compare#4: runtime: O(1) [6], size: O(n^1) [3 + z'] mod: runtime: O(1) [4], size: INF bitToInt: runtime: O(n^1) [10 + 10*z], size: INF sum: runtime: O(1) [12], size: O(1) [7] add'#2: runtime: O(n^1) [2 + 48*z + 16*z1], size: O(n^1) [28 + 32*z1] add'#1: runtime: O(n^1) [4 + 16*z + 48*z'], size: O(n^1) [32*z] add': runtime: O(n^1) [5 + 16*z + 48*z'], size: O(n^1) [32*z] add'#3: runtime: O(n^1) [6 + 16*z' + 48*z''], size: O(n^1) [z + 32*z'] compare#3: runtime: O(1) [8], size: O(n^1) [3 + z] diff: runtime: O(1) [12], size: INF sub'#2: runtime: O(n^1) [60 + 20*z1], size: INF sub'#1: runtime: O(n^1) [41 + 20*z], size: INF sub'#3: runtime: O(n^1) [47 + 20*z'], size: INF add: runtime: O(n^1) [7 + 16*z + 48*z'], size: O(n^1) [32*z] compare#1: runtime: O(n^1) [25 + 11*z'], size: O(n^1) [3*z'] compare#2: runtime: O(n^1) [24 + 11*z], size: O(n^1) [3*z] sub': runtime: O(n^1) [42 + 20*z], size: INF mult#3: runtime: O(n^1) [8 + 16*z' + 48*z''], size: O(n^1) [32*z' + z''] leq: runtime: O(n^1) [28 + 11*z'], size: O(1) [2] compare: runtime: O(n^1) [26 + 11*z'], size: O(n^1) [3*z'] sub: runtime: O(n^1) [45 + 20*z], size: INF mult#2: runtime: O(n^1) [10 + 48*z + 16*z'], size: O(n^1) [z + 32*z'] ---------------------------------------- (317) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: mult#1 after applying outer abstraction to obtain an ITS, resulting in: O(n^2) with polynomial bound: 2 + z + 32*z*z' ---------------------------------------- (318) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + z', s26 >= 0, s26 <= s25 + 2, s27 >= 0, s27 <= s26 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + z', s29 >= 0, s29 <= s28 + 2, s30 >= 0, s30 <= s29 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + s32 :|: s32 >= 0, s32 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #equal(z, z') -{ 1 }-> s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s51 :|: s51 >= 0, s51 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + s33 :|: s33 >= 0, s33 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + s34 :|: s34 >= 0, s34 <= s3 + 1, s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + s35 :|: s35 >= 0, s35 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s54 :|: s52 >= 0, s52 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s53 >= 0, s53 <= 2 * (1 + z') + s52, s54 >= 0, s54 <= 2 * (1 + z') + s53, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> s24 :|: s24 >= 0, s24 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 7 + 16*z + 48*z' }-> s89 :|: s89 >= 0, s89 <= 32 * z, z' >= 0, z >= 0 add(z, z') -{ 6 + 16*z + 48*z' }-> s90 :|: s90 >= 0, s90 <= 32 * z, z' >= 0, z >= 0 add'(z, z', z'') -{ 5 + 16*z + 48*z' }-> s91 :|: s91 >= 0, s91 <= 32 * z, z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 3 + 16*@xs + 48*z' }-> s92 :|: s92 >= 0, s92 <= 32 * @xs + 28, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 19 + 48*@ys + 16*z1 }-> s93 :|: s93 >= 0, s93 <= s84 + 32 * z1, s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + @y, s56 >= 0, s56 <= 2 * s55 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 6 + 16*z' + 48*z'' }-> 1 + @z + s94 :|: s94 >= 0, s94 <= 32 * z', z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 10 + 10*z }-> s79 :|: s79 >= 0, s79 <= inf, z >= 0 bitToInt(z) -{ 9 + 10*z }-> s80 :|: s80 >= 0, s80 <= inf', z >= 0 bitToInt'(z, z') -{ 3 + 10*z }-> s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 12 + 10*@xs }-> s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + s82, s73 >= 0, s73 <= 4 * (z' * @x) + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 26 + 11*z' }-> s101 :|: s101 >= 0, s101 <= 3 * z', z' >= 0, z >= 0 compare#1(z, z') -{ 25 + 11*z' }-> s102 :|: s102 >= 0, s102 <= 3 * z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 35 + 11*@ys }-> s104 :|: s103 >= 0, s103 <= 3 * @ys, s104 >= 0, s104 <= s103 + 3, z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 8 }-> s86 :|: s86 >= 0, s86 <= z + 3, s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 6 }-> s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 2 }-> s64 :|: s64 >= 0, s64 <= 2 * 0 + (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 12 }-> 1 + s87 + s67 :|: s87 >= 0, s87 <= inf2, s65 >= 0, s65 <= 2 * s50 + z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + z'', s50 >= 0, s50 <= 2 * z + z', s31 >= 0, s31 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> s61 :|: s61 >= 0, s61 <= z + 1, z >= 0, z' >= 0 leq(z, z') -{ 28 + 11*z' }-> s106 :|: s105 >= 0, s105 <= 3 * z', s106 >= 0, s106 <= 2, z' >= 0, z >= 0 minus(z, z') -{ 1 }-> s49 :|: s49 >= 0, s49 <= 2 * z + z', z >= 0, z' >= 0 mod(z, z') -{ 4 }-> s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 1, s78 >= 0, s78 <= 2 * z + s77, s62 >= 0, s62 <= z + 1, z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 10 + 48*z + 16*z' }-> s111 :|: s111 >= 0, s111 <= 32 * z' + z, s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 8 + 16*z' + 48*z'' }-> s100 :|: s100 >= 0, s100 <= 32 * z', z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> s20 :|: s20 >= 0, s20 <= 2 * z + z', z >= 0, z' >= 0 sub(z, z') -{ 45 + 20*z }-> s108 :|: s107 >= 0, s107 <= inf8, s108 >= 0, s108 <= s107, z' >= 0, z >= 0 sub(z, z') -{ 44 + 20*z }-> s110 :|: s109 >= 0, s109 <= inf9, s110 >= 0, s110 <= s109, z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 42 + 20*z }-> s95 :|: s95 >= 0, s95 <= inf4, z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 61 + 20*@xs }-> s96 :|: s96 >= 0, s96 <= inf5, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 60 + 20*z1 }-> s99 :|: s99 >= 0, s99 <= inf7, s88 >= 0, s88 <= inf3, s68 >= 0, s68 <= 2 * z'' + @y, s69 >= 0, s69 <= 2 * s68 + z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + @y, s60 >= 0, s60 <= 2 * s59 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 47 + 20*z' }-> s98 :|: s97 >= 0, s97 <= inf6, s98 >= 0, s98 <= s97 + @z + 1, z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 4 }-> 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= z' + @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 12 }-> s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + z'', s21 >= 0, s21 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 9 }-> s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0 sum#2(z, z') -{ 7 }-> s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 5 }-> s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 Function symbols to be analyzed: {mult#1}, {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] #eq: runtime: O(1) [0], size: O(1) [2] #less: runtime: O(1) [1], size: O(1) [2] #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #div: runtime: O(1) [0], size: O(n^1) [1 + z] sum#3: runtime: O(1) [5], size: O(1) [7] sub'#4: runtime: O(1) [4], size: O(n^1) [1 + z + z'] #equal: runtime: O(1) [1], size: O(1) [2] minus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] div: runtime: O(1) [1], size: O(n^1) [1 + z] sum#2: runtime: O(1) [7], size: O(1) [7] compare#5: runtime: O(1) [4], size: O(1) [3] times: runtime: O(1) [1], size: O(n^2) [1 + 4*z*z'] bitToInt': runtime: O(n^1) [8 + 10*z], size: INF bitToInt'#1: runtime: O(n^1) [2 + 10*z], size: INF sum#1: runtime: O(1) [9], size: O(1) [7] compare#4: runtime: O(1) [6], size: O(n^1) [3 + z'] mod: runtime: O(1) [4], size: INF bitToInt: runtime: O(n^1) [10 + 10*z], size: INF sum: runtime: O(1) [12], size: O(1) [7] add'#2: runtime: O(n^1) [2 + 48*z + 16*z1], size: O(n^1) [28 + 32*z1] add'#1: runtime: O(n^1) [4 + 16*z + 48*z'], size: O(n^1) [32*z] add': runtime: O(n^1) [5 + 16*z + 48*z'], size: O(n^1) [32*z] add'#3: runtime: O(n^1) [6 + 16*z' + 48*z''], size: O(n^1) [z + 32*z'] compare#3: runtime: O(1) [8], size: O(n^1) [3 + z] diff: runtime: O(1) [12], size: INF sub'#2: runtime: O(n^1) [60 + 20*z1], size: INF sub'#1: runtime: O(n^1) [41 + 20*z], size: INF sub'#3: runtime: O(n^1) [47 + 20*z'], size: INF add: runtime: O(n^1) [7 + 16*z + 48*z'], size: O(n^1) [32*z] compare#1: runtime: O(n^1) [25 + 11*z'], size: O(n^1) [3*z'] compare#2: runtime: O(n^1) [24 + 11*z], size: O(n^1) [3*z] sub': runtime: O(n^1) [42 + 20*z], size: INF mult#3: runtime: O(n^1) [8 + 16*z' + 48*z''], size: O(n^1) [32*z' + z''] leq: runtime: O(n^1) [28 + 11*z'], size: O(1) [2] compare: runtime: O(n^1) [26 + 11*z'], size: O(n^1) [3*z'] sub: runtime: O(n^1) [45 + 20*z], size: INF mult#2: runtime: O(n^1) [10 + 48*z + 16*z'], size: O(n^1) [z + 32*z'] mult#1: runtime: ?, size: O(n^2) [2 + z + 32*z*z'] ---------------------------------------- (319) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using KoAT for: mult#1 after applying outer abstraction to obtain an ITS, resulting in: O(n^3) with polynomial bound: 1 + 313*z + 32*z*z' + 96*z^2 + 3072*z^2*z' ---------------------------------------- (320) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + z', s26 >= 0, s26 <= s25 + 2, s27 >= 0, s27 <= s26 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + z', s29 >= 0, s29 <= s28 + 2, s30 >= 0, s30 <= s29 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + s32 :|: s32 >= 0, s32 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #equal(z, z') -{ 1 }-> s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s51 :|: s51 >= 0, s51 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + s33 :|: s33 >= 0, s33 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + s34 :|: s34 >= 0, s34 <= s3 + 1, s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + s35 :|: s35 >= 0, s35 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s54 :|: s52 >= 0, s52 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s53 >= 0, s53 <= 2 * (1 + z') + s52, s54 >= 0, s54 <= 2 * (1 + z') + s53, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> s24 :|: s24 >= 0, s24 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 7 + 16*z + 48*z' }-> s89 :|: s89 >= 0, s89 <= 32 * z, z' >= 0, z >= 0 add(z, z') -{ 6 + 16*z + 48*z' }-> s90 :|: s90 >= 0, s90 <= 32 * z, z' >= 0, z >= 0 add'(z, z', z'') -{ 5 + 16*z + 48*z' }-> s91 :|: s91 >= 0, s91 <= 32 * z, z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 3 + 16*@xs + 48*z' }-> s92 :|: s92 >= 0, s92 <= 32 * @xs + 28, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 19 + 48*@ys + 16*z1 }-> s93 :|: s93 >= 0, s93 <= s84 + 32 * z1, s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + @y, s56 >= 0, s56 <= 2 * s55 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 6 + 16*z' + 48*z'' }-> 1 + @z + s94 :|: s94 >= 0, s94 <= 32 * z', z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 10 + 10*z }-> s79 :|: s79 >= 0, s79 <= inf, z >= 0 bitToInt(z) -{ 9 + 10*z }-> s80 :|: s80 >= 0, s80 <= inf', z >= 0 bitToInt'(z, z') -{ 3 + 10*z }-> s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 12 + 10*@xs }-> s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + s82, s73 >= 0, s73 <= 4 * (z' * @x) + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 26 + 11*z' }-> s101 :|: s101 >= 0, s101 <= 3 * z', z' >= 0, z >= 0 compare#1(z, z') -{ 25 + 11*z' }-> s102 :|: s102 >= 0, s102 <= 3 * z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 35 + 11*@ys }-> s104 :|: s103 >= 0, s103 <= 3 * @ys, s104 >= 0, s104 <= s103 + 3, z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 8 }-> s86 :|: s86 >= 0, s86 <= z + 3, s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 6 }-> s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 2 }-> s64 :|: s64 >= 0, s64 <= 2 * 0 + (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 12 }-> 1 + s87 + s67 :|: s87 >= 0, s87 <= inf2, s65 >= 0, s65 <= 2 * s50 + z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + z'', s50 >= 0, s50 <= 2 * z + z', s31 >= 0, s31 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> s61 :|: s61 >= 0, s61 <= z + 1, z >= 0, z' >= 0 leq(z, z') -{ 28 + 11*z' }-> s106 :|: s105 >= 0, s105 <= 3 * z', s106 >= 0, s106 <= 2, z' >= 0, z >= 0 minus(z, z') -{ 1 }-> s49 :|: s49 >= 0, s49 <= 2 * z + z', z >= 0, z' >= 0 mod(z, z') -{ 4 }-> s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 1, s78 >= 0, s78 <= 2 * z + s77, s62 >= 0, s62 <= z + 1, z >= 0, z' >= 0 mult(z, z') -{ 1 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult#1(z, z') -{ 3 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 10 + 48*z + 16*z' }-> s111 :|: s111 >= 0, s111 <= 32 * z' + z, s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 8 + 16*z' + 48*z'' }-> s100 :|: s100 >= 0, s100 <= 32 * z', z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 2 }-> mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> s20 :|: s20 >= 0, s20 <= 2 * z + z', z >= 0, z' >= 0 sub(z, z') -{ 45 + 20*z }-> s108 :|: s107 >= 0, s107 <= inf8, s108 >= 0, s108 <= s107, z' >= 0, z >= 0 sub(z, z') -{ 44 + 20*z }-> s110 :|: s109 >= 0, s109 <= inf9, s110 >= 0, s110 <= s109, z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 42 + 20*z }-> s95 :|: s95 >= 0, s95 <= inf4, z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 61 + 20*@xs }-> s96 :|: s96 >= 0, s96 <= inf5, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 60 + 20*z1 }-> s99 :|: s99 >= 0, s99 <= inf7, s88 >= 0, s88 <= inf3, s68 >= 0, s68 <= 2 * z'' + @y, s69 >= 0, s69 <= 2 * s68 + z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + @y, s60 >= 0, s60 <= 2 * s59 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 47 + 20*z' }-> s98 :|: s97 >= 0, s97 <= inf6, s98 >= 0, s98 <= s97 + @z + 1, z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 4 }-> 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= z' + @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 12 }-> s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + z'', s21 >= 0, s21 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 9 }-> s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0 sum#2(z, z') -{ 7 }-> s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 5 }-> s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 Function symbols to be analyzed: {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] #eq: runtime: O(1) [0], size: O(1) [2] #less: runtime: O(1) [1], size: O(1) [2] #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #div: runtime: O(1) [0], size: O(n^1) [1 + z] sum#3: runtime: O(1) [5], size: O(1) [7] sub'#4: runtime: O(1) [4], size: O(n^1) [1 + z + z'] #equal: runtime: O(1) [1], size: O(1) [2] minus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] div: runtime: O(1) [1], size: O(n^1) [1 + z] sum#2: runtime: O(1) [7], size: O(1) [7] compare#5: runtime: O(1) [4], size: O(1) [3] times: runtime: O(1) [1], size: O(n^2) [1 + 4*z*z'] bitToInt': runtime: O(n^1) [8 + 10*z], size: INF bitToInt'#1: runtime: O(n^1) [2 + 10*z], size: INF sum#1: runtime: O(1) [9], size: O(1) [7] compare#4: runtime: O(1) [6], size: O(n^1) [3 + z'] mod: runtime: O(1) [4], size: INF bitToInt: runtime: O(n^1) [10 + 10*z], size: INF sum: runtime: O(1) [12], size: O(1) [7] add'#2: runtime: O(n^1) [2 + 48*z + 16*z1], size: O(n^1) [28 + 32*z1] add'#1: runtime: O(n^1) [4 + 16*z + 48*z'], size: O(n^1) [32*z] add': runtime: O(n^1) [5 + 16*z + 48*z'], size: O(n^1) [32*z] add'#3: runtime: O(n^1) [6 + 16*z' + 48*z''], size: O(n^1) [z + 32*z'] compare#3: runtime: O(1) [8], size: O(n^1) [3 + z] diff: runtime: O(1) [12], size: INF sub'#2: runtime: O(n^1) [60 + 20*z1], size: INF sub'#1: runtime: O(n^1) [41 + 20*z], size: INF sub'#3: runtime: O(n^1) [47 + 20*z'], size: INF add: runtime: O(n^1) [7 + 16*z + 48*z'], size: O(n^1) [32*z] compare#1: runtime: O(n^1) [25 + 11*z'], size: O(n^1) [3*z'] compare#2: runtime: O(n^1) [24 + 11*z], size: O(n^1) [3*z] sub': runtime: O(n^1) [42 + 20*z], size: INF mult#3: runtime: O(n^1) [8 + 16*z' + 48*z''], size: O(n^1) [32*z' + z''] leq: runtime: O(n^1) [28 + 11*z'], size: O(1) [2] compare: runtime: O(n^1) [26 + 11*z'], size: O(n^1) [3*z'] sub: runtime: O(n^1) [45 + 20*z], size: INF mult#2: runtime: O(n^1) [10 + 48*z + 16*z'], size: O(n^1) [z + 32*z'] mult#1: runtime: O(n^3) [1 + 313*z + 32*z*z' + 96*z^2 + 3072*z^2*z'], size: O(n^2) [2 + z + 32*z*z'] ---------------------------------------- (321) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (322) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + z', s26 >= 0, s26 <= s25 + 2, s27 >= 0, s27 <= s26 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + z', s29 >= 0, s29 <= s28 + 2, s30 >= 0, s30 <= s29 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + s32 :|: s32 >= 0, s32 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #equal(z, z') -{ 1 }-> s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s51 :|: s51 >= 0, s51 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + s33 :|: s33 >= 0, s33 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + s34 :|: s34 >= 0, s34 <= s3 + 1, s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + s35 :|: s35 >= 0, s35 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s54 :|: s52 >= 0, s52 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s53 >= 0, s53 <= 2 * (1 + z') + s52, s54 >= 0, s54 <= 2 * (1 + z') + s53, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> s24 :|: s24 >= 0, s24 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 7 + 16*z + 48*z' }-> s89 :|: s89 >= 0, s89 <= 32 * z, z' >= 0, z >= 0 add(z, z') -{ 6 + 16*z + 48*z' }-> s90 :|: s90 >= 0, s90 <= 32 * z, z' >= 0, z >= 0 add'(z, z', z'') -{ 5 + 16*z + 48*z' }-> s91 :|: s91 >= 0, s91 <= 32 * z, z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 3 + 16*@xs + 48*z' }-> s92 :|: s92 >= 0, s92 <= 32 * @xs + 28, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 19 + 48*@ys + 16*z1 }-> s93 :|: s93 >= 0, s93 <= s84 + 32 * z1, s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + @y, s56 >= 0, s56 <= 2 * s55 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 6 + 16*z' + 48*z'' }-> 1 + @z + s94 :|: s94 >= 0, s94 <= 32 * z', z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 10 + 10*z }-> s79 :|: s79 >= 0, s79 <= inf, z >= 0 bitToInt(z) -{ 9 + 10*z }-> s80 :|: s80 >= 0, s80 <= inf', z >= 0 bitToInt'(z, z') -{ 3 + 10*z }-> s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 12 + 10*@xs }-> s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + s82, s73 >= 0, s73 <= 4 * (z' * @x) + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 26 + 11*z' }-> s101 :|: s101 >= 0, s101 <= 3 * z', z' >= 0, z >= 0 compare#1(z, z') -{ 25 + 11*z' }-> s102 :|: s102 >= 0, s102 <= 3 * z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 35 + 11*@ys }-> s104 :|: s103 >= 0, s103 <= 3 * @ys, s104 >= 0, s104 <= s103 + 3, z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 8 }-> s86 :|: s86 >= 0, s86 <= z + 3, s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 6 }-> s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 2 }-> s64 :|: s64 >= 0, s64 <= 2 * 0 + (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 12 }-> 1 + s87 + s67 :|: s87 >= 0, s87 <= inf2, s65 >= 0, s65 <= 2 * s50 + z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + z'', s50 >= 0, s50 <= 2 * z + z', s31 >= 0, s31 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> s61 :|: s61 >= 0, s61 <= z + 1, z >= 0, z' >= 0 leq(z, z') -{ 28 + 11*z' }-> s106 :|: s105 >= 0, s105 <= 3 * z', s106 >= 0, s106 <= 2, z' >= 0, z >= 0 minus(z, z') -{ 1 }-> s49 :|: s49 >= 0, s49 <= 2 * z + z', z >= 0, z' >= 0 mod(z, z') -{ 4 }-> s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 1, s78 >= 0, s78 <= 2 * z + s77, s62 >= 0, s62 <= z + 1, z >= 0, z' >= 0 mult(z, z') -{ 2 + 313*z + 32*z*z' + 96*z^2 + 3072*z^2*z' }-> s112 :|: s112 >= 0, s112 <= 32 * (z' * z) + z + 2, z' >= 0, z >= 0 mult#1(z, z') -{ 62 + 313*@xs + 32*@xs*z' + 96*@xs^2 + 3072*@xs^2*z' + 48*s113 + 16*z' }-> s114 :|: s113 >= 0, s113 <= 32 * (z' * @xs) + @xs + 2, s114 >= 0, s114 <= 1 + 0 + s113 + 32 * z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 61 + 313*@xs + 32*@xs*z' + 96*@xs^2 + 3072*@xs^2*z' + 48*s115 + 16*z' }-> s116 :|: s115 >= 0, s115 <= 32 * (z' * @xs) + @xs + 2, s116 >= 0, s116 <= 1 + 0 + s115 + 32 * z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 10 + 48*z + 16*z' }-> s111 :|: s111 >= 0, s111 <= 32 * z' + z, s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 8 + 16*z' + 48*z'' }-> s100 :|: s100 >= 0, s100 <= 32 * z', z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 3 + 313*z + 32*z*z' + 96*z^2 + 3072*z^2*z' }-> mult(s117, z') :|: s117 >= 0, s117 <= 32 * (z' * z) + z + 2, z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> s20 :|: s20 >= 0, s20 <= 2 * z + z', z >= 0, z' >= 0 sub(z, z') -{ 45 + 20*z }-> s108 :|: s107 >= 0, s107 <= inf8, s108 >= 0, s108 <= s107, z' >= 0, z >= 0 sub(z, z') -{ 44 + 20*z }-> s110 :|: s109 >= 0, s109 <= inf9, s110 >= 0, s110 <= s109, z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 42 + 20*z }-> s95 :|: s95 >= 0, s95 <= inf4, z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 61 + 20*@xs }-> s96 :|: s96 >= 0, s96 <= inf5, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 60 + 20*z1 }-> s99 :|: s99 >= 0, s99 <= inf7, s88 >= 0, s88 <= inf3, s68 >= 0, s68 <= 2 * z'' + @y, s69 >= 0, s69 <= 2 * s68 + z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + @y, s60 >= 0, s60 <= 2 * s59 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 47 + 20*z' }-> s98 :|: s97 >= 0, s97 <= inf6, s98 >= 0, s98 <= s97 + @z + 1, z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 4 }-> 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= z' + @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 12 }-> s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + z'', s21 >= 0, s21 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 9 }-> s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0 sum#2(z, z') -{ 7 }-> s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 5 }-> s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 Function symbols to be analyzed: {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] #eq: runtime: O(1) [0], size: O(1) [2] #less: runtime: O(1) [1], size: O(1) [2] #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #div: runtime: O(1) [0], size: O(n^1) [1 + z] sum#3: runtime: O(1) [5], size: O(1) [7] sub'#4: runtime: O(1) [4], size: O(n^1) [1 + z + z'] #equal: runtime: O(1) [1], size: O(1) [2] minus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] div: runtime: O(1) [1], size: O(n^1) [1 + z] sum#2: runtime: O(1) [7], size: O(1) [7] compare#5: runtime: O(1) [4], size: O(1) [3] times: runtime: O(1) [1], size: O(n^2) [1 + 4*z*z'] bitToInt': runtime: O(n^1) [8 + 10*z], size: INF bitToInt'#1: runtime: O(n^1) [2 + 10*z], size: INF sum#1: runtime: O(1) [9], size: O(1) [7] compare#4: runtime: O(1) [6], size: O(n^1) [3 + z'] mod: runtime: O(1) [4], size: INF bitToInt: runtime: O(n^1) [10 + 10*z], size: INF sum: runtime: O(1) [12], size: O(1) [7] add'#2: runtime: O(n^1) [2 + 48*z + 16*z1], size: O(n^1) [28 + 32*z1] add'#1: runtime: O(n^1) [4 + 16*z + 48*z'], size: O(n^1) [32*z] add': runtime: O(n^1) [5 + 16*z + 48*z'], size: O(n^1) [32*z] add'#3: runtime: O(n^1) [6 + 16*z' + 48*z''], size: O(n^1) [z + 32*z'] compare#3: runtime: O(1) [8], size: O(n^1) [3 + z] diff: runtime: O(1) [12], size: INF sub'#2: runtime: O(n^1) [60 + 20*z1], size: INF sub'#1: runtime: O(n^1) [41 + 20*z], size: INF sub'#3: runtime: O(n^1) [47 + 20*z'], size: INF add: runtime: O(n^1) [7 + 16*z + 48*z'], size: O(n^1) [32*z] compare#1: runtime: O(n^1) [25 + 11*z'], size: O(n^1) [3*z'] compare#2: runtime: O(n^1) [24 + 11*z], size: O(n^1) [3*z] sub': runtime: O(n^1) [42 + 20*z], size: INF mult#3: runtime: O(n^1) [8 + 16*z' + 48*z''], size: O(n^1) [32*z' + z''] leq: runtime: O(n^1) [28 + 11*z'], size: O(1) [2] compare: runtime: O(n^1) [26 + 11*z'], size: O(n^1) [3*z'] sub: runtime: O(n^1) [45 + 20*z], size: INF mult#2: runtime: O(n^1) [10 + 48*z + 16*z'], size: O(n^1) [z + 32*z'] mult#1: runtime: O(n^3) [1 + 313*z + 32*z*z' + 96*z^2 + 3072*z^2*z'], size: O(n^2) [2 + z + 32*z*z'] ---------------------------------------- (323) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using KoAT for: mult after applying outer abstraction to obtain an ITS, resulting in: O(n^2) with polynomial bound: 2 + z + 32*z*z' ---------------------------------------- (324) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + z', s26 >= 0, s26 <= s25 + 2, s27 >= 0, s27 <= s26 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + z', s29 >= 0, s29 <= s28 + 2, s30 >= 0, s30 <= s29 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + s32 :|: s32 >= 0, s32 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #equal(z, z') -{ 1 }-> s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s51 :|: s51 >= 0, s51 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + s33 :|: s33 >= 0, s33 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + s34 :|: s34 >= 0, s34 <= s3 + 1, s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + s35 :|: s35 >= 0, s35 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s54 :|: s52 >= 0, s52 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s53 >= 0, s53 <= 2 * (1 + z') + s52, s54 >= 0, s54 <= 2 * (1 + z') + s53, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> s24 :|: s24 >= 0, s24 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 7 + 16*z + 48*z' }-> s89 :|: s89 >= 0, s89 <= 32 * z, z' >= 0, z >= 0 add(z, z') -{ 6 + 16*z + 48*z' }-> s90 :|: s90 >= 0, s90 <= 32 * z, z' >= 0, z >= 0 add'(z, z', z'') -{ 5 + 16*z + 48*z' }-> s91 :|: s91 >= 0, s91 <= 32 * z, z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 3 + 16*@xs + 48*z' }-> s92 :|: s92 >= 0, s92 <= 32 * @xs + 28, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 19 + 48*@ys + 16*z1 }-> s93 :|: s93 >= 0, s93 <= s84 + 32 * z1, s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + @y, s56 >= 0, s56 <= 2 * s55 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 6 + 16*z' + 48*z'' }-> 1 + @z + s94 :|: s94 >= 0, s94 <= 32 * z', z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 10 + 10*z }-> s79 :|: s79 >= 0, s79 <= inf, z >= 0 bitToInt(z) -{ 9 + 10*z }-> s80 :|: s80 >= 0, s80 <= inf', z >= 0 bitToInt'(z, z') -{ 3 + 10*z }-> s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 12 + 10*@xs }-> s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + s82, s73 >= 0, s73 <= 4 * (z' * @x) + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 26 + 11*z' }-> s101 :|: s101 >= 0, s101 <= 3 * z', z' >= 0, z >= 0 compare#1(z, z') -{ 25 + 11*z' }-> s102 :|: s102 >= 0, s102 <= 3 * z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 35 + 11*@ys }-> s104 :|: s103 >= 0, s103 <= 3 * @ys, s104 >= 0, s104 <= s103 + 3, z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 8 }-> s86 :|: s86 >= 0, s86 <= z + 3, s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 6 }-> s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 2 }-> s64 :|: s64 >= 0, s64 <= 2 * 0 + (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 12 }-> 1 + s87 + s67 :|: s87 >= 0, s87 <= inf2, s65 >= 0, s65 <= 2 * s50 + z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + z'', s50 >= 0, s50 <= 2 * z + z', s31 >= 0, s31 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> s61 :|: s61 >= 0, s61 <= z + 1, z >= 0, z' >= 0 leq(z, z') -{ 28 + 11*z' }-> s106 :|: s105 >= 0, s105 <= 3 * z', s106 >= 0, s106 <= 2, z' >= 0, z >= 0 minus(z, z') -{ 1 }-> s49 :|: s49 >= 0, s49 <= 2 * z + z', z >= 0, z' >= 0 mod(z, z') -{ 4 }-> s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 1, s78 >= 0, s78 <= 2 * z + s77, s62 >= 0, s62 <= z + 1, z >= 0, z' >= 0 mult(z, z') -{ 2 + 313*z + 32*z*z' + 96*z^2 + 3072*z^2*z' }-> s112 :|: s112 >= 0, s112 <= 32 * (z' * z) + z + 2, z' >= 0, z >= 0 mult#1(z, z') -{ 62 + 313*@xs + 32*@xs*z' + 96*@xs^2 + 3072*@xs^2*z' + 48*s113 + 16*z' }-> s114 :|: s113 >= 0, s113 <= 32 * (z' * @xs) + @xs + 2, s114 >= 0, s114 <= 1 + 0 + s113 + 32 * z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 61 + 313*@xs + 32*@xs*z' + 96*@xs^2 + 3072*@xs^2*z' + 48*s115 + 16*z' }-> s116 :|: s115 >= 0, s115 <= 32 * (z' * @xs) + @xs + 2, s116 >= 0, s116 <= 1 + 0 + s115 + 32 * z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 10 + 48*z + 16*z' }-> s111 :|: s111 >= 0, s111 <= 32 * z' + z, s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 8 + 16*z' + 48*z'' }-> s100 :|: s100 >= 0, s100 <= 32 * z', z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 3 + 313*z + 32*z*z' + 96*z^2 + 3072*z^2*z' }-> mult(s117, z') :|: s117 >= 0, s117 <= 32 * (z' * z) + z + 2, z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> s20 :|: s20 >= 0, s20 <= 2 * z + z', z >= 0, z' >= 0 sub(z, z') -{ 45 + 20*z }-> s108 :|: s107 >= 0, s107 <= inf8, s108 >= 0, s108 <= s107, z' >= 0, z >= 0 sub(z, z') -{ 44 + 20*z }-> s110 :|: s109 >= 0, s109 <= inf9, s110 >= 0, s110 <= s109, z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 42 + 20*z }-> s95 :|: s95 >= 0, s95 <= inf4, z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 61 + 20*@xs }-> s96 :|: s96 >= 0, s96 <= inf5, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 60 + 20*z1 }-> s99 :|: s99 >= 0, s99 <= inf7, s88 >= 0, s88 <= inf3, s68 >= 0, s68 <= 2 * z'' + @y, s69 >= 0, s69 <= 2 * s68 + z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + @y, s60 >= 0, s60 <= 2 * s59 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 47 + 20*z' }-> s98 :|: s97 >= 0, s97 <= inf6, s98 >= 0, s98 <= s97 + @z + 1, z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 4 }-> 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= z' + @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 12 }-> s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + z'', s21 >= 0, s21 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 9 }-> s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0 sum#2(z, z') -{ 7 }-> s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 5 }-> s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 Function symbols to be analyzed: {mult}, {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] #eq: runtime: O(1) [0], size: O(1) [2] #less: runtime: O(1) [1], size: O(1) [2] #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #div: runtime: O(1) [0], size: O(n^1) [1 + z] sum#3: runtime: O(1) [5], size: O(1) [7] sub'#4: runtime: O(1) [4], size: O(n^1) [1 + z + z'] #equal: runtime: O(1) [1], size: O(1) [2] minus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] div: runtime: O(1) [1], size: O(n^1) [1 + z] sum#2: runtime: O(1) [7], size: O(1) [7] compare#5: runtime: O(1) [4], size: O(1) [3] times: runtime: O(1) [1], size: O(n^2) [1 + 4*z*z'] bitToInt': runtime: O(n^1) [8 + 10*z], size: INF bitToInt'#1: runtime: O(n^1) [2 + 10*z], size: INF sum#1: runtime: O(1) [9], size: O(1) [7] compare#4: runtime: O(1) [6], size: O(n^1) [3 + z'] mod: runtime: O(1) [4], size: INF bitToInt: runtime: O(n^1) [10 + 10*z], size: INF sum: runtime: O(1) [12], size: O(1) [7] add'#2: runtime: O(n^1) [2 + 48*z + 16*z1], size: O(n^1) [28 + 32*z1] add'#1: runtime: O(n^1) [4 + 16*z + 48*z'], size: O(n^1) [32*z] add': runtime: O(n^1) [5 + 16*z + 48*z'], size: O(n^1) [32*z] add'#3: runtime: O(n^1) [6 + 16*z' + 48*z''], size: O(n^1) [z + 32*z'] compare#3: runtime: O(1) [8], size: O(n^1) [3 + z] diff: runtime: O(1) [12], size: INF sub'#2: runtime: O(n^1) [60 + 20*z1], size: INF sub'#1: runtime: O(n^1) [41 + 20*z], size: INF sub'#3: runtime: O(n^1) [47 + 20*z'], size: INF add: runtime: O(n^1) [7 + 16*z + 48*z'], size: O(n^1) [32*z] compare#1: runtime: O(n^1) [25 + 11*z'], size: O(n^1) [3*z'] compare#2: runtime: O(n^1) [24 + 11*z], size: O(n^1) [3*z] sub': runtime: O(n^1) [42 + 20*z], size: INF mult#3: runtime: O(n^1) [8 + 16*z' + 48*z''], size: O(n^1) [32*z' + z''] leq: runtime: O(n^1) [28 + 11*z'], size: O(1) [2] compare: runtime: O(n^1) [26 + 11*z'], size: O(n^1) [3*z'] sub: runtime: O(n^1) [45 + 20*z], size: INF mult#2: runtime: O(n^1) [10 + 48*z + 16*z'], size: O(n^1) [z + 32*z'] mult#1: runtime: O(n^3) [1 + 313*z + 32*z*z' + 96*z^2 + 3072*z^2*z'], size: O(n^2) [2 + z + 32*z*z'] mult: runtime: ?, size: O(n^2) [2 + z + 32*z*z'] ---------------------------------------- (325) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using KoAT for: mult after applying outer abstraction to obtain an ITS, resulting in: O(n^3) with polynomial bound: 2 + 313*z + 32*z*z' + 96*z^2 + 3072*z^2*z' ---------------------------------------- (326) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + z', s26 >= 0, s26 <= s25 + 2, s27 >= 0, s27 <= s26 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + z', s29 >= 0, s29 <= s28 + 2, s30 >= 0, s30 <= s29 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + s32 :|: s32 >= 0, s32 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #equal(z, z') -{ 1 }-> s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s51 :|: s51 >= 0, s51 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + s33 :|: s33 >= 0, s33 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + s34 :|: s34 >= 0, s34 <= s3 + 1, s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + s35 :|: s35 >= 0, s35 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s54 :|: s52 >= 0, s52 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s53 >= 0, s53 <= 2 * (1 + z') + s52, s54 >= 0, s54 <= 2 * (1 + z') + s53, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> s24 :|: s24 >= 0, s24 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 7 + 16*z + 48*z' }-> s89 :|: s89 >= 0, s89 <= 32 * z, z' >= 0, z >= 0 add(z, z') -{ 6 + 16*z + 48*z' }-> s90 :|: s90 >= 0, s90 <= 32 * z, z' >= 0, z >= 0 add'(z, z', z'') -{ 5 + 16*z + 48*z' }-> s91 :|: s91 >= 0, s91 <= 32 * z, z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 3 + 16*@xs + 48*z' }-> s92 :|: s92 >= 0, s92 <= 32 * @xs + 28, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 19 + 48*@ys + 16*z1 }-> s93 :|: s93 >= 0, s93 <= s84 + 32 * z1, s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + @y, s56 >= 0, s56 <= 2 * s55 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 6 + 16*z' + 48*z'' }-> 1 + @z + s94 :|: s94 >= 0, s94 <= 32 * z', z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 10 + 10*z }-> s79 :|: s79 >= 0, s79 <= inf, z >= 0 bitToInt(z) -{ 9 + 10*z }-> s80 :|: s80 >= 0, s80 <= inf', z >= 0 bitToInt'(z, z') -{ 3 + 10*z }-> s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 12 + 10*@xs }-> s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + s82, s73 >= 0, s73 <= 4 * (z' * @x) + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 26 + 11*z' }-> s101 :|: s101 >= 0, s101 <= 3 * z', z' >= 0, z >= 0 compare#1(z, z') -{ 25 + 11*z' }-> s102 :|: s102 >= 0, s102 <= 3 * z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 35 + 11*@ys }-> s104 :|: s103 >= 0, s103 <= 3 * @ys, s104 >= 0, s104 <= s103 + 3, z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 8 }-> s86 :|: s86 >= 0, s86 <= z + 3, s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 6 }-> s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 2 }-> s64 :|: s64 >= 0, s64 <= 2 * 0 + (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 12 }-> 1 + s87 + s67 :|: s87 >= 0, s87 <= inf2, s65 >= 0, s65 <= 2 * s50 + z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + z'', s50 >= 0, s50 <= 2 * z + z', s31 >= 0, s31 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> s61 :|: s61 >= 0, s61 <= z + 1, z >= 0, z' >= 0 leq(z, z') -{ 28 + 11*z' }-> s106 :|: s105 >= 0, s105 <= 3 * z', s106 >= 0, s106 <= 2, z' >= 0, z >= 0 minus(z, z') -{ 1 }-> s49 :|: s49 >= 0, s49 <= 2 * z + z', z >= 0, z' >= 0 mod(z, z') -{ 4 }-> s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 1, s78 >= 0, s78 <= 2 * z + s77, s62 >= 0, s62 <= z + 1, z >= 0, z' >= 0 mult(z, z') -{ 2 + 313*z + 32*z*z' + 96*z^2 + 3072*z^2*z' }-> s112 :|: s112 >= 0, s112 <= 32 * (z' * z) + z + 2, z' >= 0, z >= 0 mult#1(z, z') -{ 62 + 313*@xs + 32*@xs*z' + 96*@xs^2 + 3072*@xs^2*z' + 48*s113 + 16*z' }-> s114 :|: s113 >= 0, s113 <= 32 * (z' * @xs) + @xs + 2, s114 >= 0, s114 <= 1 + 0 + s113 + 32 * z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 61 + 313*@xs + 32*@xs*z' + 96*@xs^2 + 3072*@xs^2*z' + 48*s115 + 16*z' }-> s116 :|: s115 >= 0, s115 <= 32 * (z' * @xs) + @xs + 2, s116 >= 0, s116 <= 1 + 0 + s115 + 32 * z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 10 + 48*z + 16*z' }-> s111 :|: s111 >= 0, s111 <= 32 * z' + z, s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 8 + 16*z' + 48*z'' }-> s100 :|: s100 >= 0, s100 <= 32 * z', z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 3 + 313*z + 32*z*z' + 96*z^2 + 3072*z^2*z' }-> mult(s117, z') :|: s117 >= 0, s117 <= 32 * (z' * z) + z + 2, z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> s20 :|: s20 >= 0, s20 <= 2 * z + z', z >= 0, z' >= 0 sub(z, z') -{ 45 + 20*z }-> s108 :|: s107 >= 0, s107 <= inf8, s108 >= 0, s108 <= s107, z' >= 0, z >= 0 sub(z, z') -{ 44 + 20*z }-> s110 :|: s109 >= 0, s109 <= inf9, s110 >= 0, s110 <= s109, z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 42 + 20*z }-> s95 :|: s95 >= 0, s95 <= inf4, z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 61 + 20*@xs }-> s96 :|: s96 >= 0, s96 <= inf5, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 60 + 20*z1 }-> s99 :|: s99 >= 0, s99 <= inf7, s88 >= 0, s88 <= inf3, s68 >= 0, s68 <= 2 * z'' + @y, s69 >= 0, s69 <= 2 * s68 + z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + @y, s60 >= 0, s60 <= 2 * s59 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 47 + 20*z' }-> s98 :|: s97 >= 0, s97 <= inf6, s98 >= 0, s98 <= s97 + @z + 1, z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 4 }-> 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= z' + @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 12 }-> s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + z'', s21 >= 0, s21 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 9 }-> s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0 sum#2(z, z') -{ 7 }-> s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 5 }-> s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 Function symbols to be analyzed: {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] #eq: runtime: O(1) [0], size: O(1) [2] #less: runtime: O(1) [1], size: O(1) [2] #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #div: runtime: O(1) [0], size: O(n^1) [1 + z] sum#3: runtime: O(1) [5], size: O(1) [7] sub'#4: runtime: O(1) [4], size: O(n^1) [1 + z + z'] #equal: runtime: O(1) [1], size: O(1) [2] minus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] div: runtime: O(1) [1], size: O(n^1) [1 + z] sum#2: runtime: O(1) [7], size: O(1) [7] compare#5: runtime: O(1) [4], size: O(1) [3] times: runtime: O(1) [1], size: O(n^2) [1 + 4*z*z'] bitToInt': runtime: O(n^1) [8 + 10*z], size: INF bitToInt'#1: runtime: O(n^1) [2 + 10*z], size: INF sum#1: runtime: O(1) [9], size: O(1) [7] compare#4: runtime: O(1) [6], size: O(n^1) [3 + z'] mod: runtime: O(1) [4], size: INF bitToInt: runtime: O(n^1) [10 + 10*z], size: INF sum: runtime: O(1) [12], size: O(1) [7] add'#2: runtime: O(n^1) [2 + 48*z + 16*z1], size: O(n^1) [28 + 32*z1] add'#1: runtime: O(n^1) [4 + 16*z + 48*z'], size: O(n^1) [32*z] add': runtime: O(n^1) [5 + 16*z + 48*z'], size: O(n^1) [32*z] add'#3: runtime: O(n^1) [6 + 16*z' + 48*z''], size: O(n^1) [z + 32*z'] compare#3: runtime: O(1) [8], size: O(n^1) [3 + z] diff: runtime: O(1) [12], size: INF sub'#2: runtime: O(n^1) [60 + 20*z1], size: INF sub'#1: runtime: O(n^1) [41 + 20*z], size: INF sub'#3: runtime: O(n^1) [47 + 20*z'], size: INF add: runtime: O(n^1) [7 + 16*z + 48*z'], size: O(n^1) [32*z] compare#1: runtime: O(n^1) [25 + 11*z'], size: O(n^1) [3*z'] compare#2: runtime: O(n^1) [24 + 11*z], size: O(n^1) [3*z] sub': runtime: O(n^1) [42 + 20*z], size: INF mult#3: runtime: O(n^1) [8 + 16*z' + 48*z''], size: O(n^1) [32*z' + z''] leq: runtime: O(n^1) [28 + 11*z'], size: O(1) [2] compare: runtime: O(n^1) [26 + 11*z'], size: O(n^1) [3*z'] sub: runtime: O(n^1) [45 + 20*z], size: INF mult#2: runtime: O(n^1) [10 + 48*z + 16*z'], size: O(n^1) [z + 32*z'] mult#1: runtime: O(n^3) [1 + 313*z + 32*z*z' + 96*z^2 + 3072*z^2*z'], size: O(n^2) [2 + z + 32*z*z'] mult: runtime: O(n^3) [2 + 313*z + 32*z*z' + 96*z^2 + 3072*z^2*z'], size: O(n^2) [2 + z + 32*z*z'] ---------------------------------------- (327) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (328) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + z', s26 >= 0, s26 <= s25 + 2, s27 >= 0, s27 <= s26 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + z', s29 >= 0, s29 <= s28 + 2, s30 >= 0, s30 <= s29 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + s32 :|: s32 >= 0, s32 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #equal(z, z') -{ 1 }-> s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s51 :|: s51 >= 0, s51 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + s33 :|: s33 >= 0, s33 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + s34 :|: s34 >= 0, s34 <= s3 + 1, s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + s35 :|: s35 >= 0, s35 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s54 :|: s52 >= 0, s52 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s53 >= 0, s53 <= 2 * (1 + z') + s52, s54 >= 0, s54 <= 2 * (1 + z') + s53, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> s24 :|: s24 >= 0, s24 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 7 + 16*z + 48*z' }-> s89 :|: s89 >= 0, s89 <= 32 * z, z' >= 0, z >= 0 add(z, z') -{ 6 + 16*z + 48*z' }-> s90 :|: s90 >= 0, s90 <= 32 * z, z' >= 0, z >= 0 add'(z, z', z'') -{ 5 + 16*z + 48*z' }-> s91 :|: s91 >= 0, s91 <= 32 * z, z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 3 + 16*@xs + 48*z' }-> s92 :|: s92 >= 0, s92 <= 32 * @xs + 28, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 19 + 48*@ys + 16*z1 }-> s93 :|: s93 >= 0, s93 <= s84 + 32 * z1, s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + @y, s56 >= 0, s56 <= 2 * s55 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 6 + 16*z' + 48*z'' }-> 1 + @z + s94 :|: s94 >= 0, s94 <= 32 * z', z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 10 + 10*z }-> s79 :|: s79 >= 0, s79 <= inf, z >= 0 bitToInt(z) -{ 9 + 10*z }-> s80 :|: s80 >= 0, s80 <= inf', z >= 0 bitToInt'(z, z') -{ 3 + 10*z }-> s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 12 + 10*@xs }-> s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + s82, s73 >= 0, s73 <= 4 * (z' * @x) + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 26 + 11*z' }-> s101 :|: s101 >= 0, s101 <= 3 * z', z' >= 0, z >= 0 compare#1(z, z') -{ 25 + 11*z' }-> s102 :|: s102 >= 0, s102 <= 3 * z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 35 + 11*@ys }-> s104 :|: s103 >= 0, s103 <= 3 * @ys, s104 >= 0, s104 <= s103 + 3, z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 8 }-> s86 :|: s86 >= 0, s86 <= z + 3, s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 6 }-> s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 2 }-> s64 :|: s64 >= 0, s64 <= 2 * 0 + (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 12 }-> 1 + s87 + s67 :|: s87 >= 0, s87 <= inf2, s65 >= 0, s65 <= 2 * s50 + z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + z'', s50 >= 0, s50 <= 2 * z + z', s31 >= 0, s31 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> s61 :|: s61 >= 0, s61 <= z + 1, z >= 0, z' >= 0 leq(z, z') -{ 28 + 11*z' }-> s106 :|: s105 >= 0, s105 <= 3 * z', s106 >= 0, s106 <= 2, z' >= 0, z >= 0 minus(z, z') -{ 1 }-> s49 :|: s49 >= 0, s49 <= 2 * z + z', z >= 0, z' >= 0 mod(z, z') -{ 4 }-> s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 1, s78 >= 0, s78 <= 2 * z + s77, s62 >= 0, s62 <= z + 1, z >= 0, z' >= 0 mult(z, z') -{ 2 + 313*z + 32*z*z' + 96*z^2 + 3072*z^2*z' }-> s112 :|: s112 >= 0, s112 <= 32 * (z' * z) + z + 2, z' >= 0, z >= 0 mult#1(z, z') -{ 62 + 313*@xs + 32*@xs*z' + 96*@xs^2 + 3072*@xs^2*z' + 48*s113 + 16*z' }-> s114 :|: s113 >= 0, s113 <= 32 * (z' * @xs) + @xs + 2, s114 >= 0, s114 <= 1 + 0 + s113 + 32 * z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 61 + 313*@xs + 32*@xs*z' + 96*@xs^2 + 3072*@xs^2*z' + 48*s115 + 16*z' }-> s116 :|: s115 >= 0, s115 <= 32 * (z' * @xs) + @xs + 2, s116 >= 0, s116 <= 1 + 0 + s115 + 32 * z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 10 + 48*z + 16*z' }-> s111 :|: s111 >= 0, s111 <= 32 * z' + z, s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 8 + 16*z' + 48*z'' }-> s100 :|: s100 >= 0, s100 <= 32 * z', z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 5 + 313*s117 + 32*s117*z' + 96*s117^2 + 3072*s117^2*z' + 313*z + 32*z*z' + 96*z^2 + 3072*z^2*z' }-> s118 :|: s118 >= 0, s118 <= s117 + 32 * (z' * s117) + 2, s117 >= 0, s117 <= 32 * (z' * z) + z + 2, z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> s20 :|: s20 >= 0, s20 <= 2 * z + z', z >= 0, z' >= 0 sub(z, z') -{ 45 + 20*z }-> s108 :|: s107 >= 0, s107 <= inf8, s108 >= 0, s108 <= s107, z' >= 0, z >= 0 sub(z, z') -{ 44 + 20*z }-> s110 :|: s109 >= 0, s109 <= inf9, s110 >= 0, s110 <= s109, z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 42 + 20*z }-> s95 :|: s95 >= 0, s95 <= inf4, z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 61 + 20*@xs }-> s96 :|: s96 >= 0, s96 <= inf5, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 60 + 20*z1 }-> s99 :|: s99 >= 0, s99 <= inf7, s88 >= 0, s88 <= inf3, s68 >= 0, s68 <= 2 * z'' + @y, s69 >= 0, s69 <= 2 * s68 + z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + @y, s60 >= 0, s60 <= 2 * s59 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 47 + 20*z' }-> s98 :|: s97 >= 0, s97 <= inf6, s98 >= 0, s98 <= s97 + @z + 1, z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 4 }-> 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= z' + @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 12 }-> s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + z'', s21 >= 0, s21 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 9 }-> s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0 sum#2(z, z') -{ 7 }-> s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 5 }-> s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 Function symbols to be analyzed: {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] #eq: runtime: O(1) [0], size: O(1) [2] #less: runtime: O(1) [1], size: O(1) [2] #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #div: runtime: O(1) [0], size: O(n^1) [1 + z] sum#3: runtime: O(1) [5], size: O(1) [7] sub'#4: runtime: O(1) [4], size: O(n^1) [1 + z + z'] #equal: runtime: O(1) [1], size: O(1) [2] minus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] div: runtime: O(1) [1], size: O(n^1) [1 + z] sum#2: runtime: O(1) [7], size: O(1) [7] compare#5: runtime: O(1) [4], size: O(1) [3] times: runtime: O(1) [1], size: O(n^2) [1 + 4*z*z'] bitToInt': runtime: O(n^1) [8 + 10*z], size: INF bitToInt'#1: runtime: O(n^1) [2 + 10*z], size: INF sum#1: runtime: O(1) [9], size: O(1) [7] compare#4: runtime: O(1) [6], size: O(n^1) [3 + z'] mod: runtime: O(1) [4], size: INF bitToInt: runtime: O(n^1) [10 + 10*z], size: INF sum: runtime: O(1) [12], size: O(1) [7] add'#2: runtime: O(n^1) [2 + 48*z + 16*z1], size: O(n^1) [28 + 32*z1] add'#1: runtime: O(n^1) [4 + 16*z + 48*z'], size: O(n^1) [32*z] add': runtime: O(n^1) [5 + 16*z + 48*z'], size: O(n^1) [32*z] add'#3: runtime: O(n^1) [6 + 16*z' + 48*z''], size: O(n^1) [z + 32*z'] compare#3: runtime: O(1) [8], size: O(n^1) [3 + z] diff: runtime: O(1) [12], size: INF sub'#2: runtime: O(n^1) [60 + 20*z1], size: INF sub'#1: runtime: O(n^1) [41 + 20*z], size: INF sub'#3: runtime: O(n^1) [47 + 20*z'], size: INF add: runtime: O(n^1) [7 + 16*z + 48*z'], size: O(n^1) [32*z] compare#1: runtime: O(n^1) [25 + 11*z'], size: O(n^1) [3*z'] compare#2: runtime: O(n^1) [24 + 11*z], size: O(n^1) [3*z] sub': runtime: O(n^1) [42 + 20*z], size: INF mult#3: runtime: O(n^1) [8 + 16*z' + 48*z''], size: O(n^1) [32*z' + z''] leq: runtime: O(n^1) [28 + 11*z'], size: O(1) [2] compare: runtime: O(n^1) [26 + 11*z'], size: O(n^1) [3*z'] sub: runtime: O(n^1) [45 + 20*z], size: INF mult#2: runtime: O(n^1) [10 + 48*z + 16*z'], size: O(n^1) [z + 32*z'] mult#1: runtime: O(n^3) [1 + 313*z + 32*z*z' + 96*z^2 + 3072*z^2*z'], size: O(n^2) [2 + z + 32*z*z'] mult: runtime: O(n^3) [2 + 313*z + 32*z*z' + 96*z^2 + 3072*z^2*z'], size: O(n^2) [2 + z + 32*z*z'] ---------------------------------------- (329) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: mult3 after applying outer abstraction to obtain an ITS, resulting in: INF with polynomial bound: ? ---------------------------------------- (330) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + z', s26 >= 0, s26 <= s25 + 2, s27 >= 0, s27 <= s26 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + z', s29 >= 0, s29 <= s28 + 2, s30 >= 0, s30 <= s29 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + s32 :|: s32 >= 0, s32 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #equal(z, z') -{ 1 }-> s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s51 :|: s51 >= 0, s51 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + s33 :|: s33 >= 0, s33 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + s34 :|: s34 >= 0, s34 <= s3 + 1, s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + s35 :|: s35 >= 0, s35 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s54 :|: s52 >= 0, s52 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s53 >= 0, s53 <= 2 * (1 + z') + s52, s54 >= 0, s54 <= 2 * (1 + z') + s53, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> s24 :|: s24 >= 0, s24 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 7 + 16*z + 48*z' }-> s89 :|: s89 >= 0, s89 <= 32 * z, z' >= 0, z >= 0 add(z, z') -{ 6 + 16*z + 48*z' }-> s90 :|: s90 >= 0, s90 <= 32 * z, z' >= 0, z >= 0 add'(z, z', z'') -{ 5 + 16*z + 48*z' }-> s91 :|: s91 >= 0, s91 <= 32 * z, z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 3 + 16*@xs + 48*z' }-> s92 :|: s92 >= 0, s92 <= 32 * @xs + 28, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 19 + 48*@ys + 16*z1 }-> s93 :|: s93 >= 0, s93 <= s84 + 32 * z1, s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + @y, s56 >= 0, s56 <= 2 * s55 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 6 + 16*z' + 48*z'' }-> 1 + @z + s94 :|: s94 >= 0, s94 <= 32 * z', z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 10 + 10*z }-> s79 :|: s79 >= 0, s79 <= inf, z >= 0 bitToInt(z) -{ 9 + 10*z }-> s80 :|: s80 >= 0, s80 <= inf', z >= 0 bitToInt'(z, z') -{ 3 + 10*z }-> s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 12 + 10*@xs }-> s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + s82, s73 >= 0, s73 <= 4 * (z' * @x) + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 26 + 11*z' }-> s101 :|: s101 >= 0, s101 <= 3 * z', z' >= 0, z >= 0 compare#1(z, z') -{ 25 + 11*z' }-> s102 :|: s102 >= 0, s102 <= 3 * z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 35 + 11*@ys }-> s104 :|: s103 >= 0, s103 <= 3 * @ys, s104 >= 0, s104 <= s103 + 3, z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 8 }-> s86 :|: s86 >= 0, s86 <= z + 3, s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 6 }-> s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 2 }-> s64 :|: s64 >= 0, s64 <= 2 * 0 + (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 12 }-> 1 + s87 + s67 :|: s87 >= 0, s87 <= inf2, s65 >= 0, s65 <= 2 * s50 + z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + z'', s50 >= 0, s50 <= 2 * z + z', s31 >= 0, s31 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> s61 :|: s61 >= 0, s61 <= z + 1, z >= 0, z' >= 0 leq(z, z') -{ 28 + 11*z' }-> s106 :|: s105 >= 0, s105 <= 3 * z', s106 >= 0, s106 <= 2, z' >= 0, z >= 0 minus(z, z') -{ 1 }-> s49 :|: s49 >= 0, s49 <= 2 * z + z', z >= 0, z' >= 0 mod(z, z') -{ 4 }-> s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 1, s78 >= 0, s78 <= 2 * z + s77, s62 >= 0, s62 <= z + 1, z >= 0, z' >= 0 mult(z, z') -{ 2 + 313*z + 32*z*z' + 96*z^2 + 3072*z^2*z' }-> s112 :|: s112 >= 0, s112 <= 32 * (z' * z) + z + 2, z' >= 0, z >= 0 mult#1(z, z') -{ 62 + 313*@xs + 32*@xs*z' + 96*@xs^2 + 3072*@xs^2*z' + 48*s113 + 16*z' }-> s114 :|: s113 >= 0, s113 <= 32 * (z' * @xs) + @xs + 2, s114 >= 0, s114 <= 1 + 0 + s113 + 32 * z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 61 + 313*@xs + 32*@xs*z' + 96*@xs^2 + 3072*@xs^2*z' + 48*s115 + 16*z' }-> s116 :|: s115 >= 0, s115 <= 32 * (z' * @xs) + @xs + 2, s116 >= 0, s116 <= 1 + 0 + s115 + 32 * z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 10 + 48*z + 16*z' }-> s111 :|: s111 >= 0, s111 <= 32 * z' + z, s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 8 + 16*z' + 48*z'' }-> s100 :|: s100 >= 0, s100 <= 32 * z', z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 5 + 313*s117 + 32*s117*z' + 96*s117^2 + 3072*s117^2*z' + 313*z + 32*z*z' + 96*z^2 + 3072*z^2*z' }-> s118 :|: s118 >= 0, s118 <= s117 + 32 * (z' * s117) + 2, s117 >= 0, s117 <= 32 * (z' * z) + z + 2, z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> s20 :|: s20 >= 0, s20 <= 2 * z + z', z >= 0, z' >= 0 sub(z, z') -{ 45 + 20*z }-> s108 :|: s107 >= 0, s107 <= inf8, s108 >= 0, s108 <= s107, z' >= 0, z >= 0 sub(z, z') -{ 44 + 20*z }-> s110 :|: s109 >= 0, s109 <= inf9, s110 >= 0, s110 <= s109, z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 42 + 20*z }-> s95 :|: s95 >= 0, s95 <= inf4, z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 61 + 20*@xs }-> s96 :|: s96 >= 0, s96 <= inf5, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 60 + 20*z1 }-> s99 :|: s99 >= 0, s99 <= inf7, s88 >= 0, s88 <= inf3, s68 >= 0, s68 <= 2 * z'' + @y, s69 >= 0, s69 <= 2 * s68 + z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + @y, s60 >= 0, s60 <= 2 * s59 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 47 + 20*z' }-> s98 :|: s97 >= 0, s97 <= inf6, s98 >= 0, s98 <= s97 + @z + 1, z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 4 }-> 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= z' + @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 12 }-> s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + z'', s21 >= 0, s21 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 9 }-> s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0 sum#2(z, z') -{ 7 }-> s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 5 }-> s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 Function symbols to be analyzed: {mult3} Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] #eq: runtime: O(1) [0], size: O(1) [2] #less: runtime: O(1) [1], size: O(1) [2] #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #div: runtime: O(1) [0], size: O(n^1) [1 + z] sum#3: runtime: O(1) [5], size: O(1) [7] sub'#4: runtime: O(1) [4], size: O(n^1) [1 + z + z'] #equal: runtime: O(1) [1], size: O(1) [2] minus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] div: runtime: O(1) [1], size: O(n^1) [1 + z] sum#2: runtime: O(1) [7], size: O(1) [7] compare#5: runtime: O(1) [4], size: O(1) [3] times: runtime: O(1) [1], size: O(n^2) [1 + 4*z*z'] bitToInt': runtime: O(n^1) [8 + 10*z], size: INF bitToInt'#1: runtime: O(n^1) [2 + 10*z], size: INF sum#1: runtime: O(1) [9], size: O(1) [7] compare#4: runtime: O(1) [6], size: O(n^1) [3 + z'] mod: runtime: O(1) [4], size: INF bitToInt: runtime: O(n^1) [10 + 10*z], size: INF sum: runtime: O(1) [12], size: O(1) [7] add'#2: runtime: O(n^1) [2 + 48*z + 16*z1], size: O(n^1) [28 + 32*z1] add'#1: runtime: O(n^1) [4 + 16*z + 48*z'], size: O(n^1) [32*z] add': runtime: O(n^1) [5 + 16*z + 48*z'], size: O(n^1) [32*z] add'#3: runtime: O(n^1) [6 + 16*z' + 48*z''], size: O(n^1) [z + 32*z'] compare#3: runtime: O(1) [8], size: O(n^1) [3 + z] diff: runtime: O(1) [12], size: INF sub'#2: runtime: O(n^1) [60 + 20*z1], size: INF sub'#1: runtime: O(n^1) [41 + 20*z], size: INF sub'#3: runtime: O(n^1) [47 + 20*z'], size: INF add: runtime: O(n^1) [7 + 16*z + 48*z'], size: O(n^1) [32*z] compare#1: runtime: O(n^1) [25 + 11*z'], size: O(n^1) [3*z'] compare#2: runtime: O(n^1) [24 + 11*z], size: O(n^1) [3*z] sub': runtime: O(n^1) [42 + 20*z], size: INF mult#3: runtime: O(n^1) [8 + 16*z' + 48*z''], size: O(n^1) [32*z' + z''] leq: runtime: O(n^1) [28 + 11*z'], size: O(1) [2] compare: runtime: O(n^1) [26 + 11*z'], size: O(n^1) [3*z'] sub: runtime: O(n^1) [45 + 20*z], size: INF mult#2: runtime: O(n^1) [10 + 48*z + 16*z'], size: O(n^1) [z + 32*z'] mult#1: runtime: O(n^3) [1 + 313*z + 32*z*z' + 96*z^2 + 3072*z^2*z'], size: O(n^2) [2 + z + 32*z*z'] mult: runtime: O(n^3) [2 + 313*z + 32*z*z' + 96*z^2 + 3072*z^2*z'], size: O(n^2) [2 + z + 32*z*z'] mult3: runtime: ?, size: INF ---------------------------------------- (331) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using KoAT for: mult3 after applying outer abstraction to obtain an ITS, resulting in: O(n^5) with polynomial bound: 1015 + 1010*z + 34656*z*z' + 394240*z*z'^2 + 192*z^2 + 12288*z^2*z' + 294912*z^2*z'^2 + 3145728*z^2*z'^3 + 12352*z' ---------------------------------------- (332) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + z', s26 >= 0, s26 <= s25 + 2, s27 >= 0, s27 <= s26 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + z', s29 >= 0, s29 <= s28 + 2, s30 >= 0, s30 <= s29 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ckgt(z) -{ 0 }-> 2 :|: z = 2 #ckgt(z) -{ 0 }-> 1 :|: z = 1 #ckgt(z) -{ 0 }-> 1 :|: z = 3 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 #cklt(z) -{ 0 }-> 2 :|: z = 3 #cklt(z) -{ 0 }-> 1 :|: z = 1 #cklt(z) -{ 0 }-> 1 :|: z = 2 #cklt(z) -{ 0 }-> 0 :|: z >= 0 #compare(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #div(z, z') -{ 0 }-> 1 + s32 :|: s32 >= 0, s32 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #equal(z, z') -{ 1 }-> s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0 #greater(z, z') -{ 1 }-> s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #less(z, z') -{ 1 }-> s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0 #less(z, z') -{ 1 }-> s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s51 :|: s51 >= 0, s51 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natdiv(z, z') -{ 0 }-> 1 + s33 :|: s33 >= 0, s33 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 #natdiv(z, z') -{ 0 }-> 1 + s34 :|: s34 >= 0, s34 <= s3 + 1, s3 >= 0, s3 <= z - 2, z - 2 >= 0, z' - 2 >= 0 #natdiv(z, z') -{ 0 }-> 1 + s35 :|: s35 >= 0, s35 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s54 :|: s52 >= 0, s52 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s53 >= 0, s53 <= 2 * (1 + z') + s52, s54 >= 0, s54 <= 2 * (1 + z') + s53, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natsub(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= z - 1, z - 1 >= 0, z' - 1 >= 0 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #sub(z, z') -{ 0 }-> s24 :|: s24 >= 0, s24 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 add(z, z') -{ 7 + 16*z + 48*z' }-> s89 :|: s89 >= 0, s89 <= 32 * z, z' >= 0, z >= 0 add(z, z') -{ 6 + 16*z + 48*z' }-> s90 :|: s90 >= 0, s90 <= 32 * z, z' >= 0, z >= 0 add'(z, z', z'') -{ 5 + 16*z + 48*z' }-> s91 :|: s91 >= 0, s91 <= 32 * z, z' >= 0, z >= 0, z'' >= 0 add'#1(z, z', z'') -{ 3 + 16*@xs + 48*z' }-> s92 :|: s92 >= 0, s92 <= 32 * @xs + 28, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 1 }-> 2 :|: z = 2, z' >= 0, z'' >= 0 add'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#2(z, z', z'', z1) -{ 19 + 48*@ys + 16*z1 }-> s93 :|: s93 >= 0, s93 <= s84 + 32 * z1, s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + @y, s56 >= 0, s56 <= 2 * s55 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 1 }-> 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 add'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 add'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 add'#3(z, z', z'') -{ 6 + 16*z' + 48*z'' }-> 1 + @z + s94 :|: s94 >= 0, s94 <= 32 * z', z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 bitToInt(z) -{ 10 + 10*z }-> s79 :|: s79 >= 0, s79 <= inf, z >= 0 bitToInt(z) -{ 9 + 10*z }-> s80 :|: s80 >= 0, s80 <= inf', z >= 0 bitToInt'(z, z') -{ 3 + 10*z }-> s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0 bitToInt'#1(z, z') -{ 12 + 10*@xs }-> s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + s82, s73 >= 0, s73 <= 4 * (z' * @x) + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 bitToInt'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 bitToInt'#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 bitToInt'#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare(z, z') -{ 26 + 11*z' }-> s101 :|: s101 >= 0, s101 <= 3 * z', z' >= 0, z >= 0 compare#1(z, z') -{ 25 + 11*z' }-> s102 :|: s102 >= 0, s102 <= 3 * z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 compare#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 compare#1(z, z') -{ 2 }-> 0 :|: z = 2, z' >= 0, 0 = 0 compare#1(z, z') -{ 1 }-> 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0 compare#2(z, z', z'') -{ 35 + 11*@ys }-> s104 :|: s103 >= 0, s103 <= 3 * @ys, s104 >= 0, s104 <= s103 + 3, z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 compare#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#2(z, z', z'') -{ 2 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0 compare#2(z, z', z'') -{ 1 }-> 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0 compare#3(z, z', z'') -{ 8 }-> s86 :|: s86 >= 0, s86 <= z + 3, s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0 compare#4(z, z', z'', z1) -{ 6 }-> s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 1 }-> z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0 compare#4(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 compare#5(z, z', z'') -{ 4 }-> s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0 compare#5(z, z', z'') -{ 2 }-> s64 :|: s64 >= 0, s64 <= 2 * 0 + (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0 compare#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 compare#6(z) -{ 0 }-> 0 :|: z >= 0 compare#6(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 compare#6(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 compare#6(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 compare#6(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x compare#6(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff(z, z', z'') -{ 12 }-> 1 + s87 + s67 :|: s87 >= 0, s87 <= inf2, s65 >= 0, s65 <= 2 * s50 + z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + z'', s50 >= 0, s50 <= 2 * z + z', s31 >= 0, s31 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 diff#1(z) -{ 0 }-> 0 :|: z >= 0 diff#1(z) -{ 2 }-> 0 :|: z = 1, 0 = 0 diff#1(z) -{ 1 }-> 0 :|: z = 1, v0 >= 0, 0 = v0 diff#1(z) -{ 1 }-> 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0 diff#1(z) -{ 2 }-> 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x diff#1(z) -{ 2 }-> 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x div(z, z') -{ 1 }-> s61 :|: s61 >= 0, s61 <= z + 1, z >= 0, z' >= 0 leq(z, z') -{ 28 + 11*z' }-> s106 :|: s105 >= 0, s105 <= 3 * z', s106 >= 0, s106 <= 2, z' >= 0, z >= 0 minus(z, z') -{ 1 }-> s49 :|: s49 >= 0, s49 <= 2 * z + z', z >= 0, z' >= 0 mod(z, z') -{ 4 }-> s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 1, s78 >= 0, s78 <= 2 * z + s77, s62 >= 0, s62 <= z + 1, z >= 0, z' >= 0 mult(z, z') -{ 2 + 313*z + 32*z*z' + 96*z^2 + 3072*z^2*z' }-> s112 :|: s112 >= 0, s112 <= 32 * (z' * z) + z + 2, z' >= 0, z >= 0 mult#1(z, z') -{ 62 + 313*@xs + 32*@xs*z' + 96*@xs^2 + 3072*@xs^2*z' + 48*s113 + 16*z' }-> s114 :|: s113 >= 0, s113 <= 32 * (z' * @xs) + @xs + 2, s114 >= 0, s114 <= 1 + 0 + s113 + 32 * z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 61 + 313*@xs + 32*@xs*z' + 96*@xs^2 + 3072*@xs^2*z' + 48*s115 + 16*z' }-> s116 :|: s115 >= 0, s115 <= 32 * (z' * @xs) + @xs + 2, s116 >= 0, s116 <= 1 + 0 + s115 + 32 * z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#2(z, z', z'') -{ 10 + 48*z + 16*z' }-> s111 :|: s111 >= 0, s111 <= 32 * z' + z, s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0 mult#3(z, z', z'') -{ 8 + 16*z' + 48*z'' }-> s100 :|: s100 >= 0, s100 <= 32 * z', z = 2, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 1 }-> z'' :|: z = 1, z' >= 0, z'' >= 0 mult#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult3(z, z', z'') -{ 5 + 313*s117 + 32*s117*z' + 96*s117^2 + 3072*s117^2*z' + 313*z + 32*z*z' + 96*z^2 + 3072*z^2*z' }-> s118 :|: s118 >= 0, s118 <= s117 + 32 * (z' * s117) + 2, s117 >= 0, s117 <= 32 * (z' * z) + z + 2, z'' >= 0, z' >= 0, z >= 0 plus(z, z') -{ 1 }-> s20 :|: s20 >= 0, s20 <= 2 * z + z', z >= 0, z' >= 0 sub(z, z') -{ 45 + 20*z }-> s108 :|: s107 >= 0, s107 <= inf8, s108 >= 0, s108 <= s107, z' >= 0, z >= 0 sub(z, z') -{ 44 + 20*z }-> s110 :|: s109 >= 0, s109 <= inf9, s110 >= 0, s110 <= s109, z' >= 0, z >= 0 sub#1(z) -{ 1 }-> @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0 sub'(z, z', z'') -{ 42 + 20*z }-> s95 :|: s95 >= 0, s95 <= inf4, z' >= 0, z >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 61 + 20*@xs }-> s96 :|: s96 >= 0, s96 <= inf5, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#1(z, z', z'') -{ 1 }-> 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0 sub'#2(z, z', z'', z1) -{ 60 + 20*z1 }-> s99 :|: s99 >= 0, s99 <= inf7, s88 >= 0, s88 <= inf3, s68 >= 0, s68 <= 2 * z'' + @y, s69 >= 0, s69 <= 2 * s68 + z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + @y, s60 >= 0, s60 <= 2 * s59 + z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0 sub'#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 sub'#2(z, z', z'', z1) -{ 1 }-> 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0 sub'#3(z, z', z'') -{ 47 + 20*z' }-> s98 :|: s97 >= 0, s97 <= inf6, s98 >= 0, s98 <= s97 + @z + 1, z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0 sub'#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#4(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sub'#4(z, z') -{ 4 }-> 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= z' + @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0 sub'#5(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 sub'#5(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0 sub'#5(z, z', z'') -{ 2 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0 sub'#5(z, z', z'') -{ 1 }-> 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0 sum(z, z', z'') -{ 12 }-> s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + z'', s21 >= 0, s21 <= 2 * z + z', z >= 0, z' >= 0, z'' >= 0 sum#1(z) -{ 9 }-> s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0 sum#2(z, z') -{ 7 }-> s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0 sum#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#2(z, z') -{ 3 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0 sum#2(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0 sum#2(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 5 }-> s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0 sum#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 sum#3(z, z') -{ 2 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0 sum#3(z, z') -{ 1 }-> 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0' sum#3(z, z') -{ 3 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#3(z, z') -{ 3 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0 sum#3(z, z') -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0 sum#4(z) -{ 0 }-> 0 :|: z >= 0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 1 }-> 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0' sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 3 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x sum#4(z) -{ 2 }-> 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 2 }-> 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0 sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' sum#4(z) -{ 3 }-> 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x' times(z, z') -{ 1 }-> s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 Function symbols to be analyzed: Previous analysis results are: #ckgt: runtime: O(1) [0], size: O(1) [2] sub#1: runtime: O(1) [1], size: O(n^1) [z] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #natsub: runtime: O(1) [0], size: O(n^1) [z] compare#6: runtime: O(1) [2], size: O(1) [3] sum#4: runtime: O(1) [3], size: O(1) [7] #and: runtime: O(1) [0], size: O(1) [2] sub'#5: runtime: O(1) [2], size: O(n^1) [1 + z' + z''] #cklt: runtime: O(1) [0], size: O(1) [2] #compare: runtime: O(1) [0], size: O(1) [3] diff#1: runtime: O(1) [2], size: O(1) [3] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #greater: runtime: O(1) [1], size: O(1) [2] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] #eq: runtime: O(1) [0], size: O(1) [2] #less: runtime: O(1) [1], size: O(1) [2] #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #div: runtime: O(1) [0], size: O(n^1) [1 + z] sum#3: runtime: O(1) [5], size: O(1) [7] sub'#4: runtime: O(1) [4], size: O(n^1) [1 + z + z'] #equal: runtime: O(1) [1], size: O(1) [2] minus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] div: runtime: O(1) [1], size: O(n^1) [1 + z] sum#2: runtime: O(1) [7], size: O(1) [7] compare#5: runtime: O(1) [4], size: O(1) [3] times: runtime: O(1) [1], size: O(n^2) [1 + 4*z*z'] bitToInt': runtime: O(n^1) [8 + 10*z], size: INF bitToInt'#1: runtime: O(n^1) [2 + 10*z], size: INF sum#1: runtime: O(1) [9], size: O(1) [7] compare#4: runtime: O(1) [6], size: O(n^1) [3 + z'] mod: runtime: O(1) [4], size: INF bitToInt: runtime: O(n^1) [10 + 10*z], size: INF sum: runtime: O(1) [12], size: O(1) [7] add'#2: runtime: O(n^1) [2 + 48*z + 16*z1], size: O(n^1) [28 + 32*z1] add'#1: runtime: O(n^1) [4 + 16*z + 48*z'], size: O(n^1) [32*z] add': runtime: O(n^1) [5 + 16*z + 48*z'], size: O(n^1) [32*z] add'#3: runtime: O(n^1) [6 + 16*z' + 48*z''], size: O(n^1) [z + 32*z'] compare#3: runtime: O(1) [8], size: O(n^1) [3 + z] diff: runtime: O(1) [12], size: INF sub'#2: runtime: O(n^1) [60 + 20*z1], size: INF sub'#1: runtime: O(n^1) [41 + 20*z], size: INF sub'#3: runtime: O(n^1) [47 + 20*z'], size: INF add: runtime: O(n^1) [7 + 16*z + 48*z'], size: O(n^1) [32*z] compare#1: runtime: O(n^1) [25 + 11*z'], size: O(n^1) [3*z'] compare#2: runtime: O(n^1) [24 + 11*z], size: O(n^1) [3*z] sub': runtime: O(n^1) [42 + 20*z], size: INF mult#3: runtime: O(n^1) [8 + 16*z' + 48*z''], size: O(n^1) [32*z' + z''] leq: runtime: O(n^1) [28 + 11*z'], size: O(1) [2] compare: runtime: O(n^1) [26 + 11*z'], size: O(n^1) [3*z'] sub: runtime: O(n^1) [45 + 20*z], size: INF mult#2: runtime: O(n^1) [10 + 48*z + 16*z'], size: O(n^1) [z + 32*z'] mult#1: runtime: O(n^3) [1 + 313*z + 32*z*z' + 96*z^2 + 3072*z^2*z'], size: O(n^2) [2 + z + 32*z*z'] mult: runtime: O(n^3) [2 + 313*z + 32*z*z' + 96*z^2 + 3072*z^2*z'], size: O(n^2) [2 + z + 32*z*z'] mult3: runtime: O(n^5) [1015 + 1010*z + 34656*z*z' + 394240*z*z'^2 + 192*z^2 + 12288*z^2*z' + 294912*z^2*z'^2 + 3145728*z^2*z'^3 + 12352*z'], size: INF ---------------------------------------- (333) FinalProof (FINISHED) Computed overall runtime complexity ---------------------------------------- (334) BOUNDS(1, n^5) ---------------------------------------- (335) RelTrsToDecreasingLoopProblemProof (LOWER BOUND(ID)) Transformed a relative TRS into a decreasing-loop problem. ---------------------------------------- (336) Obligation: Analyzing the following TRS for decreasing loops: The Runtime Complexity (innermost) of the given CpxRelTRS could be proven to be BOUNDS(n^1, n^5). The TRS R consists of the following rules: #abs(#0) -> #0 #abs(#neg(@x)) -> #pos(@x) #abs(#pos(@x)) -> #pos(@x) #abs(#s(@x)) -> #pos(#s(@x)) #equal(@x, @y) -> #eq(@x, @y) #greater(@x, @y) -> #ckgt(#compare(@x, @y)) #less(@x, @y) -> #cklt(#compare(@x, @y)) *(@x, @y) -> #mult(@x, @y) +(@x, @y) -> #add(@x, @y) -(@x, @y) -> #sub(@x, @y) add(@b1, @b2) -> add'(@b1, @b2, #abs(#0)) add'(@b1, @b2, @r) -> add'#1(@b1, @b2, @r) add'#1(::(@x, @xs), @b2, @r) -> add'#2(@b2, @r, @x, @xs) add'#1(nil, @b2, @r) -> nil add'#2(::(@y, @ys), @r, @x, @xs) -> add'#3(sum(@x, @y, @r), @xs, @ys) add'#2(nil, @r, @x, @xs) -> nil add'#3(tuple#2(@z, @r'), @xs, @ys) -> ::(@z, add'(@xs, @ys, @r')) bitToInt(@b) -> bitToInt'(@b, #abs(#pos(#s(#0)))) bitToInt'(@b, @n) -> bitToInt'#1(@b, @n) bitToInt'#1(::(@x, @xs), @n) -> +(*(@x, @n), bitToInt'(@xs, *(@n, #pos(#s(#s(#0)))))) bitToInt'#1(nil, @n) -> #abs(#0) compare(@b1, @b2) -> compare#1(@b1, @b2) compare#1(::(@x, @xs), @b2) -> compare#2(@b2, @x, @xs) compare#1(nil, @b2) -> #abs(#0) compare#2(::(@y, @ys), @x, @xs) -> compare#3(compare(@xs, @ys), @x, @y) compare#2(nil, @x, @xs) -> #abs(#0) compare#3(@r, @x, @y) -> compare#4(#equal(@r, #0), @r, @x, @y) compare#4(#false, @r, @x, @y) -> @r compare#4(#true, @r, @x, @y) -> compare#5(#less(@x, @y), @x, @y) compare#5(#false, @x, @y) -> compare#6(#greater(@x, @y)) compare#5(#true, @x, @y) -> -(#0, #pos(#s(#0))) compare#6(#false) -> #abs(#0) compare#6(#true) -> #abs(#pos(#s(#0))) diff(@x, @y, @r) -> tuple#2(mod(+(+(@x, @y), @r), #pos(#s(#s(#0)))), diff#1(#less(-(-(@x, @y), @r), #0))) diff#1(#false) -> #abs(#0) diff#1(#true) -> #abs(#pos(#s(#0))) div(@x, @y) -> #div(@x, @y) leq(@b1, @b2) -> #less(compare(@b1, @b2), #pos(#s(#0))) mod(@x, @y) -> -(@x, *(@x, div(@x, @y))) mult(@b1, @b2) -> mult#1(@b1, @b2) mult#1(::(@x, @xs), @b2) -> mult#2(::(#abs(#0), mult(@xs, @b2)), @b2, @x) mult#1(nil, @b2) -> nil mult#2(@zs, @b2, @x) -> mult#3(#equal(@x, #pos(#s(#0))), @b2, @zs) mult#3(#false, @b2, @zs) -> @zs mult#3(#true, @b2, @zs) -> add(@b2, @zs) mult3(@b1, @b2, @b3) -> mult(mult(@b1, @b2), @b2) sub(@b1, @b2) -> sub#1(sub'(@b1, @b2, #abs(#0))) sub#1(tuple#2(@b, @_@1)) -> @b sub'(@b1, @b2, @r) -> sub'#1(@b1, @b2, @r) sub'#1(::(@x, @xs), @b2, @r) -> sub'#2(@b2, @r, @x, @xs) sub'#1(nil, @b2, @r) -> tuple#2(nil, @r) sub'#2(::(@y, @ys), @r, @x, @xs) -> sub'#3(diff(@x, @y, @r), @xs, @ys) sub'#2(nil, @r, @x, @xs) -> tuple#2(nil, @r) sub'#3(tuple#2(@z, @r'), @xs, @ys) -> sub'#4(sub'(@xs, @ys, @r'), @z) sub'#4(tuple#2(@zs, @s), @z) -> tuple#2(sub'#5(#equal(@s, #pos(#s(#0))), @z, @zs), @s) sub'#5(#false, @z, @zs) -> ::(@z, @zs) sub'#5(#true, @z, @zs) -> ::(#abs(#0), @zs) sum(@x, @y, @r) -> sum#1(+(+(@x, @y), @r)) sum#1(@s) -> sum#2(#equal(@s, #0), @s) sum#2(#false, @s) -> sum#3(#equal(@s, #pos(#s(#0))), @s) sum#2(#true, @s) -> tuple#2(#abs(#0), #abs(#0)) sum#3(#false, @s) -> sum#4(#equal(@s, #pos(#s(#s(#0))))) sum#3(#true, @s) -> tuple#2(#abs(#pos(#s(#0))), #abs(#0)) sum#4(#false) -> tuple#2(#abs(#pos(#s(#0))), #abs(#pos(#s(#0)))) sum#4(#true) -> tuple#2(#abs(#0), #abs(#pos(#s(#0)))) The (relative) TRS S consists of the following rules: #add(#0, @y) -> @y #add(#neg(#s(#0)), @y) -> #pred(@y) #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) #add(#pos(#s(#0)), @y) -> #succ(@y) #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) #and(#false, #false) -> #false #and(#false, #true) -> #false #and(#true, #false) -> #false #and(#true, #true) -> #true #ckgt(#EQ) -> #false #ckgt(#GT) -> #true #ckgt(#LT) -> #false #cklt(#EQ) -> #false #cklt(#GT) -> #false #cklt(#LT) -> #true #compare(#0, #0) -> #EQ #compare(#0, #neg(@y)) -> #GT #compare(#0, #pos(@y)) -> #LT #compare(#0, #s(@y)) -> #LT #compare(#neg(@x), #0) -> #LT #compare(#neg(@x), #neg(@y)) -> #compare(@y, @x) #compare(#neg(@x), #pos(@y)) -> #LT #compare(#pos(@x), #0) -> #GT #compare(#pos(@x), #neg(@y)) -> #GT #compare(#pos(@x), #pos(@y)) -> #compare(@x, @y) #compare(#s(@x), #0) -> #GT #compare(#s(@x), #s(@y)) -> #compare(@x, @y) #div(#0, #0) -> #divByZero #div(#0, #neg(@y)) -> #0 #div(#0, #pos(@y)) -> #0 #div(#neg(@x), #0) -> #divByZero #div(#neg(@x), #neg(@y)) -> #pos(#natdiv(@x, @y)) #div(#neg(@x), #pos(@y)) -> #neg(#natdiv(@x, @y)) #div(#pos(@x), #0) -> #divByZero #div(#pos(@x), #neg(@y)) -> #neg(#natdiv(@x, @y)) #div(#pos(@x), #pos(@y)) -> #pos(#natdiv(@x, @y)) #eq(#0, #0) -> #true #eq(#0, #neg(@y)) -> #false #eq(#0, #pos(@y)) -> #false #eq(#0, #s(@y)) -> #false #eq(#neg(@x), #0) -> #false #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y) #eq(#neg(@x), #pos(@y)) -> #false #eq(#pos(@x), #0) -> #false #eq(#pos(@x), #neg(@y)) -> #false #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y) #eq(#s(@x), #0) -> #false #eq(#s(@x), #s(@y)) -> #eq(@x, @y) #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) -> #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) #eq(::(@x_1, @x_2), nil) -> #false #eq(::(@x_1, @x_2), tuple#2(@y_1, @y_2)) -> #false #eq(nil, ::(@y_1, @y_2)) -> #false #eq(nil, nil) -> #true #eq(nil, tuple#2(@y_1, @y_2)) -> #false #eq(tuple#2(@x_1, @x_2), ::(@y_1, @y_2)) -> #false #eq(tuple#2(@x_1, @x_2), nil) -> #false #eq(tuple#2(@x_1, @x_2), tuple#2(@y_1, @y_2)) -> #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) #mult(#0, #0) -> #0 #mult(#0, #neg(@y)) -> #0 #mult(#0, #pos(@y)) -> #0 #mult(#neg(@x), #0) -> #0 #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) #mult(#pos(@x), #0) -> #0 #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) #natdiv(#0, #0) -> #divByZero #natdiv(#s(@x), #s(@y)) -> #s(#natdiv(#natsub(@x, @y), #s(@y))) #natmult(#0, @y) -> #0 #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) #natsub(@x, #0) -> @x #natsub(#s(@x), #s(@y)) -> #natsub(@x, @y) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) #sub(@x, #0) -> @x #sub(@x, #neg(@y)) -> #add(@x, #pos(@y)) #sub(@x, #pos(@y)) -> #add(@x, #neg(@y)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) Rewrite Strategy: INNERMOST ---------------------------------------- (337) DecreasingLoopProof (LOWER BOUND(ID)) The following loop(s) give(s) rise to the lower bound Omega(n^1): The rewrite sequence bitToInt'(::(@x1_0, @xs2_0), @n) ->^+ +(*(@x1_0, @n), bitToInt'(@xs2_0, *(@n, #pos(#s(#s(#0)))))) gives rise to a decreasing loop by considering the right hand sides subterm at position [1]. The pumping substitution is [@xs2_0 / ::(@x1_0, @xs2_0)]. The result substitution is [@n / *(@n, #pos(#s(#s(#0))))]. ---------------------------------------- (338) Complex Obligation (BEST) ---------------------------------------- (339) Obligation: Proved the lower bound n^1 for the following obligation: The Runtime Complexity (innermost) of the given CpxRelTRS could be proven to be BOUNDS(n^1, n^5). The TRS R consists of the following rules: #abs(#0) -> #0 #abs(#neg(@x)) -> #pos(@x) #abs(#pos(@x)) -> #pos(@x) #abs(#s(@x)) -> #pos(#s(@x)) #equal(@x, @y) -> #eq(@x, @y) #greater(@x, @y) -> #ckgt(#compare(@x, @y)) #less(@x, @y) -> #cklt(#compare(@x, @y)) *(@x, @y) -> #mult(@x, @y) +(@x, @y) -> #add(@x, @y) -(@x, @y) -> #sub(@x, @y) add(@b1, @b2) -> add'(@b1, @b2, #abs(#0)) add'(@b1, @b2, @r) -> add'#1(@b1, @b2, @r) add'#1(::(@x, @xs), @b2, @r) -> add'#2(@b2, @r, @x, @xs) add'#1(nil, @b2, @r) -> nil add'#2(::(@y, @ys), @r, @x, @xs) -> add'#3(sum(@x, @y, @r), @xs, @ys) add'#2(nil, @r, @x, @xs) -> nil add'#3(tuple#2(@z, @r'), @xs, @ys) -> ::(@z, add'(@xs, @ys, @r')) bitToInt(@b) -> bitToInt'(@b, #abs(#pos(#s(#0)))) bitToInt'(@b, @n) -> bitToInt'#1(@b, @n) bitToInt'#1(::(@x, @xs), @n) -> +(*(@x, @n), bitToInt'(@xs, *(@n, #pos(#s(#s(#0)))))) bitToInt'#1(nil, @n) -> #abs(#0) compare(@b1, @b2) -> compare#1(@b1, @b2) compare#1(::(@x, @xs), @b2) -> compare#2(@b2, @x, @xs) compare#1(nil, @b2) -> #abs(#0) compare#2(::(@y, @ys), @x, @xs) -> compare#3(compare(@xs, @ys), @x, @y) compare#2(nil, @x, @xs) -> #abs(#0) compare#3(@r, @x, @y) -> compare#4(#equal(@r, #0), @r, @x, @y) compare#4(#false, @r, @x, @y) -> @r compare#4(#true, @r, @x, @y) -> compare#5(#less(@x, @y), @x, @y) compare#5(#false, @x, @y) -> compare#6(#greater(@x, @y)) compare#5(#true, @x, @y) -> -(#0, #pos(#s(#0))) compare#6(#false) -> #abs(#0) compare#6(#true) -> #abs(#pos(#s(#0))) diff(@x, @y, @r) -> tuple#2(mod(+(+(@x, @y), @r), #pos(#s(#s(#0)))), diff#1(#less(-(-(@x, @y), @r), #0))) diff#1(#false) -> #abs(#0) diff#1(#true) -> #abs(#pos(#s(#0))) div(@x, @y) -> #div(@x, @y) leq(@b1, @b2) -> #less(compare(@b1, @b2), #pos(#s(#0))) mod(@x, @y) -> -(@x, *(@x, div(@x, @y))) mult(@b1, @b2) -> mult#1(@b1, @b2) mult#1(::(@x, @xs), @b2) -> mult#2(::(#abs(#0), mult(@xs, @b2)), @b2, @x) mult#1(nil, @b2) -> nil mult#2(@zs, @b2, @x) -> mult#3(#equal(@x, #pos(#s(#0))), @b2, @zs) mult#3(#false, @b2, @zs) -> @zs mult#3(#true, @b2, @zs) -> add(@b2, @zs) mult3(@b1, @b2, @b3) -> mult(mult(@b1, @b2), @b2) sub(@b1, @b2) -> sub#1(sub'(@b1, @b2, #abs(#0))) sub#1(tuple#2(@b, @_@1)) -> @b sub'(@b1, @b2, @r) -> sub'#1(@b1, @b2, @r) sub'#1(::(@x, @xs), @b2, @r) -> sub'#2(@b2, @r, @x, @xs) sub'#1(nil, @b2, @r) -> tuple#2(nil, @r) sub'#2(::(@y, @ys), @r, @x, @xs) -> sub'#3(diff(@x, @y, @r), @xs, @ys) sub'#2(nil, @r, @x, @xs) -> tuple#2(nil, @r) sub'#3(tuple#2(@z, @r'), @xs, @ys) -> sub'#4(sub'(@xs, @ys, @r'), @z) sub'#4(tuple#2(@zs, @s), @z) -> tuple#2(sub'#5(#equal(@s, #pos(#s(#0))), @z, @zs), @s) sub'#5(#false, @z, @zs) -> ::(@z, @zs) sub'#5(#true, @z, @zs) -> ::(#abs(#0), @zs) sum(@x, @y, @r) -> sum#1(+(+(@x, @y), @r)) sum#1(@s) -> sum#2(#equal(@s, #0), @s) sum#2(#false, @s) -> sum#3(#equal(@s, #pos(#s(#0))), @s) sum#2(#true, @s) -> tuple#2(#abs(#0), #abs(#0)) sum#3(#false, @s) -> sum#4(#equal(@s, #pos(#s(#s(#0))))) sum#3(#true, @s) -> tuple#2(#abs(#pos(#s(#0))), #abs(#0)) sum#4(#false) -> tuple#2(#abs(#pos(#s(#0))), #abs(#pos(#s(#0)))) sum#4(#true) -> tuple#2(#abs(#0), #abs(#pos(#s(#0)))) The (relative) TRS S consists of the following rules: #add(#0, @y) -> @y #add(#neg(#s(#0)), @y) -> #pred(@y) #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) #add(#pos(#s(#0)), @y) -> #succ(@y) #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) #and(#false, #false) -> #false #and(#false, #true) -> #false #and(#true, #false) -> #false #and(#true, #true) -> #true #ckgt(#EQ) -> #false #ckgt(#GT) -> #true #ckgt(#LT) -> #false #cklt(#EQ) -> #false #cklt(#GT) -> #false #cklt(#LT) -> #true #compare(#0, #0) -> #EQ #compare(#0, #neg(@y)) -> #GT #compare(#0, #pos(@y)) -> #LT #compare(#0, #s(@y)) -> #LT #compare(#neg(@x), #0) -> #LT #compare(#neg(@x), #neg(@y)) -> #compare(@y, @x) #compare(#neg(@x), #pos(@y)) -> #LT #compare(#pos(@x), #0) -> #GT #compare(#pos(@x), #neg(@y)) -> #GT #compare(#pos(@x), #pos(@y)) -> #compare(@x, @y) #compare(#s(@x), #0) -> #GT #compare(#s(@x), #s(@y)) -> #compare(@x, @y) #div(#0, #0) -> #divByZero #div(#0, #neg(@y)) -> #0 #div(#0, #pos(@y)) -> #0 #div(#neg(@x), #0) -> #divByZero #div(#neg(@x), #neg(@y)) -> #pos(#natdiv(@x, @y)) #div(#neg(@x), #pos(@y)) -> #neg(#natdiv(@x, @y)) #div(#pos(@x), #0) -> #divByZero #div(#pos(@x), #neg(@y)) -> #neg(#natdiv(@x, @y)) #div(#pos(@x), #pos(@y)) -> #pos(#natdiv(@x, @y)) #eq(#0, #0) -> #true #eq(#0, #neg(@y)) -> #false #eq(#0, #pos(@y)) -> #false #eq(#0, #s(@y)) -> #false #eq(#neg(@x), #0) -> #false #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y) #eq(#neg(@x), #pos(@y)) -> #false #eq(#pos(@x), #0) -> #false #eq(#pos(@x), #neg(@y)) -> #false #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y) #eq(#s(@x), #0) -> #false #eq(#s(@x), #s(@y)) -> #eq(@x, @y) #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) -> #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) #eq(::(@x_1, @x_2), nil) -> #false #eq(::(@x_1, @x_2), tuple#2(@y_1, @y_2)) -> #false #eq(nil, ::(@y_1, @y_2)) -> #false #eq(nil, nil) -> #true #eq(nil, tuple#2(@y_1, @y_2)) -> #false #eq(tuple#2(@x_1, @x_2), ::(@y_1, @y_2)) -> #false #eq(tuple#2(@x_1, @x_2), nil) -> #false #eq(tuple#2(@x_1, @x_2), tuple#2(@y_1, @y_2)) -> #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) #mult(#0, #0) -> #0 #mult(#0, #neg(@y)) -> #0 #mult(#0, #pos(@y)) -> #0 #mult(#neg(@x), #0) -> #0 #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) #mult(#pos(@x), #0) -> #0 #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) #natdiv(#0, #0) -> #divByZero #natdiv(#s(@x), #s(@y)) -> #s(#natdiv(#natsub(@x, @y), #s(@y))) #natmult(#0, @y) -> #0 #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) #natsub(@x, #0) -> @x #natsub(#s(@x), #s(@y)) -> #natsub(@x, @y) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) #sub(@x, #0) -> @x #sub(@x, #neg(@y)) -> #add(@x, #pos(@y)) #sub(@x, #pos(@y)) -> #add(@x, #neg(@y)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) Rewrite Strategy: INNERMOST ---------------------------------------- (340) LowerBoundPropagationProof (FINISHED) Propagated lower bound. ---------------------------------------- (341) BOUNDS(n^1, INF) ---------------------------------------- (342) Obligation: Analyzing the following TRS for decreasing loops: The Runtime Complexity (innermost) of the given CpxRelTRS could be proven to be BOUNDS(n^1, n^5). The TRS R consists of the following rules: #abs(#0) -> #0 #abs(#neg(@x)) -> #pos(@x) #abs(#pos(@x)) -> #pos(@x) #abs(#s(@x)) -> #pos(#s(@x)) #equal(@x, @y) -> #eq(@x, @y) #greater(@x, @y) -> #ckgt(#compare(@x, @y)) #less(@x, @y) -> #cklt(#compare(@x, @y)) *(@x, @y) -> #mult(@x, @y) +(@x, @y) -> #add(@x, @y) -(@x, @y) -> #sub(@x, @y) add(@b1, @b2) -> add'(@b1, @b2, #abs(#0)) add'(@b1, @b2, @r) -> add'#1(@b1, @b2, @r) add'#1(::(@x, @xs), @b2, @r) -> add'#2(@b2, @r, @x, @xs) add'#1(nil, @b2, @r) -> nil add'#2(::(@y, @ys), @r, @x, @xs) -> add'#3(sum(@x, @y, @r), @xs, @ys) add'#2(nil, @r, @x, @xs) -> nil add'#3(tuple#2(@z, @r'), @xs, @ys) -> ::(@z, add'(@xs, @ys, @r')) bitToInt(@b) -> bitToInt'(@b, #abs(#pos(#s(#0)))) bitToInt'(@b, @n) -> bitToInt'#1(@b, @n) bitToInt'#1(::(@x, @xs), @n) -> +(*(@x, @n), bitToInt'(@xs, *(@n, #pos(#s(#s(#0)))))) bitToInt'#1(nil, @n) -> #abs(#0) compare(@b1, @b2) -> compare#1(@b1, @b2) compare#1(::(@x, @xs), @b2) -> compare#2(@b2, @x, @xs) compare#1(nil, @b2) -> #abs(#0) compare#2(::(@y, @ys), @x, @xs) -> compare#3(compare(@xs, @ys), @x, @y) compare#2(nil, @x, @xs) -> #abs(#0) compare#3(@r, @x, @y) -> compare#4(#equal(@r, #0), @r, @x, @y) compare#4(#false, @r, @x, @y) -> @r compare#4(#true, @r, @x, @y) -> compare#5(#less(@x, @y), @x, @y) compare#5(#false, @x, @y) -> compare#6(#greater(@x, @y)) compare#5(#true, @x, @y) -> -(#0, #pos(#s(#0))) compare#6(#false) -> #abs(#0) compare#6(#true) -> #abs(#pos(#s(#0))) diff(@x, @y, @r) -> tuple#2(mod(+(+(@x, @y), @r), #pos(#s(#s(#0)))), diff#1(#less(-(-(@x, @y), @r), #0))) diff#1(#false) -> #abs(#0) diff#1(#true) -> #abs(#pos(#s(#0))) div(@x, @y) -> #div(@x, @y) leq(@b1, @b2) -> #less(compare(@b1, @b2), #pos(#s(#0))) mod(@x, @y) -> -(@x, *(@x, div(@x, @y))) mult(@b1, @b2) -> mult#1(@b1, @b2) mult#1(::(@x, @xs), @b2) -> mult#2(::(#abs(#0), mult(@xs, @b2)), @b2, @x) mult#1(nil, @b2) -> nil mult#2(@zs, @b2, @x) -> mult#3(#equal(@x, #pos(#s(#0))), @b2, @zs) mult#3(#false, @b2, @zs) -> @zs mult#3(#true, @b2, @zs) -> add(@b2, @zs) mult3(@b1, @b2, @b3) -> mult(mult(@b1, @b2), @b2) sub(@b1, @b2) -> sub#1(sub'(@b1, @b2, #abs(#0))) sub#1(tuple#2(@b, @_@1)) -> @b sub'(@b1, @b2, @r) -> sub'#1(@b1, @b2, @r) sub'#1(::(@x, @xs), @b2, @r) -> sub'#2(@b2, @r, @x, @xs) sub'#1(nil, @b2, @r) -> tuple#2(nil, @r) sub'#2(::(@y, @ys), @r, @x, @xs) -> sub'#3(diff(@x, @y, @r), @xs, @ys) sub'#2(nil, @r, @x, @xs) -> tuple#2(nil, @r) sub'#3(tuple#2(@z, @r'), @xs, @ys) -> sub'#4(sub'(@xs, @ys, @r'), @z) sub'#4(tuple#2(@zs, @s), @z) -> tuple#2(sub'#5(#equal(@s, #pos(#s(#0))), @z, @zs), @s) sub'#5(#false, @z, @zs) -> ::(@z, @zs) sub'#5(#true, @z, @zs) -> ::(#abs(#0), @zs) sum(@x, @y, @r) -> sum#1(+(+(@x, @y), @r)) sum#1(@s) -> sum#2(#equal(@s, #0), @s) sum#2(#false, @s) -> sum#3(#equal(@s, #pos(#s(#0))), @s) sum#2(#true, @s) -> tuple#2(#abs(#0), #abs(#0)) sum#3(#false, @s) -> sum#4(#equal(@s, #pos(#s(#s(#0))))) sum#3(#true, @s) -> tuple#2(#abs(#pos(#s(#0))), #abs(#0)) sum#4(#false) -> tuple#2(#abs(#pos(#s(#0))), #abs(#pos(#s(#0)))) sum#4(#true) -> tuple#2(#abs(#0), #abs(#pos(#s(#0)))) The (relative) TRS S consists of the following rules: #add(#0, @y) -> @y #add(#neg(#s(#0)), @y) -> #pred(@y) #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) #add(#pos(#s(#0)), @y) -> #succ(@y) #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) #and(#false, #false) -> #false #and(#false, #true) -> #false #and(#true, #false) -> #false #and(#true, #true) -> #true #ckgt(#EQ) -> #false #ckgt(#GT) -> #true #ckgt(#LT) -> #false #cklt(#EQ) -> #false #cklt(#GT) -> #false #cklt(#LT) -> #true #compare(#0, #0) -> #EQ #compare(#0, #neg(@y)) -> #GT #compare(#0, #pos(@y)) -> #LT #compare(#0, #s(@y)) -> #LT #compare(#neg(@x), #0) -> #LT #compare(#neg(@x), #neg(@y)) -> #compare(@y, @x) #compare(#neg(@x), #pos(@y)) -> #LT #compare(#pos(@x), #0) -> #GT #compare(#pos(@x), #neg(@y)) -> #GT #compare(#pos(@x), #pos(@y)) -> #compare(@x, @y) #compare(#s(@x), #0) -> #GT #compare(#s(@x), #s(@y)) -> #compare(@x, @y) #div(#0, #0) -> #divByZero #div(#0, #neg(@y)) -> #0 #div(#0, #pos(@y)) -> #0 #div(#neg(@x), #0) -> #divByZero #div(#neg(@x), #neg(@y)) -> #pos(#natdiv(@x, @y)) #div(#neg(@x), #pos(@y)) -> #neg(#natdiv(@x, @y)) #div(#pos(@x), #0) -> #divByZero #div(#pos(@x), #neg(@y)) -> #neg(#natdiv(@x, @y)) #div(#pos(@x), #pos(@y)) -> #pos(#natdiv(@x, @y)) #eq(#0, #0) -> #true #eq(#0, #neg(@y)) -> #false #eq(#0, #pos(@y)) -> #false #eq(#0, #s(@y)) -> #false #eq(#neg(@x), #0) -> #false #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y) #eq(#neg(@x), #pos(@y)) -> #false #eq(#pos(@x), #0) -> #false #eq(#pos(@x), #neg(@y)) -> #false #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y) #eq(#s(@x), #0) -> #false #eq(#s(@x), #s(@y)) -> #eq(@x, @y) #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) -> #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) #eq(::(@x_1, @x_2), nil) -> #false #eq(::(@x_1, @x_2), tuple#2(@y_1, @y_2)) -> #false #eq(nil, ::(@y_1, @y_2)) -> #false #eq(nil, nil) -> #true #eq(nil, tuple#2(@y_1, @y_2)) -> #false #eq(tuple#2(@x_1, @x_2), ::(@y_1, @y_2)) -> #false #eq(tuple#2(@x_1, @x_2), nil) -> #false #eq(tuple#2(@x_1, @x_2), tuple#2(@y_1, @y_2)) -> #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) #mult(#0, #0) -> #0 #mult(#0, #neg(@y)) -> #0 #mult(#0, #pos(@y)) -> #0 #mult(#neg(@x), #0) -> #0 #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) #mult(#pos(@x), #0) -> #0 #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) #natdiv(#0, #0) -> #divByZero #natdiv(#s(@x), #s(@y)) -> #s(#natdiv(#natsub(@x, @y), #s(@y))) #natmult(#0, @y) -> #0 #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) #natsub(@x, #0) -> @x #natsub(#s(@x), #s(@y)) -> #natsub(@x, @y) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) #sub(@x, #0) -> @x #sub(@x, #neg(@y)) -> #add(@x, #pos(@y)) #sub(@x, #pos(@y)) -> #add(@x, #neg(@y)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) Rewrite Strategy: INNERMOST