1111.34/291.53 WORST_CASE(Omega(n^1), O(n^2)) 1111.34/291.55 proof of /export/starexec/sandbox/benchmark/theBenchmark.xml 1111.34/291.55 # AProVE Commit ID: 48fb2092695e11cc9f56e44b17a92a5f88ffb256 marcel 20180622 unpublished dirty 1111.34/291.55 1111.34/291.55 1111.34/291.55 The Runtime Complexity (innermost) of the given CpxRelTRS could be proven to be BOUNDS(n^1, n^2). 1111.34/291.55 1111.34/291.55 (0) CpxRelTRS 1111.34/291.55 (1) STerminationProof [BOTH CONCRETE BOUNDS(ID, ID), 650 ms] 1111.34/291.55 (2) CpxRelTRS 1111.34/291.55 (3) RelTrsToWeightedTrsProof [BOTH BOUNDS(ID, ID), 0 ms] 1111.34/291.55 (4) CpxWeightedTrs 1111.34/291.55 (5) CpxWeightedTrsRenamingProof [BOTH BOUNDS(ID, ID), 0 ms] 1111.34/291.55 (6) CpxWeightedTrs 1111.34/291.55 (7) TypeInferenceProof [BOTH BOUNDS(ID, ID), 0 ms] 1111.34/291.55 (8) CpxTypedWeightedTrs 1111.34/291.55 (9) CompletionProof [UPPER BOUND(ID), 0 ms] 1111.34/291.55 (10) CpxTypedWeightedCompleteTrs 1111.34/291.55 (11) NarrowingProof [BOTH BOUNDS(ID, ID), 52 ms] 1111.34/291.55 (12) CpxTypedWeightedCompleteTrs 1111.34/291.55 (13) CpxTypedWeightedTrsToRntsProof [UPPER BOUND(ID), 0 ms] 1111.34/291.55 (14) CpxRNTS 1111.34/291.55 (15) InliningProof [UPPER BOUND(ID), 990 ms] 1111.34/291.55 (16) CpxRNTS 1111.34/291.55 (17) SimplificationProof [BOTH BOUNDS(ID, ID), 1 ms] 1111.34/291.55 (18) CpxRNTS 1111.34/291.55 (19) CpxRntsAnalysisOrderProof [BOTH BOUNDS(ID, ID), 2 ms] 1111.34/291.55 (20) CpxRNTS 1111.34/291.55 (21) ResultPropagationProof [UPPER BOUND(ID), 0 ms] 1111.34/291.55 (22) CpxRNTS 1111.34/291.55 (23) IntTrsBoundProof [UPPER BOUND(ID), 349 ms] 1111.34/291.55 (24) CpxRNTS 1111.34/291.55 (25) IntTrsBoundProof [UPPER BOUND(ID), 47 ms] 1111.34/291.55 (26) CpxRNTS 1111.34/291.55 (27) ResultPropagationProof [UPPER BOUND(ID), 0 ms] 1111.34/291.55 (28) CpxRNTS 1111.34/291.55 (29) IntTrsBoundProof [UPPER BOUND(ID), 331 ms] 1111.34/291.55 (30) CpxRNTS 1111.34/291.55 (31) IntTrsBoundProof [UPPER BOUND(ID), 64 ms] 1111.34/291.55 (32) CpxRNTS 1111.34/291.55 (33) ResultPropagationProof [UPPER BOUND(ID), 3 ms] 1111.34/291.55 (34) CpxRNTS 1111.34/291.55 (35) IntTrsBoundProof [UPPER BOUND(ID), 281 ms] 1111.34/291.55 (36) CpxRNTS 1111.34/291.55 (37) IntTrsBoundProof [UPPER BOUND(ID), 73 ms] 1111.34/291.55 (38) CpxRNTS 1111.34/291.55 (39) ResultPropagationProof [UPPER BOUND(ID), 0 ms] 1111.34/291.55 (40) CpxRNTS 1111.34/291.55 (41) IntTrsBoundProof [UPPER BOUND(ID), 202 ms] 1111.34/291.55 (42) CpxRNTS 1111.34/291.55 (43) IntTrsBoundProof [UPPER BOUND(ID), 55 ms] 1111.34/291.55 (44) CpxRNTS 1111.34/291.55 (45) ResultPropagationProof [UPPER BOUND(ID), 0 ms] 1111.34/291.55 (46) CpxRNTS 1111.34/291.55 (47) IntTrsBoundProof [UPPER BOUND(ID), 309 ms] 1111.34/291.55 (48) CpxRNTS 1111.34/291.55 (49) IntTrsBoundProof [UPPER BOUND(ID), 2 ms] 1111.34/291.55 (50) CpxRNTS 1111.34/291.55 (51) ResultPropagationProof [UPPER BOUND(ID), 1 ms] 1111.34/291.55 (52) CpxRNTS 1111.34/291.55 (53) IntTrsBoundProof [UPPER BOUND(ID), 701 ms] 1111.34/291.55 (54) CpxRNTS 1111.34/291.55 (55) IntTrsBoundProof [UPPER BOUND(ID), 205 ms] 1111.34/291.55 (56) CpxRNTS 1111.34/291.55 (57) ResultPropagationProof [UPPER BOUND(ID), 0 ms] 1111.34/291.55 (58) CpxRNTS 1111.34/291.55 (59) IntTrsBoundProof [UPPER BOUND(ID), 855 ms] 1111.34/291.55 (60) CpxRNTS 1111.34/291.55 (61) IntTrsBoundProof [UPPER BOUND(ID), 167 ms] 1111.34/291.55 (62) CpxRNTS 1111.34/291.55 (63) ResultPropagationProof [UPPER BOUND(ID), 0 ms] 1111.34/291.55 (64) CpxRNTS 1111.34/291.55 (65) IntTrsBoundProof [UPPER BOUND(ID), 2568 ms] 1111.34/291.55 (66) CpxRNTS 1111.34/291.55 (67) IntTrsBoundProof [UPPER BOUND(ID), 325 ms] 1111.34/291.55 (68) CpxRNTS 1111.34/291.55 (69) ResultPropagationProof [UPPER BOUND(ID), 0 ms] 1111.34/291.55 (70) CpxRNTS 1111.34/291.55 (71) IntTrsBoundProof [UPPER BOUND(ID), 310 ms] 1111.34/291.55 (72) CpxRNTS 1111.34/291.55 (73) IntTrsBoundProof [UPPER BOUND(ID), 44 ms] 1111.34/291.55 (74) CpxRNTS 1111.34/291.55 (75) ResultPropagationProof [UPPER BOUND(ID), 0 ms] 1111.34/291.55 (76) CpxRNTS 1111.34/291.55 (77) IntTrsBoundProof [UPPER BOUND(ID), 137 ms] 1111.34/291.55 (78) CpxRNTS 1111.34/291.55 (79) IntTrsBoundProof [UPPER BOUND(ID), 1 ms] 1111.34/291.55 (80) CpxRNTS 1111.34/291.55 (81) ResultPropagationProof [UPPER BOUND(ID), 0 ms] 1111.34/291.55 (82) CpxRNTS 1111.34/291.55 (83) IntTrsBoundProof [UPPER BOUND(ID), 741 ms] 1111.34/291.55 (84) CpxRNTS 1111.34/291.55 (85) IntTrsBoundProof [UPPER BOUND(ID), 44 ms] 1111.34/291.55 (86) CpxRNTS 1111.34/291.55 (87) ResultPropagationProof [UPPER BOUND(ID), 0 ms] 1111.34/291.55 (88) CpxRNTS 1111.34/291.55 (89) IntTrsBoundProof [UPPER BOUND(ID), 328 ms] 1111.34/291.55 (90) CpxRNTS 1111.34/291.55 (91) IntTrsBoundProof [UPPER BOUND(ID), 33 ms] 1111.34/291.55 (92) CpxRNTS 1111.34/291.55 (93) ResultPropagationProof [UPPER BOUND(ID), 0 ms] 1111.34/291.55 (94) CpxRNTS 1111.34/291.55 (95) IntTrsBoundProof [UPPER BOUND(ID), 146 ms] 1111.34/291.55 (96) CpxRNTS 1111.34/291.55 (97) IntTrsBoundProof [UPPER BOUND(ID), 21 ms] 1111.34/291.55 (98) CpxRNTS 1111.34/291.55 (99) ResultPropagationProof [UPPER BOUND(ID), 0 ms] 1111.34/291.55 (100) CpxRNTS 1111.34/291.55 (101) IntTrsBoundProof [UPPER BOUND(ID), 1190 ms] 1111.34/291.55 (102) CpxRNTS 1111.34/291.55 (103) IntTrsBoundProof [UPPER BOUND(ID), 64 ms] 1111.34/291.55 (104) CpxRNTS 1111.34/291.55 (105) ResultPropagationProof [UPPER BOUND(ID), 0 ms] 1111.34/291.55 (106) CpxRNTS 1111.34/291.55 (107) IntTrsBoundProof [UPPER BOUND(ID), 174 ms] 1111.34/291.55 (108) CpxRNTS 1111.34/291.55 (109) IntTrsBoundProof [UPPER BOUND(ID), 52 ms] 1111.34/291.55 (110) CpxRNTS 1111.34/291.55 (111) ResultPropagationProof [UPPER BOUND(ID), 0 ms] 1111.34/291.55 (112) CpxRNTS 1111.34/291.55 (113) IntTrsBoundProof [UPPER BOUND(ID), 887 ms] 1111.34/291.55 (114) CpxRNTS 1111.34/291.55 (115) IntTrsBoundProof [UPPER BOUND(ID), 0 ms] 1111.34/291.55 (116) CpxRNTS 1111.34/291.55 (117) ResultPropagationProof [UPPER BOUND(ID), 0 ms] 1111.34/291.55 (118) CpxRNTS 1111.34/291.55 (119) IntTrsBoundProof [UPPER BOUND(ID), 268 ms] 1111.34/291.55 (120) CpxRNTS 1111.34/291.55 (121) IntTrsBoundProof [UPPER BOUND(ID), 84 ms] 1111.34/291.55 (122) CpxRNTS 1111.34/291.55 (123) ResultPropagationProof [UPPER BOUND(ID), 0 ms] 1111.34/291.55 (124) CpxRNTS 1111.34/291.55 (125) IntTrsBoundProof [UPPER BOUND(ID), 906 ms] 1111.34/291.55 (126) CpxRNTS 1111.34/291.55 (127) IntTrsBoundProof [UPPER BOUND(ID), 63 ms] 1111.34/291.55 (128) CpxRNTS 1111.34/291.55 (129) ResultPropagationProof [UPPER BOUND(ID), 0 ms] 1111.34/291.55 (130) CpxRNTS 1111.34/291.55 (131) IntTrsBoundProof [UPPER BOUND(ID), 378 ms] 1111.34/291.55 (132) CpxRNTS 1111.34/291.55 (133) IntTrsBoundProof [UPPER BOUND(ID), 94 ms] 1111.34/291.55 (134) CpxRNTS 1111.34/291.55 (135) ResultPropagationProof [UPPER BOUND(ID), 0 ms] 1111.34/291.55 (136) CpxRNTS 1111.34/291.55 (137) IntTrsBoundProof [UPPER BOUND(ID), 217 ms] 1111.34/291.55 (138) CpxRNTS 1111.34/291.55 (139) IntTrsBoundProof [UPPER BOUND(ID), 61 ms] 1111.34/291.55 (140) CpxRNTS 1111.34/291.55 (141) ResultPropagationProof [UPPER BOUND(ID), 0 ms] 1111.34/291.55 (142) CpxRNTS 1111.34/291.55 (143) IntTrsBoundProof [UPPER BOUND(ID), 428 ms] 1111.34/291.55 (144) CpxRNTS 1111.34/291.55 (145) IntTrsBoundProof [UPPER BOUND(ID), 127 ms] 1111.34/291.55 (146) CpxRNTS 1111.34/291.55 (147) FinalProof [FINISHED, 0 ms] 1111.34/291.55 (148) BOUNDS(1, n^2) 1111.34/291.55 (149) RenamingProof [BOTH BOUNDS(ID, ID), 0 ms] 1111.34/291.55 (150) CpxRelTRS 1111.34/291.55 (151) TypeInferenceProof [BOTH BOUNDS(ID, ID), 0 ms] 1111.34/291.55 (152) typed CpxTrs 1111.34/291.55 (153) OrderProof [LOWER BOUND(ID), 0 ms] 1111.34/291.55 (154) typed CpxTrs 1111.34/291.55 (155) RewriteLemmaProof [LOWER BOUND(ID), 25.7 s] 1111.34/291.55 (156) typed CpxTrs 1111.34/291.55 (157) RewriteLemmaProof [LOWER BOUND(ID), 7497 ms] 1111.34/291.55 (158) BEST 1111.34/291.55 (159) proven lower bound 1111.34/291.55 (160) LowerBoundPropagationProof [FINISHED, 0 ms] 1111.34/291.55 (161) BOUNDS(n^1, INF) 1111.34/291.55 (162) typed CpxTrs 1111.34/291.55 (163) RewriteLemmaProof [LOWER BOUND(ID), 7305 ms] 1111.34/291.55 (164) typed CpxTrs 1111.34/291.55 (165) RewriteLemmaProof [LOWER BOUND(ID), 7583 ms] 1111.34/291.55 (166) typed CpxTrs 1111.34/291.55 1111.34/291.55 1111.34/291.55 ---------------------------------------- 1111.34/291.55 1111.34/291.55 (0) 1111.34/291.55 Obligation: 1111.34/291.55 The Runtime Complexity (innermost) of the given CpxRelTRS could be proven to be BOUNDS(n^1, n^2). 1111.34/291.55 1111.34/291.55 1111.34/291.55 The TRS R consists of the following rules: 1111.34/291.55 1111.34/291.55 #equal(@x, @y) -> #eq(@x, @y) 1111.34/291.55 *(@x, @y) -> #mult(@x, @y) 1111.34/291.55 -(@x, @y) -> #sub(@x, @y) 1111.34/291.55 div(@x, @y) -> #div(@x, @y) 1111.34/291.55 eratos(@l) -> eratos#1(@l) 1111.34/291.55 eratos#1(::(@x, @xs)) -> ::(@x, eratos(filter(@x, @xs))) 1111.34/291.55 eratos#1(nil) -> nil 1111.34/291.55 filter(@p, @l) -> filter#1(@l, @p) 1111.34/291.55 filter#1(::(@x, @xs), @p) -> filter#2(filter(@p, @xs), @p, @x) 1111.34/291.55 filter#1(nil, @p) -> nil 1111.34/291.55 filter#2(@xs', @p, @x) -> filter#3(#equal(mod(@x, @p), #0), @x, @xs') 1111.34/291.55 filter#3(#false, @x, @xs') -> ::(@x, @xs') 1111.34/291.55 filter#3(#true, @x, @xs') -> @xs' 1111.34/291.55 mod(@x, @y) -> -(@x, *(@x, div(@x, @y))) 1111.34/291.55 1111.34/291.55 The (relative) TRS S consists of the following rules: 1111.34/291.55 1111.34/291.55 #add(#0, @y) -> @y 1111.34/291.55 #add(#neg(#s(#0)), @y) -> #pred(@y) 1111.34/291.55 #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) 1111.34/291.55 #add(#pos(#s(#0)), @y) -> #succ(@y) 1111.34/291.55 #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) 1111.34/291.55 #and(#false, #false) -> #false 1111.34/291.55 #and(#false, #true) -> #false 1111.34/291.55 #and(#true, #false) -> #false 1111.34/291.55 #and(#true, #true) -> #true 1111.34/291.55 #div(#0, #0) -> #divByZero 1111.34/291.55 #div(#0, #neg(@y)) -> #0 1111.34/291.55 #div(#0, #pos(@y)) -> #0 1111.34/291.55 #div(#neg(@x), #0) -> #divByZero 1111.34/291.55 #div(#neg(@x), #neg(@y)) -> #pos(#natdiv(@x, @y)) 1111.34/291.55 #div(#neg(@x), #pos(@y)) -> #neg(#natdiv(@x, @y)) 1111.34/291.55 #div(#pos(@x), #0) -> #divByZero 1111.34/291.55 #div(#pos(@x), #neg(@y)) -> #neg(#natdiv(@x, @y)) 1111.34/291.55 #div(#pos(@x), #pos(@y)) -> #pos(#natdiv(@x, @y)) 1111.34/291.55 #eq(#0, #0) -> #true 1111.34/291.55 #eq(#0, #neg(@y)) -> #false 1111.34/291.55 #eq(#0, #pos(@y)) -> #false 1111.34/291.55 #eq(#0, #s(@y)) -> #false 1111.34/291.55 #eq(#neg(@x), #0) -> #false 1111.34/291.55 #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y) 1111.34/291.55 #eq(#neg(@x), #pos(@y)) -> #false 1111.34/291.55 #eq(#pos(@x), #0) -> #false 1111.34/291.55 #eq(#pos(@x), #neg(@y)) -> #false 1111.34/291.55 #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y) 1111.34/291.55 #eq(#s(@x), #0) -> #false 1111.34/291.55 #eq(#s(@x), #s(@y)) -> #eq(@x, @y) 1111.34/291.55 #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) -> #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) 1111.34/291.55 #eq(::(@x_1, @x_2), nil) -> #false 1111.34/291.55 #eq(nil, ::(@y_1, @y_2)) -> #false 1111.34/291.55 #eq(nil, nil) -> #true 1111.34/291.55 #mult(#0, #0) -> #0 1111.34/291.55 #mult(#0, #neg(@y)) -> #0 1111.34/291.55 #mult(#0, #pos(@y)) -> #0 1111.34/291.55 #mult(#neg(@x), #0) -> #0 1111.34/291.55 #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) 1111.34/291.55 #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) 1111.34/291.55 #mult(#pos(@x), #0) -> #0 1111.34/291.55 #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) 1111.34/291.55 #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) 1111.34/291.55 #natdiv(#0, #0) -> #divByZero 1111.34/291.55 #natdiv(#s(@x), #s(@y)) -> #s(#natdiv(#natsub(@x, @y), #s(@y))) 1111.34/291.55 #natmult(#0, @y) -> #0 1111.34/291.55 #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) 1111.34/291.55 #natsub(@x, #0) -> @x 1111.34/291.55 #natsub(#s(@x), #s(@y)) -> #natsub(@x, @y) 1111.34/291.55 #pred(#0) -> #neg(#s(#0)) 1111.34/291.55 #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) 1111.34/291.55 #pred(#pos(#s(#0))) -> #0 1111.34/291.55 #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) 1111.34/291.55 #sub(@x, #0) -> @x 1111.34/291.55 #sub(@x, #neg(@y)) -> #add(@x, #pos(@y)) 1111.34/291.55 #sub(@x, #pos(@y)) -> #add(@x, #neg(@y)) 1111.34/291.55 #succ(#0) -> #pos(#s(#0)) 1111.34/291.55 #succ(#neg(#s(#0))) -> #0 1111.34/291.55 #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) 1111.34/291.55 #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) 1111.34/291.55 1111.34/291.55 Rewrite Strategy: INNERMOST 1111.34/291.55 ---------------------------------------- 1111.34/291.55 1111.34/291.55 (1) STerminationProof (BOTH CONCRETE BOUNDS(ID, ID)) 1111.34/291.55 proved termination of relative rules 1111.34/291.55 ---------------------------------------- 1111.34/291.55 1111.34/291.55 (2) 1111.34/291.55 Obligation: 1111.34/291.55 The Runtime Complexity (innermost) of the given CpxRelTRS could be proven to be BOUNDS(n^1, n^2). 1111.34/291.55 1111.34/291.55 1111.34/291.55 The TRS R consists of the following rules: 1111.34/291.55 1111.34/291.55 #equal(@x, @y) -> #eq(@x, @y) 1111.34/291.55 *(@x, @y) -> #mult(@x, @y) 1111.34/291.55 -(@x, @y) -> #sub(@x, @y) 1111.34/291.55 div(@x, @y) -> #div(@x, @y) 1111.34/291.55 eratos(@l) -> eratos#1(@l) 1111.34/291.55 eratos#1(::(@x, @xs)) -> ::(@x, eratos(filter(@x, @xs))) 1111.34/291.55 eratos#1(nil) -> nil 1111.34/291.55 filter(@p, @l) -> filter#1(@l, @p) 1111.34/291.55 filter#1(::(@x, @xs), @p) -> filter#2(filter(@p, @xs), @p, @x) 1111.34/291.55 filter#1(nil, @p) -> nil 1111.34/291.55 filter#2(@xs', @p, @x) -> filter#3(#equal(mod(@x, @p), #0), @x, @xs') 1111.34/291.55 filter#3(#false, @x, @xs') -> ::(@x, @xs') 1111.34/291.55 filter#3(#true, @x, @xs') -> @xs' 1111.34/291.55 mod(@x, @y) -> -(@x, *(@x, div(@x, @y))) 1111.34/291.55 1111.34/291.55 The (relative) TRS S consists of the following rules: 1111.34/291.55 1111.34/291.55 #add(#0, @y) -> @y 1111.34/291.55 #add(#neg(#s(#0)), @y) -> #pred(@y) 1111.34/291.55 #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) 1111.34/291.55 #add(#pos(#s(#0)), @y) -> #succ(@y) 1111.34/291.55 #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) 1111.34/291.55 #and(#false, #false) -> #false 1111.34/291.55 #and(#false, #true) -> #false 1111.34/291.55 #and(#true, #false) -> #false 1111.34/291.55 #and(#true, #true) -> #true 1111.34/291.55 #div(#0, #0) -> #divByZero 1111.34/291.55 #div(#0, #neg(@y)) -> #0 1111.34/291.55 #div(#0, #pos(@y)) -> #0 1111.34/291.55 #div(#neg(@x), #0) -> #divByZero 1111.34/291.55 #div(#neg(@x), #neg(@y)) -> #pos(#natdiv(@x, @y)) 1111.34/291.55 #div(#neg(@x), #pos(@y)) -> #neg(#natdiv(@x, @y)) 1111.34/291.55 #div(#pos(@x), #0) -> #divByZero 1111.34/291.55 #div(#pos(@x), #neg(@y)) -> #neg(#natdiv(@x, @y)) 1111.34/291.55 #div(#pos(@x), #pos(@y)) -> #pos(#natdiv(@x, @y)) 1111.34/291.55 #eq(#0, #0) -> #true 1111.34/291.55 #eq(#0, #neg(@y)) -> #false 1111.34/291.55 #eq(#0, #pos(@y)) -> #false 1111.34/291.55 #eq(#0, #s(@y)) -> #false 1111.34/291.55 #eq(#neg(@x), #0) -> #false 1111.34/291.55 #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y) 1111.34/291.55 #eq(#neg(@x), #pos(@y)) -> #false 1111.34/291.55 #eq(#pos(@x), #0) -> #false 1111.34/291.55 #eq(#pos(@x), #neg(@y)) -> #false 1111.34/291.55 #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y) 1111.34/291.55 #eq(#s(@x), #0) -> #false 1111.34/291.55 #eq(#s(@x), #s(@y)) -> #eq(@x, @y) 1111.34/291.55 #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) -> #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) 1111.34/291.55 #eq(::(@x_1, @x_2), nil) -> #false 1111.34/291.55 #eq(nil, ::(@y_1, @y_2)) -> #false 1111.34/291.55 #eq(nil, nil) -> #true 1111.34/291.55 #mult(#0, #0) -> #0 1111.34/291.55 #mult(#0, #neg(@y)) -> #0 1111.34/291.55 #mult(#0, #pos(@y)) -> #0 1111.34/291.55 #mult(#neg(@x), #0) -> #0 1111.34/291.55 #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) 1111.34/291.55 #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) 1111.34/291.55 #mult(#pos(@x), #0) -> #0 1111.34/291.55 #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) 1111.34/291.55 #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) 1111.34/291.55 #natdiv(#0, #0) -> #divByZero 1111.34/291.55 #natdiv(#s(@x), #s(@y)) -> #s(#natdiv(#natsub(@x, @y), #s(@y))) 1111.34/291.55 #natmult(#0, @y) -> #0 1111.34/291.55 #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) 1111.34/291.55 #natsub(@x, #0) -> @x 1111.34/291.55 #natsub(#s(@x), #s(@y)) -> #natsub(@x, @y) 1111.34/291.55 #pred(#0) -> #neg(#s(#0)) 1111.34/291.55 #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) 1111.34/291.55 #pred(#pos(#s(#0))) -> #0 1111.34/291.55 #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) 1111.34/291.55 #sub(@x, #0) -> @x 1111.34/291.55 #sub(@x, #neg(@y)) -> #add(@x, #pos(@y)) 1111.34/291.55 #sub(@x, #pos(@y)) -> #add(@x, #neg(@y)) 1111.34/291.55 #succ(#0) -> #pos(#s(#0)) 1111.34/291.55 #succ(#neg(#s(#0))) -> #0 1111.34/291.55 #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) 1111.34/291.55 #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) 1111.34/291.55 1111.34/291.55 Rewrite Strategy: INNERMOST 1111.34/291.55 ---------------------------------------- 1111.34/291.55 1111.34/291.55 (3) RelTrsToWeightedTrsProof (BOTH BOUNDS(ID, ID)) 1111.34/291.55 Transformed relative TRS to weighted TRS 1111.34/291.55 ---------------------------------------- 1111.34/291.55 1111.34/291.55 (4) 1111.34/291.55 Obligation: 1111.34/291.55 The Runtime Complexity (innermost) of the given CpxWeightedTrs could be proven to be BOUNDS(1, n^2). 1111.34/291.55 1111.34/291.55 1111.34/291.55 The TRS R consists of the following rules: 1111.34/291.55 1111.34/291.55 #equal(@x, @y) -> #eq(@x, @y) [1] 1111.34/291.55 *(@x, @y) -> #mult(@x, @y) [1] 1111.34/291.55 -(@x, @y) -> #sub(@x, @y) [1] 1111.34/291.55 div(@x, @y) -> #div(@x, @y) [1] 1111.34/291.55 eratos(@l) -> eratos#1(@l) [1] 1111.34/291.55 eratos#1(::(@x, @xs)) -> ::(@x, eratos(filter(@x, @xs))) [1] 1111.34/291.55 eratos#1(nil) -> nil [1] 1111.34/291.55 filter(@p, @l) -> filter#1(@l, @p) [1] 1111.34/291.55 filter#1(::(@x, @xs), @p) -> filter#2(filter(@p, @xs), @p, @x) [1] 1111.34/291.55 filter#1(nil, @p) -> nil [1] 1111.34/291.55 filter#2(@xs', @p, @x) -> filter#3(#equal(mod(@x, @p), #0), @x, @xs') [1] 1111.34/291.55 filter#3(#false, @x, @xs') -> ::(@x, @xs') [1] 1111.34/291.55 filter#3(#true, @x, @xs') -> @xs' [1] 1111.34/291.55 mod(@x, @y) -> -(@x, *(@x, div(@x, @y))) [1] 1111.34/291.55 #add(#0, @y) -> @y [0] 1111.34/291.55 #add(#neg(#s(#0)), @y) -> #pred(@y) [0] 1111.34/291.55 #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) [0] 1111.34/291.55 #add(#pos(#s(#0)), @y) -> #succ(@y) [0] 1111.34/291.55 #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) [0] 1111.34/291.55 #and(#false, #false) -> #false [0] 1111.34/291.55 #and(#false, #true) -> #false [0] 1111.34/291.55 #and(#true, #false) -> #false [0] 1111.34/291.55 #and(#true, #true) -> #true [0] 1111.34/291.55 #div(#0, #0) -> #divByZero [0] 1111.34/291.55 #div(#0, #neg(@y)) -> #0 [0] 1111.34/291.55 #div(#0, #pos(@y)) -> #0 [0] 1111.34/291.55 #div(#neg(@x), #0) -> #divByZero [0] 1111.34/291.55 #div(#neg(@x), #neg(@y)) -> #pos(#natdiv(@x, @y)) [0] 1111.34/291.55 #div(#neg(@x), #pos(@y)) -> #neg(#natdiv(@x, @y)) [0] 1111.34/291.55 #div(#pos(@x), #0) -> #divByZero [0] 1111.34/291.55 #div(#pos(@x), #neg(@y)) -> #neg(#natdiv(@x, @y)) [0] 1111.34/291.55 #div(#pos(@x), #pos(@y)) -> #pos(#natdiv(@x, @y)) [0] 1111.34/291.55 #eq(#0, #0) -> #true [0] 1111.34/291.55 #eq(#0, #neg(@y)) -> #false [0] 1111.34/291.55 #eq(#0, #pos(@y)) -> #false [0] 1111.34/291.55 #eq(#0, #s(@y)) -> #false [0] 1111.34/291.55 #eq(#neg(@x), #0) -> #false [0] 1111.34/291.55 #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y) [0] 1111.34/291.55 #eq(#neg(@x), #pos(@y)) -> #false [0] 1111.34/291.55 #eq(#pos(@x), #0) -> #false [0] 1111.34/291.55 #eq(#pos(@x), #neg(@y)) -> #false [0] 1111.34/291.55 #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y) [0] 1111.34/291.55 #eq(#s(@x), #0) -> #false [0] 1111.34/291.55 #eq(#s(@x), #s(@y)) -> #eq(@x, @y) [0] 1111.34/291.55 #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) -> #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) [0] 1111.34/291.55 #eq(::(@x_1, @x_2), nil) -> #false [0] 1111.34/291.55 #eq(nil, ::(@y_1, @y_2)) -> #false [0] 1111.34/291.55 #eq(nil, nil) -> #true [0] 1111.34/291.55 #mult(#0, #0) -> #0 [0] 1111.34/291.55 #mult(#0, #neg(@y)) -> #0 [0] 1111.34/291.55 #mult(#0, #pos(@y)) -> #0 [0] 1111.34/291.55 #mult(#neg(@x), #0) -> #0 [0] 1111.34/291.55 #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) [0] 1111.34/291.55 #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) [0] 1111.34/291.55 #mult(#pos(@x), #0) -> #0 [0] 1111.34/291.55 #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) [0] 1111.34/291.55 #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) [0] 1111.34/291.55 #natdiv(#0, #0) -> #divByZero [0] 1111.34/291.55 #natdiv(#s(@x), #s(@y)) -> #s(#natdiv(#natsub(@x, @y), #s(@y))) [0] 1111.34/291.55 #natmult(#0, @y) -> #0 [0] 1111.34/291.55 #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) [0] 1111.34/291.55 #natsub(@x, #0) -> @x [0] 1111.34/291.55 #natsub(#s(@x), #s(@y)) -> #natsub(@x, @y) [0] 1111.34/291.55 #pred(#0) -> #neg(#s(#0)) [0] 1111.34/291.55 #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) [0] 1111.34/291.55 #pred(#pos(#s(#0))) -> #0 [0] 1111.34/291.55 #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) [0] 1111.34/291.55 #sub(@x, #0) -> @x [0] 1111.34/291.55 #sub(@x, #neg(@y)) -> #add(@x, #pos(@y)) [0] 1111.34/291.55 #sub(@x, #pos(@y)) -> #add(@x, #neg(@y)) [0] 1111.34/291.55 #succ(#0) -> #pos(#s(#0)) [0] 1111.34/291.55 #succ(#neg(#s(#0))) -> #0 [0] 1111.34/291.55 #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) [0] 1111.34/291.55 #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) [0] 1111.34/291.55 1111.34/291.55 Rewrite Strategy: INNERMOST 1111.34/291.55 ---------------------------------------- 1111.34/291.55 1111.34/291.55 (5) CpxWeightedTrsRenamingProof (BOTH BOUNDS(ID, ID)) 1111.34/291.55 Renamed defined symbols to avoid conflicts with arithmetic symbols: 1111.34/291.55 1111.34/291.55 * => times 1111.34/291.55 - => minus 1111.34/291.55 1111.34/291.55 ---------------------------------------- 1111.34/291.55 1111.34/291.55 (6) 1111.34/291.55 Obligation: 1111.34/291.55 The Runtime Complexity (innermost) of the given CpxWeightedTrs could be proven to be BOUNDS(1, n^2). 1111.34/291.55 1111.34/291.55 1111.34/291.55 The TRS R consists of the following rules: 1111.34/291.55 1111.34/291.55 #equal(@x, @y) -> #eq(@x, @y) [1] 1111.34/291.55 times(@x, @y) -> #mult(@x, @y) [1] 1111.34/291.55 minus(@x, @y) -> #sub(@x, @y) [1] 1111.34/291.55 div(@x, @y) -> #div(@x, @y) [1] 1111.34/291.55 eratos(@l) -> eratos#1(@l) [1] 1111.34/291.55 eratos#1(::(@x, @xs)) -> ::(@x, eratos(filter(@x, @xs))) [1] 1111.34/291.55 eratos#1(nil) -> nil [1] 1111.34/291.55 filter(@p, @l) -> filter#1(@l, @p) [1] 1111.34/291.55 filter#1(::(@x, @xs), @p) -> filter#2(filter(@p, @xs), @p, @x) [1] 1111.34/291.55 filter#1(nil, @p) -> nil [1] 1111.34/291.55 filter#2(@xs', @p, @x) -> filter#3(#equal(mod(@x, @p), #0), @x, @xs') [1] 1111.34/291.55 filter#3(#false, @x, @xs') -> ::(@x, @xs') [1] 1111.34/291.55 filter#3(#true, @x, @xs') -> @xs' [1] 1111.34/291.55 mod(@x, @y) -> minus(@x, times(@x, div(@x, @y))) [1] 1111.34/291.55 #add(#0, @y) -> @y [0] 1111.34/291.55 #add(#neg(#s(#0)), @y) -> #pred(@y) [0] 1111.34/291.55 #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) [0] 1111.34/291.55 #add(#pos(#s(#0)), @y) -> #succ(@y) [0] 1111.34/291.55 #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) [0] 1111.34/291.55 #and(#false, #false) -> #false [0] 1111.34/291.55 #and(#false, #true) -> #false [0] 1111.34/291.55 #and(#true, #false) -> #false [0] 1111.34/291.55 #and(#true, #true) -> #true [0] 1111.34/291.55 #div(#0, #0) -> #divByZero [0] 1111.34/291.55 #div(#0, #neg(@y)) -> #0 [0] 1111.34/291.55 #div(#0, #pos(@y)) -> #0 [0] 1111.34/291.55 #div(#neg(@x), #0) -> #divByZero [0] 1111.34/291.55 #div(#neg(@x), #neg(@y)) -> #pos(#natdiv(@x, @y)) [0] 1111.34/291.55 #div(#neg(@x), #pos(@y)) -> #neg(#natdiv(@x, @y)) [0] 1111.34/291.55 #div(#pos(@x), #0) -> #divByZero [0] 1111.34/291.55 #div(#pos(@x), #neg(@y)) -> #neg(#natdiv(@x, @y)) [0] 1111.34/291.55 #div(#pos(@x), #pos(@y)) -> #pos(#natdiv(@x, @y)) [0] 1111.34/291.55 #eq(#0, #0) -> #true [0] 1111.34/291.55 #eq(#0, #neg(@y)) -> #false [0] 1111.34/291.55 #eq(#0, #pos(@y)) -> #false [0] 1111.34/291.55 #eq(#0, #s(@y)) -> #false [0] 1111.34/291.55 #eq(#neg(@x), #0) -> #false [0] 1111.34/291.55 #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y) [0] 1111.34/291.55 #eq(#neg(@x), #pos(@y)) -> #false [0] 1111.34/291.55 #eq(#pos(@x), #0) -> #false [0] 1111.34/291.55 #eq(#pos(@x), #neg(@y)) -> #false [0] 1111.34/291.55 #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y) [0] 1111.34/291.55 #eq(#s(@x), #0) -> #false [0] 1111.34/291.55 #eq(#s(@x), #s(@y)) -> #eq(@x, @y) [0] 1111.34/291.55 #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) -> #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) [0] 1111.34/291.55 #eq(::(@x_1, @x_2), nil) -> #false [0] 1111.34/291.55 #eq(nil, ::(@y_1, @y_2)) -> #false [0] 1111.34/291.55 #eq(nil, nil) -> #true [0] 1111.34/291.55 #mult(#0, #0) -> #0 [0] 1111.34/291.55 #mult(#0, #neg(@y)) -> #0 [0] 1111.34/291.55 #mult(#0, #pos(@y)) -> #0 [0] 1111.34/291.55 #mult(#neg(@x), #0) -> #0 [0] 1111.34/291.55 #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) [0] 1111.34/291.55 #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) [0] 1111.34/291.55 #mult(#pos(@x), #0) -> #0 [0] 1111.34/291.55 #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) [0] 1111.34/291.55 #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) [0] 1111.34/291.55 #natdiv(#0, #0) -> #divByZero [0] 1111.34/291.55 #natdiv(#s(@x), #s(@y)) -> #s(#natdiv(#natsub(@x, @y), #s(@y))) [0] 1111.34/291.55 #natmult(#0, @y) -> #0 [0] 1111.34/291.55 #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) [0] 1111.34/291.55 #natsub(@x, #0) -> @x [0] 1111.34/291.55 #natsub(#s(@x), #s(@y)) -> #natsub(@x, @y) [0] 1111.34/291.55 #pred(#0) -> #neg(#s(#0)) [0] 1111.34/291.55 #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) [0] 1111.34/291.55 #pred(#pos(#s(#0))) -> #0 [0] 1111.34/291.55 #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) [0] 1111.34/291.55 #sub(@x, #0) -> @x [0] 1111.34/291.55 #sub(@x, #neg(@y)) -> #add(@x, #pos(@y)) [0] 1111.34/291.55 #sub(@x, #pos(@y)) -> #add(@x, #neg(@y)) [0] 1111.34/291.55 #succ(#0) -> #pos(#s(#0)) [0] 1111.34/291.55 #succ(#neg(#s(#0))) -> #0 [0] 1111.34/291.55 #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) [0] 1111.34/291.55 #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) [0] 1111.34/291.55 1111.34/291.55 Rewrite Strategy: INNERMOST 1111.34/291.55 ---------------------------------------- 1111.34/291.55 1111.34/291.55 (7) TypeInferenceProof (BOTH BOUNDS(ID, ID)) 1111.34/291.55 Infered types. 1111.34/291.55 ---------------------------------------- 1111.34/291.55 1111.34/291.55 (8) 1111.34/291.55 Obligation: 1111.34/291.55 Runtime Complexity Weighted TRS with Types. 1111.34/291.55 The TRS R consists of the following rules: 1111.34/291.55 1111.34/291.55 #equal(@x, @y) -> #eq(@x, @y) [1] 1111.34/291.55 times(@x, @y) -> #mult(@x, @y) [1] 1111.34/291.55 minus(@x, @y) -> #sub(@x, @y) [1] 1111.34/291.55 div(@x, @y) -> #div(@x, @y) [1] 1111.34/291.55 eratos(@l) -> eratos#1(@l) [1] 1111.34/291.55 eratos#1(::(@x, @xs)) -> ::(@x, eratos(filter(@x, @xs))) [1] 1111.34/291.55 eratos#1(nil) -> nil [1] 1111.34/291.55 filter(@p, @l) -> filter#1(@l, @p) [1] 1111.34/291.55 filter#1(::(@x, @xs), @p) -> filter#2(filter(@p, @xs), @p, @x) [1] 1111.34/291.55 filter#1(nil, @p) -> nil [1] 1111.34/291.55 filter#2(@xs', @p, @x) -> filter#3(#equal(mod(@x, @p), #0), @x, @xs') [1] 1111.34/291.55 filter#3(#false, @x, @xs') -> ::(@x, @xs') [1] 1111.34/291.55 filter#3(#true, @x, @xs') -> @xs' [1] 1111.34/291.55 mod(@x, @y) -> minus(@x, times(@x, div(@x, @y))) [1] 1111.34/291.55 #add(#0, @y) -> @y [0] 1111.34/291.55 #add(#neg(#s(#0)), @y) -> #pred(@y) [0] 1111.34/291.55 #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) [0] 1111.34/291.55 #add(#pos(#s(#0)), @y) -> #succ(@y) [0] 1111.34/291.55 #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) [0] 1111.34/291.55 #and(#false, #false) -> #false [0] 1111.34/291.55 #and(#false, #true) -> #false [0] 1111.34/291.55 #and(#true, #false) -> #false [0] 1111.34/291.55 #and(#true, #true) -> #true [0] 1111.34/291.55 #div(#0, #0) -> #divByZero [0] 1111.34/291.55 #div(#0, #neg(@y)) -> #0 [0] 1111.34/291.55 #div(#0, #pos(@y)) -> #0 [0] 1111.34/291.55 #div(#neg(@x), #0) -> #divByZero [0] 1111.34/291.55 #div(#neg(@x), #neg(@y)) -> #pos(#natdiv(@x, @y)) [0] 1111.34/291.55 #div(#neg(@x), #pos(@y)) -> #neg(#natdiv(@x, @y)) [0] 1111.34/291.55 #div(#pos(@x), #0) -> #divByZero [0] 1111.34/291.55 #div(#pos(@x), #neg(@y)) -> #neg(#natdiv(@x, @y)) [0] 1111.34/291.55 #div(#pos(@x), #pos(@y)) -> #pos(#natdiv(@x, @y)) [0] 1111.34/291.55 #eq(#0, #0) -> #true [0] 1111.34/291.55 #eq(#0, #neg(@y)) -> #false [0] 1111.34/291.55 #eq(#0, #pos(@y)) -> #false [0] 1111.34/291.55 #eq(#0, #s(@y)) -> #false [0] 1111.34/291.55 #eq(#neg(@x), #0) -> #false [0] 1111.34/291.55 #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y) [0] 1111.34/291.55 #eq(#neg(@x), #pos(@y)) -> #false [0] 1111.34/291.55 #eq(#pos(@x), #0) -> #false [0] 1111.34/291.55 #eq(#pos(@x), #neg(@y)) -> #false [0] 1111.34/291.55 #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y) [0] 1111.34/291.55 #eq(#s(@x), #0) -> #false [0] 1111.34/291.55 #eq(#s(@x), #s(@y)) -> #eq(@x, @y) [0] 1111.34/291.55 #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) -> #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) [0] 1111.34/291.55 #eq(::(@x_1, @x_2), nil) -> #false [0] 1111.34/291.55 #eq(nil, ::(@y_1, @y_2)) -> #false [0] 1111.34/291.55 #eq(nil, nil) -> #true [0] 1111.34/291.55 #mult(#0, #0) -> #0 [0] 1111.34/291.55 #mult(#0, #neg(@y)) -> #0 [0] 1111.34/291.55 #mult(#0, #pos(@y)) -> #0 [0] 1111.34/291.55 #mult(#neg(@x), #0) -> #0 [0] 1111.34/291.55 #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) [0] 1111.34/291.55 #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) [0] 1111.34/291.55 #mult(#pos(@x), #0) -> #0 [0] 1111.34/291.55 #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) [0] 1111.34/291.55 #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) [0] 1111.34/291.55 #natdiv(#0, #0) -> #divByZero [0] 1111.34/291.55 #natdiv(#s(@x), #s(@y)) -> #s(#natdiv(#natsub(@x, @y), #s(@y))) [0] 1111.34/291.55 #natmult(#0, @y) -> #0 [0] 1111.34/291.55 #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) [0] 1111.34/291.55 #natsub(@x, #0) -> @x [0] 1111.34/291.55 #natsub(#s(@x), #s(@y)) -> #natsub(@x, @y) [0] 1111.34/291.55 #pred(#0) -> #neg(#s(#0)) [0] 1111.34/291.55 #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) [0] 1111.34/291.55 #pred(#pos(#s(#0))) -> #0 [0] 1111.34/291.55 #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) [0] 1111.34/291.55 #sub(@x, #0) -> @x [0] 1111.34/291.55 #sub(@x, #neg(@y)) -> #add(@x, #pos(@y)) [0] 1111.34/291.55 #sub(@x, #pos(@y)) -> #add(@x, #neg(@y)) [0] 1111.34/291.55 #succ(#0) -> #pos(#s(#0)) [0] 1111.34/291.55 #succ(#neg(#s(#0))) -> #0 [0] 1111.34/291.55 #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) [0] 1111.34/291.55 #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) [0] 1111.34/291.55 1111.34/291.55 The TRS has the following type information: 1111.34/291.55 #equal :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> #false:#true 1111.34/291.55 #eq :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> #false:#true 1111.34/291.55 times :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.34/291.55 #mult :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.34/291.55 minus :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.34/291.55 #sub :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.34/291.55 div :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.34/291.55 #div :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.34/291.55 eratos :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.34/291.55 eratos#1 :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.34/291.55 :: :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.34/291.55 filter :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.34/291.55 nil :: :::nil:#0:#s:#neg:#pos:#divByZero 1111.34/291.55 filter#1 :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.34/291.55 filter#2 :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.34/291.55 filter#3 :: #false:#true -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.34/291.55 mod :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.34/291.55 #0 :: :::nil:#0:#s:#neg:#pos:#divByZero 1111.34/291.55 #false :: #false:#true 1111.34/291.55 #true :: #false:#true 1111.34/291.55 #add :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.34/291.55 #neg :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.34/291.55 #s :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.34/291.55 #pred :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.34/291.55 #pos :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.34/291.55 #succ :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.34/291.55 #and :: #false:#true -> #false:#true -> #false:#true 1111.34/291.55 #divByZero :: :::nil:#0:#s:#neg:#pos:#divByZero 1111.34/291.55 #natdiv :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.34/291.55 #natmult :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.34/291.55 #natsub :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.34/291.55 1111.34/291.55 Rewrite Strategy: INNERMOST 1111.34/291.55 ---------------------------------------- 1111.34/291.55 1111.34/291.55 (9) CompletionProof (UPPER BOUND(ID)) 1111.34/291.55 The transformation into a RNTS is sound, since: 1111.34/291.55 1111.34/291.55 (a) The obligation is a constructor system where every type has a constant constructor, 1111.34/291.55 1111.34/291.55 (b) The following defined symbols do not have to be completely defined, as they can never occur inside other defined symbols: 1111.34/291.55 1111.34/291.55 eratos_1 1111.34/291.55 eratos#1_1 1111.34/291.55 1111.34/291.55 (c) The following functions are completely defined: 1111.34/291.55 1111.34/291.55 filter_2 1111.34/291.55 times_2 1111.34/291.55 div_2 1111.34/291.55 #equal_2 1111.34/291.55 mod_2 1111.34/291.55 filter#1_2 1111.34/291.55 minus_2 1111.34/291.55 filter#2_3 1111.34/291.55 filter#3_3 1111.34/291.55 #add_2 1111.34/291.55 #and_2 1111.34/291.55 #div_2 1111.34/291.55 #eq_2 1111.34/291.55 #mult_2 1111.34/291.55 #natdiv_2 1111.34/291.55 #natmult_2 1111.34/291.55 #natsub_2 1111.34/291.55 #pred_1 1111.34/291.55 #sub_2 1111.34/291.55 #succ_1 1111.34/291.55 1111.34/291.55 Due to the following rules being added: 1111.34/291.55 1111.34/291.55 #add(v0, v1) -> null_#add [0] 1111.34/291.55 #and(v0, v1) -> null_#and [0] 1111.34/291.55 #div(v0, v1) -> null_#div [0] 1111.34/291.55 #eq(v0, v1) -> null_#eq [0] 1111.34/291.55 #mult(v0, v1) -> null_#mult [0] 1111.34/291.55 #natdiv(v0, v1) -> null_#natdiv [0] 1111.34/291.55 #natmult(v0, v1) -> null_#natmult [0] 1111.34/291.55 #natsub(v0, v1) -> null_#natsub [0] 1111.34/291.55 #pred(v0) -> null_#pred [0] 1111.34/291.55 #sub(v0, v1) -> null_#sub [0] 1111.34/291.55 #succ(v0) -> null_#succ [0] 1111.34/291.55 filter#1(v0, v1) -> null_filter#1 [0] 1111.34/291.55 filter#3(v0, v1, v2) -> null_filter#3 [0] 1111.34/291.55 1111.34/291.55 And the following fresh constants: null_#add, null_#and, null_#div, null_#eq, null_#mult, null_#natdiv, null_#natmult, null_#natsub, null_#pred, null_#sub, null_#succ, null_filter#1, null_filter#3 1111.34/291.55 1111.34/291.55 ---------------------------------------- 1111.34/291.55 1111.34/291.55 (10) 1111.34/291.55 Obligation: 1111.34/291.55 Runtime Complexity Weighted TRS where critical functions are completely defined. The underlying TRS is: 1111.34/291.55 1111.34/291.55 Runtime Complexity Weighted TRS with Types. 1111.34/291.55 The TRS R consists of the following rules: 1111.34/291.55 1111.34/291.55 #equal(@x, @y) -> #eq(@x, @y) [1] 1111.34/291.55 times(@x, @y) -> #mult(@x, @y) [1] 1111.34/291.55 minus(@x, @y) -> #sub(@x, @y) [1] 1111.34/291.55 div(@x, @y) -> #div(@x, @y) [1] 1111.34/291.55 eratos(@l) -> eratos#1(@l) [1] 1111.34/291.55 eratos#1(::(@x, @xs)) -> ::(@x, eratos(filter(@x, @xs))) [1] 1111.34/291.55 eratos#1(nil) -> nil [1] 1111.34/291.55 filter(@p, @l) -> filter#1(@l, @p) [1] 1111.34/291.55 filter#1(::(@x, @xs), @p) -> filter#2(filter(@p, @xs), @p, @x) [1] 1111.34/291.55 filter#1(nil, @p) -> nil [1] 1111.34/291.55 filter#2(@xs', @p, @x) -> filter#3(#equal(mod(@x, @p), #0), @x, @xs') [1] 1111.34/291.55 filter#3(#false, @x, @xs') -> ::(@x, @xs') [1] 1111.34/291.55 filter#3(#true, @x, @xs') -> @xs' [1] 1111.34/291.55 mod(@x, @y) -> minus(@x, times(@x, div(@x, @y))) [1] 1111.34/291.55 #add(#0, @y) -> @y [0] 1111.34/291.55 #add(#neg(#s(#0)), @y) -> #pred(@y) [0] 1111.34/291.55 #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) [0] 1111.34/291.55 #add(#pos(#s(#0)), @y) -> #succ(@y) [0] 1111.34/291.55 #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) [0] 1111.34/291.55 #and(#false, #false) -> #false [0] 1111.34/291.55 #and(#false, #true) -> #false [0] 1111.34/291.55 #and(#true, #false) -> #false [0] 1111.34/291.55 #and(#true, #true) -> #true [0] 1111.34/291.55 #div(#0, #0) -> #divByZero [0] 1111.34/291.55 #div(#0, #neg(@y)) -> #0 [0] 1111.34/291.55 #div(#0, #pos(@y)) -> #0 [0] 1111.34/291.55 #div(#neg(@x), #0) -> #divByZero [0] 1111.34/291.55 #div(#neg(@x), #neg(@y)) -> #pos(#natdiv(@x, @y)) [0] 1111.34/291.55 #div(#neg(@x), #pos(@y)) -> #neg(#natdiv(@x, @y)) [0] 1111.34/291.55 #div(#pos(@x), #0) -> #divByZero [0] 1111.34/291.55 #div(#pos(@x), #neg(@y)) -> #neg(#natdiv(@x, @y)) [0] 1111.34/291.55 #div(#pos(@x), #pos(@y)) -> #pos(#natdiv(@x, @y)) [0] 1111.34/291.55 #eq(#0, #0) -> #true [0] 1111.34/291.55 #eq(#0, #neg(@y)) -> #false [0] 1111.34/291.55 #eq(#0, #pos(@y)) -> #false [0] 1111.34/291.55 #eq(#0, #s(@y)) -> #false [0] 1111.34/291.55 #eq(#neg(@x), #0) -> #false [0] 1111.34/291.55 #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y) [0] 1111.34/291.55 #eq(#neg(@x), #pos(@y)) -> #false [0] 1111.34/291.55 #eq(#pos(@x), #0) -> #false [0] 1111.34/291.55 #eq(#pos(@x), #neg(@y)) -> #false [0] 1111.34/291.55 #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y) [0] 1111.34/291.55 #eq(#s(@x), #0) -> #false [0] 1111.34/291.55 #eq(#s(@x), #s(@y)) -> #eq(@x, @y) [0] 1111.34/291.55 #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) -> #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) [0] 1111.34/291.55 #eq(::(@x_1, @x_2), nil) -> #false [0] 1111.34/291.55 #eq(nil, ::(@y_1, @y_2)) -> #false [0] 1111.34/291.55 #eq(nil, nil) -> #true [0] 1111.34/291.55 #mult(#0, #0) -> #0 [0] 1111.34/291.55 #mult(#0, #neg(@y)) -> #0 [0] 1111.34/291.55 #mult(#0, #pos(@y)) -> #0 [0] 1111.34/291.55 #mult(#neg(@x), #0) -> #0 [0] 1111.34/291.55 #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) [0] 1111.34/291.55 #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) [0] 1111.34/291.55 #mult(#pos(@x), #0) -> #0 [0] 1111.34/291.55 #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) [0] 1111.34/291.55 #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) [0] 1111.34/291.55 #natdiv(#0, #0) -> #divByZero [0] 1111.34/291.55 #natdiv(#s(@x), #s(@y)) -> #s(#natdiv(#natsub(@x, @y), #s(@y))) [0] 1111.34/291.55 #natmult(#0, @y) -> #0 [0] 1111.34/291.55 #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) [0] 1111.34/291.55 #natsub(@x, #0) -> @x [0] 1111.34/291.55 #natsub(#s(@x), #s(@y)) -> #natsub(@x, @y) [0] 1111.34/291.55 #pred(#0) -> #neg(#s(#0)) [0] 1111.34/291.55 #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) [0] 1111.34/291.55 #pred(#pos(#s(#0))) -> #0 [0] 1111.34/291.55 #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) [0] 1111.34/291.55 #sub(@x, #0) -> @x [0] 1111.34/291.55 #sub(@x, #neg(@y)) -> #add(@x, #pos(@y)) [0] 1111.34/291.55 #sub(@x, #pos(@y)) -> #add(@x, #neg(@y)) [0] 1111.34/291.55 #succ(#0) -> #pos(#s(#0)) [0] 1111.34/291.55 #succ(#neg(#s(#0))) -> #0 [0] 1111.34/291.55 #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) [0] 1111.34/291.55 #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) [0] 1111.34/291.55 #add(v0, v1) -> null_#add [0] 1111.34/291.55 #and(v0, v1) -> null_#and [0] 1111.34/291.55 #div(v0, v1) -> null_#div [0] 1111.34/291.55 #eq(v0, v1) -> null_#eq [0] 1111.34/291.55 #mult(v0, v1) -> null_#mult [0] 1111.34/291.55 #natdiv(v0, v1) -> null_#natdiv [0] 1111.34/291.55 #natmult(v0, v1) -> null_#natmult [0] 1111.34/291.55 #natsub(v0, v1) -> null_#natsub [0] 1111.34/291.55 #pred(v0) -> null_#pred [0] 1111.34/291.55 #sub(v0, v1) -> null_#sub [0] 1111.34/291.55 #succ(v0) -> null_#succ [0] 1111.34/291.55 filter#1(v0, v1) -> null_filter#1 [0] 1111.34/291.55 filter#3(v0, v1, v2) -> null_filter#3 [0] 1111.34/291.55 1111.34/291.55 The TRS has the following type information: 1111.34/291.55 #equal :: :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 -> :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 -> #false:#true:null_#and:null_#eq 1111.34/291.55 #eq :: :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 -> :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 -> #false:#true:null_#and:null_#eq 1111.34/291.55 times :: :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 -> :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 -> :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 1111.34/291.55 #mult :: :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 -> :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 -> :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 1111.34/291.55 minus :: :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 -> :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 -> :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 1111.34/291.55 #sub :: :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 -> :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 -> :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 1111.34/291.55 div :: :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 -> :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 -> :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 1111.34/291.55 #div :: :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 -> :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 -> :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 1111.34/291.55 eratos :: :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 -> :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 1111.34/291.55 eratos#1 :: :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 -> :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 1111.34/291.55 :: :: :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 -> :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 -> :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 1111.34/291.55 filter :: :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 -> :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 -> :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 1111.34/291.55 nil :: :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 1111.34/291.55 filter#1 :: :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 -> :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 -> :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 1111.34/291.55 filter#2 :: :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 -> :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 -> :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 -> :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 1111.34/291.55 filter#3 :: #false:#true:null_#and:null_#eq -> :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 -> :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 -> :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 1111.34/291.55 mod :: :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 -> :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 -> :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 1111.34/291.55 #0 :: :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 1111.34/291.55 #false :: #false:#true:null_#and:null_#eq 1111.34/291.55 #true :: #false:#true:null_#and:null_#eq 1111.34/291.55 #add :: :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 -> :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 -> :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 1111.34/291.55 #neg :: :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 -> :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 1111.34/291.55 #s :: :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 -> :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 1111.34/291.55 #pred :: :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 -> :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 1111.34/291.55 #pos :: :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 -> :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 1111.34/291.55 #succ :: :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 -> :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 1111.34/291.55 #and :: #false:#true:null_#and:null_#eq -> #false:#true:null_#and:null_#eq -> #false:#true:null_#and:null_#eq 1111.34/291.55 #divByZero :: :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 1111.34/291.55 #natdiv :: :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 -> :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 -> :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 1111.34/291.55 #natmult :: :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 -> :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 -> :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 1111.34/291.55 #natsub :: :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 -> :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 -> :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 1111.34/291.55 null_#add :: :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 1111.34/291.55 null_#and :: #false:#true:null_#and:null_#eq 1111.34/291.55 null_#div :: :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 1111.34/291.55 null_#eq :: #false:#true:null_#and:null_#eq 1111.34/291.55 null_#mult :: :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 1111.34/291.55 null_#natdiv :: :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 1111.34/291.55 null_#natmult :: :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 1111.34/291.55 null_#natsub :: :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 1111.34/291.55 null_#pred :: :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 1111.34/291.55 null_#sub :: :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 1111.34/291.55 null_#succ :: :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 1111.34/291.55 null_filter#1 :: :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 1111.34/291.55 null_filter#3 :: :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 1111.34/291.55 1111.34/291.55 Rewrite Strategy: INNERMOST 1111.34/291.55 ---------------------------------------- 1111.34/291.55 1111.34/291.55 (11) NarrowingProof (BOTH BOUNDS(ID, ID)) 1111.34/291.55 Narrowed the inner basic terms of all right-hand sides by a single narrowing step. 1111.34/291.55 ---------------------------------------- 1111.34/291.55 1111.34/291.55 (12) 1111.34/291.55 Obligation: 1111.34/291.55 Runtime Complexity Weighted TRS where critical functions are completely defined. The underlying TRS is: 1111.34/291.55 1111.34/291.55 Runtime Complexity Weighted TRS with Types. 1111.34/291.55 The TRS R consists of the following rules: 1111.34/291.55 1111.34/291.55 #equal(@x, @y) -> #eq(@x, @y) [1] 1111.34/291.55 times(@x, @y) -> #mult(@x, @y) [1] 1111.34/291.55 minus(@x, @y) -> #sub(@x, @y) [1] 1111.34/291.55 div(@x, @y) -> #div(@x, @y) [1] 1111.34/291.55 eratos(@l) -> eratos#1(@l) [1] 1111.34/291.55 eratos#1(::(@x, @xs)) -> ::(@x, eratos(filter#1(@xs, @x))) [2] 1111.34/291.55 eratos#1(nil) -> nil [1] 1111.34/291.55 filter(@p, @l) -> filter#1(@l, @p) [1] 1111.34/291.55 filter#1(::(@x, @xs), @p) -> filter#2(filter#1(@xs, @p), @p, @x) [2] 1111.34/291.55 filter#1(nil, @p) -> nil [1] 1111.34/291.55 filter#2(@xs', @p, @x) -> filter#3(#equal(minus(@x, times(@x, div(@x, @p))), #0), @x, @xs') [2] 1111.34/291.55 filter#3(#false, @x, @xs') -> ::(@x, @xs') [1] 1111.34/291.55 filter#3(#true, @x, @xs') -> @xs' [1] 1111.34/291.55 mod(@x, @y) -> minus(@x, times(@x, #div(@x, @y))) [2] 1111.34/291.55 #add(#0, @y) -> @y [0] 1111.34/291.55 #add(#neg(#s(#0)), @y) -> #pred(@y) [0] 1111.34/291.55 #add(#neg(#s(#s(#0))), @y) -> #pred(#succ(@y)) [0] 1111.34/291.55 #add(#neg(#s(#s(#s(@x')))), @y) -> #pred(#succ(#add(#pos(#s(@x')), @y))) [0] 1111.34/291.55 #add(#neg(#s(#s(@x))), @y) -> #pred(null_#add) [0] 1111.34/291.55 #add(#pos(#s(#0)), @y) -> #succ(@y) [0] 1111.34/291.55 #add(#pos(#s(#s(#0))), @y) -> #succ(#succ(@y)) [0] 1111.34/291.55 #add(#pos(#s(#s(#s(@x'')))), @y) -> #succ(#succ(#add(#pos(#s(@x'')), @y))) [0] 1111.34/291.55 #add(#pos(#s(#s(@x))), @y) -> #succ(null_#add) [0] 1111.34/291.55 #and(#false, #false) -> #false [0] 1111.34/291.55 #and(#false, #true) -> #false [0] 1111.34/291.55 #and(#true, #false) -> #false [0] 1111.34/291.55 #and(#true, #true) -> #true [0] 1111.34/291.55 #div(#0, #0) -> #divByZero [0] 1111.34/291.55 #div(#0, #neg(@y)) -> #0 [0] 1111.34/291.55 #div(#0, #pos(@y)) -> #0 [0] 1111.34/291.55 #div(#neg(@x), #0) -> #divByZero [0] 1111.34/291.55 #div(#neg(@x), #neg(@y)) -> #pos(#natdiv(@x, @y)) [0] 1111.34/291.55 #div(#neg(@x), #pos(@y)) -> #neg(#natdiv(@x, @y)) [0] 1111.34/291.55 #div(#pos(@x), #0) -> #divByZero [0] 1111.34/291.55 #div(#pos(@x), #neg(@y)) -> #neg(#natdiv(@x, @y)) [0] 1111.34/291.55 #div(#pos(@x), #pos(@y)) -> #pos(#natdiv(@x, @y)) [0] 1111.34/291.55 #eq(#0, #0) -> #true [0] 1111.34/291.55 #eq(#0, #neg(@y)) -> #false [0] 1111.34/291.55 #eq(#0, #pos(@y)) -> #false [0] 1111.34/291.55 #eq(#0, #s(@y)) -> #false [0] 1111.34/291.55 #eq(#neg(@x), #0) -> #false [0] 1111.34/291.55 #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y) [0] 1111.34/291.55 #eq(#neg(@x), #pos(@y)) -> #false [0] 1111.34/291.55 #eq(#pos(@x), #0) -> #false [0] 1111.34/291.55 #eq(#pos(@x), #neg(@y)) -> #false [0] 1111.34/291.55 #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y) [0] 1111.34/291.55 #eq(#s(@x), #0) -> #false [0] 1111.34/291.55 #eq(#s(@x), #s(@y)) -> #eq(@x, @y) [0] 1111.34/291.55 #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) -> #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) [0] 1111.34/291.55 #eq(::(@x_1, @x_2), nil) -> #false [0] 1111.34/291.55 #eq(nil, ::(@y_1, @y_2)) -> #false [0] 1111.34/291.55 #eq(nil, nil) -> #true [0] 1111.34/291.55 #mult(#0, #0) -> #0 [0] 1111.34/291.55 #mult(#0, #neg(@y)) -> #0 [0] 1111.34/291.55 #mult(#0, #pos(@y)) -> #0 [0] 1111.34/291.55 #mult(#neg(@x), #0) -> #0 [0] 1111.34/291.55 #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) [0] 1111.34/291.55 #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) [0] 1111.34/291.55 #mult(#pos(@x), #0) -> #0 [0] 1111.34/291.55 #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) [0] 1111.34/291.55 #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) [0] 1111.34/291.55 #natdiv(#0, #0) -> #divByZero [0] 1111.34/291.55 #natdiv(#s(@x), #s(#0)) -> #s(#natdiv(@x, #s(#0))) [0] 1111.34/291.55 #natdiv(#s(#s(@x145)), #s(#s(@y143))) -> #s(#natdiv(#natsub(@x145, @y143), #s(#s(@y143)))) [0] 1111.34/291.55 #natdiv(#s(@x), #s(@y)) -> #s(#natdiv(null_#natsub, #s(@y))) [0] 1111.34/291.55 #natmult(#0, @y) -> #0 [0] 1111.34/291.55 #natmult(#s(#0), @y) -> #add(#pos(@y), #0) [0] 1111.34/291.55 #natmult(#s(#s(@x146)), @y) -> #add(#pos(@y), #add(#pos(@y), #natmult(@x146, @y))) [0] 1111.34/291.55 #natmult(#s(@x), @y) -> #add(#pos(@y), null_#natmult) [0] 1111.34/291.55 #natsub(@x, #0) -> @x [0] 1111.34/291.55 #natsub(#s(@x), #s(@y)) -> #natsub(@x, @y) [0] 1111.34/291.55 #pred(#0) -> #neg(#s(#0)) [0] 1111.34/291.55 #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) [0] 1111.34/291.55 #pred(#pos(#s(#0))) -> #0 [0] 1111.34/291.55 #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) [0] 1111.34/291.55 #sub(@x, #0) -> @x [0] 1111.34/291.55 #sub(@x, #neg(@y)) -> #add(@x, #pos(@y)) [0] 1111.34/291.55 #sub(@x, #pos(@y)) -> #add(@x, #neg(@y)) [0] 1111.34/291.55 #succ(#0) -> #pos(#s(#0)) [0] 1111.34/291.55 #succ(#neg(#s(#0))) -> #0 [0] 1111.34/291.55 #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) [0] 1111.34/291.55 #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) [0] 1111.34/291.55 #add(v0, v1) -> null_#add [0] 1111.34/291.55 #and(v0, v1) -> null_#and [0] 1111.34/291.55 #div(v0, v1) -> null_#div [0] 1111.34/291.55 #eq(v0, v1) -> null_#eq [0] 1111.34/291.55 #mult(v0, v1) -> null_#mult [0] 1111.34/291.55 #natdiv(v0, v1) -> null_#natdiv [0] 1111.34/291.55 #natmult(v0, v1) -> null_#natmult [0] 1111.34/291.55 #natsub(v0, v1) -> null_#natsub [0] 1111.34/291.55 #pred(v0) -> null_#pred [0] 1111.34/291.55 #sub(v0, v1) -> null_#sub [0] 1111.34/291.55 #succ(v0) -> null_#succ [0] 1111.34/291.55 filter#1(v0, v1) -> null_filter#1 [0] 1111.34/291.55 filter#3(v0, v1, v2) -> null_filter#3 [0] 1111.34/291.55 1111.34/291.55 The TRS has the following type information: 1111.34/291.55 #equal :: :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 -> :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 -> #false:#true:null_#and:null_#eq 1111.34/291.55 #eq :: :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 -> :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 -> #false:#true:null_#and:null_#eq 1111.34/291.55 times :: :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 -> :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 -> :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 1111.34/291.55 #mult :: :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 -> :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 -> :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 1111.34/291.55 minus :: :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 -> :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 -> :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 1111.34/291.55 #sub :: :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 -> :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 -> :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 1111.34/291.55 div :: :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 -> :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 -> :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 1111.34/291.55 #div :: :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 -> :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 -> :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 1111.34/291.55 eratos :: :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 -> :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 1111.34/291.55 eratos#1 :: :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 -> :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 1111.34/291.55 :: :: :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 -> :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 -> :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 1111.34/291.55 filter :: :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 -> :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 -> :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 1111.34/291.55 nil :: :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 1111.34/291.55 filter#1 :: :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 -> :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 -> :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 1111.34/291.55 filter#2 :: :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 -> :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 -> :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 -> :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 1111.42/291.58 filter#3 :: #false:#true:null_#and:null_#eq -> :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 -> :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 -> :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 1111.42/291.58 mod :: :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 -> :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 -> :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 1111.42/291.58 #0 :: :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 1111.42/291.58 #false :: #false:#true:null_#and:null_#eq 1111.42/291.58 #true :: #false:#true:null_#and:null_#eq 1111.42/291.58 #add :: :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 -> :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 -> :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 1111.42/291.58 #neg :: :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 -> :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 1111.42/291.58 #s :: :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 -> :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 1111.42/291.58 #pred :: :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 -> :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 1111.42/291.58 #pos :: :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 -> :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 1111.42/291.58 #succ :: :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 -> :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 1111.42/291.58 #and :: #false:#true:null_#and:null_#eq -> #false:#true:null_#and:null_#eq -> #false:#true:null_#and:null_#eq 1111.42/291.58 #divByZero :: :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 1111.42/291.58 #natdiv :: :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 -> :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 -> :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 1111.42/291.58 #natmult :: :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 -> :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 -> :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 1111.42/291.58 #natsub :: :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 -> :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 -> :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 1111.42/291.58 null_#add :: :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 1111.42/291.58 null_#and :: #false:#true:null_#and:null_#eq 1111.42/291.58 null_#div :: :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 1111.42/291.58 null_#eq :: #false:#true:null_#and:null_#eq 1111.42/291.58 null_#mult :: :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 1111.42/291.58 null_#natdiv :: :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 1111.42/291.58 null_#natmult :: :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 1111.42/291.58 null_#natsub :: :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 1111.42/291.58 null_#pred :: :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 1111.42/291.58 null_#sub :: :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 1111.42/291.58 null_#succ :: :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 1111.42/291.58 null_filter#1 :: :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 1111.42/291.58 null_filter#3 :: :::nil:#0:#s:#neg:#pos:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_filter#1:null_filter#3 1111.42/291.58 1111.42/291.58 Rewrite Strategy: INNERMOST 1111.42/291.58 ---------------------------------------- 1111.42/291.58 1111.42/291.58 (13) CpxTypedWeightedTrsToRntsProof (UPPER BOUND(ID)) 1111.42/291.58 Transformed the TRS into an over-approximating RNTS by (improved) Size Abstraction. 1111.42/291.58 The constant constructors are abstracted as follows: 1111.42/291.58 1111.42/291.58 nil => 2 1111.42/291.58 #0 => 0 1111.42/291.58 #false => 1 1111.42/291.58 #true => 2 1111.42/291.58 #divByZero => 1 1111.42/291.58 null_#add => 0 1111.42/291.58 null_#and => 0 1111.42/291.58 null_#div => 0 1111.42/291.58 null_#eq => 0 1111.42/291.58 null_#mult => 0 1111.42/291.58 null_#natdiv => 0 1111.42/291.58 null_#natmult => 0 1111.42/291.58 null_#natsub => 0 1111.42/291.58 null_#pred => 0 1111.42/291.58 null_#sub => 0 1111.42/291.58 null_#succ => 0 1111.42/291.58 null_filter#1 => 0 1111.42/291.58 null_filter#3 => 0 1111.42/291.58 1111.42/291.58 ---------------------------------------- 1111.42/291.58 1111.42/291.58 (14) 1111.42/291.58 Obligation: 1111.42/291.58 Complexity RNTS consisting of the following rules: 1111.42/291.58 1111.42/291.58 #add(z, z') -{ 0 }-> @y :|: z' = @y, z = 0, @y >= 0 1111.42/291.58 #add(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 1111.42/291.58 #add(z, z') -{ 0 }-> #succ(@y) :|: z = 1 + (1 + 0), z' = @y, @y >= 0 1111.42/291.58 #add(z, z') -{ 0 }-> #succ(0) :|: @x >= 0, z' = @y, z = 1 + (1 + (1 + @x)), @y >= 0 1111.42/291.58 #add(z, z') -{ 0 }-> #succ(#succ(@y)) :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0 1111.42/291.58 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + @x''), @y))) :|: z = 1 + (1 + (1 + (1 + @x''))), z' = @y, @x'' >= 0, @y >= 0 1111.42/291.58 #add(z, z') -{ 0 }-> #pred(@y) :|: z = 1 + (1 + 0), z' = @y, @y >= 0 1111.42/291.58 #add(z, z') -{ 0 }-> #pred(0) :|: @x >= 0, z' = @y, z = 1 + (1 + (1 + @x)), @y >= 0 1111.42/291.58 #add(z, z') -{ 0 }-> #pred(#succ(@y)) :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0 1111.42/291.58 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + @x'), @y))) :|: z = 1 + (1 + (1 + (1 + @x'))), z' = @y, @y >= 0, @x' >= 0 1111.42/291.58 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.42/291.58 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 1111.42/291.58 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 1111.42/291.58 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 1111.42/291.58 #and(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 1111.42/291.58 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.42/291.58 #div(z, z') -{ 0 }-> 1 :|: @x >= 0, z = 1 + @x, z' = 0 1111.42/291.58 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' = 1 + @y, @y >= 0 1111.42/291.58 #div(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 1111.42/291.58 #div(z, z') -{ 0 }-> 1 + #natdiv(@x, @y) :|: @x >= 0, z = 1 + @x, z' = 1 + @y, @y >= 0 1111.42/291.58 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 1111.42/291.58 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.42/291.58 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' = 1 + @y, @y >= 0 1111.42/291.58 #eq(z, z') -{ 0 }-> 1 :|: @x >= 0, z = 1 + @x, z' = 0 1111.42/291.58 #eq(z, z') -{ 0 }-> 1 :|: @x >= 0, z = 1 + @x, z' = 1 + @y, @y >= 0 1111.42/291.58 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 1111.42/291.58 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 1111.42/291.58 #eq(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 1111.42/291.58 #eq(z, z') -{ 0 }-> #eq(@x, @y) :|: @x >= 0, z = 1 + @x, z' = 1 + @y, @y >= 0 1111.42/291.58 #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 1111.42/291.58 #equal(z, z') -{ 1 }-> #eq(@x, @y) :|: z = @x, @x >= 0, z' = @y, @y >= 0 1111.42/291.58 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 1111.42/291.58 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 1 + @y, @y >= 0 1111.42/291.58 #mult(z, z') -{ 0 }-> 0 :|: @x >= 0, z = 1 + @x, z' = 0 1111.42/291.58 #mult(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 1111.42/291.58 #mult(z, z') -{ 0 }-> 1 + #natmult(@x, @y) :|: @x >= 0, z = 1 + @x, z' = 1 + @y, @y >= 0 1111.42/291.58 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.42/291.58 #natdiv(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 1111.42/291.58 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(@x, 1 + 0) :|: @x >= 0, z = 1 + @x, z' = 1 + 0 1111.42/291.58 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(0, 1 + @y) :|: @x >= 0, z = 1 + @x, z' = 1 + @y, @y >= 0 1111.42/291.58 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(#natsub(@x145, @y143), 1 + (1 + @y143)) :|: z = 1 + (1 + @x145), @y143 >= 0, @x145 >= 0, z' = 1 + (1 + @y143) 1111.42/291.58 #natmult(z, z') -{ 0 }-> 0 :|: z' = @y, z = 0, @y >= 0 1111.42/291.58 #natmult(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 1111.42/291.58 #natmult(z, z') -{ 0 }-> #add(1 + @y, 0) :|: z = 1 + 0, z' = @y, @y >= 0 1111.42/291.58 #natmult(z, z') -{ 0 }-> #add(1 + @y, 0) :|: @x >= 0, z = 1 + @x, z' = @y, @y >= 0 1111.42/291.58 #natmult(z, z') -{ 0 }-> #add(1 + @y, #add(1 + @y, #natmult(@x146, @y))) :|: @x146 >= 0, z' = @y, z = 1 + (1 + @x146), @y >= 0 1111.42/291.58 #natsub(z, z') -{ 0 }-> @x :|: z = @x, @x >= 0, z' = 0 1111.42/291.58 #natsub(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 1111.42/291.58 #natsub(z, z') -{ 0 }-> #natsub(@x, @y) :|: @x >= 0, z = 1 + @x, z' = 1 + @y, @y >= 0 1111.42/291.58 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.42/291.58 #pred(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 1111.42/291.58 #pred(z) -{ 0 }-> 1 + (1 + @x) :|: @x >= 0, z = 1 + (1 + (1 + @x)) 1111.42/291.58 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.42/291.58 #pred(z) -{ 0 }-> 1 + (1 + (1 + @x)) :|: @x >= 0, z = 1 + (1 + @x) 1111.42/291.58 #sub(z, z') -{ 0 }-> @x :|: z = @x, @x >= 0, z' = 0 1111.42/291.58 #sub(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 1111.42/291.58 #sub(z, z') -{ 0 }-> #add(@x, 1 + @y) :|: z = @x, @x >= 0, z' = 1 + @y, @y >= 0 1111.42/291.58 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.42/291.58 #succ(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 1111.42/291.58 #succ(z) -{ 0 }-> 1 + (1 + @x) :|: @x >= 0, z = 1 + (1 + (1 + @x)) 1111.42/291.58 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.42/291.58 #succ(z) -{ 0 }-> 1 + (1 + (1 + @x)) :|: @x >= 0, z = 1 + (1 + @x) 1111.42/291.58 div(z, z') -{ 1 }-> #div(@x, @y) :|: z = @x, @x >= 0, z' = @y, @y >= 0 1111.42/291.58 eratos(z) -{ 1 }-> eratos#1(@l) :|: z = @l, @l >= 0 1111.42/291.58 eratos#1(z) -{ 1 }-> 2 :|: z = 2 1111.42/291.58 eratos#1(z) -{ 2 }-> 1 + @x + eratos(filter#1(@xs, @x)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.42/291.58 filter(z, z') -{ 1 }-> filter#1(@l, @p) :|: z = @p, @p >= 0, @l >= 0, z' = @l 1111.42/291.58 filter#1(z, z') -{ 2 }-> filter#2(filter#1(@xs, @p), @p, @x) :|: @p >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' = @p 1111.42/291.58 filter#1(z, z') -{ 1 }-> 2 :|: z = 2, @p >= 0, z' = @p 1111.42/291.58 filter#1(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 1111.42/291.58 filter#2(z, z', z'') -{ 2 }-> filter#3(#equal(minus(@x, times(@x, div(@x, @p))), 0), @x, @xs') :|: @p >= 0, @x >= 0, @xs' >= 0, z = @xs', z'' = @x, z' = @p 1111.42/291.58 filter#3(z, z', z'') -{ 1 }-> @xs' :|: z = 2, z'' = @xs', @x >= 0, @xs' >= 0, z' = @x 1111.42/291.58 filter#3(z, z', z'') -{ 0 }-> 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0 1111.42/291.58 filter#3(z, z', z'') -{ 1 }-> 1 + @x + @xs' :|: z'' = @xs', @x >= 0, @xs' >= 0, z = 1, z' = @x 1111.42/291.58 minus(z, z') -{ 1 }-> #sub(@x, @y) :|: z = @x, @x >= 0, z' = @y, @y >= 0 1111.42/291.58 mod(z, z') -{ 2 }-> minus(@x, times(@x, #div(@x, @y))) :|: z = @x, @x >= 0, z' = @y, @y >= 0 1111.42/291.58 times(z, z') -{ 1 }-> #mult(@x, @y) :|: z = @x, @x >= 0, z' = @y, @y >= 0 1111.42/291.58 1111.42/291.58 1111.42/291.58 ---------------------------------------- 1111.42/291.58 1111.42/291.58 (15) InliningProof (UPPER BOUND(ID)) 1111.42/291.58 Inlined the following terminating rules on right-hand sides where appropriate: 1111.42/291.58 1111.42/291.58 filter#3(z, z', z'') -{ 1 }-> 1 + @x + @xs' :|: z'' = @xs', @x >= 0, @xs' >= 0, z = 1, z' = @x 1111.42/291.58 filter#3(z, z', z'') -{ 1 }-> @xs' :|: z = 2, z'' = @xs', @x >= 0, @xs' >= 0, z' = @x 1111.42/291.58 filter#3(z, z', z'') -{ 0 }-> 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0 1111.42/291.58 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 1111.42/291.58 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 1111.42/291.58 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.42/291.58 #and(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 1111.42/291.58 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 1111.42/291.58 #pred(z) -{ 0 }-> 1 + (1 + (1 + @x)) :|: @x >= 0, z = 1 + (1 + @x) 1111.42/291.58 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.42/291.58 #pred(z) -{ 0 }-> 1 + (1 + @x) :|: @x >= 0, z = 1 + (1 + (1 + @x)) 1111.42/291.58 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.42/291.58 #pred(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 1111.42/291.58 #succ(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 1111.42/291.58 #succ(z) -{ 0 }-> 1 + (1 + @x) :|: @x >= 0, z = 1 + (1 + (1 + @x)) 1111.42/291.58 #succ(z) -{ 0 }-> 1 + (1 + (1 + @x)) :|: @x >= 0, z = 1 + (1 + @x) 1111.42/291.58 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.42/291.58 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.42/291.58 1111.42/291.58 ---------------------------------------- 1111.42/291.58 1111.42/291.58 (16) 1111.42/291.58 Obligation: 1111.42/291.58 Complexity RNTS consisting of the following rules: 1111.42/291.58 1111.42/291.58 #add(z, z') -{ 0 }-> @y :|: z' = @y, z = 0, @y >= 0 1111.42/291.58 #add(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 1111.42/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' = @y, @y >= 0, @y = 1 + (1 + 0) 1111.42/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' = @y, @y >= 0, v0 >= 0, @y = v0 1111.42/291.58 #add(z, z') -{ 0 }-> 0 :|: @x >= 0, z' = @y, z = 1 + (1 + (1 + @x)), @y >= 0, v0 >= 0, 0 = v0 1111.42/291.58 #add(z, z') -{ 0 }-> 0 :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, v0 >= 0, @y = v0, v0' >= 0, 0 = v0' 1111.42/291.58 #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 1111.42/291.58 #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) 1111.42/291.58 #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 1111.42/291.58 #add(z, z') -{ 0 }-> 0 :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, @y = 1 + (1 + 0), v0 >= 0, 0 = v0 1111.42/291.58 #add(z, z') -{ 0 }-> 0 :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, @y = 0, v0 >= 0, 1 + (1 + 0) = v0 1111.42/291.58 #add(z, z') -{ 0 }-> 0 :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, @y = 0, 1 + (1 + 0) = 1 + (1 + 0) 1111.42/291.58 #add(z, z') -{ 0 }-> 1 + (1 + @x) :|: z = 1 + (1 + 0), z' = @y, @y >= 0, @x >= 0, @y = 1 + (1 + (1 + @x)) 1111.42/291.58 #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')) 1111.42/291.58 #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')) 1111.42/291.58 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' = @y, @y >= 0, @y = 0 1111.42/291.58 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: @x >= 0, z' = @y, z = 1 + (1 + (1 + @x)), @y >= 0, 0 = 0 1111.42/291.58 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, v0 >= 0, @y = v0, 0 = 0 1111.42/291.58 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, @y = 1 + (1 + 0), 0 = 0 1111.42/291.58 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + 0), z' = @y, @y >= 0, @x >= 0, @y = 1 + (1 + @x) 1111.42/291.58 #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) 1111.42/291.58 #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') 1111.42/291.58 #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') 1111.42/291.58 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + @x''), @y))) :|: z = 1 + (1 + (1 + (1 + @x''))), z' = @y, @x'' >= 0, @y >= 0 1111.42/291.58 #add(z, z') -{ 0 }-> #pred(0) :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, v0 >= 0, @y = v0 1111.42/291.58 #add(z, z') -{ 0 }-> #pred(0) :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, @y = 1 + (1 + 0) 1111.42/291.58 #add(z, z') -{ 0 }-> #pred(1 + (1 + @x)) :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, @x >= 0, @y = 1 + (1 + (1 + @x)) 1111.42/291.58 #add(z, z') -{ 0 }-> #pred(1 + (1 + 0)) :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, @y = 0 1111.42/291.58 #add(z, z') -{ 0 }-> #pred(1 + (1 + (1 + @x))) :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, @x >= 0, @y = 1 + (1 + @x) 1111.42/291.58 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + @x'), @y))) :|: z = 1 + (1 + (1 + (1 + @x'))), z' = @y, @y >= 0, @x' >= 0 1111.42/291.58 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.42/291.58 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 1111.42/291.58 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 1111.42/291.58 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 1111.42/291.58 #and(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 1111.42/291.58 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.42/291.58 #div(z, z') -{ 0 }-> 1 :|: @x >= 0, z = 1 + @x, z' = 0 1111.42/291.58 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' = 1 + @y, @y >= 0 1111.42/291.58 #div(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 1111.42/291.58 #div(z, z') -{ 0 }-> 1 + #natdiv(@x, @y) :|: @x >= 0, z = 1 + @x, z' = 1 + @y, @y >= 0 1111.42/291.58 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 1111.42/291.58 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.42/291.58 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' = 1 + @y, @y >= 0 1111.42/291.58 #eq(z, z') -{ 0 }-> 1 :|: @x >= 0, z = 1 + @x, z' = 0 1111.42/291.58 #eq(z, z') -{ 0 }-> 1 :|: @x >= 0, z = 1 + @x, z' = 1 + @y, @y >= 0 1111.42/291.58 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 1111.42/291.58 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 1111.42/291.58 #eq(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 1111.42/291.58 #eq(z, z') -{ 0 }-> #eq(@x, @y) :|: @x >= 0, z = 1 + @x, z' = 1 + @y, @y >= 0 1111.42/291.58 #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 1111.42/291.58 #equal(z, z') -{ 1 }-> #eq(@x, @y) :|: z = @x, @x >= 0, z' = @y, @y >= 0 1111.42/291.58 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 1111.42/291.58 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 1 + @y, @y >= 0 1111.42/291.58 #mult(z, z') -{ 0 }-> 0 :|: @x >= 0, z = 1 + @x, z' = 0 1111.42/291.58 #mult(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 1111.42/291.58 #mult(z, z') -{ 0 }-> 1 + #natmult(@x, @y) :|: @x >= 0, z = 1 + @x, z' = 1 + @y, @y >= 0 1111.42/291.58 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.42/291.58 #natdiv(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 1111.42/291.58 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(@x, 1 + 0) :|: @x >= 0, z = 1 + @x, z' = 1 + 0 1111.42/291.58 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(0, 1 + @y) :|: @x >= 0, z = 1 + @x, z' = 1 + @y, @y >= 0 1111.42/291.58 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(#natsub(@x145, @y143), 1 + (1 + @y143)) :|: z = 1 + (1 + @x145), @y143 >= 0, @x145 >= 0, z' = 1 + (1 + @y143) 1111.42/291.58 #natmult(z, z') -{ 0 }-> 0 :|: z' = @y, z = 0, @y >= 0 1111.42/291.58 #natmult(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 1111.42/291.58 #natmult(z, z') -{ 0 }-> #add(1 + @y, 0) :|: z = 1 + 0, z' = @y, @y >= 0 1111.42/291.58 #natmult(z, z') -{ 0 }-> #add(1 + @y, 0) :|: @x >= 0, z = 1 + @x, z' = @y, @y >= 0 1111.42/291.58 #natmult(z, z') -{ 0 }-> #add(1 + @y, #add(1 + @y, #natmult(@x146, @y))) :|: @x146 >= 0, z' = @y, z = 1 + (1 + @x146), @y >= 0 1111.42/291.58 #natsub(z, z') -{ 0 }-> @x :|: z = @x, @x >= 0, z' = 0 1111.42/291.58 #natsub(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 1111.42/291.58 #natsub(z, z') -{ 0 }-> #natsub(@x, @y) :|: @x >= 0, z = 1 + @x, z' = 1 + @y, @y >= 0 1111.42/291.58 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.42/291.58 #pred(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 1111.42/291.58 #pred(z) -{ 0 }-> 1 + (1 + @x) :|: @x >= 0, z = 1 + (1 + (1 + @x)) 1111.42/291.58 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.42/291.58 #pred(z) -{ 0 }-> 1 + (1 + (1 + @x)) :|: @x >= 0, z = 1 + (1 + @x) 1111.42/291.58 #sub(z, z') -{ 0 }-> @x :|: z = @x, @x >= 0, z' = 0 1111.42/291.58 #sub(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 1111.42/291.58 #sub(z, z') -{ 0 }-> #add(@x, 1 + @y) :|: z = @x, @x >= 0, z' = 1 + @y, @y >= 0 1111.42/291.58 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.42/291.58 #succ(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 1111.42/291.58 #succ(z) -{ 0 }-> 1 + (1 + @x) :|: @x >= 0, z = 1 + (1 + (1 + @x)) 1111.42/291.58 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.42/291.58 #succ(z) -{ 0 }-> 1 + (1 + (1 + @x)) :|: @x >= 0, z = 1 + (1 + @x) 1111.42/291.58 div(z, z') -{ 1 }-> #div(@x, @y) :|: z = @x, @x >= 0, z' = @y, @y >= 0 1111.42/291.58 eratos(z) -{ 1 }-> eratos#1(@l) :|: z = @l, @l >= 0 1111.42/291.58 eratos#1(z) -{ 1 }-> 2 :|: z = 2 1111.42/291.58 eratos#1(z) -{ 2 }-> 1 + @x + eratos(filter#1(@xs, @x)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.42/291.58 filter(z, z') -{ 1 }-> filter#1(@l, @p) :|: z = @p, @p >= 0, @l >= 0, z' = @l 1111.42/291.58 filter#1(z, z') -{ 2 }-> filter#2(filter#1(@xs, @p), @p, @x) :|: @p >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' = @p 1111.42/291.58 filter#1(z, z') -{ 1 }-> 2 :|: z = 2, @p >= 0, z' = @p 1111.42/291.58 filter#1(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 1111.42/291.58 filter#2(z, z', z'') -{ 2 }-> filter#3(#equal(minus(@x, times(@x, div(@x, @p))), 0), @x, @xs') :|: @p >= 0, @x >= 0, @xs' >= 0, z = @xs', z'' = @x, z' = @p 1111.42/291.58 filter#3(z, z', z'') -{ 1 }-> @xs' :|: z = 2, z'' = @xs', @x >= 0, @xs' >= 0, z' = @x 1111.42/291.58 filter#3(z, z', z'') -{ 0 }-> 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0 1111.42/291.58 filter#3(z, z', z'') -{ 1 }-> 1 + @x + @xs' :|: z'' = @xs', @x >= 0, @xs' >= 0, z = 1, z' = @x 1111.42/291.58 minus(z, z') -{ 1 }-> #sub(@x, @y) :|: z = @x, @x >= 0, z' = @y, @y >= 0 1111.42/291.58 mod(z, z') -{ 2 }-> minus(@x, times(@x, #div(@x, @y))) :|: z = @x, @x >= 0, z' = @y, @y >= 0 1111.42/291.58 times(z, z') -{ 1 }-> #mult(@x, @y) :|: z = @x, @x >= 0, z' = @y, @y >= 0 1111.42/291.58 1111.42/291.58 1111.42/291.58 ---------------------------------------- 1111.42/291.58 1111.42/291.58 (17) SimplificationProof (BOTH BOUNDS(ID, ID)) 1111.42/291.58 Simplified the RNTS by moving equalities from the constraints into the right-hand sides. 1111.42/291.58 ---------------------------------------- 1111.42/291.58 1111.42/291.58 (18) 1111.42/291.58 Obligation: 1111.42/291.58 Complexity RNTS consisting of the following rules: 1111.42/291.58 1111.42/291.58 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 1111.42/291.58 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.42/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) 1111.42/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 1111.42/291.58 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 1111.42/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' 1111.42/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 1111.42/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) 1111.42/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 1111.42/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 1111.42/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 1111.42/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) 1111.42/291.58 #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')) 1111.42/291.58 #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')) 1111.42/291.58 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 1111.42/291.58 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 1111.42/291.58 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 1111.42/291.58 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 1111.42/291.58 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 1111.42/291.58 #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) 1111.42/291.58 #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') 1111.42/291.58 #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') 1111.42/291.58 #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 1111.42/291.58 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 1111.42/291.58 #add(z, z') -{ 0 }-> #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0 1111.42/291.58 #add(z, z') -{ 0 }-> #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) 1111.42/291.58 #add(z, z') -{ 0 }-> #pred(1 + (1 + 0)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 1111.42/291.58 #add(z, z') -{ 0 }-> #pred(1 + (1 + (z' - 3))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 1111.42/291.58 #add(z, z') -{ 0 }-> #pred(1 + (1 + (1 + (z' - 2)))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 1111.42/291.58 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 1111.42/291.58 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.42/291.58 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 1111.42/291.58 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 1111.42/291.58 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 1111.42/291.58 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.42/291.58 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.42/291.58 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.42/291.58 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.42/291.58 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.42/291.58 #div(z, z') -{ 0 }-> 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 1111.42/291.58 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 1111.42/291.58 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.42/291.58 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 1111.42/291.58 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.42/291.58 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 1111.42/291.58 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 1111.42/291.58 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 1111.42/291.58 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.42/291.58 #eq(z, z') -{ 0 }-> #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 1111.42/291.58 #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 1111.42/291.58 #equal(z, z') -{ 1 }-> #eq(z, z') :|: z >= 0, z' >= 0 1111.42/291.58 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 1111.42/291.58 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.42/291.58 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 1111.42/291.58 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.42/291.58 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 1111.42/291.58 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.42/291.58 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.42/291.58 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0 1111.42/291.58 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0 1111.42/291.58 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(#natsub(z - 2, z' - 2), 1 + (1 + (z' - 2))) :|: z' - 2 >= 0, z - 2 >= 0 1111.42/291.58 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 1111.42/291.58 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.42/291.58 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 1111.42/291.58 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 1111.42/291.58 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 1111.42/291.58 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.42/291.58 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.42/291.58 #natsub(z, z') -{ 0 }-> #natsub(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 1111.42/291.58 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.42/291.58 #pred(z) -{ 0 }-> 0 :|: z >= 0 1111.42/291.58 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.42/291.58 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.42/291.58 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.42/291.58 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.42/291.58 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.42/291.58 #sub(z, z') -{ 0 }-> #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0 1111.42/291.58 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.42/291.58 #succ(z) -{ 0 }-> 0 :|: z >= 0 1111.42/291.58 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.42/291.58 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.42/291.58 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.42/291.58 div(z, z') -{ 1 }-> #div(z, z') :|: z >= 0, z' >= 0 1111.42/291.58 eratos(z) -{ 1 }-> eratos#1(z) :|: z >= 0 1111.42/291.58 eratos#1(z) -{ 1 }-> 2 :|: z = 2 1111.42/291.58 eratos#1(z) -{ 2 }-> 1 + @x + eratos(filter#1(@xs, @x)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.42/291.58 filter(z, z') -{ 1 }-> filter#1(z', z) :|: z >= 0, z' >= 0 1111.42/291.58 filter#1(z, z') -{ 2 }-> filter#2(filter#1(@xs, z'), z', @x) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.42/291.58 filter#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 1111.42/291.58 filter#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.42/291.58 filter#2(z, z', z'') -{ 2 }-> filter#3(#equal(minus(z'', times(z'', div(z'', z'))), 0), z'', z) :|: z' >= 0, z'' >= 0, z >= 0 1111.42/291.58 filter#3(z, z', z'') -{ 1 }-> z'' :|: z = 2, z' >= 0, z'' >= 0 1111.42/291.58 filter#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 1111.42/291.58 filter#3(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z' >= 0, z'' >= 0, z = 1 1111.42/291.58 minus(z, z') -{ 1 }-> #sub(z, z') :|: z >= 0, z' >= 0 1111.42/291.58 mod(z, z') -{ 2 }-> minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0 1111.42/291.58 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 1111.42/291.58 1111.42/291.58 1111.42/291.58 ---------------------------------------- 1111.42/291.58 1111.42/291.58 (19) CpxRntsAnalysisOrderProof (BOTH BOUNDS(ID, ID)) 1111.42/291.58 Found the following analysis order by SCC decomposition: 1111.42/291.58 1111.42/291.58 { #natsub } 1111.42/291.58 { #and } 1111.42/291.58 { filter#3 } 1111.42/291.58 { #pred } 1111.42/291.58 { #succ } 1111.42/291.58 { #natdiv } 1111.42/291.58 { #eq } 1111.42/291.58 { #add } 1111.42/291.58 { #div } 1111.42/291.58 { #equal } 1111.42/291.58 { #natmult } 1111.42/291.58 { #sub } 1111.42/291.58 { div } 1111.42/291.58 { #mult } 1111.42/291.58 { minus } 1111.42/291.58 { times } 1111.42/291.58 { filter#2 } 1111.42/291.58 { mod } 1111.42/291.58 { filter#1 } 1111.42/291.58 { filter } 1111.42/291.58 { eratos, eratos#1 } 1111.42/291.58 1111.42/291.58 ---------------------------------------- 1111.42/291.58 1111.42/291.58 (20) 1111.42/291.58 Obligation: 1111.42/291.58 Complexity RNTS consisting of the following rules: 1111.42/291.58 1111.42/291.58 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 1111.42/291.58 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.42/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) 1111.42/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 1111.42/291.58 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 1111.42/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' 1111.42/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 1111.42/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) 1111.42/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 1111.42/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 1111.42/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 1111.42/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) 1111.42/291.58 #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')) 1111.42/291.58 #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')) 1111.42/291.58 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 1111.42/291.58 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 1111.42/291.58 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 1111.42/291.58 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 1111.42/291.58 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 1111.42/291.58 #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) 1111.42/291.58 #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') 1111.42/291.58 #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') 1111.42/291.58 #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 1111.42/291.58 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 1111.42/291.58 #add(z, z') -{ 0 }-> #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0 1111.42/291.58 #add(z, z') -{ 0 }-> #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) 1111.42/291.58 #add(z, z') -{ 0 }-> #pred(1 + (1 + 0)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 1111.42/291.58 #add(z, z') -{ 0 }-> #pred(1 + (1 + (z' - 3))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 1111.42/291.58 #add(z, z') -{ 0 }-> #pred(1 + (1 + (1 + (z' - 2)))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 1111.42/291.58 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 1111.42/291.58 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.42/291.58 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 1111.42/291.58 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 1111.42/291.58 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 1111.42/291.58 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.42/291.58 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.42/291.58 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.42/291.58 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.42/291.58 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.42/291.58 #div(z, z') -{ 0 }-> 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 1111.42/291.58 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 1111.42/291.58 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.42/291.58 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 1111.42/291.58 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.42/291.58 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 1111.42/291.58 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 1111.42/291.58 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 1111.42/291.58 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.42/291.58 #eq(z, z') -{ 0 }-> #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 1111.42/291.58 #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 1111.42/291.58 #equal(z, z') -{ 1 }-> #eq(z, z') :|: z >= 0, z' >= 0 1111.42/291.58 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 1111.42/291.58 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.42/291.58 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 1111.42/291.58 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.42/291.58 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 1111.42/291.58 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.42/291.58 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.42/291.58 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0 1111.42/291.58 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0 1111.42/291.58 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(#natsub(z - 2, z' - 2), 1 + (1 + (z' - 2))) :|: z' - 2 >= 0, z - 2 >= 0 1111.42/291.58 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 1111.42/291.58 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.42/291.58 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 1111.42/291.58 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 1111.42/291.58 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 1111.42/291.58 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.42/291.58 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.42/291.58 #natsub(z, z') -{ 0 }-> #natsub(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 1111.42/291.58 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.42/291.58 #pred(z) -{ 0 }-> 0 :|: z >= 0 1111.42/291.58 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.42/291.58 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.42/291.58 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.42/291.58 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.42/291.58 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.42/291.58 #sub(z, z') -{ 0 }-> #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0 1111.42/291.58 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.42/291.58 #succ(z) -{ 0 }-> 0 :|: z >= 0 1111.42/291.58 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.42/291.58 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.42/291.58 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.42/291.58 div(z, z') -{ 1 }-> #div(z, z') :|: z >= 0, z' >= 0 1111.42/291.58 eratos(z) -{ 1 }-> eratos#1(z) :|: z >= 0 1111.42/291.58 eratos#1(z) -{ 1 }-> 2 :|: z = 2 1111.42/291.58 eratos#1(z) -{ 2 }-> 1 + @x + eratos(filter#1(@xs, @x)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.42/291.58 filter(z, z') -{ 1 }-> filter#1(z', z) :|: z >= 0, z' >= 0 1111.42/291.58 filter#1(z, z') -{ 2 }-> filter#2(filter#1(@xs, z'), z', @x) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.42/291.58 filter#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 1111.42/291.58 filter#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.42/291.58 filter#2(z, z', z'') -{ 2 }-> filter#3(#equal(minus(z'', times(z'', div(z'', z'))), 0), z'', z) :|: z' >= 0, z'' >= 0, z >= 0 1111.42/291.58 filter#3(z, z', z'') -{ 1 }-> z'' :|: z = 2, z' >= 0, z'' >= 0 1111.42/291.58 filter#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 1111.42/291.58 filter#3(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z' >= 0, z'' >= 0, z = 1 1111.42/291.58 minus(z, z') -{ 1 }-> #sub(z, z') :|: z >= 0, z' >= 0 1111.42/291.58 mod(z, z') -{ 2 }-> minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0 1111.42/291.58 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 1111.42/291.58 1111.42/291.58 Function symbols to be analyzed: {#natsub}, {#and}, {filter#3}, {#pred}, {#succ}, {#natdiv}, {#eq}, {#add}, {#div}, {#equal}, {#natmult}, {#sub}, {div}, {#mult}, {minus}, {times}, {filter#2}, {mod}, {filter#1}, {filter}, {eratos,eratos#1} 1111.42/291.58 1111.42/291.58 ---------------------------------------- 1111.42/291.58 1111.42/291.58 (21) ResultPropagationProof (UPPER BOUND(ID)) 1111.42/291.58 Applied inner abstraction using the recently inferred runtime/size bounds where possible. 1111.42/291.58 ---------------------------------------- 1111.42/291.58 1111.42/291.58 (22) 1111.42/291.58 Obligation: 1111.42/291.58 Complexity RNTS consisting of the following rules: 1111.42/291.58 1111.42/291.58 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 1111.42/291.58 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.42/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) 1111.42/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 1111.42/291.58 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 1111.42/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' 1111.42/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 1111.42/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) 1111.42/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 1111.42/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 1111.42/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 1111.42/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) 1111.42/291.58 #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')) 1111.42/291.58 #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')) 1111.42/291.58 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 1111.42/291.58 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 1111.42/291.58 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 1111.42/291.58 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 1111.42/291.58 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 1111.42/291.58 #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) 1111.42/291.58 #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') 1111.42/291.58 #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') 1111.42/291.58 #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 1111.42/291.58 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 1111.42/291.58 #add(z, z') -{ 0 }-> #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0 1111.42/291.58 #add(z, z') -{ 0 }-> #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) 1111.42/291.58 #add(z, z') -{ 0 }-> #pred(1 + (1 + 0)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 1111.42/291.58 #add(z, z') -{ 0 }-> #pred(1 + (1 + (z' - 3))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 1111.42/291.58 #add(z, z') -{ 0 }-> #pred(1 + (1 + (1 + (z' - 2)))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 1111.42/291.58 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 1111.42/291.58 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.42/291.58 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 1111.42/291.58 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 1111.42/291.58 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 1111.42/291.58 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.42/291.58 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.42/291.58 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.42/291.58 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.42/291.58 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.42/291.58 #div(z, z') -{ 0 }-> 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 1111.42/291.58 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 1111.42/291.58 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.42/291.58 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 1111.42/291.58 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.42/291.58 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 1111.42/291.58 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 1111.42/291.58 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 1111.42/291.58 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.42/291.58 #eq(z, z') -{ 0 }-> #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 1111.42/291.58 #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 1111.42/291.58 #equal(z, z') -{ 1 }-> #eq(z, z') :|: z >= 0, z' >= 0 1111.42/291.58 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 1111.42/291.58 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.42/291.58 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 1111.42/291.58 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.42/291.58 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 1111.42/291.58 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.42/291.58 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.42/291.58 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0 1111.42/291.58 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0 1111.42/291.58 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(#natsub(z - 2, z' - 2), 1 + (1 + (z' - 2))) :|: z' - 2 >= 0, z - 2 >= 0 1111.42/291.58 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 1111.42/291.58 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.42/291.58 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 1111.42/291.58 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 1111.42/291.58 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 1111.42/291.58 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.42/291.58 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.42/291.58 #natsub(z, z') -{ 0 }-> #natsub(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 1111.42/291.58 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.42/291.58 #pred(z) -{ 0 }-> 0 :|: z >= 0 1111.42/291.58 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.42/291.58 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.42/291.58 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.42/291.58 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.42/291.58 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.42/291.58 #sub(z, z') -{ 0 }-> #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0 1111.42/291.58 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.42/291.58 #succ(z) -{ 0 }-> 0 :|: z >= 0 1111.42/291.58 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.42/291.58 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.42/291.58 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.42/291.58 div(z, z') -{ 1 }-> #div(z, z') :|: z >= 0, z' >= 0 1111.42/291.58 eratos(z) -{ 1 }-> eratos#1(z) :|: z >= 0 1111.42/291.58 eratos#1(z) -{ 1 }-> 2 :|: z = 2 1111.42/291.58 eratos#1(z) -{ 2 }-> 1 + @x + eratos(filter#1(@xs, @x)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.42/291.58 filter(z, z') -{ 1 }-> filter#1(z', z) :|: z >= 0, z' >= 0 1111.42/291.58 filter#1(z, z') -{ 2 }-> filter#2(filter#1(@xs, z'), z', @x) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.42/291.58 filter#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 1111.42/291.58 filter#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.42/291.58 filter#2(z, z', z'') -{ 2 }-> filter#3(#equal(minus(z'', times(z'', div(z'', z'))), 0), z'', z) :|: z' >= 0, z'' >= 0, z >= 0 1111.42/291.58 filter#3(z, z', z'') -{ 1 }-> z'' :|: z = 2, z' >= 0, z'' >= 0 1111.42/291.58 filter#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 1111.42/291.58 filter#3(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z' >= 0, z'' >= 0, z = 1 1111.42/291.58 minus(z, z') -{ 1 }-> #sub(z, z') :|: z >= 0, z' >= 0 1111.42/291.58 mod(z, z') -{ 2 }-> minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0 1111.42/291.58 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 1111.42/291.58 1111.42/291.58 Function symbols to be analyzed: {#natsub}, {#and}, {filter#3}, {#pred}, {#succ}, {#natdiv}, {#eq}, {#add}, {#div}, {#equal}, {#natmult}, {#sub}, {div}, {#mult}, {minus}, {times}, {filter#2}, {mod}, {filter#1}, {filter}, {eratos,eratos#1} 1111.42/291.58 1111.42/291.58 ---------------------------------------- 1111.42/291.58 1111.42/291.58 (23) IntTrsBoundProof (UPPER BOUND(ID)) 1111.42/291.58 1111.42/291.58 Computed SIZE bound using KoAT for: #natsub 1111.42/291.58 after applying outer abstraction to obtain an ITS, 1111.42/291.58 resulting in: O(n^1) with polynomial bound: z 1111.42/291.58 1111.42/291.58 ---------------------------------------- 1111.42/291.58 1111.42/291.58 (24) 1111.42/291.58 Obligation: 1111.42/291.58 Complexity RNTS consisting of the following rules: 1111.42/291.58 1111.42/291.58 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 1111.42/291.58 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.42/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) 1111.42/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 1111.42/291.58 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 1111.42/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' 1111.42/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 1111.42/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) 1111.42/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 1111.42/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 1111.42/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 1111.42/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) 1111.42/291.58 #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')) 1111.42/291.58 #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')) 1111.42/291.58 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 1111.42/291.58 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 1111.42/291.58 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 1111.42/291.58 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 1111.42/291.58 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 1111.42/291.58 #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) 1111.42/291.58 #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') 1111.42/291.58 #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') 1111.42/291.58 #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 1111.42/291.58 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 1111.42/291.58 #add(z, z') -{ 0 }-> #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0 1111.42/291.58 #add(z, z') -{ 0 }-> #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) 1111.42/291.58 #add(z, z') -{ 0 }-> #pred(1 + (1 + 0)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 1111.42/291.58 #add(z, z') -{ 0 }-> #pred(1 + (1 + (z' - 3))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 1111.42/291.58 #add(z, z') -{ 0 }-> #pred(1 + (1 + (1 + (z' - 2)))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 1111.42/291.58 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 1111.42/291.58 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.42/291.58 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 1111.42/291.58 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 1111.42/291.58 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 1111.42/291.58 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.42/291.58 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.42/291.58 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.42/291.58 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.42/291.58 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.42/291.58 #div(z, z') -{ 0 }-> 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 1111.42/291.58 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 1111.42/291.58 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.42/291.58 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 1111.42/291.58 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.42/291.58 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 1111.42/291.58 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 1111.42/291.58 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 1111.42/291.58 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.42/291.58 #eq(z, z') -{ 0 }-> #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 1111.42/291.58 #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 1111.42/291.58 #equal(z, z') -{ 1 }-> #eq(z, z') :|: z >= 0, z' >= 0 1111.42/291.58 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 1111.42/291.58 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.42/291.58 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 1111.42/291.58 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.42/291.58 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 1111.42/291.58 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.42/291.58 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.42/291.58 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0 1111.42/291.58 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0 1111.42/291.58 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(#natsub(z - 2, z' - 2), 1 + (1 + (z' - 2))) :|: z' - 2 >= 0, z - 2 >= 0 1111.42/291.58 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 1111.42/291.58 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.42/291.58 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 1111.42/291.58 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 1111.42/291.58 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 1111.42/291.58 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.42/291.58 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.42/291.58 #natsub(z, z') -{ 0 }-> #natsub(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 1111.42/291.58 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.42/291.58 #pred(z) -{ 0 }-> 0 :|: z >= 0 1111.42/291.58 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.42/291.58 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.42/291.58 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.42/291.58 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.42/291.58 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.42/291.58 #sub(z, z') -{ 0 }-> #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0 1111.42/291.58 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.42/291.58 #succ(z) -{ 0 }-> 0 :|: z >= 0 1111.42/291.58 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.42/291.58 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.42/291.58 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.42/291.58 div(z, z') -{ 1 }-> #div(z, z') :|: z >= 0, z' >= 0 1111.42/291.58 eratos(z) -{ 1 }-> eratos#1(z) :|: z >= 0 1111.42/291.58 eratos#1(z) -{ 1 }-> 2 :|: z = 2 1111.42/291.58 eratos#1(z) -{ 2 }-> 1 + @x + eratos(filter#1(@xs, @x)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.42/291.58 filter(z, z') -{ 1 }-> filter#1(z', z) :|: z >= 0, z' >= 0 1111.42/291.58 filter#1(z, z') -{ 2 }-> filter#2(filter#1(@xs, z'), z', @x) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.42/291.58 filter#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 1111.42/291.58 filter#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.42/291.58 filter#2(z, z', z'') -{ 2 }-> filter#3(#equal(minus(z'', times(z'', div(z'', z'))), 0), z'', z) :|: z' >= 0, z'' >= 0, z >= 0 1111.42/291.58 filter#3(z, z', z'') -{ 1 }-> z'' :|: z = 2, z' >= 0, z'' >= 0 1111.42/291.58 filter#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 1111.42/291.58 filter#3(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z' >= 0, z'' >= 0, z = 1 1111.42/291.58 minus(z, z') -{ 1 }-> #sub(z, z') :|: z >= 0, z' >= 0 1111.42/291.58 mod(z, z') -{ 2 }-> minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0 1111.42/291.58 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 1111.42/291.58 1111.42/291.58 Function symbols to be analyzed: {#natsub}, {#and}, {filter#3}, {#pred}, {#succ}, {#natdiv}, {#eq}, {#add}, {#div}, {#equal}, {#natmult}, {#sub}, {div}, {#mult}, {minus}, {times}, {filter#2}, {mod}, {filter#1}, {filter}, {eratos,eratos#1} 1111.42/291.58 Previous analysis results are: 1111.42/291.58 #natsub: runtime: ?, size: O(n^1) [z] 1111.42/291.58 1111.42/291.58 ---------------------------------------- 1111.42/291.58 1111.42/291.58 (25) IntTrsBoundProof (UPPER BOUND(ID)) 1111.42/291.58 1111.42/291.58 Computed RUNTIME bound using CoFloCo for: #natsub 1111.42/291.58 after applying outer abstraction to obtain an ITS, 1111.42/291.58 resulting in: O(1) with polynomial bound: 0 1111.42/291.58 1111.42/291.58 ---------------------------------------- 1111.42/291.58 1111.42/291.58 (26) 1111.42/291.58 Obligation: 1111.42/291.58 Complexity RNTS consisting of the following rules: 1111.42/291.58 1111.42/291.58 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 1111.42/291.58 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.42/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) 1111.42/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 1111.42/291.58 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 1111.42/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' 1111.42/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 1111.42/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) 1111.42/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 1111.42/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 1111.42/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 1111.42/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) 1111.42/291.58 #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')) 1111.42/291.58 #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')) 1111.42/291.58 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 1111.42/291.58 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 1111.42/291.58 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 1111.42/291.58 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 1111.42/291.58 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 1111.42/291.58 #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) 1111.42/291.58 #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') 1111.42/291.58 #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') 1111.42/291.58 #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 1111.42/291.58 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 1111.42/291.58 #add(z, z') -{ 0 }-> #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0 1111.42/291.58 #add(z, z') -{ 0 }-> #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) 1111.42/291.58 #add(z, z') -{ 0 }-> #pred(1 + (1 + 0)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 1111.42/291.58 #add(z, z') -{ 0 }-> #pred(1 + (1 + (z' - 3))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 1111.42/291.58 #add(z, z') -{ 0 }-> #pred(1 + (1 + (1 + (z' - 2)))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 1111.42/291.58 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 1111.42/291.58 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.42/291.58 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 1111.42/291.58 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 1111.42/291.58 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 1111.42/291.58 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.42/291.58 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.42/291.58 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.42/291.58 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.42/291.58 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.42/291.58 #div(z, z') -{ 0 }-> 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 1111.42/291.58 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 1111.42/291.58 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.42/291.58 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 1111.42/291.58 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.42/291.58 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 1111.42/291.58 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 1111.42/291.58 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 1111.42/291.58 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.42/291.58 #eq(z, z') -{ 0 }-> #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 1111.42/291.58 #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 1111.42/291.58 #equal(z, z') -{ 1 }-> #eq(z, z') :|: z >= 0, z' >= 0 1111.42/291.58 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 1111.42/291.58 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.42/291.58 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 1111.42/291.58 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.42/291.58 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 1111.42/291.58 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.42/291.58 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.42/291.58 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0 1111.42/291.58 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0 1111.42/291.58 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(#natsub(z - 2, z' - 2), 1 + (1 + (z' - 2))) :|: z' - 2 >= 0, z - 2 >= 0 1111.42/291.58 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 1111.42/291.58 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.42/291.58 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 1111.42/291.58 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 1111.42/291.58 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 1111.42/291.58 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.42/291.58 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.42/291.58 #natsub(z, z') -{ 0 }-> #natsub(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 1111.42/291.58 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.42/291.58 #pred(z) -{ 0 }-> 0 :|: z >= 0 1111.42/291.58 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.42/291.58 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.42/291.58 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.42/291.58 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.42/291.58 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.42/291.58 #sub(z, z') -{ 0 }-> #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0 1111.42/291.58 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.42/291.58 #succ(z) -{ 0 }-> 0 :|: z >= 0 1111.42/291.58 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.42/291.58 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.42/291.58 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.42/291.58 div(z, z') -{ 1 }-> #div(z, z') :|: z >= 0, z' >= 0 1111.42/291.58 eratos(z) -{ 1 }-> eratos#1(z) :|: z >= 0 1111.42/291.58 eratos#1(z) -{ 1 }-> 2 :|: z = 2 1111.42/291.58 eratos#1(z) -{ 2 }-> 1 + @x + eratos(filter#1(@xs, @x)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.42/291.58 filter(z, z') -{ 1 }-> filter#1(z', z) :|: z >= 0, z' >= 0 1111.42/291.58 filter#1(z, z') -{ 2 }-> filter#2(filter#1(@xs, z'), z', @x) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.42/291.58 filter#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 1111.42/291.58 filter#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.42/291.58 filter#2(z, z', z'') -{ 2 }-> filter#3(#equal(minus(z'', times(z'', div(z'', z'))), 0), z'', z) :|: z' >= 0, z'' >= 0, z >= 0 1111.42/291.58 filter#3(z, z', z'') -{ 1 }-> z'' :|: z = 2, z' >= 0, z'' >= 0 1111.42/291.58 filter#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 1111.42/291.58 filter#3(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z' >= 0, z'' >= 0, z = 1 1111.42/291.58 minus(z, z') -{ 1 }-> #sub(z, z') :|: z >= 0, z' >= 0 1111.42/291.58 mod(z, z') -{ 2 }-> minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0 1111.42/291.58 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 1111.42/291.58 1111.42/291.58 Function symbols to be analyzed: {#and}, {filter#3}, {#pred}, {#succ}, {#natdiv}, {#eq}, {#add}, {#div}, {#equal}, {#natmult}, {#sub}, {div}, {#mult}, {minus}, {times}, {filter#2}, {mod}, {filter#1}, {filter}, {eratos,eratos#1} 1111.42/291.58 Previous analysis results are: 1111.42/291.58 #natsub: runtime: O(1) [0], size: O(n^1) [z] 1111.42/291.58 1111.42/291.58 ---------------------------------------- 1111.42/291.58 1111.42/291.58 (27) ResultPropagationProof (UPPER BOUND(ID)) 1111.42/291.58 Applied inner abstraction using the recently inferred runtime/size bounds where possible. 1111.42/291.58 ---------------------------------------- 1111.42/291.58 1111.42/291.58 (28) 1111.42/291.58 Obligation: 1111.42/291.58 Complexity RNTS consisting of the following rules: 1111.42/291.58 1111.42/291.58 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 1111.42/291.58 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.42/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) 1111.42/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 1111.42/291.58 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 1111.42/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' 1111.42/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 1111.42/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) 1111.42/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 1111.42/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 1111.42/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 1111.42/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) 1111.42/291.58 #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')) 1111.42/291.58 #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')) 1111.42/291.58 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 1111.42/291.58 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 1111.42/291.58 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 1111.42/291.58 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 1111.42/291.58 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 1111.42/291.58 #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) 1111.42/291.58 #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') 1111.42/291.58 #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') 1111.42/291.58 #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 1111.42/291.58 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 1111.42/291.58 #add(z, z') -{ 0 }-> #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0 1111.42/291.58 #add(z, z') -{ 0 }-> #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) 1111.42/291.58 #add(z, z') -{ 0 }-> #pred(1 + (1 + 0)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 1111.42/291.58 #add(z, z') -{ 0 }-> #pred(1 + (1 + (z' - 3))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 1111.42/291.58 #add(z, z') -{ 0 }-> #pred(1 + (1 + (1 + (z' - 2)))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 1111.42/291.58 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 1111.42/291.58 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.42/291.58 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 1111.42/291.58 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 1111.42/291.58 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 1111.42/291.58 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.42/291.58 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.42/291.58 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.42/291.58 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.42/291.58 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.42/291.58 #div(z, z') -{ 0 }-> 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 1111.42/291.58 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 1111.42/291.58 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.42/291.58 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 1111.42/291.58 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.42/291.58 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 1111.42/291.58 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 1111.42/291.58 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 1111.42/291.58 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.42/291.58 #eq(z, z') -{ 0 }-> #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 1111.42/291.58 #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 1111.42/291.58 #equal(z, z') -{ 1 }-> #eq(z, z') :|: z >= 0, z' >= 0 1111.42/291.58 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 1111.42/291.58 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.42/291.58 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 1111.42/291.58 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.42/291.58 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 1111.42/291.58 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.42/291.58 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.42/291.58 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(s, 1 + (1 + (z' - 2))) :|: s >= 0, s <= z - 2, z' - 2 >= 0, z - 2 >= 0 1111.42/291.58 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0 1111.42/291.58 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0 1111.42/291.58 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 1111.42/291.58 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.42/291.58 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 1111.42/291.58 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 1111.42/291.58 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 1111.42/291.58 #natsub(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= z - 1, z - 1 >= 0, z' - 1 >= 0 1111.42/291.58 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.42/291.58 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.42/291.58 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.42/291.58 #pred(z) -{ 0 }-> 0 :|: z >= 0 1111.42/291.58 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.42/291.58 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.42/291.58 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.42/291.58 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.42/291.58 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.42/291.58 #sub(z, z') -{ 0 }-> #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0 1111.42/291.58 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.42/291.58 #succ(z) -{ 0 }-> 0 :|: z >= 0 1111.42/291.58 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.42/291.58 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.42/291.58 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.42/291.58 div(z, z') -{ 1 }-> #div(z, z') :|: z >= 0, z' >= 0 1111.42/291.58 eratos(z) -{ 1 }-> eratos#1(z) :|: z >= 0 1111.42/291.58 eratos#1(z) -{ 1 }-> 2 :|: z = 2 1111.42/291.58 eratos#1(z) -{ 2 }-> 1 + @x + eratos(filter#1(@xs, @x)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.42/291.58 filter(z, z') -{ 1 }-> filter#1(z', z) :|: z >= 0, z' >= 0 1111.42/291.58 filter#1(z, z') -{ 2 }-> filter#2(filter#1(@xs, z'), z', @x) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.42/291.58 filter#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 1111.42/291.58 filter#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.42/291.58 filter#2(z, z', z'') -{ 2 }-> filter#3(#equal(minus(z'', times(z'', div(z'', z'))), 0), z'', z) :|: z' >= 0, z'' >= 0, z >= 0 1111.42/291.58 filter#3(z, z', z'') -{ 1 }-> z'' :|: z = 2, z' >= 0, z'' >= 0 1111.42/291.58 filter#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 1111.42/291.58 filter#3(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z' >= 0, z'' >= 0, z = 1 1111.42/291.58 minus(z, z') -{ 1 }-> #sub(z, z') :|: z >= 0, z' >= 0 1111.42/291.58 mod(z, z') -{ 2 }-> minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0 1111.42/291.58 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 1111.42/291.58 1111.42/291.58 Function symbols to be analyzed: {#and}, {filter#3}, {#pred}, {#succ}, {#natdiv}, {#eq}, {#add}, {#div}, {#equal}, {#natmult}, {#sub}, {div}, {#mult}, {minus}, {times}, {filter#2}, {mod}, {filter#1}, {filter}, {eratos,eratos#1} 1111.42/291.58 Previous analysis results are: 1111.42/291.58 #natsub: runtime: O(1) [0], size: O(n^1) [z] 1111.42/291.58 1111.42/291.58 ---------------------------------------- 1111.42/291.58 1111.42/291.58 (29) IntTrsBoundProof (UPPER BOUND(ID)) 1111.42/291.58 1111.42/291.58 Computed SIZE bound using CoFloCo for: #and 1111.42/291.58 after applying outer abstraction to obtain an ITS, 1111.42/291.58 resulting in: O(1) with polynomial bound: 2 1111.42/291.58 1111.42/291.58 ---------------------------------------- 1111.42/291.58 1111.42/291.58 (30) 1111.42/291.58 Obligation: 1111.42/291.58 Complexity RNTS consisting of the following rules: 1111.42/291.58 1111.42/291.58 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 1111.42/291.58 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.42/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) 1111.42/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 1111.42/291.58 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 1111.42/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' 1111.42/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 1111.42/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) 1111.42/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 1111.42/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 1111.42/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 1111.42/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) 1111.42/291.58 #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')) 1111.42/291.58 #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')) 1111.42/291.58 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 1111.42/291.58 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 1111.42/291.58 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 1111.42/291.58 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 1111.42/291.58 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 1111.42/291.58 #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) 1111.42/291.58 #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') 1111.42/291.58 #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') 1111.42/291.58 #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 1111.42/291.58 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 1111.42/291.58 #add(z, z') -{ 0 }-> #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0 1111.42/291.58 #add(z, z') -{ 0 }-> #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) 1111.42/291.58 #add(z, z') -{ 0 }-> #pred(1 + (1 + 0)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 1111.42/291.58 #add(z, z') -{ 0 }-> #pred(1 + (1 + (z' - 3))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 1111.42/291.58 #add(z, z') -{ 0 }-> #pred(1 + (1 + (1 + (z' - 2)))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 1111.42/291.58 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 1111.42/291.58 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.42/291.58 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 1111.42/291.58 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 1111.42/291.58 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 1111.42/291.58 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.42/291.58 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.42/291.58 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.42/291.58 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.42/291.58 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.42/291.58 #div(z, z') -{ 0 }-> 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 1111.42/291.58 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 1111.42/291.58 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.42/291.58 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 1111.42/291.58 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.42/291.58 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 1111.42/291.58 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 1111.42/291.58 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 1111.42/291.58 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.42/291.58 #eq(z, z') -{ 0 }-> #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 1111.42/291.58 #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 1111.42/291.58 #equal(z, z') -{ 1 }-> #eq(z, z') :|: z >= 0, z' >= 0 1111.42/291.58 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 1111.42/291.58 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.42/291.58 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 1111.42/291.58 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.42/291.58 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 1111.42/291.58 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.42/291.58 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.42/291.58 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(s, 1 + (1 + (z' - 2))) :|: s >= 0, s <= z - 2, z' - 2 >= 0, z - 2 >= 0 1111.42/291.58 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0 1111.42/291.58 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0 1111.42/291.58 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 1111.42/291.58 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.42/291.58 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 1111.42/291.58 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 1111.42/291.58 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 1111.42/291.58 #natsub(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= z - 1, z - 1 >= 0, z' - 1 >= 0 1111.42/291.58 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.42/291.58 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.42/291.58 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.42/291.58 #pred(z) -{ 0 }-> 0 :|: z >= 0 1111.42/291.58 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.42/291.58 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.42/291.58 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.42/291.58 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.42/291.58 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.42/291.58 #sub(z, z') -{ 0 }-> #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0 1111.42/291.59 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.42/291.59 #succ(z) -{ 0 }-> 0 :|: z >= 0 1111.42/291.59 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.42/291.59 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.42/291.59 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.42/291.59 div(z, z') -{ 1 }-> #div(z, z') :|: z >= 0, z' >= 0 1111.42/291.59 eratos(z) -{ 1 }-> eratos#1(z) :|: z >= 0 1111.42/291.59 eratos#1(z) -{ 1 }-> 2 :|: z = 2 1111.42/291.59 eratos#1(z) -{ 2 }-> 1 + @x + eratos(filter#1(@xs, @x)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.42/291.59 filter(z, z') -{ 1 }-> filter#1(z', z) :|: z >= 0, z' >= 0 1111.42/291.59 filter#1(z, z') -{ 2 }-> filter#2(filter#1(@xs, z'), z', @x) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.42/291.59 filter#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 1111.42/291.59 filter#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.42/291.59 filter#2(z, z', z'') -{ 2 }-> filter#3(#equal(minus(z'', times(z'', div(z'', z'))), 0), z'', z) :|: z' >= 0, z'' >= 0, z >= 0 1111.42/291.59 filter#3(z, z', z'') -{ 1 }-> z'' :|: z = 2, z' >= 0, z'' >= 0 1111.42/291.59 filter#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 1111.42/291.59 filter#3(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z' >= 0, z'' >= 0, z = 1 1111.42/291.59 minus(z, z') -{ 1 }-> #sub(z, z') :|: z >= 0, z' >= 0 1111.42/291.59 mod(z, z') -{ 2 }-> minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0 1111.42/291.59 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 1111.42/291.59 1111.42/291.59 Function symbols to be analyzed: {#and}, {filter#3}, {#pred}, {#succ}, {#natdiv}, {#eq}, {#add}, {#div}, {#equal}, {#natmult}, {#sub}, {div}, {#mult}, {minus}, {times}, {filter#2}, {mod}, {filter#1}, {filter}, {eratos,eratos#1} 1111.42/291.59 Previous analysis results are: 1111.42/291.59 #natsub: runtime: O(1) [0], size: O(n^1) [z] 1111.42/291.59 #and: runtime: ?, size: O(1) [2] 1111.42/291.59 1111.42/291.59 ---------------------------------------- 1111.42/291.59 1111.42/291.59 (31) IntTrsBoundProof (UPPER BOUND(ID)) 1111.42/291.59 1111.42/291.59 Computed RUNTIME bound using CoFloCo for: #and 1111.42/291.59 after applying outer abstraction to obtain an ITS, 1111.42/291.59 resulting in: O(1) with polynomial bound: 0 1111.42/291.59 1111.42/291.59 ---------------------------------------- 1111.42/291.59 1111.42/291.59 (32) 1111.42/291.59 Obligation: 1111.42/291.59 Complexity RNTS consisting of the following rules: 1111.42/291.59 1111.42/291.59 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 1111.42/291.59 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.42/291.59 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) 1111.42/291.59 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 1111.42/291.59 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 1111.42/291.59 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' 1111.42/291.59 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 1111.42/291.59 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) 1111.42/291.59 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 1111.42/291.59 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 1111.42/291.59 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 1111.42/291.59 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) 1111.42/291.59 #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')) 1111.42/291.59 #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')) 1111.42/291.59 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 1111.42/291.59 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 1111.42/291.59 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 1111.42/291.59 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 1111.42/291.59 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 1111.42/291.59 #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) 1111.42/291.59 #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') 1111.42/291.59 #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') 1111.42/291.59 #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 1111.42/291.59 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 1111.42/291.59 #add(z, z') -{ 0 }-> #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0 1111.42/291.59 #add(z, z') -{ 0 }-> #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) 1111.42/291.59 #add(z, z') -{ 0 }-> #pred(1 + (1 + 0)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 1111.42/291.59 #add(z, z') -{ 0 }-> #pred(1 + (1 + (z' - 3))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 1111.42/291.59 #add(z, z') -{ 0 }-> #pred(1 + (1 + (1 + (z' - 2)))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 1111.42/291.59 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 1111.42/291.59 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.42/291.59 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 1111.42/291.59 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 1111.42/291.59 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 1111.42/291.59 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.42/291.59 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.42/291.59 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.42/291.59 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.42/291.59 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.42/291.59 #div(z, z') -{ 0 }-> 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 1111.42/291.59 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 1111.42/291.59 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.42/291.59 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 1111.42/291.59 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.42/291.59 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 1111.42/291.59 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 1111.42/291.59 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 1111.42/291.59 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.42/291.59 #eq(z, z') -{ 0 }-> #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 1111.42/291.59 #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 1111.42/291.59 #equal(z, z') -{ 1 }-> #eq(z, z') :|: z >= 0, z' >= 0 1111.42/291.59 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 1111.42/291.59 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.42/291.59 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 1111.42/291.59 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.42/291.59 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 1111.42/291.59 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.42/291.59 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.42/291.59 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(s, 1 + (1 + (z' - 2))) :|: s >= 0, s <= z - 2, z' - 2 >= 0, z - 2 >= 0 1111.42/291.59 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0 1111.42/291.59 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0 1111.42/291.59 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 1111.42/291.59 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.42/291.59 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 1111.42/291.59 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 1111.42/291.59 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 1111.42/291.59 #natsub(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= z - 1, z - 1 >= 0, z' - 1 >= 0 1111.42/291.59 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.42/291.59 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.42/291.59 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.42/291.59 #pred(z) -{ 0 }-> 0 :|: z >= 0 1111.42/291.59 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.42/291.59 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.42/291.59 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.42/291.59 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.42/291.59 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.42/291.59 #sub(z, z') -{ 0 }-> #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0 1111.42/291.59 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.42/291.59 #succ(z) -{ 0 }-> 0 :|: z >= 0 1111.42/291.59 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.42/291.59 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.42/291.59 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.42/291.59 div(z, z') -{ 1 }-> #div(z, z') :|: z >= 0, z' >= 0 1111.42/291.59 eratos(z) -{ 1 }-> eratos#1(z) :|: z >= 0 1111.42/291.59 eratos#1(z) -{ 1 }-> 2 :|: z = 2 1111.42/291.59 eratos#1(z) -{ 2 }-> 1 + @x + eratos(filter#1(@xs, @x)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.42/291.59 filter(z, z') -{ 1 }-> filter#1(z', z) :|: z >= 0, z' >= 0 1111.42/291.59 filter#1(z, z') -{ 2 }-> filter#2(filter#1(@xs, z'), z', @x) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.42/291.59 filter#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 1111.72/291.64 filter#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.64 filter#2(z, z', z'') -{ 2 }-> filter#3(#equal(minus(z'', times(z'', div(z'', z'))), 0), z'', z) :|: z' >= 0, z'' >= 0, z >= 0 1111.72/291.64 filter#3(z, z', z'') -{ 1 }-> z'' :|: z = 2, z' >= 0, z'' >= 0 1111.72/291.64 filter#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 1111.72/291.64 filter#3(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z' >= 0, z'' >= 0, z = 1 1111.72/291.64 minus(z, z') -{ 1 }-> #sub(z, z') :|: z >= 0, z' >= 0 1111.72/291.64 mod(z, z') -{ 2 }-> minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0 1111.72/291.64 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 1111.72/291.64 1111.72/291.64 Function symbols to be analyzed: {filter#3}, {#pred}, {#succ}, {#natdiv}, {#eq}, {#add}, {#div}, {#equal}, {#natmult}, {#sub}, {div}, {#mult}, {minus}, {times}, {filter#2}, {mod}, {filter#1}, {filter}, {eratos,eratos#1} 1111.72/291.64 Previous analysis results are: 1111.72/291.64 #natsub: runtime: O(1) [0], size: O(n^1) [z] 1111.72/291.64 #and: runtime: O(1) [0], size: O(1) [2] 1111.72/291.64 1111.72/291.64 ---------------------------------------- 1111.72/291.64 1111.72/291.64 (33) ResultPropagationProof (UPPER BOUND(ID)) 1111.72/291.64 Applied inner abstraction using the recently inferred runtime/size bounds where possible. 1111.72/291.64 ---------------------------------------- 1111.72/291.64 1111.72/291.64 (34) 1111.72/291.64 Obligation: 1111.72/291.64 Complexity RNTS consisting of the following rules: 1111.72/291.64 1111.72/291.64 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 1111.72/291.64 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.64 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) 1111.72/291.64 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 1111.72/291.64 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 1111.72/291.64 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' 1111.72/291.64 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 1111.72/291.64 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) 1111.72/291.64 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 1111.72/291.64 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 1111.72/291.64 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 1111.72/291.64 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) 1111.72/291.64 #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')) 1111.72/291.64 #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')) 1111.72/291.64 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 1111.72/291.64 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 1111.72/291.64 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 1111.72/291.64 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 1111.72/291.64 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 1111.72/291.64 #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) 1111.72/291.64 #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') 1111.72/291.64 #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') 1111.72/291.64 #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 1111.72/291.64 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 1111.72/291.64 #add(z, z') -{ 0 }-> #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0 1111.72/291.64 #add(z, z') -{ 0 }-> #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) 1111.72/291.64 #add(z, z') -{ 0 }-> #pred(1 + (1 + 0)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 1111.72/291.64 #add(z, z') -{ 0 }-> #pred(1 + (1 + (z' - 3))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 1111.72/291.64 #add(z, z') -{ 0 }-> #pred(1 + (1 + (1 + (z' - 2)))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 1111.72/291.64 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 1111.72/291.64 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.72/291.64 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 1111.72/291.64 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 1111.72/291.64 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 1111.72/291.64 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.64 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.72/291.64 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.72/291.64 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.72/291.64 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.64 #div(z, z') -{ 0 }-> 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 1111.72/291.64 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 1111.72/291.64 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.72/291.64 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 1111.72/291.64 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.72/291.64 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 1111.72/291.64 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 1111.72/291.64 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 1111.72/291.64 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.64 #eq(z, z') -{ 0 }-> #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 1111.72/291.64 #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 1111.72/291.64 #equal(z, z') -{ 1 }-> #eq(z, z') :|: z >= 0, z' >= 0 1111.72/291.64 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 1111.72/291.64 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.72/291.64 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 1111.72/291.64 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.64 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 1111.72/291.64 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.72/291.64 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.64 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(s, 1 + (1 + (z' - 2))) :|: s >= 0, s <= z - 2, z' - 2 >= 0, z - 2 >= 0 1111.72/291.64 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0 1111.72/291.64 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0 1111.72/291.64 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 1111.72/291.64 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.64 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 1111.72/291.64 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 1111.72/291.64 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 1111.72/291.65 #natsub(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= z - 1, z - 1 >= 0, z' - 1 >= 0 1111.72/291.65 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.72/291.65 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.65 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.72/291.65 #pred(z) -{ 0 }-> 0 :|: z >= 0 1111.72/291.65 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.72/291.65 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.72/291.65 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.72/291.65 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.72/291.65 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.65 #sub(z, z') -{ 0 }-> #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0 1111.72/291.65 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.72/291.65 #succ(z) -{ 0 }-> 0 :|: z >= 0 1111.72/291.65 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.72/291.65 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.72/291.65 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.72/291.65 div(z, z') -{ 1 }-> #div(z, z') :|: z >= 0, z' >= 0 1111.72/291.65 eratos(z) -{ 1 }-> eratos#1(z) :|: z >= 0 1111.72/291.65 eratos#1(z) -{ 1 }-> 2 :|: z = 2 1111.72/291.65 eratos#1(z) -{ 2 }-> 1 + @x + eratos(filter#1(@xs, @x)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.72/291.65 filter(z, z') -{ 1 }-> filter#1(z', z) :|: z >= 0, z' >= 0 1111.72/291.65 filter#1(z, z') -{ 2 }-> filter#2(filter#1(@xs, z'), z', @x) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.72/291.65 filter#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 1111.72/291.65 filter#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.65 filter#2(z, z', z'') -{ 2 }-> filter#3(#equal(minus(z'', times(z'', div(z'', z'))), 0), z'', z) :|: z' >= 0, z'' >= 0, z >= 0 1111.72/291.65 filter#3(z, z', z'') -{ 1 }-> z'' :|: z = 2, z' >= 0, z'' >= 0 1111.72/291.65 filter#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 1111.72/291.65 filter#3(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z' >= 0, z'' >= 0, z = 1 1111.72/291.65 minus(z, z') -{ 1 }-> #sub(z, z') :|: z >= 0, z' >= 0 1111.72/291.65 mod(z, z') -{ 2 }-> minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0 1111.72/291.65 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 1111.72/291.65 1111.72/291.65 Function symbols to be analyzed: {filter#3}, {#pred}, {#succ}, {#natdiv}, {#eq}, {#add}, {#div}, {#equal}, {#natmult}, {#sub}, {div}, {#mult}, {minus}, {times}, {filter#2}, {mod}, {filter#1}, {filter}, {eratos,eratos#1} 1111.72/291.65 Previous analysis results are: 1111.72/291.65 #natsub: runtime: O(1) [0], size: O(n^1) [z] 1111.72/291.65 #and: runtime: O(1) [0], size: O(1) [2] 1111.72/291.65 1111.72/291.65 ---------------------------------------- 1111.72/291.65 1111.72/291.65 (35) IntTrsBoundProof (UPPER BOUND(ID)) 1111.72/291.65 1111.72/291.65 Computed SIZE bound using CoFloCo for: filter#3 1111.72/291.65 after applying outer abstraction to obtain an ITS, 1111.72/291.65 resulting in: O(n^1) with polynomial bound: 1 + z' + z'' 1111.72/291.65 1111.72/291.65 ---------------------------------------- 1111.72/291.65 1111.72/291.65 (36) 1111.72/291.65 Obligation: 1111.72/291.65 Complexity RNTS consisting of the following rules: 1111.72/291.65 1111.72/291.65 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 1111.72/291.65 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.65 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) 1111.72/291.65 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 1111.72/291.65 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 1111.72/291.65 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' 1111.72/291.65 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 1111.72/291.65 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) 1111.72/291.65 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 1111.72/291.65 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 1111.72/291.65 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 1111.72/291.65 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) 1111.72/291.65 #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')) 1111.72/291.65 #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')) 1111.72/291.65 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 1111.72/291.65 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 1111.72/291.65 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 1111.72/291.65 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 1111.72/291.65 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 1111.72/291.65 #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) 1111.72/291.65 #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') 1111.72/291.65 #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') 1111.72/291.65 #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 1111.72/291.65 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 1111.72/291.65 #add(z, z') -{ 0 }-> #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0 1111.72/291.65 #add(z, z') -{ 0 }-> #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) 1111.72/291.65 #add(z, z') -{ 0 }-> #pred(1 + (1 + 0)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 1111.72/291.65 #add(z, z') -{ 0 }-> #pred(1 + (1 + (z' - 3))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 1111.72/291.65 #add(z, z') -{ 0 }-> #pred(1 + (1 + (1 + (z' - 2)))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 1111.72/291.65 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 1111.72/291.65 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.72/291.65 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 1111.72/291.65 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 1111.72/291.65 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 1111.72/291.65 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.65 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.72/291.65 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.72/291.65 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.72/291.65 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.65 #div(z, z') -{ 0 }-> 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 1111.72/291.65 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 1111.72/291.65 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.72/291.65 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 1111.72/291.65 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.72/291.65 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 1111.72/291.65 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 1111.72/291.65 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 1111.72/291.65 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.65 #eq(z, z') -{ 0 }-> #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 1111.72/291.65 #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 1111.72/291.65 #equal(z, z') -{ 1 }-> #eq(z, z') :|: z >= 0, z' >= 0 1111.72/291.65 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 1111.72/291.65 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.72/291.65 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 1111.72/291.65 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.65 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 1111.72/291.65 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.72/291.65 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.65 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(s, 1 + (1 + (z' - 2))) :|: s >= 0, s <= z - 2, z' - 2 >= 0, z - 2 >= 0 1111.72/291.65 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0 1111.72/291.65 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0 1111.72/291.65 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 1111.72/291.65 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.65 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 1111.72/291.65 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 1111.72/291.65 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 1111.72/291.65 #natsub(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= z - 1, z - 1 >= 0, z' - 1 >= 0 1111.72/291.65 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.72/291.65 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.65 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.72/291.65 #pred(z) -{ 0 }-> 0 :|: z >= 0 1111.72/291.65 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.72/291.65 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.72/291.65 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.72/291.65 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.72/291.65 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.65 #sub(z, z') -{ 0 }-> #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0 1111.72/291.65 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.72/291.65 #succ(z) -{ 0 }-> 0 :|: z >= 0 1111.72/291.65 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.72/291.65 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.72/291.65 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.72/291.65 div(z, z') -{ 1 }-> #div(z, z') :|: z >= 0, z' >= 0 1111.72/291.65 eratos(z) -{ 1 }-> eratos#1(z) :|: z >= 0 1111.72/291.65 eratos#1(z) -{ 1 }-> 2 :|: z = 2 1111.72/291.65 eratos#1(z) -{ 2 }-> 1 + @x + eratos(filter#1(@xs, @x)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.72/291.65 filter(z, z') -{ 1 }-> filter#1(z', z) :|: z >= 0, z' >= 0 1111.72/291.65 filter#1(z, z') -{ 2 }-> filter#2(filter#1(@xs, z'), z', @x) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.72/291.65 filter#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 1111.72/291.65 filter#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.65 filter#2(z, z', z'') -{ 2 }-> filter#3(#equal(minus(z'', times(z'', div(z'', z'))), 0), z'', z) :|: z' >= 0, z'' >= 0, z >= 0 1111.72/291.65 filter#3(z, z', z'') -{ 1 }-> z'' :|: z = 2, z' >= 0, z'' >= 0 1111.72/291.65 filter#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 1111.72/291.65 filter#3(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z' >= 0, z'' >= 0, z = 1 1111.72/291.65 minus(z, z') -{ 1 }-> #sub(z, z') :|: z >= 0, z' >= 0 1111.72/291.65 mod(z, z') -{ 2 }-> minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0 1111.72/291.65 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 1111.72/291.65 1111.72/291.65 Function symbols to be analyzed: {filter#3}, {#pred}, {#succ}, {#natdiv}, {#eq}, {#add}, {#div}, {#equal}, {#natmult}, {#sub}, {div}, {#mult}, {minus}, {times}, {filter#2}, {mod}, {filter#1}, {filter}, {eratos,eratos#1} 1111.72/291.65 Previous analysis results are: 1111.72/291.65 #natsub: runtime: O(1) [0], size: O(n^1) [z] 1111.72/291.65 #and: runtime: O(1) [0], size: O(1) [2] 1111.72/291.65 filter#3: runtime: ?, size: O(n^1) [1 + z' + z''] 1111.72/291.65 1111.72/291.65 ---------------------------------------- 1111.72/291.65 1111.72/291.65 (37) IntTrsBoundProof (UPPER BOUND(ID)) 1111.72/291.65 1111.72/291.65 Computed RUNTIME bound using CoFloCo for: filter#3 1111.72/291.65 after applying outer abstraction to obtain an ITS, 1111.72/291.65 resulting in: O(1) with polynomial bound: 1 1111.72/291.65 1111.72/291.65 ---------------------------------------- 1111.72/291.65 1111.72/291.65 (38) 1111.72/291.65 Obligation: 1111.72/291.65 Complexity RNTS consisting of the following rules: 1111.72/291.65 1111.72/291.65 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 1111.72/291.65 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.65 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) 1111.72/291.65 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 1111.72/291.65 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 1111.72/291.65 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' 1111.72/291.65 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 1111.72/291.65 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) 1111.72/291.65 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 1111.72/291.65 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 1111.72/291.65 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 1111.72/291.65 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) 1111.72/291.65 #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')) 1111.72/291.65 #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')) 1111.72/291.65 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 1111.72/291.65 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 1111.72/291.65 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 1111.72/291.65 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 1111.72/291.65 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 1111.72/291.65 #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) 1111.72/291.65 #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') 1111.72/291.65 #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') 1111.72/291.65 #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 1111.72/291.65 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 1111.72/291.65 #add(z, z') -{ 0 }-> #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0 1111.72/291.65 #add(z, z') -{ 0 }-> #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) 1111.72/291.65 #add(z, z') -{ 0 }-> #pred(1 + (1 + 0)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 1111.72/291.65 #add(z, z') -{ 0 }-> #pred(1 + (1 + (z' - 3))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 1111.72/291.65 #add(z, z') -{ 0 }-> #pred(1 + (1 + (1 + (z' - 2)))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 1111.72/291.65 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 1111.72/291.65 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.72/291.65 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 1111.72/291.65 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 1111.72/291.65 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 1111.72/291.65 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.65 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.72/291.65 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.72/291.65 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.72/291.65 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.65 #div(z, z') -{ 0 }-> 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 1111.72/291.65 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 1111.72/291.65 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.72/291.65 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 1111.72/291.65 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.72/291.65 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 1111.72/291.65 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 1111.72/291.65 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 1111.72/291.65 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.65 #eq(z, z') -{ 0 }-> #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 1111.72/291.65 #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 1111.72/291.65 #equal(z, z') -{ 1 }-> #eq(z, z') :|: z >= 0, z' >= 0 1111.72/291.65 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 1111.72/291.65 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.72/291.65 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 1111.72/291.65 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.65 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 1111.72/291.65 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.72/291.65 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.65 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(s, 1 + (1 + (z' - 2))) :|: s >= 0, s <= z - 2, z' - 2 >= 0, z - 2 >= 0 1111.72/291.65 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0 1111.72/291.65 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0 1111.72/291.65 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 1111.72/291.65 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.65 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 1111.72/291.65 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 1111.72/291.65 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 1111.72/291.65 #natsub(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= z - 1, z - 1 >= 0, z' - 1 >= 0 1111.72/291.65 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.72/291.65 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.65 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.72/291.65 #pred(z) -{ 0 }-> 0 :|: z >= 0 1111.72/291.65 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.72/291.65 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.72/291.65 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.72/291.65 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.72/291.65 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.65 #sub(z, z') -{ 0 }-> #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0 1111.72/291.65 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.72/291.65 #succ(z) -{ 0 }-> 0 :|: z >= 0 1111.72/291.65 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.72/291.65 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.72/291.65 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.72/291.65 div(z, z') -{ 1 }-> #div(z, z') :|: z >= 0, z' >= 0 1111.72/291.65 eratos(z) -{ 1 }-> eratos#1(z) :|: z >= 0 1111.72/291.65 eratos#1(z) -{ 1 }-> 2 :|: z = 2 1111.72/291.65 eratos#1(z) -{ 2 }-> 1 + @x + eratos(filter#1(@xs, @x)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.72/291.65 filter(z, z') -{ 1 }-> filter#1(z', z) :|: z >= 0, z' >= 0 1111.72/291.65 filter#1(z, z') -{ 2 }-> filter#2(filter#1(@xs, z'), z', @x) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.72/291.65 filter#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 1111.72/291.65 filter#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.65 filter#2(z, z', z'') -{ 2 }-> filter#3(#equal(minus(z'', times(z'', div(z'', z'))), 0), z'', z) :|: z' >= 0, z'' >= 0, z >= 0 1111.72/291.65 filter#3(z, z', z'') -{ 1 }-> z'' :|: z = 2, z' >= 0, z'' >= 0 1111.72/291.65 filter#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 1111.72/291.65 filter#3(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z' >= 0, z'' >= 0, z = 1 1111.72/291.65 minus(z, z') -{ 1 }-> #sub(z, z') :|: z >= 0, z' >= 0 1111.72/291.65 mod(z, z') -{ 2 }-> minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0 1111.72/291.65 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 1111.72/291.65 1111.72/291.65 Function symbols to be analyzed: {#pred}, {#succ}, {#natdiv}, {#eq}, {#add}, {#div}, {#equal}, {#natmult}, {#sub}, {div}, {#mult}, {minus}, {times}, {filter#2}, {mod}, {filter#1}, {filter}, {eratos,eratos#1} 1111.72/291.65 Previous analysis results are: 1111.72/291.65 #natsub: runtime: O(1) [0], size: O(n^1) [z] 1111.72/291.65 #and: runtime: O(1) [0], size: O(1) [2] 1111.72/291.65 filter#3: runtime: O(1) [1], size: O(n^1) [1 + z' + z''] 1111.72/291.65 1111.72/291.65 ---------------------------------------- 1111.72/291.65 1111.72/291.65 (39) ResultPropagationProof (UPPER BOUND(ID)) 1111.72/291.65 Applied inner abstraction using the recently inferred runtime/size bounds where possible. 1111.72/291.65 ---------------------------------------- 1111.72/291.65 1111.72/291.65 (40) 1111.72/291.65 Obligation: 1111.72/291.65 Complexity RNTS consisting of the following rules: 1111.72/291.65 1111.72/291.65 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 1111.72/291.65 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.65 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) 1111.72/291.65 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 1111.72/291.65 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 1111.72/291.65 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' 1111.72/291.65 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 1111.72/291.65 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) 1111.72/291.65 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 1111.72/291.65 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 1111.72/291.65 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 1111.72/291.65 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) 1111.72/291.65 #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')) 1111.72/291.65 #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')) 1111.72/291.65 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 1111.72/291.65 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 1111.72/291.65 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 1111.72/291.65 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 1111.72/291.65 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 1111.72/291.65 #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) 1111.72/291.65 #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') 1111.72/291.65 #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') 1111.72/291.65 #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 1111.72/291.65 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 1111.72/291.65 #add(z, z') -{ 0 }-> #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0 1111.72/291.65 #add(z, z') -{ 0 }-> #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) 1111.72/291.65 #add(z, z') -{ 0 }-> #pred(1 + (1 + 0)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 1111.72/291.65 #add(z, z') -{ 0 }-> #pred(1 + (1 + (z' - 3))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 1111.72/291.65 #add(z, z') -{ 0 }-> #pred(1 + (1 + (1 + (z' - 2)))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 1111.72/291.65 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 1111.72/291.65 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.72/291.65 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 1111.72/291.65 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 1111.72/291.65 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 1111.72/291.65 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.65 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.72/291.65 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.72/291.65 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.72/291.65 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.65 #div(z, z') -{ 0 }-> 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 1111.72/291.65 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 1111.72/291.65 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.72/291.65 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 1111.72/291.65 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.72/291.65 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 1111.72/291.65 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 1111.72/291.65 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 1111.72/291.65 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.65 #eq(z, z') -{ 0 }-> #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 1111.72/291.65 #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 1111.72/291.65 #equal(z, z') -{ 1 }-> #eq(z, z') :|: z >= 0, z' >= 0 1111.72/291.65 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 1111.72/291.65 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.72/291.65 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 1111.72/291.65 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.65 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 1111.72/291.65 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.72/291.65 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.65 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(s, 1 + (1 + (z' - 2))) :|: s >= 0, s <= z - 2, z' - 2 >= 0, z - 2 >= 0 1111.72/291.65 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0 1111.72/291.65 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0 1111.72/291.65 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 1111.72/291.65 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.65 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 1111.72/291.65 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 1111.72/291.65 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 1111.72/291.65 #natsub(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= z - 1, z - 1 >= 0, z' - 1 >= 0 1111.72/291.65 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.72/291.65 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.65 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.72/291.65 #pred(z) -{ 0 }-> 0 :|: z >= 0 1111.72/291.65 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.72/291.65 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.72/291.65 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.72/291.65 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.72/291.65 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.65 #sub(z, z') -{ 0 }-> #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0 1111.72/291.65 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.72/291.65 #succ(z) -{ 0 }-> 0 :|: z >= 0 1111.72/291.65 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.72/291.65 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.72/291.65 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.72/291.65 div(z, z') -{ 1 }-> #div(z, z') :|: z >= 0, z' >= 0 1111.72/291.65 eratos(z) -{ 1 }-> eratos#1(z) :|: z >= 0 1111.72/291.65 eratos#1(z) -{ 1 }-> 2 :|: z = 2 1111.72/291.65 eratos#1(z) -{ 2 }-> 1 + @x + eratos(filter#1(@xs, @x)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.72/291.65 filter(z, z') -{ 1 }-> filter#1(z', z) :|: z >= 0, z' >= 0 1111.72/291.65 filter#1(z, z') -{ 2 }-> filter#2(filter#1(@xs, z'), z', @x) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.72/291.65 filter#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 1111.72/291.65 filter#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.65 filter#2(z, z', z'') -{ 2 }-> filter#3(#equal(minus(z'', times(z'', div(z'', z'))), 0), z'', z) :|: z' >= 0, z'' >= 0, z >= 0 1111.72/291.65 filter#3(z, z', z'') -{ 1 }-> z'' :|: z = 2, z' >= 0, z'' >= 0 1111.72/291.65 filter#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 1111.72/291.65 filter#3(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z' >= 0, z'' >= 0, z = 1 1111.72/291.65 minus(z, z') -{ 1 }-> #sub(z, z') :|: z >= 0, z' >= 0 1111.72/291.65 mod(z, z') -{ 2 }-> minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0 1111.72/291.65 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 1111.72/291.65 1111.72/291.65 Function symbols to be analyzed: {#pred}, {#succ}, {#natdiv}, {#eq}, {#add}, {#div}, {#equal}, {#natmult}, {#sub}, {div}, {#mult}, {minus}, {times}, {filter#2}, {mod}, {filter#1}, {filter}, {eratos,eratos#1} 1111.72/291.65 Previous analysis results are: 1111.72/291.65 #natsub: runtime: O(1) [0], size: O(n^1) [z] 1111.72/291.65 #and: runtime: O(1) [0], size: O(1) [2] 1111.72/291.65 filter#3: runtime: O(1) [1], size: O(n^1) [1 + z' + z''] 1111.72/291.65 1111.72/291.65 ---------------------------------------- 1111.72/291.65 1111.72/291.65 (41) IntTrsBoundProof (UPPER BOUND(ID)) 1111.72/291.65 1111.72/291.65 Computed SIZE bound using CoFloCo for: #pred 1111.72/291.65 after applying outer abstraction to obtain an ITS, 1111.72/291.65 resulting in: O(n^1) with polynomial bound: 2 + z 1111.72/291.65 1111.72/291.65 ---------------------------------------- 1111.72/291.65 1111.72/291.65 (42) 1111.72/291.65 Obligation: 1111.72/291.65 Complexity RNTS consisting of the following rules: 1111.72/291.65 1111.72/291.65 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 1111.72/291.65 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.65 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) 1111.72/291.65 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 1111.72/291.65 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 1111.72/291.65 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' 1111.72/291.65 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 1111.72/291.65 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) 1111.72/291.65 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 1111.72/291.65 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 1111.72/291.65 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 1111.72/291.65 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) 1111.72/291.65 #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')) 1111.72/291.65 #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')) 1111.72/291.65 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 1111.72/291.65 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 1111.72/291.65 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 1111.72/291.65 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 1111.72/291.65 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 1111.72/291.65 #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) 1111.72/291.65 #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') 1111.72/291.65 #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') 1111.72/291.65 #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 1111.72/291.65 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 1111.72/291.65 #add(z, z') -{ 0 }-> #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0 1111.72/291.65 #add(z, z') -{ 0 }-> #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) 1111.72/291.65 #add(z, z') -{ 0 }-> #pred(1 + (1 + 0)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 1111.72/291.65 #add(z, z') -{ 0 }-> #pred(1 + (1 + (z' - 3))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 1111.72/291.65 #add(z, z') -{ 0 }-> #pred(1 + (1 + (1 + (z' - 2)))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 1111.72/291.65 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 1111.72/291.65 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.72/291.65 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 1111.72/291.65 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 1111.72/291.65 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 1111.72/291.65 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.65 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.72/291.65 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.72/291.65 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.72/291.65 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.65 #div(z, z') -{ 0 }-> 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 1111.72/291.65 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 1111.72/291.65 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.72/291.65 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 1111.72/291.65 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.72/291.65 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 1111.72/291.65 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 1111.72/291.65 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 1111.72/291.65 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.65 #eq(z, z') -{ 0 }-> #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 1111.72/291.65 #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 1111.72/291.65 #equal(z, z') -{ 1 }-> #eq(z, z') :|: z >= 0, z' >= 0 1111.72/291.65 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 1111.72/291.65 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.72/291.65 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 1111.72/291.65 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.65 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 1111.72/291.65 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.72/291.65 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.65 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(s, 1 + (1 + (z' - 2))) :|: s >= 0, s <= z - 2, z' - 2 >= 0, z - 2 >= 0 1111.72/291.65 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0 1111.72/291.65 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0 1111.72/291.65 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 1111.72/291.65 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.65 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 1111.72/291.65 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 1111.72/291.65 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 1111.72/291.65 #natsub(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= z - 1, z - 1 >= 0, z' - 1 >= 0 1111.72/291.65 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.72/291.65 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.65 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.72/291.65 #pred(z) -{ 0 }-> 0 :|: z >= 0 1111.72/291.65 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.72/291.65 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.72/291.65 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.72/291.65 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.72/291.65 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.65 #sub(z, z') -{ 0 }-> #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0 1111.72/291.65 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.72/291.65 #succ(z) -{ 0 }-> 0 :|: z >= 0 1111.72/291.65 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.72/291.65 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.72/291.65 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.72/291.65 div(z, z') -{ 1 }-> #div(z, z') :|: z >= 0, z' >= 0 1111.72/291.65 eratos(z) -{ 1 }-> eratos#1(z) :|: z >= 0 1111.72/291.65 eratos#1(z) -{ 1 }-> 2 :|: z = 2 1111.72/291.65 eratos#1(z) -{ 2 }-> 1 + @x + eratos(filter#1(@xs, @x)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.72/291.65 filter(z, z') -{ 1 }-> filter#1(z', z) :|: z >= 0, z' >= 0 1111.72/291.65 filter#1(z, z') -{ 2 }-> filter#2(filter#1(@xs, z'), z', @x) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.72/291.65 filter#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 1111.72/291.65 filter#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.65 filter#2(z, z', z'') -{ 2 }-> filter#3(#equal(minus(z'', times(z'', div(z'', z'))), 0), z'', z) :|: z' >= 0, z'' >= 0, z >= 0 1111.72/291.65 filter#3(z, z', z'') -{ 1 }-> z'' :|: z = 2, z' >= 0, z'' >= 0 1111.72/291.65 filter#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 1111.72/291.65 filter#3(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z' >= 0, z'' >= 0, z = 1 1111.72/291.65 minus(z, z') -{ 1 }-> #sub(z, z') :|: z >= 0, z' >= 0 1111.72/291.65 mod(z, z') -{ 2 }-> minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0 1111.72/291.65 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 1111.72/291.65 1111.72/291.65 Function symbols to be analyzed: {#pred}, {#succ}, {#natdiv}, {#eq}, {#add}, {#div}, {#equal}, {#natmult}, {#sub}, {div}, {#mult}, {minus}, {times}, {filter#2}, {mod}, {filter#1}, {filter}, {eratos,eratos#1} 1111.72/291.65 Previous analysis results are: 1111.72/291.65 #natsub: runtime: O(1) [0], size: O(n^1) [z] 1111.72/291.65 #and: runtime: O(1) [0], size: O(1) [2] 1111.72/291.65 filter#3: runtime: O(1) [1], size: O(n^1) [1 + z' + z''] 1111.72/291.65 #pred: runtime: ?, size: O(n^1) [2 + z] 1111.72/291.65 1111.72/291.65 ---------------------------------------- 1111.72/291.65 1111.72/291.65 (43) IntTrsBoundProof (UPPER BOUND(ID)) 1111.72/291.65 1111.72/291.65 Computed RUNTIME bound using CoFloCo for: #pred 1111.72/291.65 after applying outer abstraction to obtain an ITS, 1111.72/291.65 resulting in: O(1) with polynomial bound: 0 1111.72/291.65 1111.72/291.65 ---------------------------------------- 1111.72/291.65 1111.72/291.65 (44) 1111.72/291.65 Obligation: 1111.72/291.65 Complexity RNTS consisting of the following rules: 1111.72/291.65 1111.72/291.65 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 1111.72/291.65 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.65 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) 1111.72/291.65 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 1111.72/291.65 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 1111.72/291.65 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' 1111.72/291.65 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 1111.72/291.65 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) 1111.72/291.65 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 1111.72/291.65 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 1111.72/291.65 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 1111.72/291.65 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) 1111.72/291.65 #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')) 1111.72/291.65 #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')) 1111.72/291.65 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 1111.72/291.65 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 1111.72/291.65 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 1111.72/291.65 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 1111.72/291.65 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 1111.72/291.65 #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) 1111.72/291.65 #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') 1111.72/291.65 #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') 1111.72/291.65 #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 1111.72/291.65 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 1111.72/291.65 #add(z, z') -{ 0 }-> #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0 1111.72/291.65 #add(z, z') -{ 0 }-> #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) 1111.72/291.65 #add(z, z') -{ 0 }-> #pred(1 + (1 + 0)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 1111.72/291.65 #add(z, z') -{ 0 }-> #pred(1 + (1 + (z' - 3))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 1111.72/291.65 #add(z, z') -{ 0 }-> #pred(1 + (1 + (1 + (z' - 2)))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 1111.72/291.65 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 1111.72/291.65 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.72/291.65 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 1111.72/291.65 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 1111.72/291.65 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 1111.72/291.65 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.65 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.72/291.65 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.72/291.65 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.72/291.65 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.65 #div(z, z') -{ 0 }-> 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 1111.72/291.65 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 1111.72/291.65 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.72/291.65 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 1111.72/291.65 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.72/291.65 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 1111.72/291.65 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 1111.72/291.65 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 1111.72/291.65 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.65 #eq(z, z') -{ 0 }-> #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 1111.72/291.65 #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 1111.72/291.65 #equal(z, z') -{ 1 }-> #eq(z, z') :|: z >= 0, z' >= 0 1111.72/291.65 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 1111.72/291.65 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.72/291.65 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 1111.72/291.65 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.65 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 1111.72/291.65 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.72/291.65 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.65 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(s, 1 + (1 + (z' - 2))) :|: s >= 0, s <= z - 2, z' - 2 >= 0, z - 2 >= 0 1111.72/291.65 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0 1111.72/291.65 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0 1111.72/291.65 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 1111.72/291.65 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.65 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 1111.72/291.65 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 1111.72/291.65 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 1111.72/291.65 #natsub(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= z - 1, z - 1 >= 0, z' - 1 >= 0 1111.72/291.65 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.72/291.65 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.65 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.72/291.65 #pred(z) -{ 0 }-> 0 :|: z >= 0 1111.72/291.65 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.72/291.65 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.72/291.65 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.72/291.65 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.72/291.65 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.65 #sub(z, z') -{ 0 }-> #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0 1111.72/291.65 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.72/291.65 #succ(z) -{ 0 }-> 0 :|: z >= 0 1111.72/291.65 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.72/291.65 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.72/291.65 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.72/291.65 div(z, z') -{ 1 }-> #div(z, z') :|: z >= 0, z' >= 0 1111.72/291.65 eratos(z) -{ 1 }-> eratos#1(z) :|: z >= 0 1111.72/291.65 eratos#1(z) -{ 1 }-> 2 :|: z = 2 1111.72/291.65 eratos#1(z) -{ 2 }-> 1 + @x + eratos(filter#1(@xs, @x)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.72/291.65 filter(z, z') -{ 1 }-> filter#1(z', z) :|: z >= 0, z' >= 0 1111.72/291.65 filter#1(z, z') -{ 2 }-> filter#2(filter#1(@xs, z'), z', @x) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.72/291.65 filter#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 1111.72/291.65 filter#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.65 filter#2(z, z', z'') -{ 2 }-> filter#3(#equal(minus(z'', times(z'', div(z'', z'))), 0), z'', z) :|: z' >= 0, z'' >= 0, z >= 0 1111.72/291.65 filter#3(z, z', z'') -{ 1 }-> z'' :|: z = 2, z' >= 0, z'' >= 0 1111.72/291.65 filter#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 1111.72/291.65 filter#3(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z' >= 0, z'' >= 0, z = 1 1111.72/291.65 minus(z, z') -{ 1 }-> #sub(z, z') :|: z >= 0, z' >= 0 1111.72/291.65 mod(z, z') -{ 2 }-> minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0 1111.72/291.65 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 1111.72/291.65 1111.72/291.65 Function symbols to be analyzed: {#succ}, {#natdiv}, {#eq}, {#add}, {#div}, {#equal}, {#natmult}, {#sub}, {div}, {#mult}, {minus}, {times}, {filter#2}, {mod}, {filter#1}, {filter}, {eratos,eratos#1} 1111.72/291.65 Previous analysis results are: 1111.72/291.65 #natsub: runtime: O(1) [0], size: O(n^1) [z] 1111.72/291.65 #and: runtime: O(1) [0], size: O(1) [2] 1111.72/291.65 filter#3: runtime: O(1) [1], size: O(n^1) [1 + z' + z''] 1111.72/291.65 #pred: runtime: O(1) [0], size: O(n^1) [2 + z] 1111.72/291.65 1111.72/291.65 ---------------------------------------- 1111.72/291.65 1111.72/291.65 (45) ResultPropagationProof (UPPER BOUND(ID)) 1111.72/291.65 Applied inner abstraction using the recently inferred runtime/size bounds where possible. 1111.72/291.65 ---------------------------------------- 1111.72/291.65 1111.72/291.65 (46) 1111.72/291.65 Obligation: 1111.72/291.65 Complexity RNTS consisting of the following rules: 1111.72/291.65 1111.72/291.65 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 1111.72/291.65 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 1111.72/291.65 #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 1111.72/291.65 #add(z, z') -{ 0 }-> s3 :|: s3 >= 0, s3 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) 1111.72/291.65 #add(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 1111.72/291.65 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 1111.72/291.65 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.65 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) 1111.72/291.65 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 1111.72/291.65 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 1111.72/291.65 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' 1111.72/291.65 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 1111.72/291.65 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) 1111.72/291.65 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 1111.72/291.65 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 1111.72/291.65 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 1111.72/291.65 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) 1111.72/291.65 #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')) 1111.72/291.65 #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')) 1111.72/291.65 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 1111.72/291.65 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 1111.72/291.65 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 1111.72/291.65 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 1111.72/291.65 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 1111.72/291.65 #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) 1111.72/291.65 #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') 1111.72/291.65 #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') 1111.72/291.65 #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 1111.72/291.65 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 1111.72/291.65 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 1111.72/291.65 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.72/291.65 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 1111.72/291.65 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 1111.72/291.65 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 1111.72/291.65 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.65 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.72/291.65 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.72/291.65 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.72/291.65 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.65 #div(z, z') -{ 0 }-> 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 1111.72/291.65 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 1111.72/291.65 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.72/291.65 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 1111.72/291.65 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.72/291.65 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 1111.72/291.65 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 1111.72/291.65 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 1111.72/291.65 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.65 #eq(z, z') -{ 0 }-> #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 1111.72/291.65 #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 1111.72/291.65 #equal(z, z') -{ 1 }-> #eq(z, z') :|: z >= 0, z' >= 0 1111.72/291.65 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 1111.72/291.65 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.72/291.65 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 1111.72/291.65 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.65 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 1111.72/291.65 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.72/291.65 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.65 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(s, 1 + (1 + (z' - 2))) :|: s >= 0, s <= z - 2, z' - 2 >= 0, z - 2 >= 0 1111.72/291.65 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0 1111.72/291.65 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0 1111.72/291.65 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 1111.72/291.65 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.65 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 1111.72/291.65 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 1111.72/291.65 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 1111.72/291.65 #natsub(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= z - 1, z - 1 >= 0, z' - 1 >= 0 1111.72/291.65 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.72/291.65 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.65 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.72/291.65 #pred(z) -{ 0 }-> 0 :|: z >= 0 1111.72/291.65 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.72/291.65 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.72/291.65 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.72/291.65 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.72/291.65 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.65 #sub(z, z') -{ 0 }-> #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0 1111.72/291.65 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.72/291.65 #succ(z) -{ 0 }-> 0 :|: z >= 0 1111.72/291.65 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.72/291.65 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.72/291.65 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.72/291.65 div(z, z') -{ 1 }-> #div(z, z') :|: z >= 0, z' >= 0 1111.72/291.65 eratos(z) -{ 1 }-> eratos#1(z) :|: z >= 0 1111.72/291.65 eratos#1(z) -{ 1 }-> 2 :|: z = 2 1111.72/291.65 eratos#1(z) -{ 2 }-> 1 + @x + eratos(filter#1(@xs, @x)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.72/291.65 filter(z, z') -{ 1 }-> filter#1(z', z) :|: z >= 0, z' >= 0 1111.72/291.65 filter#1(z, z') -{ 2 }-> filter#2(filter#1(@xs, z'), z', @x) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.72/291.65 filter#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 1111.72/291.65 filter#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.65 filter#2(z, z', z'') -{ 2 }-> filter#3(#equal(minus(z'', times(z'', div(z'', z'))), 0), z'', z) :|: z' >= 0, z'' >= 0, z >= 0 1111.72/291.65 filter#3(z, z', z'') -{ 1 }-> z'' :|: z = 2, z' >= 0, z'' >= 0 1111.72/291.65 filter#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 1111.72/291.65 filter#3(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z' >= 0, z'' >= 0, z = 1 1111.72/291.65 minus(z, z') -{ 1 }-> #sub(z, z') :|: z >= 0, z' >= 0 1111.72/291.65 mod(z, z') -{ 2 }-> minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0 1111.72/291.65 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 1111.72/291.65 1111.72/291.65 Function symbols to be analyzed: {#succ}, {#natdiv}, {#eq}, {#add}, {#div}, {#equal}, {#natmult}, {#sub}, {div}, {#mult}, {minus}, {times}, {filter#2}, {mod}, {filter#1}, {filter}, {eratos,eratos#1} 1111.72/291.65 Previous analysis results are: 1111.72/291.65 #natsub: runtime: O(1) [0], size: O(n^1) [z] 1111.72/291.65 #and: runtime: O(1) [0], size: O(1) [2] 1111.72/291.65 filter#3: runtime: O(1) [1], size: O(n^1) [1 + z' + z''] 1111.72/291.65 #pred: runtime: O(1) [0], size: O(n^1) [2 + z] 1111.72/291.65 1111.72/291.65 ---------------------------------------- 1111.72/291.65 1111.72/291.65 (47) IntTrsBoundProof (UPPER BOUND(ID)) 1111.72/291.65 1111.72/291.65 Computed SIZE bound using CoFloCo for: #succ 1111.72/291.65 after applying outer abstraction to obtain an ITS, 1111.72/291.65 resulting in: O(n^1) with polynomial bound: 2 + z 1111.72/291.65 1111.72/291.65 ---------------------------------------- 1111.72/291.65 1111.72/291.65 (48) 1111.72/291.65 Obligation: 1111.72/291.65 Complexity RNTS consisting of the following rules: 1111.72/291.65 1111.72/291.65 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 1111.72/291.65 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 1111.72/291.65 #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 1111.72/291.65 #add(z, z') -{ 0 }-> s3 :|: s3 >= 0, s3 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) 1111.72/291.65 #add(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 1111.72/291.65 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 1111.72/291.65 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.65 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) 1111.72/291.65 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 1111.72/291.65 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 1111.72/291.65 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' 1111.72/291.65 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 1111.72/291.65 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) 1111.72/291.65 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 1111.72/291.65 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 1111.72/291.65 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 1111.72/291.65 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) 1111.72/291.65 #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')) 1111.72/291.65 #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')) 1111.72/291.65 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 1111.72/291.65 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 1111.72/291.65 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 1111.72/291.65 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 1111.72/291.65 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 1111.72/291.65 #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) 1111.72/291.65 #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') 1111.72/291.65 #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') 1111.72/291.65 #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 1111.72/291.65 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 1111.72/291.65 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 1111.72/291.65 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.72/291.65 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 1111.72/291.65 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 1111.72/291.65 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 1111.72/291.65 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.65 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.72/291.65 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.72/291.65 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.72/291.65 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.65 #div(z, z') -{ 0 }-> 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 1111.72/291.65 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 1111.72/291.65 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.72/291.65 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 1111.72/291.65 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.72/291.65 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 1111.72/291.65 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 1111.72/291.65 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 1111.72/291.65 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.65 #eq(z, z') -{ 0 }-> #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 1111.72/291.65 #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 1111.72/291.65 #equal(z, z') -{ 1 }-> #eq(z, z') :|: z >= 0, z' >= 0 1111.72/291.65 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 1111.72/291.65 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.72/291.65 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 1111.72/291.65 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.65 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 1111.72/291.65 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.72/291.65 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.65 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(s, 1 + (1 + (z' - 2))) :|: s >= 0, s <= z - 2, z' - 2 >= 0, z - 2 >= 0 1111.72/291.65 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0 1111.72/291.65 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0 1111.72/291.65 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 1111.72/291.65 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.65 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 1111.72/291.65 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 1111.72/291.65 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 1111.72/291.65 #natsub(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= z - 1, z - 1 >= 0, z' - 1 >= 0 1111.72/291.65 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.72/291.65 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.65 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.72/291.65 #pred(z) -{ 0 }-> 0 :|: z >= 0 1111.72/291.65 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.72/291.65 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.72/291.65 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.72/291.65 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.72/291.65 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.65 #sub(z, z') -{ 0 }-> #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0 1111.72/291.65 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.72/291.65 #succ(z) -{ 0 }-> 0 :|: z >= 0 1111.72/291.65 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.72/291.65 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.72/291.65 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.72/291.65 div(z, z') -{ 1 }-> #div(z, z') :|: z >= 0, z' >= 0 1111.72/291.65 eratos(z) -{ 1 }-> eratos#1(z) :|: z >= 0 1111.72/291.65 eratos#1(z) -{ 1 }-> 2 :|: z = 2 1111.72/291.65 eratos#1(z) -{ 2 }-> 1 + @x + eratos(filter#1(@xs, @x)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.72/291.65 filter(z, z') -{ 1 }-> filter#1(z', z) :|: z >= 0, z' >= 0 1111.72/291.65 filter#1(z, z') -{ 2 }-> filter#2(filter#1(@xs, z'), z', @x) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.72/291.65 filter#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 1111.72/291.65 filter#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.65 filter#2(z, z', z'') -{ 2 }-> filter#3(#equal(minus(z'', times(z'', div(z'', z'))), 0), z'', z) :|: z' >= 0, z'' >= 0, z >= 0 1111.72/291.65 filter#3(z, z', z'') -{ 1 }-> z'' :|: z = 2, z' >= 0, z'' >= 0 1111.72/291.65 filter#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 1111.72/291.65 filter#3(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z' >= 0, z'' >= 0, z = 1 1111.72/291.65 minus(z, z') -{ 1 }-> #sub(z, z') :|: z >= 0, z' >= 0 1111.72/291.65 mod(z, z') -{ 2 }-> minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0 1111.72/291.65 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 1111.72/291.65 1111.72/291.65 Function symbols to be analyzed: {#succ}, {#natdiv}, {#eq}, {#add}, {#div}, {#equal}, {#natmult}, {#sub}, {div}, {#mult}, {minus}, {times}, {filter#2}, {mod}, {filter#1}, {filter}, {eratos,eratos#1} 1111.72/291.65 Previous analysis results are: 1111.72/291.65 #natsub: runtime: O(1) [0], size: O(n^1) [z] 1111.72/291.65 #and: runtime: O(1) [0], size: O(1) [2] 1111.72/291.65 filter#3: runtime: O(1) [1], size: O(n^1) [1 + z' + z''] 1111.72/291.65 #pred: runtime: O(1) [0], size: O(n^1) [2 + z] 1111.72/291.65 #succ: runtime: ?, size: O(n^1) [2 + z] 1111.72/291.65 1111.72/291.65 ---------------------------------------- 1111.72/291.65 1111.72/291.65 (49) IntTrsBoundProof (UPPER BOUND(ID)) 1111.72/291.65 1111.72/291.65 Computed RUNTIME bound using CoFloCo for: #succ 1111.72/291.65 after applying outer abstraction to obtain an ITS, 1111.72/291.65 resulting in: O(1) with polynomial bound: 0 1111.72/291.65 1111.72/291.65 ---------------------------------------- 1111.72/291.65 1111.72/291.65 (50) 1111.72/291.65 Obligation: 1111.72/291.65 Complexity RNTS consisting of the following rules: 1111.72/291.65 1111.72/291.65 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 1111.72/291.65 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 1111.72/291.65 #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 1111.72/291.65 #add(z, z') -{ 0 }-> s3 :|: s3 >= 0, s3 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) 1111.72/291.65 #add(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 1111.72/291.65 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 1111.72/291.65 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.65 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) 1111.72/291.65 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 1111.72/291.65 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 1111.72/291.65 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' 1111.72/291.65 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 1111.72/291.65 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) 1111.72/291.65 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 1111.72/291.65 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 1111.72/291.65 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 1111.72/291.65 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) 1111.72/291.65 #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')) 1111.72/291.65 #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')) 1111.72/291.65 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 1111.72/291.65 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 1111.72/291.65 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 1111.72/291.65 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 1111.72/291.65 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 1111.72/291.65 #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) 1111.72/291.65 #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') 1111.72/291.65 #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') 1111.72/291.65 #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 1111.72/291.65 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 1111.72/291.65 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 1111.72/291.65 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.72/291.65 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 1111.72/291.65 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 1111.72/291.65 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 1111.72/291.65 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.65 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.72/291.65 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.72/291.65 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.72/291.65 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.65 #div(z, z') -{ 0 }-> 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 1111.72/291.65 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 1111.72/291.65 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.72/291.65 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 1111.72/291.65 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.72/291.65 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 1111.72/291.65 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 1111.72/291.65 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 1111.72/291.65 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.65 #eq(z, z') -{ 0 }-> #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 1111.72/291.65 #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 1111.72/291.65 #equal(z, z') -{ 1 }-> #eq(z, z') :|: z >= 0, z' >= 0 1111.72/291.65 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 1111.72/291.65 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.72/291.65 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 1111.72/291.65 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.65 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 1111.72/291.65 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.72/291.65 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.65 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(s, 1 + (1 + (z' - 2))) :|: s >= 0, s <= z - 2, z' - 2 >= 0, z - 2 >= 0 1111.72/291.65 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0 1111.72/291.65 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0 1111.72/291.65 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 1111.72/291.65 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.65 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 1111.72/291.65 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 1111.72/291.65 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 1111.72/291.65 #natsub(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= z - 1, z - 1 >= 0, z' - 1 >= 0 1111.72/291.65 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.72/291.65 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.65 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.72/291.65 #pred(z) -{ 0 }-> 0 :|: z >= 0 1111.72/291.65 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.72/291.65 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.72/291.65 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.72/291.65 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.72/291.65 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.65 #sub(z, z') -{ 0 }-> #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0 1111.72/291.65 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.72/291.65 #succ(z) -{ 0 }-> 0 :|: z >= 0 1111.72/291.65 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.72/291.65 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.72/291.65 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.72/291.65 div(z, z') -{ 1 }-> #div(z, z') :|: z >= 0, z' >= 0 1111.72/291.65 eratos(z) -{ 1 }-> eratos#1(z) :|: z >= 0 1111.72/291.65 eratos#1(z) -{ 1 }-> 2 :|: z = 2 1111.72/291.65 eratos#1(z) -{ 2 }-> 1 + @x + eratos(filter#1(@xs, @x)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.72/291.65 filter(z, z') -{ 1 }-> filter#1(z', z) :|: z >= 0, z' >= 0 1111.72/291.65 filter#1(z, z') -{ 2 }-> filter#2(filter#1(@xs, z'), z', @x) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.72/291.65 filter#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 1111.72/291.65 filter#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.65 filter#2(z, z', z'') -{ 2 }-> filter#3(#equal(minus(z'', times(z'', div(z'', z'))), 0), z'', z) :|: z' >= 0, z'' >= 0, z >= 0 1111.72/291.65 filter#3(z, z', z'') -{ 1 }-> z'' :|: z = 2, z' >= 0, z'' >= 0 1111.72/291.65 filter#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 1111.72/291.65 filter#3(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z' >= 0, z'' >= 0, z = 1 1111.72/291.65 minus(z, z') -{ 1 }-> #sub(z, z') :|: z >= 0, z' >= 0 1111.72/291.65 mod(z, z') -{ 2 }-> minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0 1111.72/291.65 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 1111.72/291.65 1111.72/291.65 Function symbols to be analyzed: {#natdiv}, {#eq}, {#add}, {#div}, {#equal}, {#natmult}, {#sub}, {div}, {#mult}, {minus}, {times}, {filter#2}, {mod}, {filter#1}, {filter}, {eratos,eratos#1} 1111.72/291.65 Previous analysis results are: 1111.72/291.65 #natsub: runtime: O(1) [0], size: O(n^1) [z] 1111.72/291.65 #and: runtime: O(1) [0], size: O(1) [2] 1111.72/291.65 filter#3: runtime: O(1) [1], size: O(n^1) [1 + z' + z''] 1111.72/291.65 #pred: runtime: O(1) [0], size: O(n^1) [2 + z] 1111.72/291.65 #succ: runtime: O(1) [0], size: O(n^1) [2 + z] 1111.72/291.65 1111.72/291.65 ---------------------------------------- 1111.72/291.65 1111.72/291.65 (51) ResultPropagationProof (UPPER BOUND(ID)) 1111.72/291.65 Applied inner abstraction using the recently inferred runtime/size bounds where possible. 1111.72/291.65 ---------------------------------------- 1111.72/291.65 1111.72/291.65 (52) 1111.72/291.65 Obligation: 1111.72/291.65 Complexity RNTS consisting of the following rules: 1111.72/291.65 1111.72/291.65 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 1111.72/291.65 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 1111.72/291.65 #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 1111.72/291.65 #add(z, z') -{ 0 }-> s3 :|: s3 >= 0, s3 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) 1111.72/291.65 #add(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 1111.72/291.65 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 1111.72/291.65 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.65 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) 1111.72/291.65 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 1111.72/291.65 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 1111.72/291.65 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' 1111.72/291.65 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 1111.72/291.65 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) 1111.72/291.65 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 1111.72/291.65 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 1111.72/291.65 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 1111.72/291.65 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) 1111.72/291.65 #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')) 1111.72/291.65 #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')) 1111.72/291.65 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 1111.72/291.65 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 1111.72/291.65 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 1111.72/291.65 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 1111.72/291.65 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 1111.72/291.65 #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) 1111.72/291.65 #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') 1111.72/291.65 #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') 1111.72/291.65 #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 1111.72/291.65 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 1111.72/291.65 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 1111.72/291.65 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.72/291.65 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 1111.72/291.65 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 1111.72/291.65 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 1111.72/291.65 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.65 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.72/291.65 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.72/291.65 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.72/291.65 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.65 #div(z, z') -{ 0 }-> 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 1111.72/291.65 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 1111.72/291.65 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.72/291.65 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 1111.72/291.65 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.72/291.65 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 1111.72/291.65 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 1111.72/291.65 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 1111.72/291.65 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.65 #eq(z, z') -{ 0 }-> #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 1111.72/291.65 #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 1111.72/291.65 #equal(z, z') -{ 1 }-> #eq(z, z') :|: z >= 0, z' >= 0 1111.72/291.65 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 1111.72/291.65 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.72/291.65 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 1111.72/291.65 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.65 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 1111.72/291.66 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.72/291.66 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.66 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(s, 1 + (1 + (z' - 2))) :|: s >= 0, s <= z - 2, z' - 2 >= 0, z - 2 >= 0 1111.72/291.66 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0 1111.72/291.66 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0 1111.72/291.66 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 1111.72/291.66 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.66 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 1111.72/291.66 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 1111.72/291.66 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 1111.72/291.66 #natsub(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= z - 1, z - 1 >= 0, z' - 1 >= 0 1111.72/291.66 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.72/291.66 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.66 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.72/291.66 #pred(z) -{ 0 }-> 0 :|: z >= 0 1111.72/291.66 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.72/291.66 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.72/291.66 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.72/291.66 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.72/291.66 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.66 #sub(z, z') -{ 0 }-> #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0 1111.72/291.66 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.72/291.66 #succ(z) -{ 0 }-> 0 :|: z >= 0 1111.72/291.66 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.72/291.66 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.72/291.66 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.72/291.66 div(z, z') -{ 1 }-> #div(z, z') :|: z >= 0, z' >= 0 1111.72/291.66 eratos(z) -{ 1 }-> eratos#1(z) :|: z >= 0 1111.72/291.66 eratos#1(z) -{ 1 }-> 2 :|: z = 2 1111.72/291.66 eratos#1(z) -{ 2 }-> 1 + @x + eratos(filter#1(@xs, @x)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.72/291.66 filter(z, z') -{ 1 }-> filter#1(z', z) :|: z >= 0, z' >= 0 1111.72/291.66 filter#1(z, z') -{ 2 }-> filter#2(filter#1(@xs, z'), z', @x) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.72/291.66 filter#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 1111.72/291.66 filter#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.66 filter#2(z, z', z'') -{ 2 }-> filter#3(#equal(minus(z'', times(z'', div(z'', z'))), 0), z'', z) :|: z' >= 0, z'' >= 0, z >= 0 1111.72/291.66 filter#3(z, z', z'') -{ 1 }-> z'' :|: z = 2, z' >= 0, z'' >= 0 1111.72/291.66 filter#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 1111.72/291.66 filter#3(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z' >= 0, z'' >= 0, z = 1 1111.72/291.66 minus(z, z') -{ 1 }-> #sub(z, z') :|: z >= 0, z' >= 0 1111.72/291.66 mod(z, z') -{ 2 }-> minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0 1111.72/291.66 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 1111.72/291.66 1111.72/291.66 Function symbols to be analyzed: {#natdiv}, {#eq}, {#add}, {#div}, {#equal}, {#natmult}, {#sub}, {div}, {#mult}, {minus}, {times}, {filter#2}, {mod}, {filter#1}, {filter}, {eratos,eratos#1} 1111.72/291.66 Previous analysis results are: 1111.72/291.66 #natsub: runtime: O(1) [0], size: O(n^1) [z] 1111.72/291.66 #and: runtime: O(1) [0], size: O(1) [2] 1111.72/291.66 filter#3: runtime: O(1) [1], size: O(n^1) [1 + z' + z''] 1111.72/291.66 #pred: runtime: O(1) [0], size: O(n^1) [2 + z] 1111.72/291.66 #succ: runtime: O(1) [0], size: O(n^1) [2 + z] 1111.72/291.66 1111.72/291.66 ---------------------------------------- 1111.72/291.66 1111.72/291.66 (53) IntTrsBoundProof (UPPER BOUND(ID)) 1111.72/291.66 1111.72/291.66 Computed SIZE bound using CoFloCo for: #natdiv 1111.72/291.66 after applying outer abstraction to obtain an ITS, 1111.72/291.66 resulting in: O(n^1) with polynomial bound: 1 + z 1111.72/291.66 1111.72/291.66 ---------------------------------------- 1111.72/291.66 1111.72/291.66 (54) 1111.72/291.66 Obligation: 1111.72/291.66 Complexity RNTS consisting of the following rules: 1111.72/291.66 1111.72/291.66 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 1111.72/291.66 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 1111.72/291.66 #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 1111.72/291.66 #add(z, z') -{ 0 }-> s3 :|: s3 >= 0, s3 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) 1111.72/291.66 #add(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 1111.72/291.66 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 1111.72/291.66 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.66 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) 1111.72/291.66 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 1111.72/291.66 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 1111.72/291.66 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' 1111.72/291.66 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 1111.72/291.66 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) 1111.72/291.66 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 1111.72/291.66 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 1111.72/291.66 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 1111.72/291.66 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) 1111.72/291.66 #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')) 1111.72/291.66 #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')) 1111.72/291.66 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 1111.72/291.66 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 1111.72/291.66 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 1111.72/291.66 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 1111.72/291.66 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 1111.72/291.66 #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) 1111.72/291.66 #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') 1111.72/291.66 #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') 1111.72/291.66 #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 1111.72/291.66 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 1111.72/291.66 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 1111.72/291.66 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.72/291.66 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 1111.72/291.66 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 1111.72/291.66 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 1111.72/291.66 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.66 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.72/291.66 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.72/291.66 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.72/291.66 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.66 #div(z, z') -{ 0 }-> 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 1111.72/291.66 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 1111.72/291.66 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.72/291.66 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 1111.72/291.66 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.72/291.66 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 1111.72/291.66 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 1111.72/291.66 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 1111.72/291.66 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.66 #eq(z, z') -{ 0 }-> #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 1111.72/291.66 #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 1111.72/291.66 #equal(z, z') -{ 1 }-> #eq(z, z') :|: z >= 0, z' >= 0 1111.72/291.66 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 1111.72/291.66 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.72/291.66 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 1111.72/291.66 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.66 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 1111.72/291.66 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.72/291.66 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.66 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(s, 1 + (1 + (z' - 2))) :|: s >= 0, s <= z - 2, z' - 2 >= 0, z - 2 >= 0 1111.72/291.66 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0 1111.72/291.66 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0 1111.72/291.66 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 1111.72/291.66 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.66 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 1111.72/291.66 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 1111.72/291.66 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 1111.72/291.66 #natsub(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= z - 1, z - 1 >= 0, z' - 1 >= 0 1111.72/291.66 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.72/291.66 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.66 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.72/291.66 #pred(z) -{ 0 }-> 0 :|: z >= 0 1111.72/291.66 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.72/291.66 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.72/291.66 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.72/291.66 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.72/291.66 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.66 #sub(z, z') -{ 0 }-> #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0 1111.72/291.66 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.72/291.66 #succ(z) -{ 0 }-> 0 :|: z >= 0 1111.72/291.66 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.72/291.66 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.72/291.66 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.72/291.66 div(z, z') -{ 1 }-> #div(z, z') :|: z >= 0, z' >= 0 1111.72/291.66 eratos(z) -{ 1 }-> eratos#1(z) :|: z >= 0 1111.72/291.66 eratos#1(z) -{ 1 }-> 2 :|: z = 2 1111.72/291.66 eratos#1(z) -{ 2 }-> 1 + @x + eratos(filter#1(@xs, @x)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.72/291.66 filter(z, z') -{ 1 }-> filter#1(z', z) :|: z >= 0, z' >= 0 1111.72/291.66 filter#1(z, z') -{ 2 }-> filter#2(filter#1(@xs, z'), z', @x) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.72/291.66 filter#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 1111.72/291.66 filter#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.66 filter#2(z, z', z'') -{ 2 }-> filter#3(#equal(minus(z'', times(z'', div(z'', z'))), 0), z'', z) :|: z' >= 0, z'' >= 0, z >= 0 1111.72/291.66 filter#3(z, z', z'') -{ 1 }-> z'' :|: z = 2, z' >= 0, z'' >= 0 1111.72/291.66 filter#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 1111.72/291.66 filter#3(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z' >= 0, z'' >= 0, z = 1 1111.72/291.66 minus(z, z') -{ 1 }-> #sub(z, z') :|: z >= 0, z' >= 0 1111.72/291.66 mod(z, z') -{ 2 }-> minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0 1111.72/291.66 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 1111.72/291.66 1111.72/291.66 Function symbols to be analyzed: {#natdiv}, {#eq}, {#add}, {#div}, {#equal}, {#natmult}, {#sub}, {div}, {#mult}, {minus}, {times}, {filter#2}, {mod}, {filter#1}, {filter}, {eratos,eratos#1} 1111.72/291.66 Previous analysis results are: 1111.72/291.66 #natsub: runtime: O(1) [0], size: O(n^1) [z] 1111.72/291.66 #and: runtime: O(1) [0], size: O(1) [2] 1111.72/291.66 filter#3: runtime: O(1) [1], size: O(n^1) [1 + z' + z''] 1111.72/291.66 #pred: runtime: O(1) [0], size: O(n^1) [2 + z] 1111.72/291.66 #succ: runtime: O(1) [0], size: O(n^1) [2 + z] 1111.72/291.66 #natdiv: runtime: ?, size: O(n^1) [1 + z] 1111.72/291.66 1111.72/291.66 ---------------------------------------- 1111.72/291.66 1111.72/291.66 (55) IntTrsBoundProof (UPPER BOUND(ID)) 1111.72/291.66 1111.72/291.66 Computed RUNTIME bound using CoFloCo for: #natdiv 1111.72/291.66 after applying outer abstraction to obtain an ITS, 1111.72/291.66 resulting in: O(1) with polynomial bound: 0 1111.72/291.66 1111.72/291.66 ---------------------------------------- 1111.72/291.66 1111.72/291.66 (56) 1111.72/291.66 Obligation: 1111.72/291.66 Complexity RNTS consisting of the following rules: 1111.72/291.66 1111.72/291.66 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 1111.72/291.66 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 1111.72/291.66 #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 1111.72/291.66 #add(z, z') -{ 0 }-> s3 :|: s3 >= 0, s3 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) 1111.72/291.66 #add(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 1111.72/291.66 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 1111.72/291.66 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.66 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) 1111.72/291.66 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 1111.72/291.66 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 1111.72/291.66 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' 1111.72/291.66 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 1111.72/291.66 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) 1111.72/291.66 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 1111.72/291.66 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 1111.72/291.66 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 1111.72/291.66 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) 1111.72/291.66 #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')) 1111.72/291.66 #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')) 1111.72/291.66 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 1111.72/291.66 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 1111.72/291.66 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 1111.72/291.66 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 1111.72/291.66 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 1111.72/291.66 #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) 1111.72/291.66 #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') 1111.72/291.66 #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') 1111.72/291.66 #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 1111.72/291.66 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 1111.72/291.66 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 1111.72/291.66 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.72/291.66 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 1111.72/291.66 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 1111.72/291.66 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 1111.72/291.66 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.66 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.72/291.66 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.72/291.66 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.72/291.66 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.66 #div(z, z') -{ 0 }-> 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 1111.72/291.66 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 1111.72/291.66 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.72/291.66 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 1111.72/291.66 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.72/291.66 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 1111.72/291.66 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 1111.72/291.66 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 1111.72/291.66 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.66 #eq(z, z') -{ 0 }-> #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 1111.72/291.66 #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 1111.72/291.66 #equal(z, z') -{ 1 }-> #eq(z, z') :|: z >= 0, z' >= 0 1111.72/291.66 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 1111.72/291.66 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.72/291.66 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 1111.72/291.66 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.66 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 1111.72/291.66 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.72/291.66 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.66 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(s, 1 + (1 + (z' - 2))) :|: s >= 0, s <= z - 2, z' - 2 >= 0, z - 2 >= 0 1111.72/291.66 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0 1111.72/291.66 #natdiv(z, z') -{ 0 }-> 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0 1111.72/291.66 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 1111.72/291.66 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.66 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 1111.72/291.66 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 1111.72/291.66 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 1111.72/291.66 #natsub(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= z - 1, z - 1 >= 0, z' - 1 >= 0 1111.72/291.66 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.72/291.66 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.66 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.72/291.66 #pred(z) -{ 0 }-> 0 :|: z >= 0 1111.72/291.66 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.72/291.66 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.72/291.66 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.72/291.66 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.72/291.66 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.66 #sub(z, z') -{ 0 }-> #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0 1111.72/291.66 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.72/291.66 #succ(z) -{ 0 }-> 0 :|: z >= 0 1111.72/291.66 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.72/291.66 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.72/291.66 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.72/291.66 div(z, z') -{ 1 }-> #div(z, z') :|: z >= 0, z' >= 0 1111.72/291.66 eratos(z) -{ 1 }-> eratos#1(z) :|: z >= 0 1111.72/291.66 eratos#1(z) -{ 1 }-> 2 :|: z = 2 1111.72/291.66 eratos#1(z) -{ 2 }-> 1 + @x + eratos(filter#1(@xs, @x)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.72/291.66 filter(z, z') -{ 1 }-> filter#1(z', z) :|: z >= 0, z' >= 0 1111.72/291.66 filter#1(z, z') -{ 2 }-> filter#2(filter#1(@xs, z'), z', @x) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.72/291.66 filter#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 1111.72/291.66 filter#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.66 filter#2(z, z', z'') -{ 2 }-> filter#3(#equal(minus(z'', times(z'', div(z'', z'))), 0), z'', z) :|: z' >= 0, z'' >= 0, z >= 0 1111.72/291.66 filter#3(z, z', z'') -{ 1 }-> z'' :|: z = 2, z' >= 0, z'' >= 0 1111.72/291.66 filter#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 1111.72/291.66 filter#3(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z' >= 0, z'' >= 0, z = 1 1111.72/291.66 minus(z, z') -{ 1 }-> #sub(z, z') :|: z >= 0, z' >= 0 1111.72/291.66 mod(z, z') -{ 2 }-> minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0 1111.72/291.66 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 1111.72/291.66 1111.72/291.66 Function symbols to be analyzed: {#eq}, {#add}, {#div}, {#equal}, {#natmult}, {#sub}, {div}, {#mult}, {minus}, {times}, {filter#2}, {mod}, {filter#1}, {filter}, {eratos,eratos#1} 1111.72/291.66 Previous analysis results are: 1111.72/291.66 #natsub: runtime: O(1) [0], size: O(n^1) [z] 1111.72/291.66 #and: runtime: O(1) [0], size: O(1) [2] 1111.72/291.66 filter#3: runtime: O(1) [1], size: O(n^1) [1 + z' + z''] 1111.72/291.66 #pred: runtime: O(1) [0], size: O(n^1) [2 + z] 1111.72/291.66 #succ: runtime: O(1) [0], size: O(n^1) [2 + z] 1111.72/291.66 #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] 1111.72/291.66 1111.72/291.66 ---------------------------------------- 1111.72/291.66 1111.72/291.66 (57) ResultPropagationProof (UPPER BOUND(ID)) 1111.72/291.66 Applied inner abstraction using the recently inferred runtime/size bounds where possible. 1111.72/291.66 ---------------------------------------- 1111.72/291.66 1111.72/291.66 (58) 1111.72/291.66 Obligation: 1111.72/291.66 Complexity RNTS consisting of the following rules: 1111.72/291.66 1111.72/291.66 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 1111.72/291.66 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 1111.72/291.66 #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 1111.72/291.66 #add(z, z') -{ 0 }-> s3 :|: s3 >= 0, s3 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) 1111.72/291.66 #add(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 1111.72/291.66 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 1111.72/291.66 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.66 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) 1111.72/291.66 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 1111.72/291.66 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 1111.72/291.66 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' 1111.72/291.66 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 1111.72/291.66 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) 1111.72/291.66 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 1111.72/291.66 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 1111.72/291.66 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 1111.72/291.66 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) 1111.72/291.66 #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')) 1111.72/291.66 #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')) 1111.72/291.66 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 1111.72/291.66 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 1111.72/291.66 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 1111.72/291.66 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 1111.72/291.66 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 1111.72/291.66 #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) 1111.72/291.66 #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') 1111.72/291.66 #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') 1111.72/291.66 #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 1111.72/291.66 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 1111.72/291.66 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 1111.72/291.66 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.72/291.66 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 1111.72/291.66 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 1111.72/291.66 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 1111.72/291.66 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.66 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.72/291.66 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.72/291.66 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.72/291.66 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.66 #div(z, z') -{ 0 }-> 1 + s5 :|: s5 >= 0, s5 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 1111.72/291.66 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 1111.72/291.66 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.72/291.66 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 1111.72/291.66 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.72/291.66 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 1111.72/291.66 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 1111.72/291.66 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 1111.72/291.66 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.66 #eq(z, z') -{ 0 }-> #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 1111.72/291.66 #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 1111.72/291.66 #equal(z, z') -{ 1 }-> #eq(z, z') :|: z >= 0, z' >= 0 1111.72/291.66 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 1111.72/291.66 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.72/291.66 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 1111.72/291.66 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.66 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 1111.72/291.66 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.72/291.66 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.66 #natdiv(z, z') -{ 0 }-> 1 + s6 :|: s6 >= 0, s6 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 1111.72/291.66 #natdiv(z, z') -{ 0 }-> 1 + s7 :|: s7 >= 0, s7 <= s + 1, s >= 0, s <= z - 2, z' - 2 >= 0, z - 2 >= 0 1111.72/291.66 #natdiv(z, z') -{ 0 }-> 1 + s8 :|: s8 >= 0, s8 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 1111.72/291.66 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 1111.72/291.66 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.66 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 1111.72/291.66 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 1111.72/291.66 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 1111.72/291.66 #natsub(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= z - 1, z - 1 >= 0, z' - 1 >= 0 1111.72/291.66 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.72/291.66 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.66 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.72/291.66 #pred(z) -{ 0 }-> 0 :|: z >= 0 1111.72/291.66 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.72/291.66 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.72/291.66 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.72/291.66 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.72/291.66 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.66 #sub(z, z') -{ 0 }-> #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0 1111.72/291.66 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.72/291.66 #succ(z) -{ 0 }-> 0 :|: z >= 0 1111.72/291.66 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.72/291.66 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.72/291.66 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.72/291.66 div(z, z') -{ 1 }-> #div(z, z') :|: z >= 0, z' >= 0 1111.72/291.66 eratos(z) -{ 1 }-> eratos#1(z) :|: z >= 0 1111.72/291.66 eratos#1(z) -{ 1 }-> 2 :|: z = 2 1111.72/291.66 eratos#1(z) -{ 2 }-> 1 + @x + eratos(filter#1(@xs, @x)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.72/291.66 filter(z, z') -{ 1 }-> filter#1(z', z) :|: z >= 0, z' >= 0 1111.72/291.66 filter#1(z, z') -{ 2 }-> filter#2(filter#1(@xs, z'), z', @x) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.72/291.66 filter#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 1111.72/291.66 filter#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.66 filter#2(z, z', z'') -{ 2 }-> filter#3(#equal(minus(z'', times(z'', div(z'', z'))), 0), z'', z) :|: z' >= 0, z'' >= 0, z >= 0 1111.72/291.66 filter#3(z, z', z'') -{ 1 }-> z'' :|: z = 2, z' >= 0, z'' >= 0 1111.72/291.66 filter#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 1111.72/291.66 filter#3(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z' >= 0, z'' >= 0, z = 1 1111.72/291.66 minus(z, z') -{ 1 }-> #sub(z, z') :|: z >= 0, z' >= 0 1111.72/291.66 mod(z, z') -{ 2 }-> minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0 1111.72/291.66 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 1111.72/291.66 1111.72/291.66 Function symbols to be analyzed: {#eq}, {#add}, {#div}, {#equal}, {#natmult}, {#sub}, {div}, {#mult}, {minus}, {times}, {filter#2}, {mod}, {filter#1}, {filter}, {eratos,eratos#1} 1111.72/291.66 Previous analysis results are: 1111.72/291.66 #natsub: runtime: O(1) [0], size: O(n^1) [z] 1111.72/291.66 #and: runtime: O(1) [0], size: O(1) [2] 1111.72/291.66 filter#3: runtime: O(1) [1], size: O(n^1) [1 + z' + z''] 1111.72/291.66 #pred: runtime: O(1) [0], size: O(n^1) [2 + z] 1111.72/291.66 #succ: runtime: O(1) [0], size: O(n^1) [2 + z] 1111.72/291.66 #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] 1111.72/291.66 1111.72/291.66 ---------------------------------------- 1111.72/291.66 1111.72/291.66 (59) IntTrsBoundProof (UPPER BOUND(ID)) 1111.72/291.66 1111.72/291.66 Computed SIZE bound using CoFloCo for: #eq 1111.72/291.66 after applying outer abstraction to obtain an ITS, 1111.72/291.66 resulting in: O(1) with polynomial bound: 2 1111.72/291.66 1111.72/291.66 ---------------------------------------- 1111.72/291.66 1111.72/291.66 (60) 1111.72/291.66 Obligation: 1111.72/291.66 Complexity RNTS consisting of the following rules: 1111.72/291.66 1111.72/291.66 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 1111.72/291.66 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 1111.72/291.66 #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 1111.72/291.66 #add(z, z') -{ 0 }-> s3 :|: s3 >= 0, s3 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) 1111.72/291.66 #add(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 1111.72/291.66 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 1111.72/291.66 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.66 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) 1111.72/291.66 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 1111.72/291.66 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 1111.72/291.66 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' 1111.72/291.66 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 1111.72/291.66 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) 1111.72/291.66 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 1111.72/291.66 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 1111.72/291.66 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 1111.72/291.66 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) 1111.72/291.66 #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')) 1111.72/291.66 #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')) 1111.72/291.66 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 1111.72/291.66 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 1111.72/291.66 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 1111.72/291.66 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 1111.72/291.66 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 1111.72/291.66 #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) 1111.72/291.66 #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') 1111.72/291.66 #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') 1111.72/291.66 #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 1111.72/291.66 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 1111.72/291.66 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 1111.72/291.66 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.72/291.66 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 1111.72/291.66 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 1111.72/291.66 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 1111.72/291.66 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.66 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.72/291.66 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.72/291.66 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.72/291.66 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.66 #div(z, z') -{ 0 }-> 1 + s5 :|: s5 >= 0, s5 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 1111.72/291.66 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 1111.72/291.66 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.72/291.66 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 1111.72/291.66 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.72/291.66 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 1111.72/291.66 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 1111.72/291.66 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 1111.72/291.66 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.66 #eq(z, z') -{ 0 }-> #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 1111.72/291.66 #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 1111.72/291.66 #equal(z, z') -{ 1 }-> #eq(z, z') :|: z >= 0, z' >= 0 1111.72/291.66 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 1111.72/291.66 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.72/291.66 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 1111.72/291.66 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.66 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 1111.72/291.66 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.72/291.66 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.66 #natdiv(z, z') -{ 0 }-> 1 + s6 :|: s6 >= 0, s6 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 1111.72/291.66 #natdiv(z, z') -{ 0 }-> 1 + s7 :|: s7 >= 0, s7 <= s + 1, s >= 0, s <= z - 2, z' - 2 >= 0, z - 2 >= 0 1111.72/291.66 #natdiv(z, z') -{ 0 }-> 1 + s8 :|: s8 >= 0, s8 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 1111.72/291.66 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 1111.72/291.66 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.66 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 1111.72/291.66 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 1111.72/291.66 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 1111.72/291.66 #natsub(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= z - 1, z - 1 >= 0, z' - 1 >= 0 1111.72/291.66 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.72/291.66 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.66 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.72/291.66 #pred(z) -{ 0 }-> 0 :|: z >= 0 1111.72/291.66 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.72/291.66 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.72/291.66 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.72/291.66 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.72/291.66 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.66 #sub(z, z') -{ 0 }-> #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0 1111.72/291.66 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.72/291.66 #succ(z) -{ 0 }-> 0 :|: z >= 0 1111.72/291.66 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.72/291.66 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.72/291.66 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.72/291.66 div(z, z') -{ 1 }-> #div(z, z') :|: z >= 0, z' >= 0 1111.72/291.66 eratos(z) -{ 1 }-> eratos#1(z) :|: z >= 0 1111.72/291.66 eratos#1(z) -{ 1 }-> 2 :|: z = 2 1111.72/291.66 eratos#1(z) -{ 2 }-> 1 + @x + eratos(filter#1(@xs, @x)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.72/291.66 filter(z, z') -{ 1 }-> filter#1(z', z) :|: z >= 0, z' >= 0 1111.72/291.66 filter#1(z, z') -{ 2 }-> filter#2(filter#1(@xs, z'), z', @x) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.72/291.66 filter#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 1111.72/291.66 filter#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.66 filter#2(z, z', z'') -{ 2 }-> filter#3(#equal(minus(z'', times(z'', div(z'', z'))), 0), z'', z) :|: z' >= 0, z'' >= 0, z >= 0 1111.72/291.66 filter#3(z, z', z'') -{ 1 }-> z'' :|: z = 2, z' >= 0, z'' >= 0 1111.72/291.66 filter#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 1111.72/291.66 filter#3(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z' >= 0, z'' >= 0, z = 1 1111.72/291.66 minus(z, z') -{ 1 }-> #sub(z, z') :|: z >= 0, z' >= 0 1111.72/291.66 mod(z, z') -{ 2 }-> minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0 1111.72/291.66 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 1111.72/291.66 1111.72/291.66 Function symbols to be analyzed: {#eq}, {#add}, {#div}, {#equal}, {#natmult}, {#sub}, {div}, {#mult}, {minus}, {times}, {filter#2}, {mod}, {filter#1}, {filter}, {eratos,eratos#1} 1111.72/291.66 Previous analysis results are: 1111.72/291.66 #natsub: runtime: O(1) [0], size: O(n^1) [z] 1111.72/291.66 #and: runtime: O(1) [0], size: O(1) [2] 1111.72/291.66 filter#3: runtime: O(1) [1], size: O(n^1) [1 + z' + z''] 1111.72/291.66 #pred: runtime: O(1) [0], size: O(n^1) [2 + z] 1111.72/291.66 #succ: runtime: O(1) [0], size: O(n^1) [2 + z] 1111.72/291.66 #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] 1111.72/291.66 #eq: runtime: ?, size: O(1) [2] 1111.72/291.66 1111.72/291.66 ---------------------------------------- 1111.72/291.66 1111.72/291.66 (61) IntTrsBoundProof (UPPER BOUND(ID)) 1111.72/291.66 1111.72/291.66 Computed RUNTIME bound using CoFloCo for: #eq 1111.72/291.66 after applying outer abstraction to obtain an ITS, 1111.72/291.66 resulting in: O(1) with polynomial bound: 0 1111.72/291.66 1111.72/291.66 ---------------------------------------- 1111.72/291.66 1111.72/291.66 (62) 1111.72/291.66 Obligation: 1111.72/291.66 Complexity RNTS consisting of the following rules: 1111.72/291.66 1111.72/291.66 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 1111.72/291.66 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 1111.72/291.66 #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 1111.72/291.66 #add(z, z') -{ 0 }-> s3 :|: s3 >= 0, s3 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) 1111.72/291.66 #add(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 1111.72/291.66 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 1111.72/291.66 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.66 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) 1111.72/291.66 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 1111.72/291.66 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 1111.72/291.66 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' 1111.72/291.66 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 1111.72/291.66 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) 1111.72/291.66 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 1111.72/291.66 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 1111.72/291.66 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 1111.72/291.66 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) 1111.72/291.66 #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')) 1111.72/291.66 #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')) 1111.72/291.66 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 1111.72/291.66 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 1111.72/291.66 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 1111.72/291.66 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 1111.72/291.66 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 1111.72/291.66 #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) 1111.72/291.66 #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') 1111.72/291.66 #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') 1111.72/291.66 #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 1111.72/291.66 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 1111.72/291.66 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 1111.72/291.66 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.72/291.66 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 1111.72/291.66 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 1111.72/291.66 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 1111.72/291.66 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.66 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.72/291.66 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.72/291.66 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.72/291.66 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.66 #div(z, z') -{ 0 }-> 1 + s5 :|: s5 >= 0, s5 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 1111.72/291.66 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 1111.72/291.66 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.72/291.66 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 1111.72/291.66 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.72/291.66 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 1111.72/291.66 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 1111.72/291.66 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 1111.72/291.66 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.66 #eq(z, z') -{ 0 }-> #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 1111.72/291.66 #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 1111.72/291.66 #equal(z, z') -{ 1 }-> #eq(z, z') :|: z >= 0, z' >= 0 1111.72/291.66 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 1111.72/291.66 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.72/291.66 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 1111.72/291.66 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.66 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 1111.72/291.66 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.72/291.66 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.66 #natdiv(z, z') -{ 0 }-> 1 + s6 :|: s6 >= 0, s6 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 1111.72/291.66 #natdiv(z, z') -{ 0 }-> 1 + s7 :|: s7 >= 0, s7 <= s + 1, s >= 0, s <= z - 2, z' - 2 >= 0, z - 2 >= 0 1111.72/291.66 #natdiv(z, z') -{ 0 }-> 1 + s8 :|: s8 >= 0, s8 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 1111.72/291.66 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 1111.72/291.66 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.66 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 1111.72/291.66 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 1111.72/291.66 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 1111.72/291.66 #natsub(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= z - 1, z - 1 >= 0, z' - 1 >= 0 1111.72/291.66 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.72/291.66 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.66 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.72/291.66 #pred(z) -{ 0 }-> 0 :|: z >= 0 1111.72/291.66 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.72/291.66 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.72/291.66 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.72/291.66 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.72/291.66 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.66 #sub(z, z') -{ 0 }-> #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0 1111.72/291.66 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.72/291.66 #succ(z) -{ 0 }-> 0 :|: z >= 0 1111.72/291.66 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.72/291.66 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.72/291.66 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.72/291.66 div(z, z') -{ 1 }-> #div(z, z') :|: z >= 0, z' >= 0 1111.72/291.66 eratos(z) -{ 1 }-> eratos#1(z) :|: z >= 0 1111.72/291.66 eratos#1(z) -{ 1 }-> 2 :|: z = 2 1111.72/291.66 eratos#1(z) -{ 2 }-> 1 + @x + eratos(filter#1(@xs, @x)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.72/291.66 filter(z, z') -{ 1 }-> filter#1(z', z) :|: z >= 0, z' >= 0 1111.72/291.66 filter#1(z, z') -{ 2 }-> filter#2(filter#1(@xs, z'), z', @x) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.72/291.66 filter#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 1111.72/291.66 filter#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.66 filter#2(z, z', z'') -{ 2 }-> filter#3(#equal(minus(z'', times(z'', div(z'', z'))), 0), z'', z) :|: z' >= 0, z'' >= 0, z >= 0 1111.72/291.66 filter#3(z, z', z'') -{ 1 }-> z'' :|: z = 2, z' >= 0, z'' >= 0 1111.72/291.66 filter#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 1111.72/291.66 filter#3(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z' >= 0, z'' >= 0, z = 1 1111.72/291.66 minus(z, z') -{ 1 }-> #sub(z, z') :|: z >= 0, z' >= 0 1111.72/291.66 mod(z, z') -{ 2 }-> minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0 1111.72/291.66 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 1111.72/291.66 1111.72/291.66 Function symbols to be analyzed: {#add}, {#div}, {#equal}, {#natmult}, {#sub}, {div}, {#mult}, {minus}, {times}, {filter#2}, {mod}, {filter#1}, {filter}, {eratos,eratos#1} 1111.72/291.66 Previous analysis results are: 1111.72/291.66 #natsub: runtime: O(1) [0], size: O(n^1) [z] 1111.72/291.66 #and: runtime: O(1) [0], size: O(1) [2] 1111.72/291.66 filter#3: runtime: O(1) [1], size: O(n^1) [1 + z' + z''] 1111.72/291.66 #pred: runtime: O(1) [0], size: O(n^1) [2 + z] 1111.72/291.66 #succ: runtime: O(1) [0], size: O(n^1) [2 + z] 1111.72/291.66 #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] 1111.72/291.66 #eq: runtime: O(1) [0], size: O(1) [2] 1111.72/291.66 1111.72/291.66 ---------------------------------------- 1111.72/291.66 1111.72/291.66 (63) ResultPropagationProof (UPPER BOUND(ID)) 1111.72/291.66 Applied inner abstraction using the recently inferred runtime/size bounds where possible. 1111.72/291.66 ---------------------------------------- 1111.72/291.66 1111.72/291.66 (64) 1111.72/291.66 Obligation: 1111.72/291.66 Complexity RNTS consisting of the following rules: 1111.72/291.66 1111.72/291.66 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 1111.72/291.66 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 1111.72/291.66 #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 1111.72/291.66 #add(z, z') -{ 0 }-> s3 :|: s3 >= 0, s3 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) 1111.72/291.66 #add(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 1111.72/291.66 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 1111.72/291.66 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.66 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) 1111.72/291.66 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 1111.72/291.66 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 1111.72/291.66 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' 1111.72/291.66 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 1111.72/291.66 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) 1111.72/291.66 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 1111.72/291.66 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 1111.72/291.66 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 1111.72/291.66 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) 1111.72/291.66 #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')) 1111.72/291.66 #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')) 1111.72/291.66 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 1111.72/291.66 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 1111.72/291.66 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 1111.72/291.66 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 1111.72/291.66 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 1111.72/291.66 #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) 1111.72/291.66 #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') 1111.72/291.66 #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') 1111.72/291.66 #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 1111.72/291.66 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 1111.72/291.66 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 1111.72/291.66 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.72/291.66 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 1111.72/291.66 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 1111.72/291.66 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 1111.72/291.66 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.66 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.72/291.66 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.72/291.66 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.72/291.66 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.66 #div(z, z') -{ 0 }-> 1 + s5 :|: s5 >= 0, s5 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 1111.72/291.66 #eq(z, z') -{ 0 }-> s10 :|: s10 >= 0, s10 <= 2, z - 1 >= 0, z' - 1 >= 0 1111.72/291.66 #eq(z, z') -{ 0 }-> s13 :|: s11 >= 0, s11 <= 2, s12 >= 0, s12 <= 2, s13 >= 0, s13 <= 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 1111.72/291.66 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 1111.72/291.66 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.72/291.66 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 1111.72/291.66 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.72/291.66 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 1111.72/291.66 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 1111.72/291.66 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 1111.72/291.66 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.66 #equal(z, z') -{ 1 }-> s9 :|: s9 >= 0, s9 <= 2, z >= 0, z' >= 0 1111.72/291.66 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 1111.72/291.66 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.72/291.66 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 1111.72/291.66 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.66 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 1111.72/291.66 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.72/291.66 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.66 #natdiv(z, z') -{ 0 }-> 1 + s6 :|: s6 >= 0, s6 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 1111.72/291.66 #natdiv(z, z') -{ 0 }-> 1 + s7 :|: s7 >= 0, s7 <= s + 1, s >= 0, s <= z - 2, z' - 2 >= 0, z - 2 >= 0 1111.72/291.66 #natdiv(z, z') -{ 0 }-> 1 + s8 :|: s8 >= 0, s8 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 1111.72/291.66 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 1111.72/291.66 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.66 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 1111.72/291.66 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 1111.72/291.66 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 1111.72/291.66 #natsub(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= z - 1, z - 1 >= 0, z' - 1 >= 0 1111.72/291.66 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.72/291.66 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.66 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.72/291.66 #pred(z) -{ 0 }-> 0 :|: z >= 0 1111.72/291.66 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.72/291.66 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.72/291.66 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.72/291.66 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.72/291.66 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.66 #sub(z, z') -{ 0 }-> #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0 1111.72/291.66 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.72/291.66 #succ(z) -{ 0 }-> 0 :|: z >= 0 1111.72/291.66 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.72/291.66 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.72/291.66 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.72/291.66 div(z, z') -{ 1 }-> #div(z, z') :|: z >= 0, z' >= 0 1111.72/291.66 eratos(z) -{ 1 }-> eratos#1(z) :|: z >= 0 1111.72/291.66 eratos#1(z) -{ 1 }-> 2 :|: z = 2 1111.72/291.66 eratos#1(z) -{ 2 }-> 1 + @x + eratos(filter#1(@xs, @x)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.72/291.66 filter(z, z') -{ 1 }-> filter#1(z', z) :|: z >= 0, z' >= 0 1111.72/291.66 filter#1(z, z') -{ 2 }-> filter#2(filter#1(@xs, z'), z', @x) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.72/291.66 filter#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 1111.72/291.66 filter#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.72/291.66 filter#2(z, z', z'') -{ 2 }-> filter#3(#equal(minus(z'', times(z'', div(z'', z'))), 0), z'', z) :|: z' >= 0, z'' >= 0, z >= 0 1111.72/291.66 filter#3(z, z', z'') -{ 1 }-> z'' :|: z = 2, z' >= 0, z'' >= 0 1111.72/291.66 filter#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 1111.72/291.66 filter#3(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z' >= 0, z'' >= 0, z = 1 1111.72/291.66 minus(z, z') -{ 1 }-> #sub(z, z') :|: z >= 0, z' >= 0 1111.72/291.66 mod(z, z') -{ 2 }-> minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0 1111.72/291.66 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 1111.72/291.66 1111.72/291.66 Function symbols to be analyzed: {#add}, {#div}, {#equal}, {#natmult}, {#sub}, {div}, {#mult}, {minus}, {times}, {filter#2}, {mod}, {filter#1}, {filter}, {eratos,eratos#1} 1111.72/291.66 Previous analysis results are: 1111.86/291.68 #natsub: runtime: O(1) [0], size: O(n^1) [z] 1111.86/291.68 #and: runtime: O(1) [0], size: O(1) [2] 1111.86/291.68 filter#3: runtime: O(1) [1], size: O(n^1) [1 + z' + z''] 1111.86/291.68 #pred: runtime: O(1) [0], size: O(n^1) [2 + z] 1111.86/291.68 #succ: runtime: O(1) [0], size: O(n^1) [2 + z] 1111.86/291.68 #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] 1111.86/291.68 #eq: runtime: O(1) [0], size: O(1) [2] 1111.86/291.68 1111.86/291.68 ---------------------------------------- 1111.86/291.68 1111.86/291.68 (65) IntTrsBoundProof (UPPER BOUND(ID)) 1111.86/291.68 1111.86/291.68 Computed SIZE bound using KoAT for: #add 1111.86/291.68 after applying outer abstraction to obtain an ITS, 1111.86/291.68 resulting in: O(n^1) with polynomial bound: 2*z + z' 1111.86/291.68 1111.86/291.68 ---------------------------------------- 1111.86/291.68 1111.86/291.68 (66) 1111.86/291.68 Obligation: 1111.86/291.68 Complexity RNTS consisting of the following rules: 1111.86/291.68 1111.86/291.68 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 1111.86/291.68 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 1111.86/291.68 #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 1111.86/291.68 #add(z, z') -{ 0 }-> s3 :|: s3 >= 0, s3 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) 1111.86/291.68 #add(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 1111.86/291.68 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 1111.86/291.68 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.68 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) 1111.86/291.68 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 1111.86/291.68 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 1111.86/291.68 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' 1111.86/291.68 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 1111.86/291.68 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) 1111.86/291.68 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 1111.86/291.68 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 1111.86/291.68 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 1111.86/291.68 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) 1111.86/291.68 #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')) 1111.86/291.68 #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')) 1111.86/291.68 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 1111.86/291.68 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 1111.86/291.68 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 1111.86/291.68 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 1111.86/291.68 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 1111.86/291.68 #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) 1111.86/291.68 #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') 1111.86/291.68 #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') 1111.86/291.68 #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 1111.86/291.68 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 1111.86/291.68 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 1111.86/291.68 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.86/291.68 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 1111.86/291.68 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 1111.86/291.68 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 1111.86/291.68 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.68 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.86/291.68 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.86/291.68 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.86/291.68 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.68 #div(z, z') -{ 0 }-> 1 + s5 :|: s5 >= 0, s5 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.68 #eq(z, z') -{ 0 }-> s10 :|: s10 >= 0, s10 <= 2, z - 1 >= 0, z' - 1 >= 0 1111.86/291.68 #eq(z, z') -{ 0 }-> s13 :|: s11 >= 0, s11 <= 2, s12 >= 0, s12 <= 2, s13 >= 0, s13 <= 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 1111.86/291.68 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 1111.86/291.68 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.86/291.68 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 1111.86/291.68 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.86/291.68 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 1111.86/291.68 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 1111.86/291.68 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 1111.86/291.68 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.68 #equal(z, z') -{ 1 }-> s9 :|: s9 >= 0, s9 <= 2, z >= 0, z' >= 0 1111.86/291.68 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 1111.86/291.68 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.86/291.68 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 1111.86/291.68 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.68 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 1111.86/291.68 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.86/291.68 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.68 #natdiv(z, z') -{ 0 }-> 1 + s6 :|: s6 >= 0, s6 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 1111.86/291.68 #natdiv(z, z') -{ 0 }-> 1 + s7 :|: s7 >= 0, s7 <= s + 1, s >= 0, s <= z - 2, z' - 2 >= 0, z - 2 >= 0 1111.86/291.68 #natdiv(z, z') -{ 0 }-> 1 + s8 :|: s8 >= 0, s8 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.68 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 1111.86/291.68 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.68 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 1111.86/291.68 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 1111.86/291.68 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 1111.86/291.68 #natsub(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= z - 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.68 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.86/291.68 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.68 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.86/291.68 #pred(z) -{ 0 }-> 0 :|: z >= 0 1111.86/291.68 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.86/291.68 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.86/291.68 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.86/291.68 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.86/291.68 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.68 #sub(z, z') -{ 0 }-> #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0 1111.86/291.68 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.86/291.68 #succ(z) -{ 0 }-> 0 :|: z >= 0 1111.86/291.68 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.86/291.68 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.86/291.68 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.86/291.68 div(z, z') -{ 1 }-> #div(z, z') :|: z >= 0, z' >= 0 1111.86/291.68 eratos(z) -{ 1 }-> eratos#1(z) :|: z >= 0 1111.86/291.68 eratos#1(z) -{ 1 }-> 2 :|: z = 2 1111.86/291.68 eratos#1(z) -{ 2 }-> 1 + @x + eratos(filter#1(@xs, @x)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.86/291.68 filter(z, z') -{ 1 }-> filter#1(z', z) :|: z >= 0, z' >= 0 1111.86/291.68 filter#1(z, z') -{ 2 }-> filter#2(filter#1(@xs, z'), z', @x) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.86/291.68 filter#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 1111.86/291.68 filter#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.68 filter#2(z, z', z'') -{ 2 }-> filter#3(#equal(minus(z'', times(z'', div(z'', z'))), 0), z'', z) :|: z' >= 0, z'' >= 0, z >= 0 1111.86/291.68 filter#3(z, z', z'') -{ 1 }-> z'' :|: z = 2, z' >= 0, z'' >= 0 1111.86/291.68 filter#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 1111.86/291.68 filter#3(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z' >= 0, z'' >= 0, z = 1 1111.86/291.68 minus(z, z') -{ 1 }-> #sub(z, z') :|: z >= 0, z' >= 0 1111.86/291.68 mod(z, z') -{ 2 }-> minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0 1111.86/291.68 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 1111.86/291.68 1111.86/291.68 Function symbols to be analyzed: {#add}, {#div}, {#equal}, {#natmult}, {#sub}, {div}, {#mult}, {minus}, {times}, {filter#2}, {mod}, {filter#1}, {filter}, {eratos,eratos#1} 1111.86/291.68 Previous analysis results are: 1111.86/291.68 #natsub: runtime: O(1) [0], size: O(n^1) [z] 1111.86/291.68 #and: runtime: O(1) [0], size: O(1) [2] 1111.86/291.68 filter#3: runtime: O(1) [1], size: O(n^1) [1 + z' + z''] 1111.86/291.68 #pred: runtime: O(1) [0], size: O(n^1) [2 + z] 1111.86/291.68 #succ: runtime: O(1) [0], size: O(n^1) [2 + z] 1111.86/291.68 #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] 1111.86/291.68 #eq: runtime: O(1) [0], size: O(1) [2] 1111.86/291.68 #add: runtime: ?, size: O(n^1) [2*z + z'] 1111.86/291.68 1111.86/291.68 ---------------------------------------- 1111.86/291.68 1111.86/291.68 (67) IntTrsBoundProof (UPPER BOUND(ID)) 1111.86/291.68 1111.86/291.68 Computed RUNTIME bound using CoFloCo for: #add 1111.86/291.68 after applying outer abstraction to obtain an ITS, 1111.86/291.68 resulting in: O(1) with polynomial bound: 0 1111.86/291.68 1111.86/291.68 ---------------------------------------- 1111.86/291.68 1111.86/291.68 (68) 1111.86/291.68 Obligation: 1111.86/291.68 Complexity RNTS consisting of the following rules: 1111.86/291.68 1111.86/291.68 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 1111.86/291.68 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 1111.86/291.68 #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 1111.86/291.68 #add(z, z') -{ 0 }-> s3 :|: s3 >= 0, s3 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) 1111.86/291.68 #add(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 1111.86/291.68 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 1111.86/291.68 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.68 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) 1111.86/291.68 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 1111.86/291.68 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 1111.86/291.68 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' 1111.86/291.68 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 1111.86/291.68 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) 1111.86/291.68 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 1111.86/291.68 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 1111.86/291.68 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 1111.86/291.68 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) 1111.86/291.68 #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')) 1111.86/291.68 #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')) 1111.86/291.68 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 1111.86/291.68 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 1111.86/291.68 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 1111.86/291.68 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 1111.86/291.68 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 1111.86/291.68 #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) 1111.86/291.68 #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') 1111.86/291.68 #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') 1111.86/291.68 #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 1111.86/291.68 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 1111.86/291.68 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 1111.86/291.68 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.86/291.68 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 1111.86/291.68 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 1111.86/291.68 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 1111.86/291.68 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.68 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.86/291.68 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.86/291.68 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.86/291.68 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.68 #div(z, z') -{ 0 }-> 1 + s5 :|: s5 >= 0, s5 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.68 #eq(z, z') -{ 0 }-> s10 :|: s10 >= 0, s10 <= 2, z - 1 >= 0, z' - 1 >= 0 1111.86/291.68 #eq(z, z') -{ 0 }-> s13 :|: s11 >= 0, s11 <= 2, s12 >= 0, s12 <= 2, s13 >= 0, s13 <= 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 1111.86/291.68 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 1111.86/291.68 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.86/291.68 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 1111.86/291.68 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.86/291.68 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 1111.86/291.68 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 1111.86/291.68 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 1111.86/291.68 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.68 #equal(z, z') -{ 1 }-> s9 :|: s9 >= 0, s9 <= 2, z >= 0, z' >= 0 1111.86/291.68 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 1111.86/291.68 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.86/291.68 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 1111.86/291.68 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.68 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 1111.86/291.68 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.86/291.68 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.68 #natdiv(z, z') -{ 0 }-> 1 + s6 :|: s6 >= 0, s6 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 1111.86/291.68 #natdiv(z, z') -{ 0 }-> 1 + s7 :|: s7 >= 0, s7 <= s + 1, s >= 0, s <= z - 2, z' - 2 >= 0, z - 2 >= 0 1111.86/291.68 #natdiv(z, z') -{ 0 }-> 1 + s8 :|: s8 >= 0, s8 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.68 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 1111.86/291.68 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.68 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 1111.86/291.68 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 1111.86/291.68 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 1111.86/291.68 #natsub(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= z - 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.68 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.86/291.68 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.68 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.86/291.68 #pred(z) -{ 0 }-> 0 :|: z >= 0 1111.86/291.68 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.86/291.68 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.86/291.68 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.86/291.68 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.86/291.68 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.68 #sub(z, z') -{ 0 }-> #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0 1111.86/291.68 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.86/291.68 #succ(z) -{ 0 }-> 0 :|: z >= 0 1111.86/291.68 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.86/291.68 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.86/291.68 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.86/291.68 div(z, z') -{ 1 }-> #div(z, z') :|: z >= 0, z' >= 0 1111.86/291.68 eratos(z) -{ 1 }-> eratos#1(z) :|: z >= 0 1111.86/291.68 eratos#1(z) -{ 1 }-> 2 :|: z = 2 1111.86/291.68 eratos#1(z) -{ 2 }-> 1 + @x + eratos(filter#1(@xs, @x)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.86/291.68 filter(z, z') -{ 1 }-> filter#1(z', z) :|: z >= 0, z' >= 0 1111.86/291.68 filter#1(z, z') -{ 2 }-> filter#2(filter#1(@xs, z'), z', @x) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.86/291.68 filter#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 1111.86/291.68 filter#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.68 filter#2(z, z', z'') -{ 2 }-> filter#3(#equal(minus(z'', times(z'', div(z'', z'))), 0), z'', z) :|: z' >= 0, z'' >= 0, z >= 0 1111.86/291.68 filter#3(z, z', z'') -{ 1 }-> z'' :|: z = 2, z' >= 0, z'' >= 0 1111.86/291.68 filter#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 1111.86/291.68 filter#3(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z' >= 0, z'' >= 0, z = 1 1111.86/291.68 minus(z, z') -{ 1 }-> #sub(z, z') :|: z >= 0, z' >= 0 1111.86/291.68 mod(z, z') -{ 2 }-> minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0 1111.86/291.68 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 1111.86/291.68 1111.86/291.68 Function symbols to be analyzed: {#div}, {#equal}, {#natmult}, {#sub}, {div}, {#mult}, {minus}, {times}, {filter#2}, {mod}, {filter#1}, {filter}, {eratos,eratos#1} 1111.86/291.68 Previous analysis results are: 1111.86/291.68 #natsub: runtime: O(1) [0], size: O(n^1) [z] 1111.86/291.68 #and: runtime: O(1) [0], size: O(1) [2] 1111.86/291.68 filter#3: runtime: O(1) [1], size: O(n^1) [1 + z' + z''] 1111.86/291.68 #pred: runtime: O(1) [0], size: O(n^1) [2 + z] 1111.86/291.68 #succ: runtime: O(1) [0], size: O(n^1) [2 + z] 1111.86/291.68 #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] 1111.86/291.68 #eq: runtime: O(1) [0], size: O(1) [2] 1111.86/291.68 #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] 1111.86/291.68 1111.86/291.68 ---------------------------------------- 1111.86/291.68 1111.86/291.68 (69) ResultPropagationProof (UPPER BOUND(ID)) 1111.86/291.68 Applied inner abstraction using the recently inferred runtime/size bounds where possible. 1111.86/291.68 ---------------------------------------- 1111.86/291.68 1111.86/291.68 (70) 1111.86/291.68 Obligation: 1111.86/291.68 Complexity RNTS consisting of the following rules: 1111.86/291.68 1111.86/291.68 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 1111.86/291.68 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 1111.86/291.68 #add(z, z') -{ 0 }-> s19 :|: s17 >= 0, s17 <= 2 * (1 + (1 + (z - 4))) + z', s18 >= 0, s18 <= s17 + 2, s19 >= 0, s19 <= s18 + 2, z - 4 >= 0, z' >= 0 1111.86/291.68 #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 1111.86/291.68 #add(z, z') -{ 0 }-> s22 :|: s20 >= 0, s20 <= 2 * (1 + (1 + (z - 4))) + z', s21 >= 0, s21 <= s20 + 2, s22 >= 0, s22 <= s21 + 2, z' >= 0, z - 4 >= 0 1111.86/291.68 #add(z, z') -{ 0 }-> s3 :|: s3 >= 0, s3 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) 1111.86/291.68 #add(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 1111.86/291.68 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 1111.86/291.68 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.68 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) 1111.86/291.68 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 1111.86/291.68 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 1111.86/291.68 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' 1111.86/291.68 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 1111.86/291.68 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) 1111.86/291.68 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 1111.86/291.68 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 1111.86/291.68 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 1111.86/291.68 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) 1111.86/291.68 #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')) 1111.86/291.68 #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')) 1111.86/291.68 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 1111.86/291.68 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 1111.86/291.68 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 1111.86/291.68 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 1111.86/291.68 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 1111.86/291.68 #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) 1111.86/291.68 #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') 1111.86/291.68 #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') 1111.86/291.68 #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 1111.86/291.68 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.86/291.68 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 1111.86/291.68 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 1111.86/291.68 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 1111.86/291.68 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.68 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.86/291.68 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.86/291.68 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.86/291.68 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.68 #div(z, z') -{ 0 }-> 1 + s5 :|: s5 >= 0, s5 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.68 #eq(z, z') -{ 0 }-> s10 :|: s10 >= 0, s10 <= 2, z - 1 >= 0, z' - 1 >= 0 1111.86/291.68 #eq(z, z') -{ 0 }-> s13 :|: s11 >= 0, s11 <= 2, s12 >= 0, s12 <= 2, s13 >= 0, s13 <= 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 1111.86/291.68 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 1111.86/291.68 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.86/291.68 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 1111.86/291.68 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.86/291.68 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 1111.86/291.68 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 1111.86/291.68 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 1111.86/291.68 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.68 #equal(z, z') -{ 1 }-> s9 :|: s9 >= 0, s9 <= 2, z >= 0, z' >= 0 1111.86/291.68 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 1111.86/291.68 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.86/291.68 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 1111.86/291.68 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.68 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 1111.86/291.68 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.86/291.68 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.68 #natdiv(z, z') -{ 0 }-> 1 + s6 :|: s6 >= 0, s6 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 1111.86/291.68 #natdiv(z, z') -{ 0 }-> 1 + s7 :|: s7 >= 0, s7 <= s + 1, s >= 0, s <= z - 2, z' - 2 >= 0, z - 2 >= 0 1111.86/291.68 #natdiv(z, z') -{ 0 }-> 1 + s8 :|: s8 >= 0, s8 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.68 #natmult(z, z') -{ 0 }-> s14 :|: s14 >= 0, s14 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 1111.86/291.68 #natmult(z, z') -{ 0 }-> s15 :|: s15 >= 0, s15 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 1111.86/291.68 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 1111.86/291.68 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.68 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 1111.86/291.68 #natsub(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= z - 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.68 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.86/291.68 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.68 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.86/291.68 #pred(z) -{ 0 }-> 0 :|: z >= 0 1111.86/291.68 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.86/291.68 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.86/291.68 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.86/291.68 #sub(z, z') -{ 0 }-> s16 :|: s16 >= 0, s16 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 1111.86/291.68 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.86/291.68 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.68 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.86/291.68 #succ(z) -{ 0 }-> 0 :|: z >= 0 1111.86/291.68 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.86/291.68 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.86/291.68 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.86/291.68 div(z, z') -{ 1 }-> #div(z, z') :|: z >= 0, z' >= 0 1111.86/291.68 eratos(z) -{ 1 }-> eratos#1(z) :|: z >= 0 1111.86/291.68 eratos#1(z) -{ 1 }-> 2 :|: z = 2 1111.86/291.68 eratos#1(z) -{ 2 }-> 1 + @x + eratos(filter#1(@xs, @x)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.86/291.68 filter(z, z') -{ 1 }-> filter#1(z', z) :|: z >= 0, z' >= 0 1111.86/291.68 filter#1(z, z') -{ 2 }-> filter#2(filter#1(@xs, z'), z', @x) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.86/291.68 filter#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 1111.86/291.68 filter#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.68 filter#2(z, z', z'') -{ 2 }-> filter#3(#equal(minus(z'', times(z'', div(z'', z'))), 0), z'', z) :|: z' >= 0, z'' >= 0, z >= 0 1111.86/291.68 filter#3(z, z', z'') -{ 1 }-> z'' :|: z = 2, z' >= 0, z'' >= 0 1111.86/291.68 filter#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 1111.86/291.68 filter#3(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z' >= 0, z'' >= 0, z = 1 1111.86/291.68 minus(z, z') -{ 1 }-> #sub(z, z') :|: z >= 0, z' >= 0 1111.86/291.68 mod(z, z') -{ 2 }-> minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0 1111.86/291.68 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 1111.86/291.68 1111.86/291.68 Function symbols to be analyzed: {#div}, {#equal}, {#natmult}, {#sub}, {div}, {#mult}, {minus}, {times}, {filter#2}, {mod}, {filter#1}, {filter}, {eratos,eratos#1} 1111.86/291.68 Previous analysis results are: 1111.86/291.68 #natsub: runtime: O(1) [0], size: O(n^1) [z] 1111.86/291.68 #and: runtime: O(1) [0], size: O(1) [2] 1111.86/291.68 filter#3: runtime: O(1) [1], size: O(n^1) [1 + z' + z''] 1111.86/291.68 #pred: runtime: O(1) [0], size: O(n^1) [2 + z] 1111.86/291.68 #succ: runtime: O(1) [0], size: O(n^1) [2 + z] 1111.86/291.68 #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] 1111.86/291.68 #eq: runtime: O(1) [0], size: O(1) [2] 1111.86/291.68 #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] 1111.86/291.68 1111.86/291.68 ---------------------------------------- 1111.86/291.68 1111.86/291.68 (71) IntTrsBoundProof (UPPER BOUND(ID)) 1111.86/291.68 1111.86/291.68 Computed SIZE bound using CoFloCo for: #div 1111.86/291.68 after applying outer abstraction to obtain an ITS, 1111.86/291.68 resulting in: O(n^1) with polynomial bound: 1 + z 1111.86/291.68 1111.86/291.68 ---------------------------------------- 1111.86/291.68 1111.86/291.68 (72) 1111.86/291.68 Obligation: 1111.86/291.68 Complexity RNTS consisting of the following rules: 1111.86/291.68 1111.86/291.68 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 1111.86/291.68 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 1111.86/291.68 #add(z, z') -{ 0 }-> s19 :|: s17 >= 0, s17 <= 2 * (1 + (1 + (z - 4))) + z', s18 >= 0, s18 <= s17 + 2, s19 >= 0, s19 <= s18 + 2, z - 4 >= 0, z' >= 0 1111.86/291.68 #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 1111.86/291.68 #add(z, z') -{ 0 }-> s22 :|: s20 >= 0, s20 <= 2 * (1 + (1 + (z - 4))) + z', s21 >= 0, s21 <= s20 + 2, s22 >= 0, s22 <= s21 + 2, z' >= 0, z - 4 >= 0 1111.86/291.68 #add(z, z') -{ 0 }-> s3 :|: s3 >= 0, s3 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) 1111.86/291.68 #add(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 1111.86/291.68 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 1111.86/291.68 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.68 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) 1111.86/291.68 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 1111.86/291.68 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 1111.86/291.68 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' 1111.86/291.68 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 1111.86/291.68 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) 1111.86/291.68 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 1111.86/291.68 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 1111.86/291.68 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 1111.86/291.68 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) 1111.86/291.68 #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')) 1111.86/291.68 #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')) 1111.86/291.68 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 1111.86/291.68 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 1111.86/291.68 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 1111.86/291.68 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 1111.86/291.68 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 1111.86/291.68 #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) 1111.86/291.68 #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') 1111.86/291.68 #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') 1111.86/291.68 #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 1111.86/291.68 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.86/291.68 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 1111.86/291.68 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 1111.86/291.68 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 1111.86/291.68 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.68 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.86/291.68 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.86/291.68 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.86/291.68 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.68 #div(z, z') -{ 0 }-> 1 + s5 :|: s5 >= 0, s5 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.68 #eq(z, z') -{ 0 }-> s10 :|: s10 >= 0, s10 <= 2, z - 1 >= 0, z' - 1 >= 0 1111.86/291.68 #eq(z, z') -{ 0 }-> s13 :|: s11 >= 0, s11 <= 2, s12 >= 0, s12 <= 2, s13 >= 0, s13 <= 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 1111.86/291.68 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 1111.86/291.68 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.86/291.68 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 1111.86/291.68 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.86/291.68 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 1111.86/291.68 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 1111.86/291.68 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 1111.86/291.68 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.68 #equal(z, z') -{ 1 }-> s9 :|: s9 >= 0, s9 <= 2, z >= 0, z' >= 0 1111.86/291.68 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 1111.86/291.68 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.86/291.68 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 1111.86/291.68 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.68 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 1111.86/291.68 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.86/291.68 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.68 #natdiv(z, z') -{ 0 }-> 1 + s6 :|: s6 >= 0, s6 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 1111.86/291.68 #natdiv(z, z') -{ 0 }-> 1 + s7 :|: s7 >= 0, s7 <= s + 1, s >= 0, s <= z - 2, z' - 2 >= 0, z - 2 >= 0 1111.86/291.68 #natdiv(z, z') -{ 0 }-> 1 + s8 :|: s8 >= 0, s8 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.68 #natmult(z, z') -{ 0 }-> s14 :|: s14 >= 0, s14 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 1111.86/291.68 #natmult(z, z') -{ 0 }-> s15 :|: s15 >= 0, s15 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 1111.86/291.68 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 1111.86/291.68 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.68 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 1111.86/291.68 #natsub(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= z - 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.68 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.86/291.68 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.68 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.86/291.68 #pred(z) -{ 0 }-> 0 :|: z >= 0 1111.86/291.68 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.86/291.68 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.86/291.68 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.86/291.68 #sub(z, z') -{ 0 }-> s16 :|: s16 >= 0, s16 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 1111.86/291.68 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.86/291.68 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.68 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.86/291.68 #succ(z) -{ 0 }-> 0 :|: z >= 0 1111.86/291.68 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.86/291.68 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.86/291.68 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.86/291.68 div(z, z') -{ 1 }-> #div(z, z') :|: z >= 0, z' >= 0 1111.86/291.68 eratos(z) -{ 1 }-> eratos#1(z) :|: z >= 0 1111.86/291.68 eratos#1(z) -{ 1 }-> 2 :|: z = 2 1111.86/291.68 eratos#1(z) -{ 2 }-> 1 + @x + eratos(filter#1(@xs, @x)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.86/291.68 filter(z, z') -{ 1 }-> filter#1(z', z) :|: z >= 0, z' >= 0 1111.86/291.68 filter#1(z, z') -{ 2 }-> filter#2(filter#1(@xs, z'), z', @x) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.86/291.68 filter#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 1111.86/291.68 filter#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.68 filter#2(z, z', z'') -{ 2 }-> filter#3(#equal(minus(z'', times(z'', div(z'', z'))), 0), z'', z) :|: z' >= 0, z'' >= 0, z >= 0 1111.86/291.68 filter#3(z, z', z'') -{ 1 }-> z'' :|: z = 2, z' >= 0, z'' >= 0 1111.86/291.68 filter#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 1111.86/291.68 filter#3(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z' >= 0, z'' >= 0, z = 1 1111.86/291.68 minus(z, z') -{ 1 }-> #sub(z, z') :|: z >= 0, z' >= 0 1111.86/291.68 mod(z, z') -{ 2 }-> minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0 1111.86/291.68 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 1111.86/291.68 1111.86/291.68 Function symbols to be analyzed: {#div}, {#equal}, {#natmult}, {#sub}, {div}, {#mult}, {minus}, {times}, {filter#2}, {mod}, {filter#1}, {filter}, {eratos,eratos#1} 1111.86/291.68 Previous analysis results are: 1111.86/291.68 #natsub: runtime: O(1) [0], size: O(n^1) [z] 1111.86/291.68 #and: runtime: O(1) [0], size: O(1) [2] 1111.86/291.68 filter#3: runtime: O(1) [1], size: O(n^1) [1 + z' + z''] 1111.86/291.68 #pred: runtime: O(1) [0], size: O(n^1) [2 + z] 1111.86/291.68 #succ: runtime: O(1) [0], size: O(n^1) [2 + z] 1111.86/291.68 #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] 1111.86/291.68 #eq: runtime: O(1) [0], size: O(1) [2] 1111.86/291.68 #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] 1111.86/291.68 #div: runtime: ?, size: O(n^1) [1 + z] 1111.86/291.68 1111.86/291.68 ---------------------------------------- 1111.86/291.68 1111.86/291.68 (73) IntTrsBoundProof (UPPER BOUND(ID)) 1111.86/291.68 1111.86/291.68 Computed RUNTIME bound using CoFloCo for: #div 1111.86/291.68 after applying outer abstraction to obtain an ITS, 1111.86/291.68 resulting in: O(1) with polynomial bound: 0 1111.86/291.68 1111.86/291.68 ---------------------------------------- 1111.86/291.68 1111.86/291.68 (74) 1111.86/291.68 Obligation: 1111.86/291.68 Complexity RNTS consisting of the following rules: 1111.86/291.68 1111.86/291.68 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 1111.86/291.68 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 1111.86/291.68 #add(z, z') -{ 0 }-> s19 :|: s17 >= 0, s17 <= 2 * (1 + (1 + (z - 4))) + z', s18 >= 0, s18 <= s17 + 2, s19 >= 0, s19 <= s18 + 2, z - 4 >= 0, z' >= 0 1111.86/291.68 #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 1111.86/291.68 #add(z, z') -{ 0 }-> s22 :|: s20 >= 0, s20 <= 2 * (1 + (1 + (z - 4))) + z', s21 >= 0, s21 <= s20 + 2, s22 >= 0, s22 <= s21 + 2, z' >= 0, z - 4 >= 0 1111.86/291.68 #add(z, z') -{ 0 }-> s3 :|: s3 >= 0, s3 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) 1111.86/291.68 #add(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 1111.86/291.68 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 1111.86/291.68 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.68 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) 1111.86/291.68 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 1111.86/291.68 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 1111.86/291.68 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' 1111.86/291.68 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 1111.86/291.68 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) 1111.86/291.68 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 1111.86/291.68 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 1111.86/291.68 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 1111.86/291.68 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) 1111.86/291.68 #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')) 1111.86/291.68 #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')) 1111.86/291.68 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 1111.86/291.68 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 1111.86/291.68 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 1111.86/291.68 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 1111.86/291.68 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 1111.86/291.68 #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) 1111.86/291.68 #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') 1111.86/291.68 #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') 1111.86/291.68 #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 1111.86/291.68 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.86/291.68 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 1111.86/291.68 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 1111.86/291.68 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 1111.86/291.68 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.68 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.86/291.68 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.86/291.68 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.86/291.68 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.68 #div(z, z') -{ 0 }-> 1 + s5 :|: s5 >= 0, s5 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.68 #eq(z, z') -{ 0 }-> s10 :|: s10 >= 0, s10 <= 2, z - 1 >= 0, z' - 1 >= 0 1111.86/291.68 #eq(z, z') -{ 0 }-> s13 :|: s11 >= 0, s11 <= 2, s12 >= 0, s12 <= 2, s13 >= 0, s13 <= 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 1111.86/291.68 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 1111.86/291.68 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.86/291.68 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 1111.86/291.68 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.86/291.68 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 1111.86/291.68 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 1111.86/291.68 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 1111.86/291.68 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.68 #equal(z, z') -{ 1 }-> s9 :|: s9 >= 0, s9 <= 2, z >= 0, z' >= 0 1111.86/291.68 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 1111.86/291.68 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.86/291.68 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 1111.86/291.68 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.68 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 1111.86/291.68 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.86/291.68 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.68 #natdiv(z, z') -{ 0 }-> 1 + s6 :|: s6 >= 0, s6 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 1111.86/291.68 #natdiv(z, z') -{ 0 }-> 1 + s7 :|: s7 >= 0, s7 <= s + 1, s >= 0, s <= z - 2, z' - 2 >= 0, z - 2 >= 0 1111.86/291.68 #natdiv(z, z') -{ 0 }-> 1 + s8 :|: s8 >= 0, s8 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.68 #natmult(z, z') -{ 0 }-> s14 :|: s14 >= 0, s14 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 1111.86/291.68 #natmult(z, z') -{ 0 }-> s15 :|: s15 >= 0, s15 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 1111.86/291.68 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 1111.86/291.68 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.68 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 1111.86/291.68 #natsub(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= z - 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.68 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.86/291.68 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.68 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.86/291.68 #pred(z) -{ 0 }-> 0 :|: z >= 0 1111.86/291.68 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.86/291.68 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.86/291.68 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.86/291.68 #sub(z, z') -{ 0 }-> s16 :|: s16 >= 0, s16 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 1111.86/291.68 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.86/291.68 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.68 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.86/291.68 #succ(z) -{ 0 }-> 0 :|: z >= 0 1111.86/291.68 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.86/291.68 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.86/291.68 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.86/291.68 div(z, z') -{ 1 }-> #div(z, z') :|: z >= 0, z' >= 0 1111.86/291.68 eratos(z) -{ 1 }-> eratos#1(z) :|: z >= 0 1111.86/291.68 eratos#1(z) -{ 1 }-> 2 :|: z = 2 1111.86/291.68 eratos#1(z) -{ 2 }-> 1 + @x + eratos(filter#1(@xs, @x)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.86/291.68 filter(z, z') -{ 1 }-> filter#1(z', z) :|: z >= 0, z' >= 0 1111.86/291.68 filter#1(z, z') -{ 2 }-> filter#2(filter#1(@xs, z'), z', @x) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.86/291.68 filter#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 1111.86/291.68 filter#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.68 filter#2(z, z', z'') -{ 2 }-> filter#3(#equal(minus(z'', times(z'', div(z'', z'))), 0), z'', z) :|: z' >= 0, z'' >= 0, z >= 0 1111.86/291.68 filter#3(z, z', z'') -{ 1 }-> z'' :|: z = 2, z' >= 0, z'' >= 0 1111.86/291.68 filter#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 1111.86/291.68 filter#3(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z' >= 0, z'' >= 0, z = 1 1111.86/291.68 minus(z, z') -{ 1 }-> #sub(z, z') :|: z >= 0, z' >= 0 1111.86/291.68 mod(z, z') -{ 2 }-> minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0 1111.86/291.68 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 1111.86/291.68 1111.86/291.68 Function symbols to be analyzed: {#equal}, {#natmult}, {#sub}, {div}, {#mult}, {minus}, {times}, {filter#2}, {mod}, {filter#1}, {filter}, {eratos,eratos#1} 1111.86/291.68 Previous analysis results are: 1111.86/291.68 #natsub: runtime: O(1) [0], size: O(n^1) [z] 1111.86/291.68 #and: runtime: O(1) [0], size: O(1) [2] 1111.86/291.68 filter#3: runtime: O(1) [1], size: O(n^1) [1 + z' + z''] 1111.86/291.68 #pred: runtime: O(1) [0], size: O(n^1) [2 + z] 1111.86/291.68 #succ: runtime: O(1) [0], size: O(n^1) [2 + z] 1111.86/291.68 #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] 1111.86/291.68 #eq: runtime: O(1) [0], size: O(1) [2] 1111.86/291.68 #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] 1111.86/291.68 #div: runtime: O(1) [0], size: O(n^1) [1 + z] 1111.86/291.68 1111.86/291.68 ---------------------------------------- 1111.86/291.68 1111.86/291.68 (75) ResultPropagationProof (UPPER BOUND(ID)) 1111.86/291.68 Applied inner abstraction using the recently inferred runtime/size bounds where possible. 1111.86/291.68 ---------------------------------------- 1111.86/291.68 1111.86/291.68 (76) 1111.86/291.68 Obligation: 1111.86/291.68 Complexity RNTS consisting of the following rules: 1111.86/291.68 1111.86/291.68 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 1111.86/291.68 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 1111.86/291.68 #add(z, z') -{ 0 }-> s19 :|: s17 >= 0, s17 <= 2 * (1 + (1 + (z - 4))) + z', s18 >= 0, s18 <= s17 + 2, s19 >= 0, s19 <= s18 + 2, z - 4 >= 0, z' >= 0 1111.86/291.68 #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 1111.86/291.68 #add(z, z') -{ 0 }-> s22 :|: s20 >= 0, s20 <= 2 * (1 + (1 + (z - 4))) + z', s21 >= 0, s21 <= s20 + 2, s22 >= 0, s22 <= s21 + 2, z' >= 0, z - 4 >= 0 1111.86/291.68 #add(z, z') -{ 0 }-> s3 :|: s3 >= 0, s3 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) 1111.86/291.68 #add(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 1111.86/291.68 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 1111.86/291.68 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.68 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) 1111.86/291.68 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 1111.86/291.68 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 1111.86/291.68 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' 1111.86/291.68 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 1111.86/291.68 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) 1111.86/291.68 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 1111.86/291.68 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 1111.86/291.68 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 1111.86/291.68 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) 1111.86/291.68 #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')) 1111.86/291.68 #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')) 1111.86/291.68 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 1111.86/291.68 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 1111.86/291.68 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 1111.86/291.68 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 1111.86/291.68 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 1111.86/291.68 #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) 1111.86/291.68 #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') 1111.86/291.68 #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') 1111.86/291.68 #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 1111.86/291.68 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.86/291.68 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 1111.86/291.68 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 1111.86/291.68 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 1111.86/291.68 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.68 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.86/291.68 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.86/291.68 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.86/291.68 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.68 #div(z, z') -{ 0 }-> 1 + s5 :|: s5 >= 0, s5 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.68 #eq(z, z') -{ 0 }-> s10 :|: s10 >= 0, s10 <= 2, z - 1 >= 0, z' - 1 >= 0 1111.86/291.68 #eq(z, z') -{ 0 }-> s13 :|: s11 >= 0, s11 <= 2, s12 >= 0, s12 <= 2, s13 >= 0, s13 <= 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 1111.86/291.68 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 1111.86/291.68 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.86/291.68 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 1111.86/291.68 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.86/291.68 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 1111.86/291.68 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 1111.86/291.68 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 1111.86/291.68 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.68 #equal(z, z') -{ 1 }-> s9 :|: s9 >= 0, s9 <= 2, z >= 0, z' >= 0 1111.86/291.68 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 1111.86/291.68 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.86/291.68 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 1111.86/291.68 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.68 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 1111.86/291.68 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.86/291.68 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.68 #natdiv(z, z') -{ 0 }-> 1 + s6 :|: s6 >= 0, s6 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 1111.86/291.68 #natdiv(z, z') -{ 0 }-> 1 + s7 :|: s7 >= 0, s7 <= s + 1, s >= 0, s <= z - 2, z' - 2 >= 0, z - 2 >= 0 1111.86/291.68 #natdiv(z, z') -{ 0 }-> 1 + s8 :|: s8 >= 0, s8 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.68 #natmult(z, z') -{ 0 }-> s14 :|: s14 >= 0, s14 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 1111.86/291.68 #natmult(z, z') -{ 0 }-> s15 :|: s15 >= 0, s15 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 1111.86/291.68 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 1111.86/291.68 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.68 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 1111.86/291.68 #natsub(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= z - 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.68 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.86/291.68 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.68 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.86/291.68 #pred(z) -{ 0 }-> 0 :|: z >= 0 1111.86/291.68 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.86/291.68 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.86/291.68 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.86/291.68 #sub(z, z') -{ 0 }-> s16 :|: s16 >= 0, s16 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 1111.86/291.68 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.86/291.68 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.68 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.86/291.68 #succ(z) -{ 0 }-> 0 :|: z >= 0 1111.86/291.68 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.86/291.68 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.86/291.68 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.86/291.68 div(z, z') -{ 1 }-> s23 :|: s23 >= 0, s23 <= z + 1, z >= 0, z' >= 0 1111.86/291.68 eratos(z) -{ 1 }-> eratos#1(z) :|: z >= 0 1111.86/291.68 eratos#1(z) -{ 1 }-> 2 :|: z = 2 1111.86/291.68 eratos#1(z) -{ 2 }-> 1 + @x + eratos(filter#1(@xs, @x)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.86/291.68 filter(z, z') -{ 1 }-> filter#1(z', z) :|: z >= 0, z' >= 0 1111.86/291.68 filter#1(z, z') -{ 2 }-> filter#2(filter#1(@xs, z'), z', @x) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.86/291.68 filter#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 1111.86/291.68 filter#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.68 filter#2(z, z', z'') -{ 2 }-> filter#3(#equal(minus(z'', times(z'', div(z'', z'))), 0), z'', z) :|: z' >= 0, z'' >= 0, z >= 0 1111.86/291.68 filter#3(z, z', z'') -{ 1 }-> z'' :|: z = 2, z' >= 0, z'' >= 0 1111.86/291.68 filter#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 1111.86/291.68 filter#3(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z' >= 0, z'' >= 0, z = 1 1111.86/291.68 minus(z, z') -{ 1 }-> #sub(z, z') :|: z >= 0, z' >= 0 1111.86/291.68 mod(z, z') -{ 2 }-> minus(z, times(z, s24)) :|: s24 >= 0, s24 <= z + 1, z >= 0, z' >= 0 1111.86/291.68 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 1111.86/291.68 1111.86/291.68 Function symbols to be analyzed: {#equal}, {#natmult}, {#sub}, {div}, {#mult}, {minus}, {times}, {filter#2}, {mod}, {filter#1}, {filter}, {eratos,eratos#1} 1111.86/291.68 Previous analysis results are: 1111.86/291.68 #natsub: runtime: O(1) [0], size: O(n^1) [z] 1111.86/291.68 #and: runtime: O(1) [0], size: O(1) [2] 1111.86/291.68 filter#3: runtime: O(1) [1], size: O(n^1) [1 + z' + z''] 1111.86/291.68 #pred: runtime: O(1) [0], size: O(n^1) [2 + z] 1111.86/291.68 #succ: runtime: O(1) [0], size: O(n^1) [2 + z] 1111.86/291.68 #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] 1111.86/291.68 #eq: runtime: O(1) [0], size: O(1) [2] 1111.86/291.68 #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] 1111.86/291.68 #div: runtime: O(1) [0], size: O(n^1) [1 + z] 1111.86/291.68 1111.86/291.68 ---------------------------------------- 1111.86/291.68 1111.86/291.68 (77) IntTrsBoundProof (UPPER BOUND(ID)) 1111.86/291.68 1111.86/291.68 Computed SIZE bound using CoFloCo for: #equal 1111.86/291.68 after applying outer abstraction to obtain an ITS, 1111.86/291.68 resulting in: O(1) with polynomial bound: 2 1111.86/291.68 1111.86/291.68 ---------------------------------------- 1111.86/291.68 1111.86/291.68 (78) 1111.86/291.68 Obligation: 1111.86/291.68 Complexity RNTS consisting of the following rules: 1111.86/291.68 1111.86/291.68 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 1111.86/291.68 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 1111.86/291.68 #add(z, z') -{ 0 }-> s19 :|: s17 >= 0, s17 <= 2 * (1 + (1 + (z - 4))) + z', s18 >= 0, s18 <= s17 + 2, s19 >= 0, s19 <= s18 + 2, z - 4 >= 0, z' >= 0 1111.86/291.68 #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 1111.86/291.68 #add(z, z') -{ 0 }-> s22 :|: s20 >= 0, s20 <= 2 * (1 + (1 + (z - 4))) + z', s21 >= 0, s21 <= s20 + 2, s22 >= 0, s22 <= s21 + 2, z' >= 0, z - 4 >= 0 1111.86/291.68 #add(z, z') -{ 0 }-> s3 :|: s3 >= 0, s3 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) 1111.86/291.68 #add(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 1111.86/291.68 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 1111.86/291.68 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.68 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) 1111.86/291.68 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 1111.86/291.68 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 1111.86/291.68 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' 1111.86/291.68 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 1111.86/291.68 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) 1111.86/291.68 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 1111.86/291.68 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 1111.86/291.68 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 1111.86/291.68 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) 1111.86/291.68 #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')) 1111.86/291.68 #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')) 1111.86/291.68 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 1111.86/291.68 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 1111.86/291.68 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 1111.86/291.68 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 1111.86/291.68 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 1111.86/291.68 #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) 1111.86/291.68 #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') 1111.86/291.68 #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') 1111.86/291.68 #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 1111.86/291.68 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.86/291.68 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 1111.86/291.68 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 1111.86/291.68 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 1111.86/291.68 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.68 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.86/291.68 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.86/291.68 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.86/291.68 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.68 #div(z, z') -{ 0 }-> 1 + s5 :|: s5 >= 0, s5 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.68 #eq(z, z') -{ 0 }-> s10 :|: s10 >= 0, s10 <= 2, z - 1 >= 0, z' - 1 >= 0 1111.86/291.68 #eq(z, z') -{ 0 }-> s13 :|: s11 >= 0, s11 <= 2, s12 >= 0, s12 <= 2, s13 >= 0, s13 <= 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 1111.86/291.68 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 1111.86/291.68 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.86/291.68 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 1111.86/291.68 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.86/291.68 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 1111.86/291.68 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 1111.86/291.68 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 1111.86/291.68 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.68 #equal(z, z') -{ 1 }-> s9 :|: s9 >= 0, s9 <= 2, z >= 0, z' >= 0 1111.86/291.68 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 1111.86/291.68 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.86/291.68 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 1111.86/291.68 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.68 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 1111.86/291.68 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.86/291.68 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.68 #natdiv(z, z') -{ 0 }-> 1 + s6 :|: s6 >= 0, s6 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 1111.86/291.68 #natdiv(z, z') -{ 0 }-> 1 + s7 :|: s7 >= 0, s7 <= s + 1, s >= 0, s <= z - 2, z' - 2 >= 0, z - 2 >= 0 1111.86/291.68 #natdiv(z, z') -{ 0 }-> 1 + s8 :|: s8 >= 0, s8 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.68 #natmult(z, z') -{ 0 }-> s14 :|: s14 >= 0, s14 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 1111.86/291.68 #natmult(z, z') -{ 0 }-> s15 :|: s15 >= 0, s15 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 1111.86/291.68 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 1111.86/291.68 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.68 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 1111.86/291.68 #natsub(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= z - 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.68 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.86/291.68 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.68 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.86/291.68 #pred(z) -{ 0 }-> 0 :|: z >= 0 1111.86/291.68 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.86/291.68 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.86/291.69 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.86/291.69 #sub(z, z') -{ 0 }-> s16 :|: s16 >= 0, s16 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 1111.86/291.69 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.86/291.69 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.86/291.69 #succ(z) -{ 0 }-> 0 :|: z >= 0 1111.86/291.69 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.86/291.69 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.86/291.69 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.86/291.69 div(z, z') -{ 1 }-> s23 :|: s23 >= 0, s23 <= z + 1, z >= 0, z' >= 0 1111.86/291.69 eratos(z) -{ 1 }-> eratos#1(z) :|: z >= 0 1111.86/291.69 eratos#1(z) -{ 1 }-> 2 :|: z = 2 1111.86/291.69 eratos#1(z) -{ 2 }-> 1 + @x + eratos(filter#1(@xs, @x)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.86/291.69 filter(z, z') -{ 1 }-> filter#1(z', z) :|: z >= 0, z' >= 0 1111.86/291.69 filter#1(z, z') -{ 2 }-> filter#2(filter#1(@xs, z'), z', @x) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.86/291.69 filter#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 1111.86/291.69 filter#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 filter#2(z, z', z'') -{ 2 }-> filter#3(#equal(minus(z'', times(z'', div(z'', z'))), 0), z'', z) :|: z' >= 0, z'' >= 0, z >= 0 1111.86/291.69 filter#3(z, z', z'') -{ 1 }-> z'' :|: z = 2, z' >= 0, z'' >= 0 1111.86/291.69 filter#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 1111.86/291.69 filter#3(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z' >= 0, z'' >= 0, z = 1 1111.86/291.69 minus(z, z') -{ 1 }-> #sub(z, z') :|: z >= 0, z' >= 0 1111.86/291.69 mod(z, z') -{ 2 }-> minus(z, times(z, s24)) :|: s24 >= 0, s24 <= z + 1, z >= 0, z' >= 0 1111.86/291.69 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 1111.86/291.69 1111.86/291.69 Function symbols to be analyzed: {#equal}, {#natmult}, {#sub}, {div}, {#mult}, {minus}, {times}, {filter#2}, {mod}, {filter#1}, {filter}, {eratos,eratos#1} 1111.86/291.69 Previous analysis results are: 1111.86/291.69 #natsub: runtime: O(1) [0], size: O(n^1) [z] 1111.86/291.69 #and: runtime: O(1) [0], size: O(1) [2] 1111.86/291.69 filter#3: runtime: O(1) [1], size: O(n^1) [1 + z' + z''] 1111.86/291.69 #pred: runtime: O(1) [0], size: O(n^1) [2 + z] 1111.86/291.69 #succ: runtime: O(1) [0], size: O(n^1) [2 + z] 1111.86/291.69 #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] 1111.86/291.69 #eq: runtime: O(1) [0], size: O(1) [2] 1111.86/291.69 #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] 1111.86/291.69 #div: runtime: O(1) [0], size: O(n^1) [1 + z] 1111.86/291.69 #equal: runtime: ?, size: O(1) [2] 1111.86/291.69 1111.86/291.69 ---------------------------------------- 1111.86/291.69 1111.86/291.69 (79) IntTrsBoundProof (UPPER BOUND(ID)) 1111.86/291.69 1111.86/291.69 Computed RUNTIME bound using CoFloCo for: #equal 1111.86/291.69 after applying outer abstraction to obtain an ITS, 1111.86/291.69 resulting in: O(1) with polynomial bound: 1 1111.86/291.69 1111.86/291.69 ---------------------------------------- 1111.86/291.69 1111.86/291.69 (80) 1111.86/291.69 Obligation: 1111.86/291.69 Complexity RNTS consisting of the following rules: 1111.86/291.69 1111.86/291.69 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> s19 :|: s17 >= 0, s17 <= 2 * (1 + (1 + (z - 4))) + z', s18 >= 0, s18 <= s17 + 2, s19 >= 0, s19 <= s18 + 2, z - 4 >= 0, z' >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> s22 :|: s20 >= 0, s20 <= 2 * (1 + (1 + (z - 4))) + z', s21 >= 0, s21 <= s20 + 2, s22 >= 0, s22 <= s21 + 2, z' >= 0, z - 4 >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> s3 :|: s3 >= 0, s3 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) 1111.86/291.69 #add(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 1111.86/291.69 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) 1111.86/291.69 #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')) 1111.86/291.69 #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')) 1111.86/291.69 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 1111.86/291.69 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 1111.86/291.69 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 1111.86/291.69 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 1111.86/291.69 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 1111.86/291.69 #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) 1111.86/291.69 #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') 1111.86/291.69 #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') 1111.86/291.69 #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 1111.86/291.69 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.86/291.69 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 1111.86/291.69 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 1111.86/291.69 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 1111.86/291.69 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.86/291.69 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.86/291.69 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.86/291.69 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #div(z, z') -{ 0 }-> 1 + s5 :|: s5 >= 0, s5 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.69 #eq(z, z') -{ 0 }-> s10 :|: s10 >= 0, s10 <= 2, z - 1 >= 0, z' - 1 >= 0 1111.86/291.69 #eq(z, z') -{ 0 }-> s13 :|: s11 >= 0, s11 <= 2, s12 >= 0, s12 <= 2, s13 >= 0, s13 <= 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 1111.86/291.69 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 1111.86/291.69 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.86/291.69 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 1111.86/291.69 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.86/291.69 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 1111.86/291.69 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 1111.86/291.69 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 1111.86/291.69 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #equal(z, z') -{ 1 }-> s9 :|: s9 >= 0, s9 <= 2, z >= 0, z' >= 0 1111.86/291.69 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 1111.86/291.69 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.86/291.69 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 1111.86/291.69 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 1111.86/291.69 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.86/291.69 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #natdiv(z, z') -{ 0 }-> 1 + s6 :|: s6 >= 0, s6 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 1111.86/291.69 #natdiv(z, z') -{ 0 }-> 1 + s7 :|: s7 >= 0, s7 <= s + 1, s >= 0, s <= z - 2, z' - 2 >= 0, z - 2 >= 0 1111.86/291.69 #natdiv(z, z') -{ 0 }-> 1 + s8 :|: s8 >= 0, s8 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.69 #natmult(z, z') -{ 0 }-> s14 :|: s14 >= 0, s14 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 1111.86/291.69 #natmult(z, z') -{ 0 }-> s15 :|: s15 >= 0, s15 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 1111.86/291.69 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 1111.86/291.69 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 1111.86/291.69 #natsub(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= z - 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.69 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.86/291.69 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.86/291.69 #pred(z) -{ 0 }-> 0 :|: z >= 0 1111.86/291.69 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.86/291.69 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.86/291.69 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.86/291.69 #sub(z, z') -{ 0 }-> s16 :|: s16 >= 0, s16 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 1111.86/291.69 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.86/291.69 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.86/291.69 #succ(z) -{ 0 }-> 0 :|: z >= 0 1111.86/291.69 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.86/291.69 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.86/291.69 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.86/291.69 div(z, z') -{ 1 }-> s23 :|: s23 >= 0, s23 <= z + 1, z >= 0, z' >= 0 1111.86/291.69 eratos(z) -{ 1 }-> eratos#1(z) :|: z >= 0 1111.86/291.69 eratos#1(z) -{ 1 }-> 2 :|: z = 2 1111.86/291.69 eratos#1(z) -{ 2 }-> 1 + @x + eratos(filter#1(@xs, @x)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.86/291.69 filter(z, z') -{ 1 }-> filter#1(z', z) :|: z >= 0, z' >= 0 1111.86/291.69 filter#1(z, z') -{ 2 }-> filter#2(filter#1(@xs, z'), z', @x) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.86/291.69 filter#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 1111.86/291.69 filter#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 filter#2(z, z', z'') -{ 2 }-> filter#3(#equal(minus(z'', times(z'', div(z'', z'))), 0), z'', z) :|: z' >= 0, z'' >= 0, z >= 0 1111.86/291.69 filter#3(z, z', z'') -{ 1 }-> z'' :|: z = 2, z' >= 0, z'' >= 0 1111.86/291.69 filter#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 1111.86/291.69 filter#3(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z' >= 0, z'' >= 0, z = 1 1111.86/291.69 minus(z, z') -{ 1 }-> #sub(z, z') :|: z >= 0, z' >= 0 1111.86/291.69 mod(z, z') -{ 2 }-> minus(z, times(z, s24)) :|: s24 >= 0, s24 <= z + 1, z >= 0, z' >= 0 1111.86/291.69 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 1111.86/291.69 1111.86/291.69 Function symbols to be analyzed: {#natmult}, {#sub}, {div}, {#mult}, {minus}, {times}, {filter#2}, {mod}, {filter#1}, {filter}, {eratos,eratos#1} 1111.86/291.69 Previous analysis results are: 1111.86/291.69 #natsub: runtime: O(1) [0], size: O(n^1) [z] 1111.86/291.69 #and: runtime: O(1) [0], size: O(1) [2] 1111.86/291.69 filter#3: runtime: O(1) [1], size: O(n^1) [1 + z' + z''] 1111.86/291.69 #pred: runtime: O(1) [0], size: O(n^1) [2 + z] 1111.86/291.69 #succ: runtime: O(1) [0], size: O(n^1) [2 + z] 1111.86/291.69 #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] 1111.86/291.69 #eq: runtime: O(1) [0], size: O(1) [2] 1111.86/291.69 #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] 1111.86/291.69 #div: runtime: O(1) [0], size: O(n^1) [1 + z] 1111.86/291.69 #equal: runtime: O(1) [1], size: O(1) [2] 1111.86/291.69 1111.86/291.69 ---------------------------------------- 1111.86/291.69 1111.86/291.69 (81) ResultPropagationProof (UPPER BOUND(ID)) 1111.86/291.69 Applied inner abstraction using the recently inferred runtime/size bounds where possible. 1111.86/291.69 ---------------------------------------- 1111.86/291.69 1111.86/291.69 (82) 1111.86/291.69 Obligation: 1111.86/291.69 Complexity RNTS consisting of the following rules: 1111.86/291.69 1111.86/291.69 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> s19 :|: s17 >= 0, s17 <= 2 * (1 + (1 + (z - 4))) + z', s18 >= 0, s18 <= s17 + 2, s19 >= 0, s19 <= s18 + 2, z - 4 >= 0, z' >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> s22 :|: s20 >= 0, s20 <= 2 * (1 + (1 + (z - 4))) + z', s21 >= 0, s21 <= s20 + 2, s22 >= 0, s22 <= s21 + 2, z' >= 0, z - 4 >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> s3 :|: s3 >= 0, s3 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) 1111.86/291.69 #add(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 1111.86/291.69 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) 1111.86/291.69 #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')) 1111.86/291.69 #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')) 1111.86/291.69 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 1111.86/291.69 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 1111.86/291.69 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 1111.86/291.69 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 1111.86/291.69 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 1111.86/291.69 #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) 1111.86/291.69 #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') 1111.86/291.69 #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') 1111.86/291.69 #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 1111.86/291.69 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.86/291.69 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 1111.86/291.69 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 1111.86/291.69 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 1111.86/291.69 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.86/291.69 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.86/291.69 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.86/291.69 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #div(z, z') -{ 0 }-> 1 + s5 :|: s5 >= 0, s5 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.69 #eq(z, z') -{ 0 }-> s10 :|: s10 >= 0, s10 <= 2, z - 1 >= 0, z' - 1 >= 0 1111.86/291.69 #eq(z, z') -{ 0 }-> s13 :|: s11 >= 0, s11 <= 2, s12 >= 0, s12 <= 2, s13 >= 0, s13 <= 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 1111.86/291.69 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 1111.86/291.69 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.86/291.69 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 1111.86/291.69 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.86/291.69 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 1111.86/291.69 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 1111.86/291.69 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 1111.86/291.69 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #equal(z, z') -{ 1 }-> s9 :|: s9 >= 0, s9 <= 2, z >= 0, z' >= 0 1111.86/291.69 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 1111.86/291.69 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.86/291.69 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 1111.86/291.69 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 1111.86/291.69 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.86/291.69 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #natdiv(z, z') -{ 0 }-> 1 + s6 :|: s6 >= 0, s6 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 1111.86/291.69 #natdiv(z, z') -{ 0 }-> 1 + s7 :|: s7 >= 0, s7 <= s + 1, s >= 0, s <= z - 2, z' - 2 >= 0, z - 2 >= 0 1111.86/291.69 #natdiv(z, z') -{ 0 }-> 1 + s8 :|: s8 >= 0, s8 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.69 #natmult(z, z') -{ 0 }-> s14 :|: s14 >= 0, s14 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 1111.86/291.69 #natmult(z, z') -{ 0 }-> s15 :|: s15 >= 0, s15 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 1111.86/291.69 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 1111.86/291.69 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 1111.86/291.69 #natsub(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= z - 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.69 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.86/291.69 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.86/291.69 #pred(z) -{ 0 }-> 0 :|: z >= 0 1111.86/291.69 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.86/291.69 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.86/291.69 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.86/291.69 #sub(z, z') -{ 0 }-> s16 :|: s16 >= 0, s16 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 1111.86/291.69 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.86/291.69 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.86/291.69 #succ(z) -{ 0 }-> 0 :|: z >= 0 1111.86/291.69 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.86/291.69 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.86/291.69 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.86/291.69 div(z, z') -{ 1 }-> s23 :|: s23 >= 0, s23 <= z + 1, z >= 0, z' >= 0 1111.86/291.69 eratos(z) -{ 1 }-> eratos#1(z) :|: z >= 0 1111.86/291.69 eratos#1(z) -{ 1 }-> 2 :|: z = 2 1111.86/291.69 eratos#1(z) -{ 2 }-> 1 + @x + eratos(filter#1(@xs, @x)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.86/291.69 filter(z, z') -{ 1 }-> filter#1(z', z) :|: z >= 0, z' >= 0 1111.86/291.69 filter#1(z, z') -{ 2 }-> filter#2(filter#1(@xs, z'), z', @x) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.86/291.69 filter#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 1111.86/291.69 filter#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 filter#2(z, z', z'') -{ 2 }-> filter#3(#equal(minus(z'', times(z'', div(z'', z'))), 0), z'', z) :|: z' >= 0, z'' >= 0, z >= 0 1111.86/291.69 filter#3(z, z', z'') -{ 1 }-> z'' :|: z = 2, z' >= 0, z'' >= 0 1111.86/291.69 filter#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 1111.86/291.69 filter#3(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z' >= 0, z'' >= 0, z = 1 1111.86/291.69 minus(z, z') -{ 1 }-> #sub(z, z') :|: z >= 0, z' >= 0 1111.86/291.69 mod(z, z') -{ 2 }-> minus(z, times(z, s24)) :|: s24 >= 0, s24 <= z + 1, z >= 0, z' >= 0 1111.86/291.69 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 1111.86/291.69 1111.86/291.69 Function symbols to be analyzed: {#natmult}, {#sub}, {div}, {#mult}, {minus}, {times}, {filter#2}, {mod}, {filter#1}, {filter}, {eratos,eratos#1} 1111.86/291.69 Previous analysis results are: 1111.86/291.69 #natsub: runtime: O(1) [0], size: O(n^1) [z] 1111.86/291.69 #and: runtime: O(1) [0], size: O(1) [2] 1111.86/291.69 filter#3: runtime: O(1) [1], size: O(n^1) [1 + z' + z''] 1111.86/291.69 #pred: runtime: O(1) [0], size: O(n^1) [2 + z] 1111.86/291.69 #succ: runtime: O(1) [0], size: O(n^1) [2 + z] 1111.86/291.69 #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] 1111.86/291.69 #eq: runtime: O(1) [0], size: O(1) [2] 1111.86/291.69 #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] 1111.86/291.69 #div: runtime: O(1) [0], size: O(n^1) [1 + z] 1111.86/291.69 #equal: runtime: O(1) [1], size: O(1) [2] 1111.86/291.69 1111.86/291.69 ---------------------------------------- 1111.86/291.69 1111.86/291.69 (83) IntTrsBoundProof (UPPER BOUND(ID)) 1111.86/291.69 1111.86/291.69 Computed SIZE bound using KoAT for: #natmult 1111.86/291.69 after applying outer abstraction to obtain an ITS, 1111.86/291.69 resulting in: O(n^2) with polynomial bound: 4 + 4*z + 4*z*z' + 4*z' 1111.86/291.69 1111.86/291.69 ---------------------------------------- 1111.86/291.69 1111.86/291.69 (84) 1111.86/291.69 Obligation: 1111.86/291.69 Complexity RNTS consisting of the following rules: 1111.86/291.69 1111.86/291.69 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> s19 :|: s17 >= 0, s17 <= 2 * (1 + (1 + (z - 4))) + z', s18 >= 0, s18 <= s17 + 2, s19 >= 0, s19 <= s18 + 2, z - 4 >= 0, z' >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> s22 :|: s20 >= 0, s20 <= 2 * (1 + (1 + (z - 4))) + z', s21 >= 0, s21 <= s20 + 2, s22 >= 0, s22 <= s21 + 2, z' >= 0, z - 4 >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> s3 :|: s3 >= 0, s3 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) 1111.86/291.69 #add(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 1111.86/291.69 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) 1111.86/291.69 #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')) 1111.86/291.69 #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')) 1111.86/291.69 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 1111.86/291.69 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 1111.86/291.69 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 1111.86/291.69 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 1111.86/291.69 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 1111.86/291.69 #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) 1111.86/291.69 #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') 1111.86/291.69 #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') 1111.86/291.69 #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 1111.86/291.69 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.86/291.69 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 1111.86/291.69 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 1111.86/291.69 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 1111.86/291.69 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.86/291.69 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.86/291.69 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.86/291.69 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #div(z, z') -{ 0 }-> 1 + s5 :|: s5 >= 0, s5 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.69 #eq(z, z') -{ 0 }-> s10 :|: s10 >= 0, s10 <= 2, z - 1 >= 0, z' - 1 >= 0 1111.86/291.69 #eq(z, z') -{ 0 }-> s13 :|: s11 >= 0, s11 <= 2, s12 >= 0, s12 <= 2, s13 >= 0, s13 <= 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 1111.86/291.69 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 1111.86/291.69 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.86/291.69 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 1111.86/291.69 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.86/291.69 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 1111.86/291.69 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 1111.86/291.69 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 1111.86/291.69 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #equal(z, z') -{ 1 }-> s9 :|: s9 >= 0, s9 <= 2, z >= 0, z' >= 0 1111.86/291.69 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 1111.86/291.69 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.86/291.69 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 1111.86/291.69 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 1111.86/291.69 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.86/291.69 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #natdiv(z, z') -{ 0 }-> 1 + s6 :|: s6 >= 0, s6 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 1111.86/291.69 #natdiv(z, z') -{ 0 }-> 1 + s7 :|: s7 >= 0, s7 <= s + 1, s >= 0, s <= z - 2, z' - 2 >= 0, z - 2 >= 0 1111.86/291.69 #natdiv(z, z') -{ 0 }-> 1 + s8 :|: s8 >= 0, s8 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.69 #natmult(z, z') -{ 0 }-> s14 :|: s14 >= 0, s14 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 1111.86/291.69 #natmult(z, z') -{ 0 }-> s15 :|: s15 >= 0, s15 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 1111.86/291.69 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 1111.86/291.69 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 1111.86/291.69 #natsub(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= z - 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.69 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.86/291.69 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.86/291.69 #pred(z) -{ 0 }-> 0 :|: z >= 0 1111.86/291.69 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.86/291.69 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.86/291.69 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.86/291.69 #sub(z, z') -{ 0 }-> s16 :|: s16 >= 0, s16 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 1111.86/291.69 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.86/291.69 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.86/291.69 #succ(z) -{ 0 }-> 0 :|: z >= 0 1111.86/291.69 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.86/291.69 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.86/291.69 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.86/291.69 div(z, z') -{ 1 }-> s23 :|: s23 >= 0, s23 <= z + 1, z >= 0, z' >= 0 1111.86/291.69 eratos(z) -{ 1 }-> eratos#1(z) :|: z >= 0 1111.86/291.69 eratos#1(z) -{ 1 }-> 2 :|: z = 2 1111.86/291.69 eratos#1(z) -{ 2 }-> 1 + @x + eratos(filter#1(@xs, @x)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.86/291.69 filter(z, z') -{ 1 }-> filter#1(z', z) :|: z >= 0, z' >= 0 1111.86/291.69 filter#1(z, z') -{ 2 }-> filter#2(filter#1(@xs, z'), z', @x) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.86/291.69 filter#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 1111.86/291.69 filter#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 filter#2(z, z', z'') -{ 2 }-> filter#3(#equal(minus(z'', times(z'', div(z'', z'))), 0), z'', z) :|: z' >= 0, z'' >= 0, z >= 0 1111.86/291.69 filter#3(z, z', z'') -{ 1 }-> z'' :|: z = 2, z' >= 0, z'' >= 0 1111.86/291.69 filter#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 1111.86/291.69 filter#3(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z' >= 0, z'' >= 0, z = 1 1111.86/291.69 minus(z, z') -{ 1 }-> #sub(z, z') :|: z >= 0, z' >= 0 1111.86/291.69 mod(z, z') -{ 2 }-> minus(z, times(z, s24)) :|: s24 >= 0, s24 <= z + 1, z >= 0, z' >= 0 1111.86/291.69 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 1111.86/291.69 1111.86/291.69 Function symbols to be analyzed: {#natmult}, {#sub}, {div}, {#mult}, {minus}, {times}, {filter#2}, {mod}, {filter#1}, {filter}, {eratos,eratos#1} 1111.86/291.69 Previous analysis results are: 1111.86/291.69 #natsub: runtime: O(1) [0], size: O(n^1) [z] 1111.86/291.69 #and: runtime: O(1) [0], size: O(1) [2] 1111.86/291.69 filter#3: runtime: O(1) [1], size: O(n^1) [1 + z' + z''] 1111.86/291.69 #pred: runtime: O(1) [0], size: O(n^1) [2 + z] 1111.86/291.69 #succ: runtime: O(1) [0], size: O(n^1) [2 + z] 1111.86/291.69 #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] 1111.86/291.69 #eq: runtime: O(1) [0], size: O(1) [2] 1111.86/291.69 #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] 1111.86/291.69 #div: runtime: O(1) [0], size: O(n^1) [1 + z] 1111.86/291.69 #equal: runtime: O(1) [1], size: O(1) [2] 1111.86/291.69 #natmult: runtime: ?, size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] 1111.86/291.69 1111.86/291.69 ---------------------------------------- 1111.86/291.69 1111.86/291.69 (85) IntTrsBoundProof (UPPER BOUND(ID)) 1111.86/291.69 1111.86/291.69 Computed RUNTIME bound using CoFloCo for: #natmult 1111.86/291.69 after applying outer abstraction to obtain an ITS, 1111.86/291.69 resulting in: O(1) with polynomial bound: 0 1111.86/291.69 1111.86/291.69 ---------------------------------------- 1111.86/291.69 1111.86/291.69 (86) 1111.86/291.69 Obligation: 1111.86/291.69 Complexity RNTS consisting of the following rules: 1111.86/291.69 1111.86/291.69 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> s19 :|: s17 >= 0, s17 <= 2 * (1 + (1 + (z - 4))) + z', s18 >= 0, s18 <= s17 + 2, s19 >= 0, s19 <= s18 + 2, z - 4 >= 0, z' >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> s22 :|: s20 >= 0, s20 <= 2 * (1 + (1 + (z - 4))) + z', s21 >= 0, s21 <= s20 + 2, s22 >= 0, s22 <= s21 + 2, z' >= 0, z - 4 >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> s3 :|: s3 >= 0, s3 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) 1111.86/291.69 #add(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 1111.86/291.69 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) 1111.86/291.69 #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')) 1111.86/291.69 #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')) 1111.86/291.69 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 1111.86/291.69 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 1111.86/291.69 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 1111.86/291.69 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 1111.86/291.69 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 1111.86/291.69 #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) 1111.86/291.69 #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') 1111.86/291.69 #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') 1111.86/291.69 #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 1111.86/291.69 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.86/291.69 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 1111.86/291.69 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 1111.86/291.69 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 1111.86/291.69 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.86/291.69 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.86/291.69 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.86/291.69 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #div(z, z') -{ 0 }-> 1 + s5 :|: s5 >= 0, s5 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.69 #eq(z, z') -{ 0 }-> s10 :|: s10 >= 0, s10 <= 2, z - 1 >= 0, z' - 1 >= 0 1111.86/291.69 #eq(z, z') -{ 0 }-> s13 :|: s11 >= 0, s11 <= 2, s12 >= 0, s12 <= 2, s13 >= 0, s13 <= 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 1111.86/291.69 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 1111.86/291.69 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.86/291.69 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 1111.86/291.69 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.86/291.69 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 1111.86/291.69 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 1111.86/291.69 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 1111.86/291.69 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #equal(z, z') -{ 1 }-> s9 :|: s9 >= 0, s9 <= 2, z >= 0, z' >= 0 1111.86/291.69 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 1111.86/291.69 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.86/291.69 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 1111.86/291.69 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 1111.86/291.69 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.86/291.69 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #natdiv(z, z') -{ 0 }-> 1 + s6 :|: s6 >= 0, s6 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 1111.86/291.69 #natdiv(z, z') -{ 0 }-> 1 + s7 :|: s7 >= 0, s7 <= s + 1, s >= 0, s <= z - 2, z' - 2 >= 0, z - 2 >= 0 1111.86/291.69 #natdiv(z, z') -{ 0 }-> 1 + s8 :|: s8 >= 0, s8 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.69 #natmult(z, z') -{ 0 }-> s14 :|: s14 >= 0, s14 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 1111.86/291.69 #natmult(z, z') -{ 0 }-> s15 :|: s15 >= 0, s15 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 1111.86/291.69 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 1111.86/291.69 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 1111.86/291.69 #natsub(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= z - 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.69 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.86/291.69 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.86/291.69 #pred(z) -{ 0 }-> 0 :|: z >= 0 1111.86/291.69 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.86/291.69 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.86/291.69 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.86/291.69 #sub(z, z') -{ 0 }-> s16 :|: s16 >= 0, s16 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 1111.86/291.69 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.86/291.69 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.86/291.69 #succ(z) -{ 0 }-> 0 :|: z >= 0 1111.86/291.69 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.86/291.69 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.86/291.69 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.86/291.69 div(z, z') -{ 1 }-> s23 :|: s23 >= 0, s23 <= z + 1, z >= 0, z' >= 0 1111.86/291.69 eratos(z) -{ 1 }-> eratos#1(z) :|: z >= 0 1111.86/291.69 eratos#1(z) -{ 1 }-> 2 :|: z = 2 1111.86/291.69 eratos#1(z) -{ 2 }-> 1 + @x + eratos(filter#1(@xs, @x)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.86/291.69 filter(z, z') -{ 1 }-> filter#1(z', z) :|: z >= 0, z' >= 0 1111.86/291.69 filter#1(z, z') -{ 2 }-> filter#2(filter#1(@xs, z'), z', @x) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.86/291.69 filter#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 1111.86/291.69 filter#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 filter#2(z, z', z'') -{ 2 }-> filter#3(#equal(minus(z'', times(z'', div(z'', z'))), 0), z'', z) :|: z' >= 0, z'' >= 0, z >= 0 1111.86/291.69 filter#3(z, z', z'') -{ 1 }-> z'' :|: z = 2, z' >= 0, z'' >= 0 1111.86/291.69 filter#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 1111.86/291.69 filter#3(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z' >= 0, z'' >= 0, z = 1 1111.86/291.69 minus(z, z') -{ 1 }-> #sub(z, z') :|: z >= 0, z' >= 0 1111.86/291.69 mod(z, z') -{ 2 }-> minus(z, times(z, s24)) :|: s24 >= 0, s24 <= z + 1, z >= 0, z' >= 0 1111.86/291.69 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 1111.86/291.69 1111.86/291.69 Function symbols to be analyzed: {#sub}, {div}, {#mult}, {minus}, {times}, {filter#2}, {mod}, {filter#1}, {filter}, {eratos,eratos#1} 1111.86/291.69 Previous analysis results are: 1111.86/291.69 #natsub: runtime: O(1) [0], size: O(n^1) [z] 1111.86/291.69 #and: runtime: O(1) [0], size: O(1) [2] 1111.86/291.69 filter#3: runtime: O(1) [1], size: O(n^1) [1 + z' + z''] 1111.86/291.69 #pred: runtime: O(1) [0], size: O(n^1) [2 + z] 1111.86/291.69 #succ: runtime: O(1) [0], size: O(n^1) [2 + z] 1111.86/291.69 #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] 1111.86/291.69 #eq: runtime: O(1) [0], size: O(1) [2] 1111.86/291.69 #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] 1111.86/291.69 #div: runtime: O(1) [0], size: O(n^1) [1 + z] 1111.86/291.69 #equal: runtime: O(1) [1], size: O(1) [2] 1111.86/291.69 #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] 1111.86/291.69 1111.86/291.69 ---------------------------------------- 1111.86/291.69 1111.86/291.69 (87) ResultPropagationProof (UPPER BOUND(ID)) 1111.86/291.69 Applied inner abstraction using the recently inferred runtime/size bounds where possible. 1111.86/291.69 ---------------------------------------- 1111.86/291.69 1111.86/291.69 (88) 1111.86/291.69 Obligation: 1111.86/291.69 Complexity RNTS consisting of the following rules: 1111.86/291.69 1111.86/291.69 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> s19 :|: s17 >= 0, s17 <= 2 * (1 + (1 + (z - 4))) + z', s18 >= 0, s18 <= s17 + 2, s19 >= 0, s19 <= s18 + 2, z - 4 >= 0, z' >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> s22 :|: s20 >= 0, s20 <= 2 * (1 + (1 + (z - 4))) + z', s21 >= 0, s21 <= s20 + 2, s22 >= 0, s22 <= s21 + 2, z' >= 0, z - 4 >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> s3 :|: s3 >= 0, s3 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) 1111.86/291.69 #add(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 1111.86/291.69 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) 1111.86/291.69 #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')) 1111.86/291.69 #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')) 1111.86/291.69 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 1111.86/291.69 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 1111.86/291.69 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 1111.86/291.69 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 1111.86/291.69 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 1111.86/291.69 #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) 1111.86/291.69 #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') 1111.86/291.69 #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') 1111.86/291.69 #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 1111.86/291.69 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.86/291.69 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 1111.86/291.69 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 1111.86/291.69 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 1111.86/291.69 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.86/291.69 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.86/291.69 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.86/291.69 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #div(z, z') -{ 0 }-> 1 + s5 :|: s5 >= 0, s5 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.69 #eq(z, z') -{ 0 }-> s10 :|: s10 >= 0, s10 <= 2, z - 1 >= 0, z' - 1 >= 0 1111.86/291.69 #eq(z, z') -{ 0 }-> s13 :|: s11 >= 0, s11 <= 2, s12 >= 0, s12 <= 2, s13 >= 0, s13 <= 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 1111.86/291.69 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 1111.86/291.69 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.86/291.69 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 1111.86/291.69 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.86/291.69 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 1111.86/291.69 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 1111.86/291.69 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 1111.86/291.69 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #equal(z, z') -{ 1 }-> s9 :|: s9 >= 0, s9 <= 2, z >= 0, z' >= 0 1111.86/291.69 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 1111.86/291.69 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.86/291.69 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 1111.86/291.69 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #mult(z, z') -{ 0 }-> 1 + s25 :|: s25 >= 0, s25 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 1111.86/291.69 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.86/291.69 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #natdiv(z, z') -{ 0 }-> 1 + s6 :|: s6 >= 0, s6 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 1111.86/291.69 #natdiv(z, z') -{ 0 }-> 1 + s7 :|: s7 >= 0, s7 <= s + 1, s >= 0, s <= z - 2, z' - 2 >= 0, z - 2 >= 0 1111.86/291.69 #natdiv(z, z') -{ 0 }-> 1 + s8 :|: s8 >= 0, s8 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.69 #natmult(z, z') -{ 0 }-> s14 :|: s14 >= 0, s14 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 1111.86/291.69 #natmult(z, z') -{ 0 }-> s15 :|: s15 >= 0, s15 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 1111.86/291.69 #natmult(z, z') -{ 0 }-> s28 :|: s26 >= 0, s26 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s27 >= 0, s27 <= 2 * (1 + z') + s26, s28 >= 0, s28 <= 2 * (1 + z') + s27, z - 2 >= 0, z' >= 0 1111.86/291.69 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 1111.86/291.69 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #natsub(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= z - 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.69 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.86/291.69 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.86/291.69 #pred(z) -{ 0 }-> 0 :|: z >= 0 1111.86/291.69 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.86/291.69 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.86/291.69 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.86/291.69 #sub(z, z') -{ 0 }-> s16 :|: s16 >= 0, s16 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 1111.86/291.69 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.86/291.69 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.86/291.69 #succ(z) -{ 0 }-> 0 :|: z >= 0 1111.86/291.69 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.86/291.69 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.86/291.69 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.86/291.69 div(z, z') -{ 1 }-> s23 :|: s23 >= 0, s23 <= z + 1, z >= 0, z' >= 0 1111.86/291.69 eratos(z) -{ 1 }-> eratos#1(z) :|: z >= 0 1111.86/291.69 eratos#1(z) -{ 1 }-> 2 :|: z = 2 1111.86/291.69 eratos#1(z) -{ 2 }-> 1 + @x + eratos(filter#1(@xs, @x)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.86/291.69 filter(z, z') -{ 1 }-> filter#1(z', z) :|: z >= 0, z' >= 0 1111.86/291.69 filter#1(z, z') -{ 2 }-> filter#2(filter#1(@xs, z'), z', @x) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.86/291.69 filter#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 1111.86/291.69 filter#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 filter#2(z, z', z'') -{ 2 }-> filter#3(#equal(minus(z'', times(z'', div(z'', z'))), 0), z'', z) :|: z' >= 0, z'' >= 0, z >= 0 1111.86/291.69 filter#3(z, z', z'') -{ 1 }-> z'' :|: z = 2, z' >= 0, z'' >= 0 1111.86/291.69 filter#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 1111.86/291.69 filter#3(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z' >= 0, z'' >= 0, z = 1 1111.86/291.69 minus(z, z') -{ 1 }-> #sub(z, z') :|: z >= 0, z' >= 0 1111.86/291.69 mod(z, z') -{ 2 }-> minus(z, times(z, s24)) :|: s24 >= 0, s24 <= z + 1, z >= 0, z' >= 0 1111.86/291.69 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 1111.86/291.69 1111.86/291.69 Function symbols to be analyzed: {#sub}, {div}, {#mult}, {minus}, {times}, {filter#2}, {mod}, {filter#1}, {filter}, {eratos,eratos#1} 1111.86/291.69 Previous analysis results are: 1111.86/291.69 #natsub: runtime: O(1) [0], size: O(n^1) [z] 1111.86/291.69 #and: runtime: O(1) [0], size: O(1) [2] 1111.86/291.69 filter#3: runtime: O(1) [1], size: O(n^1) [1 + z' + z''] 1111.86/291.69 #pred: runtime: O(1) [0], size: O(n^1) [2 + z] 1111.86/291.69 #succ: runtime: O(1) [0], size: O(n^1) [2 + z] 1111.86/291.69 #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] 1111.86/291.69 #eq: runtime: O(1) [0], size: O(1) [2] 1111.86/291.69 #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] 1111.86/291.69 #div: runtime: O(1) [0], size: O(n^1) [1 + z] 1111.86/291.69 #equal: runtime: O(1) [1], size: O(1) [2] 1111.86/291.69 #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] 1111.86/291.69 1111.86/291.69 ---------------------------------------- 1111.86/291.69 1111.86/291.69 (89) IntTrsBoundProof (UPPER BOUND(ID)) 1111.86/291.69 1111.86/291.69 Computed SIZE bound using CoFloCo for: #sub 1111.86/291.69 after applying outer abstraction to obtain an ITS, 1111.86/291.69 resulting in: O(n^1) with polynomial bound: 2*z + z' 1111.86/291.69 1111.86/291.69 ---------------------------------------- 1111.86/291.69 1111.86/291.69 (90) 1111.86/291.69 Obligation: 1111.86/291.69 Complexity RNTS consisting of the following rules: 1111.86/291.69 1111.86/291.69 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> s19 :|: s17 >= 0, s17 <= 2 * (1 + (1 + (z - 4))) + z', s18 >= 0, s18 <= s17 + 2, s19 >= 0, s19 <= s18 + 2, z - 4 >= 0, z' >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> s22 :|: s20 >= 0, s20 <= 2 * (1 + (1 + (z - 4))) + z', s21 >= 0, s21 <= s20 + 2, s22 >= 0, s22 <= s21 + 2, z' >= 0, z - 4 >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> s3 :|: s3 >= 0, s3 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) 1111.86/291.69 #add(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 1111.86/291.69 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) 1111.86/291.69 #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')) 1111.86/291.69 #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')) 1111.86/291.69 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 1111.86/291.69 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 1111.86/291.69 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 1111.86/291.69 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 1111.86/291.69 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 1111.86/291.69 #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) 1111.86/291.69 #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') 1111.86/291.69 #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') 1111.86/291.69 #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 1111.86/291.69 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.86/291.69 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 1111.86/291.69 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 1111.86/291.69 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 1111.86/291.69 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.86/291.69 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.86/291.69 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.86/291.69 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #div(z, z') -{ 0 }-> 1 + s5 :|: s5 >= 0, s5 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.69 #eq(z, z') -{ 0 }-> s10 :|: s10 >= 0, s10 <= 2, z - 1 >= 0, z' - 1 >= 0 1111.86/291.69 #eq(z, z') -{ 0 }-> s13 :|: s11 >= 0, s11 <= 2, s12 >= 0, s12 <= 2, s13 >= 0, s13 <= 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 1111.86/291.69 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 1111.86/291.69 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.86/291.69 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 1111.86/291.69 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.86/291.69 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 1111.86/291.69 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 1111.86/291.69 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 1111.86/291.69 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #equal(z, z') -{ 1 }-> s9 :|: s9 >= 0, s9 <= 2, z >= 0, z' >= 0 1111.86/291.69 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 1111.86/291.69 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.86/291.69 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 1111.86/291.69 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #mult(z, z') -{ 0 }-> 1 + s25 :|: s25 >= 0, s25 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 1111.86/291.69 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.86/291.69 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #natdiv(z, z') -{ 0 }-> 1 + s6 :|: s6 >= 0, s6 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 1111.86/291.69 #natdiv(z, z') -{ 0 }-> 1 + s7 :|: s7 >= 0, s7 <= s + 1, s >= 0, s <= z - 2, z' - 2 >= 0, z - 2 >= 0 1111.86/291.69 #natdiv(z, z') -{ 0 }-> 1 + s8 :|: s8 >= 0, s8 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.69 #natmult(z, z') -{ 0 }-> s14 :|: s14 >= 0, s14 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 1111.86/291.69 #natmult(z, z') -{ 0 }-> s15 :|: s15 >= 0, s15 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 1111.86/291.69 #natmult(z, z') -{ 0 }-> s28 :|: s26 >= 0, s26 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s27 >= 0, s27 <= 2 * (1 + z') + s26, s28 >= 0, s28 <= 2 * (1 + z') + s27, z - 2 >= 0, z' >= 0 1111.86/291.69 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 1111.86/291.69 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #natsub(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= z - 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.69 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.86/291.69 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.86/291.69 #pred(z) -{ 0 }-> 0 :|: z >= 0 1111.86/291.69 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.86/291.69 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.86/291.69 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.86/291.69 #sub(z, z') -{ 0 }-> s16 :|: s16 >= 0, s16 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 1111.86/291.69 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.86/291.69 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.86/291.69 #succ(z) -{ 0 }-> 0 :|: z >= 0 1111.86/291.69 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.86/291.69 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.86/291.69 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.86/291.69 div(z, z') -{ 1 }-> s23 :|: s23 >= 0, s23 <= z + 1, z >= 0, z' >= 0 1111.86/291.69 eratos(z) -{ 1 }-> eratos#1(z) :|: z >= 0 1111.86/291.69 eratos#1(z) -{ 1 }-> 2 :|: z = 2 1111.86/291.69 eratos#1(z) -{ 2 }-> 1 + @x + eratos(filter#1(@xs, @x)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.86/291.69 filter(z, z') -{ 1 }-> filter#1(z', z) :|: z >= 0, z' >= 0 1111.86/291.69 filter#1(z, z') -{ 2 }-> filter#2(filter#1(@xs, z'), z', @x) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.86/291.69 filter#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 1111.86/291.69 filter#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 filter#2(z, z', z'') -{ 2 }-> filter#3(#equal(minus(z'', times(z'', div(z'', z'))), 0), z'', z) :|: z' >= 0, z'' >= 0, z >= 0 1111.86/291.69 filter#3(z, z', z'') -{ 1 }-> z'' :|: z = 2, z' >= 0, z'' >= 0 1111.86/291.69 filter#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 1111.86/291.69 filter#3(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z' >= 0, z'' >= 0, z = 1 1111.86/291.69 minus(z, z') -{ 1 }-> #sub(z, z') :|: z >= 0, z' >= 0 1111.86/291.69 mod(z, z') -{ 2 }-> minus(z, times(z, s24)) :|: s24 >= 0, s24 <= z + 1, z >= 0, z' >= 0 1111.86/291.69 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 1111.86/291.69 1111.86/291.69 Function symbols to be analyzed: {#sub}, {div}, {#mult}, {minus}, {times}, {filter#2}, {mod}, {filter#1}, {filter}, {eratos,eratos#1} 1111.86/291.69 Previous analysis results are: 1111.86/291.69 #natsub: runtime: O(1) [0], size: O(n^1) [z] 1111.86/291.69 #and: runtime: O(1) [0], size: O(1) [2] 1111.86/291.69 filter#3: runtime: O(1) [1], size: O(n^1) [1 + z' + z''] 1111.86/291.69 #pred: runtime: O(1) [0], size: O(n^1) [2 + z] 1111.86/291.69 #succ: runtime: O(1) [0], size: O(n^1) [2 + z] 1111.86/291.69 #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] 1111.86/291.69 #eq: runtime: O(1) [0], size: O(1) [2] 1111.86/291.69 #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] 1111.86/291.69 #div: runtime: O(1) [0], size: O(n^1) [1 + z] 1111.86/291.69 #equal: runtime: O(1) [1], size: O(1) [2] 1111.86/291.69 #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] 1111.86/291.69 #sub: runtime: ?, size: O(n^1) [2*z + z'] 1111.86/291.69 1111.86/291.69 ---------------------------------------- 1111.86/291.69 1111.86/291.69 (91) IntTrsBoundProof (UPPER BOUND(ID)) 1111.86/291.69 1111.86/291.69 Computed RUNTIME bound using CoFloCo for: #sub 1111.86/291.69 after applying outer abstraction to obtain an ITS, 1111.86/291.69 resulting in: O(1) with polynomial bound: 0 1111.86/291.69 1111.86/291.69 ---------------------------------------- 1111.86/291.69 1111.86/291.69 (92) 1111.86/291.69 Obligation: 1111.86/291.69 Complexity RNTS consisting of the following rules: 1111.86/291.69 1111.86/291.69 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> s19 :|: s17 >= 0, s17 <= 2 * (1 + (1 + (z - 4))) + z', s18 >= 0, s18 <= s17 + 2, s19 >= 0, s19 <= s18 + 2, z - 4 >= 0, z' >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> s22 :|: s20 >= 0, s20 <= 2 * (1 + (1 + (z - 4))) + z', s21 >= 0, s21 <= s20 + 2, s22 >= 0, s22 <= s21 + 2, z' >= 0, z - 4 >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> s3 :|: s3 >= 0, s3 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) 1111.86/291.69 #add(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 1111.86/291.69 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) 1111.86/291.69 #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')) 1111.86/291.69 #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')) 1111.86/291.69 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 1111.86/291.69 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 1111.86/291.69 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 1111.86/291.69 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 1111.86/291.69 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 1111.86/291.69 #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) 1111.86/291.69 #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') 1111.86/291.69 #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') 1111.86/291.69 #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 1111.86/291.69 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.86/291.69 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 1111.86/291.69 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 1111.86/291.69 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 1111.86/291.69 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.86/291.69 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.86/291.69 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.86/291.69 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #div(z, z') -{ 0 }-> 1 + s5 :|: s5 >= 0, s5 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.69 #eq(z, z') -{ 0 }-> s10 :|: s10 >= 0, s10 <= 2, z - 1 >= 0, z' - 1 >= 0 1111.86/291.69 #eq(z, z') -{ 0 }-> s13 :|: s11 >= 0, s11 <= 2, s12 >= 0, s12 <= 2, s13 >= 0, s13 <= 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 1111.86/291.69 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 1111.86/291.69 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.86/291.69 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 1111.86/291.69 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.86/291.69 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 1111.86/291.69 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 1111.86/291.69 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 1111.86/291.69 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #equal(z, z') -{ 1 }-> s9 :|: s9 >= 0, s9 <= 2, z >= 0, z' >= 0 1111.86/291.69 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 1111.86/291.69 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.86/291.69 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 1111.86/291.69 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #mult(z, z') -{ 0 }-> 1 + s25 :|: s25 >= 0, s25 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 1111.86/291.69 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.86/291.69 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #natdiv(z, z') -{ 0 }-> 1 + s6 :|: s6 >= 0, s6 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 1111.86/291.69 #natdiv(z, z') -{ 0 }-> 1 + s7 :|: s7 >= 0, s7 <= s + 1, s >= 0, s <= z - 2, z' - 2 >= 0, z - 2 >= 0 1111.86/291.69 #natdiv(z, z') -{ 0 }-> 1 + s8 :|: s8 >= 0, s8 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.69 #natmult(z, z') -{ 0 }-> s14 :|: s14 >= 0, s14 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 1111.86/291.69 #natmult(z, z') -{ 0 }-> s15 :|: s15 >= 0, s15 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 1111.86/291.69 #natmult(z, z') -{ 0 }-> s28 :|: s26 >= 0, s26 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s27 >= 0, s27 <= 2 * (1 + z') + s26, s28 >= 0, s28 <= 2 * (1 + z') + s27, z - 2 >= 0, z' >= 0 1111.86/291.69 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 1111.86/291.69 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #natsub(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= z - 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.69 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.86/291.69 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.86/291.69 #pred(z) -{ 0 }-> 0 :|: z >= 0 1111.86/291.69 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.86/291.69 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.86/291.69 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.86/291.69 #sub(z, z') -{ 0 }-> s16 :|: s16 >= 0, s16 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 1111.86/291.69 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.86/291.69 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.86/291.69 #succ(z) -{ 0 }-> 0 :|: z >= 0 1111.86/291.69 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.86/291.69 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.86/291.69 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.86/291.69 div(z, z') -{ 1 }-> s23 :|: s23 >= 0, s23 <= z + 1, z >= 0, z' >= 0 1111.86/291.69 eratos(z) -{ 1 }-> eratos#1(z) :|: z >= 0 1111.86/291.69 eratos#1(z) -{ 1 }-> 2 :|: z = 2 1111.86/291.69 eratos#1(z) -{ 2 }-> 1 + @x + eratos(filter#1(@xs, @x)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.86/291.69 filter(z, z') -{ 1 }-> filter#1(z', z) :|: z >= 0, z' >= 0 1111.86/291.69 filter#1(z, z') -{ 2 }-> filter#2(filter#1(@xs, z'), z', @x) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.86/291.69 filter#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 1111.86/291.69 filter#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 filter#2(z, z', z'') -{ 2 }-> filter#3(#equal(minus(z'', times(z'', div(z'', z'))), 0), z'', z) :|: z' >= 0, z'' >= 0, z >= 0 1111.86/291.69 filter#3(z, z', z'') -{ 1 }-> z'' :|: z = 2, z' >= 0, z'' >= 0 1111.86/291.69 filter#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 1111.86/291.69 filter#3(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z' >= 0, z'' >= 0, z = 1 1111.86/291.69 minus(z, z') -{ 1 }-> #sub(z, z') :|: z >= 0, z' >= 0 1111.86/291.69 mod(z, z') -{ 2 }-> minus(z, times(z, s24)) :|: s24 >= 0, s24 <= z + 1, z >= 0, z' >= 0 1111.86/291.69 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 1111.86/291.69 1111.86/291.69 Function symbols to be analyzed: {div}, {#mult}, {minus}, {times}, {filter#2}, {mod}, {filter#1}, {filter}, {eratos,eratos#1} 1111.86/291.69 Previous analysis results are: 1111.86/291.69 #natsub: runtime: O(1) [0], size: O(n^1) [z] 1111.86/291.69 #and: runtime: O(1) [0], size: O(1) [2] 1111.86/291.69 filter#3: runtime: O(1) [1], size: O(n^1) [1 + z' + z''] 1111.86/291.69 #pred: runtime: O(1) [0], size: O(n^1) [2 + z] 1111.86/291.69 #succ: runtime: O(1) [0], size: O(n^1) [2 + z] 1111.86/291.69 #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] 1111.86/291.69 #eq: runtime: O(1) [0], size: O(1) [2] 1111.86/291.69 #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] 1111.86/291.69 #div: runtime: O(1) [0], size: O(n^1) [1 + z] 1111.86/291.69 #equal: runtime: O(1) [1], size: O(1) [2] 1111.86/291.69 #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] 1111.86/291.69 #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] 1111.86/291.69 1111.86/291.69 ---------------------------------------- 1111.86/291.69 1111.86/291.69 (93) ResultPropagationProof (UPPER BOUND(ID)) 1111.86/291.69 Applied inner abstraction using the recently inferred runtime/size bounds where possible. 1111.86/291.69 ---------------------------------------- 1111.86/291.69 1111.86/291.69 (94) 1111.86/291.69 Obligation: 1111.86/291.69 Complexity RNTS consisting of the following rules: 1111.86/291.69 1111.86/291.69 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> s19 :|: s17 >= 0, s17 <= 2 * (1 + (1 + (z - 4))) + z', s18 >= 0, s18 <= s17 + 2, s19 >= 0, s19 <= s18 + 2, z - 4 >= 0, z' >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> s22 :|: s20 >= 0, s20 <= 2 * (1 + (1 + (z - 4))) + z', s21 >= 0, s21 <= s20 + 2, s22 >= 0, s22 <= s21 + 2, z' >= 0, z - 4 >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> s3 :|: s3 >= 0, s3 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) 1111.86/291.69 #add(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 1111.86/291.69 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) 1111.86/291.69 #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')) 1111.86/291.69 #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')) 1111.86/291.69 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 1111.86/291.69 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 1111.86/291.69 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 1111.86/291.69 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 1111.86/291.69 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 1111.86/291.69 #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) 1111.86/291.69 #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') 1111.86/291.69 #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') 1111.86/291.69 #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 1111.86/291.69 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.86/291.69 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 1111.86/291.69 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 1111.86/291.69 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 1111.86/291.69 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.86/291.69 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.86/291.69 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.86/291.69 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #div(z, z') -{ 0 }-> 1 + s5 :|: s5 >= 0, s5 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.69 #eq(z, z') -{ 0 }-> s10 :|: s10 >= 0, s10 <= 2, z - 1 >= 0, z' - 1 >= 0 1111.86/291.69 #eq(z, z') -{ 0 }-> s13 :|: s11 >= 0, s11 <= 2, s12 >= 0, s12 <= 2, s13 >= 0, s13 <= 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 1111.86/291.69 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 1111.86/291.69 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.86/291.69 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 1111.86/291.69 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.86/291.69 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 1111.86/291.69 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 1111.86/291.69 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 1111.86/291.69 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #equal(z, z') -{ 1 }-> s9 :|: s9 >= 0, s9 <= 2, z >= 0, z' >= 0 1111.86/291.69 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 1111.86/291.69 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.86/291.69 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 1111.86/291.69 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #mult(z, z') -{ 0 }-> 1 + s25 :|: s25 >= 0, s25 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 1111.86/291.69 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.86/291.69 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #natdiv(z, z') -{ 0 }-> 1 + s6 :|: s6 >= 0, s6 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 1111.86/291.69 #natdiv(z, z') -{ 0 }-> 1 + s7 :|: s7 >= 0, s7 <= s + 1, s >= 0, s <= z - 2, z' - 2 >= 0, z - 2 >= 0 1111.86/291.69 #natdiv(z, z') -{ 0 }-> 1 + s8 :|: s8 >= 0, s8 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.69 #natmult(z, z') -{ 0 }-> s14 :|: s14 >= 0, s14 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 1111.86/291.69 #natmult(z, z') -{ 0 }-> s15 :|: s15 >= 0, s15 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 1111.86/291.69 #natmult(z, z') -{ 0 }-> s28 :|: s26 >= 0, s26 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s27 >= 0, s27 <= 2 * (1 + z') + s26, s28 >= 0, s28 <= 2 * (1 + z') + s27, z - 2 >= 0, z' >= 0 1111.86/291.69 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 1111.86/291.69 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #natsub(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= z - 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.69 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.86/291.69 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.86/291.69 #pred(z) -{ 0 }-> 0 :|: z >= 0 1111.86/291.69 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.86/291.69 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.86/291.69 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.86/291.69 #sub(z, z') -{ 0 }-> s16 :|: s16 >= 0, s16 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 1111.86/291.69 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.86/291.69 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.86/291.69 #succ(z) -{ 0 }-> 0 :|: z >= 0 1111.86/291.69 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.86/291.69 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.86/291.69 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.86/291.69 div(z, z') -{ 1 }-> s23 :|: s23 >= 0, s23 <= z + 1, z >= 0, z' >= 0 1111.86/291.69 eratos(z) -{ 1 }-> eratos#1(z) :|: z >= 0 1111.86/291.69 eratos#1(z) -{ 1 }-> 2 :|: z = 2 1111.86/291.69 eratos#1(z) -{ 2 }-> 1 + @x + eratos(filter#1(@xs, @x)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.86/291.69 filter(z, z') -{ 1 }-> filter#1(z', z) :|: z >= 0, z' >= 0 1111.86/291.69 filter#1(z, z') -{ 2 }-> filter#2(filter#1(@xs, z'), z', @x) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.86/291.69 filter#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 1111.86/291.69 filter#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 filter#2(z, z', z'') -{ 2 }-> filter#3(#equal(minus(z'', times(z'', div(z'', z'))), 0), z'', z) :|: z' >= 0, z'' >= 0, z >= 0 1111.86/291.69 filter#3(z, z', z'') -{ 1 }-> z'' :|: z = 2, z' >= 0, z'' >= 0 1111.86/291.69 filter#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 1111.86/291.69 filter#3(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z' >= 0, z'' >= 0, z = 1 1111.86/291.69 minus(z, z') -{ 1 }-> s29 :|: s29 >= 0, s29 <= 2 * z + z', z >= 0, z' >= 0 1111.86/291.69 mod(z, z') -{ 2 }-> minus(z, times(z, s24)) :|: s24 >= 0, s24 <= z + 1, z >= 0, z' >= 0 1111.86/291.69 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 1111.86/291.69 1111.86/291.69 Function symbols to be analyzed: {div}, {#mult}, {minus}, {times}, {filter#2}, {mod}, {filter#1}, {filter}, {eratos,eratos#1} 1111.86/291.69 Previous analysis results are: 1111.86/291.69 #natsub: runtime: O(1) [0], size: O(n^1) [z] 1111.86/291.69 #and: runtime: O(1) [0], size: O(1) [2] 1111.86/291.69 filter#3: runtime: O(1) [1], size: O(n^1) [1 + z' + z''] 1111.86/291.69 #pred: runtime: O(1) [0], size: O(n^1) [2 + z] 1111.86/291.69 #succ: runtime: O(1) [0], size: O(n^1) [2 + z] 1111.86/291.69 #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] 1111.86/291.69 #eq: runtime: O(1) [0], size: O(1) [2] 1111.86/291.69 #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] 1111.86/291.69 #div: runtime: O(1) [0], size: O(n^1) [1 + z] 1111.86/291.69 #equal: runtime: O(1) [1], size: O(1) [2] 1111.86/291.69 #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] 1111.86/291.69 #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] 1111.86/291.69 1111.86/291.69 ---------------------------------------- 1111.86/291.69 1111.86/291.69 (95) IntTrsBoundProof (UPPER BOUND(ID)) 1111.86/291.69 1111.86/291.69 Computed SIZE bound using CoFloCo for: div 1111.86/291.69 after applying outer abstraction to obtain an ITS, 1111.86/291.69 resulting in: O(n^1) with polynomial bound: 1 + z 1111.86/291.69 1111.86/291.69 ---------------------------------------- 1111.86/291.69 1111.86/291.69 (96) 1111.86/291.69 Obligation: 1111.86/291.69 Complexity RNTS consisting of the following rules: 1111.86/291.69 1111.86/291.69 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> s19 :|: s17 >= 0, s17 <= 2 * (1 + (1 + (z - 4))) + z', s18 >= 0, s18 <= s17 + 2, s19 >= 0, s19 <= s18 + 2, z - 4 >= 0, z' >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> s22 :|: s20 >= 0, s20 <= 2 * (1 + (1 + (z - 4))) + z', s21 >= 0, s21 <= s20 + 2, s22 >= 0, s22 <= s21 + 2, z' >= 0, z - 4 >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> s3 :|: s3 >= 0, s3 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) 1111.86/291.69 #add(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 1111.86/291.69 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) 1111.86/291.69 #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')) 1111.86/291.69 #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')) 1111.86/291.69 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 1111.86/291.69 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 1111.86/291.69 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 1111.86/291.69 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 1111.86/291.69 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 1111.86/291.69 #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) 1111.86/291.69 #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') 1111.86/291.69 #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') 1111.86/291.69 #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 1111.86/291.69 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.86/291.69 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 1111.86/291.69 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 1111.86/291.69 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 1111.86/291.69 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.86/291.69 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.86/291.69 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.86/291.69 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #div(z, z') -{ 0 }-> 1 + s5 :|: s5 >= 0, s5 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.69 #eq(z, z') -{ 0 }-> s10 :|: s10 >= 0, s10 <= 2, z - 1 >= 0, z' - 1 >= 0 1111.86/291.69 #eq(z, z') -{ 0 }-> s13 :|: s11 >= 0, s11 <= 2, s12 >= 0, s12 <= 2, s13 >= 0, s13 <= 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 1111.86/291.69 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 1111.86/291.69 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.86/291.69 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 1111.86/291.69 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.86/291.69 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 1111.86/291.69 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 1111.86/291.69 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 1111.86/291.69 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #equal(z, z') -{ 1 }-> s9 :|: s9 >= 0, s9 <= 2, z >= 0, z' >= 0 1111.86/291.69 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 1111.86/291.69 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.86/291.69 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 1111.86/291.69 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #mult(z, z') -{ 0 }-> 1 + s25 :|: s25 >= 0, s25 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 1111.86/291.69 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.86/291.69 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #natdiv(z, z') -{ 0 }-> 1 + s6 :|: s6 >= 0, s6 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 1111.86/291.69 #natdiv(z, z') -{ 0 }-> 1 + s7 :|: s7 >= 0, s7 <= s + 1, s >= 0, s <= z - 2, z' - 2 >= 0, z - 2 >= 0 1111.86/291.69 #natdiv(z, z') -{ 0 }-> 1 + s8 :|: s8 >= 0, s8 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.69 #natmult(z, z') -{ 0 }-> s14 :|: s14 >= 0, s14 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 1111.86/291.69 #natmult(z, z') -{ 0 }-> s15 :|: s15 >= 0, s15 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 1111.86/291.69 #natmult(z, z') -{ 0 }-> s28 :|: s26 >= 0, s26 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s27 >= 0, s27 <= 2 * (1 + z') + s26, s28 >= 0, s28 <= 2 * (1 + z') + s27, z - 2 >= 0, z' >= 0 1111.86/291.69 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 1111.86/291.69 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #natsub(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= z - 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.69 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.86/291.69 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.86/291.69 #pred(z) -{ 0 }-> 0 :|: z >= 0 1111.86/291.69 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.86/291.69 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.86/291.69 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.86/291.69 #sub(z, z') -{ 0 }-> s16 :|: s16 >= 0, s16 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 1111.86/291.69 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.86/291.69 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.86/291.69 #succ(z) -{ 0 }-> 0 :|: z >= 0 1111.86/291.69 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.86/291.69 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.86/291.69 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.86/291.69 div(z, z') -{ 1 }-> s23 :|: s23 >= 0, s23 <= z + 1, z >= 0, z' >= 0 1111.86/291.69 eratos(z) -{ 1 }-> eratos#1(z) :|: z >= 0 1111.86/291.69 eratos#1(z) -{ 1 }-> 2 :|: z = 2 1111.86/291.69 eratos#1(z) -{ 2 }-> 1 + @x + eratos(filter#1(@xs, @x)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.86/291.69 filter(z, z') -{ 1 }-> filter#1(z', z) :|: z >= 0, z' >= 0 1111.86/291.69 filter#1(z, z') -{ 2 }-> filter#2(filter#1(@xs, z'), z', @x) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.86/291.69 filter#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 1111.86/291.69 filter#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 filter#2(z, z', z'') -{ 2 }-> filter#3(#equal(minus(z'', times(z'', div(z'', z'))), 0), z'', z) :|: z' >= 0, z'' >= 0, z >= 0 1111.86/291.69 filter#3(z, z', z'') -{ 1 }-> z'' :|: z = 2, z' >= 0, z'' >= 0 1111.86/291.69 filter#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 1111.86/291.69 filter#3(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z' >= 0, z'' >= 0, z = 1 1111.86/291.69 minus(z, z') -{ 1 }-> s29 :|: s29 >= 0, s29 <= 2 * z + z', z >= 0, z' >= 0 1111.86/291.69 mod(z, z') -{ 2 }-> minus(z, times(z, s24)) :|: s24 >= 0, s24 <= z + 1, z >= 0, z' >= 0 1111.86/291.69 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 1111.86/291.69 1111.86/291.69 Function symbols to be analyzed: {div}, {#mult}, {minus}, {times}, {filter#2}, {mod}, {filter#1}, {filter}, {eratos,eratos#1} 1111.86/291.69 Previous analysis results are: 1111.86/291.69 #natsub: runtime: O(1) [0], size: O(n^1) [z] 1111.86/291.69 #and: runtime: O(1) [0], size: O(1) [2] 1111.86/291.69 filter#3: runtime: O(1) [1], size: O(n^1) [1 + z' + z''] 1111.86/291.69 #pred: runtime: O(1) [0], size: O(n^1) [2 + z] 1111.86/291.69 #succ: runtime: O(1) [0], size: O(n^1) [2 + z] 1111.86/291.69 #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] 1111.86/291.69 #eq: runtime: O(1) [0], size: O(1) [2] 1111.86/291.69 #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] 1111.86/291.69 #div: runtime: O(1) [0], size: O(n^1) [1 + z] 1111.86/291.69 #equal: runtime: O(1) [1], size: O(1) [2] 1111.86/291.69 #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] 1111.86/291.69 #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] 1111.86/291.69 div: runtime: ?, size: O(n^1) [1 + z] 1111.86/291.69 1111.86/291.69 ---------------------------------------- 1111.86/291.69 1111.86/291.69 (97) IntTrsBoundProof (UPPER BOUND(ID)) 1111.86/291.69 1111.86/291.69 Computed RUNTIME bound using CoFloCo for: div 1111.86/291.69 after applying outer abstraction to obtain an ITS, 1111.86/291.69 resulting in: O(1) with polynomial bound: 1 1111.86/291.69 1111.86/291.69 ---------------------------------------- 1111.86/291.69 1111.86/291.69 (98) 1111.86/291.69 Obligation: 1111.86/291.69 Complexity RNTS consisting of the following rules: 1111.86/291.69 1111.86/291.69 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> s19 :|: s17 >= 0, s17 <= 2 * (1 + (1 + (z - 4))) + z', s18 >= 0, s18 <= s17 + 2, s19 >= 0, s19 <= s18 + 2, z - 4 >= 0, z' >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> s22 :|: s20 >= 0, s20 <= 2 * (1 + (1 + (z - 4))) + z', s21 >= 0, s21 <= s20 + 2, s22 >= 0, s22 <= s21 + 2, z' >= 0, z - 4 >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> s3 :|: s3 >= 0, s3 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) 1111.86/291.69 #add(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 1111.86/291.69 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) 1111.86/291.69 #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')) 1111.86/291.69 #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')) 1111.86/291.69 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 1111.86/291.69 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 1111.86/291.69 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 1111.86/291.69 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 1111.86/291.69 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 1111.86/291.69 #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) 1111.86/291.69 #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') 1111.86/291.69 #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') 1111.86/291.69 #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 1111.86/291.69 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.86/291.69 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 1111.86/291.69 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 1111.86/291.69 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 1111.86/291.69 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.86/291.69 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.86/291.69 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.86/291.69 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #div(z, z') -{ 0 }-> 1 + s5 :|: s5 >= 0, s5 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.69 #eq(z, z') -{ 0 }-> s10 :|: s10 >= 0, s10 <= 2, z - 1 >= 0, z' - 1 >= 0 1111.86/291.69 #eq(z, z') -{ 0 }-> s13 :|: s11 >= 0, s11 <= 2, s12 >= 0, s12 <= 2, s13 >= 0, s13 <= 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 1111.86/291.69 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 1111.86/291.69 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.86/291.69 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 1111.86/291.69 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.86/291.69 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 1111.86/291.69 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 1111.86/291.69 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 1111.86/291.69 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #equal(z, z') -{ 1 }-> s9 :|: s9 >= 0, s9 <= 2, z >= 0, z' >= 0 1111.86/291.69 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 1111.86/291.69 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.86/291.69 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 1111.86/291.69 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #mult(z, z') -{ 0 }-> 1 + s25 :|: s25 >= 0, s25 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 1111.86/291.69 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.86/291.69 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #natdiv(z, z') -{ 0 }-> 1 + s6 :|: s6 >= 0, s6 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 1111.86/291.69 #natdiv(z, z') -{ 0 }-> 1 + s7 :|: s7 >= 0, s7 <= s + 1, s >= 0, s <= z - 2, z' - 2 >= 0, z - 2 >= 0 1111.86/291.69 #natdiv(z, z') -{ 0 }-> 1 + s8 :|: s8 >= 0, s8 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.69 #natmult(z, z') -{ 0 }-> s14 :|: s14 >= 0, s14 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 1111.86/291.69 #natmult(z, z') -{ 0 }-> s15 :|: s15 >= 0, s15 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 1111.86/291.69 #natmult(z, z') -{ 0 }-> s28 :|: s26 >= 0, s26 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s27 >= 0, s27 <= 2 * (1 + z') + s26, s28 >= 0, s28 <= 2 * (1 + z') + s27, z - 2 >= 0, z' >= 0 1111.86/291.69 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 1111.86/291.69 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #natsub(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= z - 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.69 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.86/291.69 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.86/291.69 #pred(z) -{ 0 }-> 0 :|: z >= 0 1111.86/291.69 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.86/291.69 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.86/291.69 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.86/291.69 #sub(z, z') -{ 0 }-> s16 :|: s16 >= 0, s16 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 1111.86/291.69 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.86/291.69 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.86/291.69 #succ(z) -{ 0 }-> 0 :|: z >= 0 1111.86/291.69 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.86/291.69 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.86/291.69 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.86/291.69 div(z, z') -{ 1 }-> s23 :|: s23 >= 0, s23 <= z + 1, z >= 0, z' >= 0 1111.86/291.69 eratos(z) -{ 1 }-> eratos#1(z) :|: z >= 0 1111.86/291.69 eratos#1(z) -{ 1 }-> 2 :|: z = 2 1111.86/291.69 eratos#1(z) -{ 2 }-> 1 + @x + eratos(filter#1(@xs, @x)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.86/291.69 filter(z, z') -{ 1 }-> filter#1(z', z) :|: z >= 0, z' >= 0 1111.86/291.69 filter#1(z, z') -{ 2 }-> filter#2(filter#1(@xs, z'), z', @x) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.86/291.69 filter#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 1111.86/291.69 filter#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 filter#2(z, z', z'') -{ 2 }-> filter#3(#equal(minus(z'', times(z'', div(z'', z'))), 0), z'', z) :|: z' >= 0, z'' >= 0, z >= 0 1111.86/291.69 filter#3(z, z', z'') -{ 1 }-> z'' :|: z = 2, z' >= 0, z'' >= 0 1111.86/291.69 filter#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 1111.86/291.69 filter#3(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z' >= 0, z'' >= 0, z = 1 1111.86/291.69 minus(z, z') -{ 1 }-> s29 :|: s29 >= 0, s29 <= 2 * z + z', z >= 0, z' >= 0 1111.86/291.69 mod(z, z') -{ 2 }-> minus(z, times(z, s24)) :|: s24 >= 0, s24 <= z + 1, z >= 0, z' >= 0 1111.86/291.69 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 1111.86/291.69 1111.86/291.69 Function symbols to be analyzed: {#mult}, {minus}, {times}, {filter#2}, {mod}, {filter#1}, {filter}, {eratos,eratos#1} 1111.86/291.69 Previous analysis results are: 1111.86/291.69 #natsub: runtime: O(1) [0], size: O(n^1) [z] 1111.86/291.69 #and: runtime: O(1) [0], size: O(1) [2] 1111.86/291.69 filter#3: runtime: O(1) [1], size: O(n^1) [1 + z' + z''] 1111.86/291.69 #pred: runtime: O(1) [0], size: O(n^1) [2 + z] 1111.86/291.69 #succ: runtime: O(1) [0], size: O(n^1) [2 + z] 1111.86/291.69 #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] 1111.86/291.69 #eq: runtime: O(1) [0], size: O(1) [2] 1111.86/291.69 #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] 1111.86/291.69 #div: runtime: O(1) [0], size: O(n^1) [1 + z] 1111.86/291.69 #equal: runtime: O(1) [1], size: O(1) [2] 1111.86/291.69 #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] 1111.86/291.69 #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] 1111.86/291.69 div: runtime: O(1) [1], size: O(n^1) [1 + z] 1111.86/291.69 1111.86/291.69 ---------------------------------------- 1111.86/291.69 1111.86/291.69 (99) ResultPropagationProof (UPPER BOUND(ID)) 1111.86/291.69 Applied inner abstraction using the recently inferred runtime/size bounds where possible. 1111.86/291.69 ---------------------------------------- 1111.86/291.69 1111.86/291.69 (100) 1111.86/291.69 Obligation: 1111.86/291.69 Complexity RNTS consisting of the following rules: 1111.86/291.69 1111.86/291.69 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> s19 :|: s17 >= 0, s17 <= 2 * (1 + (1 + (z - 4))) + z', s18 >= 0, s18 <= s17 + 2, s19 >= 0, s19 <= s18 + 2, z - 4 >= 0, z' >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> s22 :|: s20 >= 0, s20 <= 2 * (1 + (1 + (z - 4))) + z', s21 >= 0, s21 <= s20 + 2, s22 >= 0, s22 <= s21 + 2, z' >= 0, z - 4 >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> s3 :|: s3 >= 0, s3 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) 1111.86/291.69 #add(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 1111.86/291.69 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) 1111.86/291.69 #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')) 1111.86/291.69 #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')) 1111.86/291.69 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 1111.86/291.69 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 1111.86/291.69 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 1111.86/291.69 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 1111.86/291.69 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 1111.86/291.69 #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) 1111.86/291.69 #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') 1111.86/291.69 #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') 1111.86/291.69 #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 1111.86/291.69 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.86/291.69 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 1111.86/291.69 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 1111.86/291.69 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 1111.86/291.69 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.86/291.69 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.86/291.69 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.86/291.69 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #div(z, z') -{ 0 }-> 1 + s5 :|: s5 >= 0, s5 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.69 #eq(z, z') -{ 0 }-> s10 :|: s10 >= 0, s10 <= 2, z - 1 >= 0, z' - 1 >= 0 1111.86/291.69 #eq(z, z') -{ 0 }-> s13 :|: s11 >= 0, s11 <= 2, s12 >= 0, s12 <= 2, s13 >= 0, s13 <= 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 1111.86/291.69 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 1111.86/291.69 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.86/291.69 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 1111.86/291.69 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.86/291.69 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 1111.86/291.69 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 1111.86/291.69 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 1111.86/291.69 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #equal(z, z') -{ 1 }-> s9 :|: s9 >= 0, s9 <= 2, z >= 0, z' >= 0 1111.86/291.69 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 1111.86/291.69 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.86/291.69 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 1111.86/291.69 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #mult(z, z') -{ 0 }-> 1 + s25 :|: s25 >= 0, s25 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 1111.86/291.69 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.86/291.69 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #natdiv(z, z') -{ 0 }-> 1 + s6 :|: s6 >= 0, s6 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 1111.86/291.69 #natdiv(z, z') -{ 0 }-> 1 + s7 :|: s7 >= 0, s7 <= s + 1, s >= 0, s <= z - 2, z' - 2 >= 0, z - 2 >= 0 1111.86/291.69 #natdiv(z, z') -{ 0 }-> 1 + s8 :|: s8 >= 0, s8 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.69 #natmult(z, z') -{ 0 }-> s14 :|: s14 >= 0, s14 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 1111.86/291.69 #natmult(z, z') -{ 0 }-> s15 :|: s15 >= 0, s15 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 1111.86/291.69 #natmult(z, z') -{ 0 }-> s28 :|: s26 >= 0, s26 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s27 >= 0, s27 <= 2 * (1 + z') + s26, s28 >= 0, s28 <= 2 * (1 + z') + s27, z - 2 >= 0, z' >= 0 1111.86/291.69 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 1111.86/291.69 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #natsub(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= z - 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.69 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.86/291.69 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.86/291.69 #pred(z) -{ 0 }-> 0 :|: z >= 0 1111.86/291.69 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.86/291.69 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.86/291.69 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.86/291.69 #sub(z, z') -{ 0 }-> s16 :|: s16 >= 0, s16 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 1111.86/291.69 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.86/291.69 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.86/291.69 #succ(z) -{ 0 }-> 0 :|: z >= 0 1111.86/291.69 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.86/291.69 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.86/291.69 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.86/291.69 div(z, z') -{ 1 }-> s23 :|: s23 >= 0, s23 <= z + 1, z >= 0, z' >= 0 1111.86/291.69 eratos(z) -{ 1 }-> eratos#1(z) :|: z >= 0 1111.86/291.69 eratos#1(z) -{ 1 }-> 2 :|: z = 2 1111.86/291.69 eratos#1(z) -{ 2 }-> 1 + @x + eratos(filter#1(@xs, @x)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.86/291.69 filter(z, z') -{ 1 }-> filter#1(z', z) :|: z >= 0, z' >= 0 1111.86/291.69 filter#1(z, z') -{ 2 }-> filter#2(filter#1(@xs, z'), z', @x) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.86/291.69 filter#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 1111.86/291.69 filter#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 filter#2(z, z', z'') -{ 3 }-> filter#3(#equal(minus(z'', times(z'', s30)), 0), z'', z) :|: s30 >= 0, s30 <= z'' + 1, z' >= 0, z'' >= 0, z >= 0 1111.86/291.69 filter#3(z, z', z'') -{ 1 }-> z'' :|: z = 2, z' >= 0, z'' >= 0 1111.86/291.69 filter#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 1111.86/291.69 filter#3(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z' >= 0, z'' >= 0, z = 1 1111.86/291.69 minus(z, z') -{ 1 }-> s29 :|: s29 >= 0, s29 <= 2 * z + z', z >= 0, z' >= 0 1111.86/291.69 mod(z, z') -{ 2 }-> minus(z, times(z, s24)) :|: s24 >= 0, s24 <= z + 1, z >= 0, z' >= 0 1111.86/291.69 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 1111.86/291.69 1111.86/291.69 Function symbols to be analyzed: {#mult}, {minus}, {times}, {filter#2}, {mod}, {filter#1}, {filter}, {eratos,eratos#1} 1111.86/291.69 Previous analysis results are: 1111.86/291.69 #natsub: runtime: O(1) [0], size: O(n^1) [z] 1111.86/291.69 #and: runtime: O(1) [0], size: O(1) [2] 1111.86/291.69 filter#3: runtime: O(1) [1], size: O(n^1) [1 + z' + z''] 1111.86/291.69 #pred: runtime: O(1) [0], size: O(n^1) [2 + z] 1111.86/291.69 #succ: runtime: O(1) [0], size: O(n^1) [2 + z] 1111.86/291.69 #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] 1111.86/291.69 #eq: runtime: O(1) [0], size: O(1) [2] 1111.86/291.69 #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] 1111.86/291.69 #div: runtime: O(1) [0], size: O(n^1) [1 + z] 1111.86/291.69 #equal: runtime: O(1) [1], size: O(1) [2] 1111.86/291.69 #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] 1111.86/291.69 #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] 1111.86/291.69 div: runtime: O(1) [1], size: O(n^1) [1 + z] 1111.86/291.69 1111.86/291.69 ---------------------------------------- 1111.86/291.69 1111.86/291.69 (101) IntTrsBoundProof (UPPER BOUND(ID)) 1111.86/291.69 1111.86/291.69 Computed SIZE bound using KoAT for: #mult 1111.86/291.69 after applying outer abstraction to obtain an ITS, 1111.86/291.69 resulting in: O(n^2) with polynomial bound: 1 + 4*z*z' 1111.86/291.69 1111.86/291.69 ---------------------------------------- 1111.86/291.69 1111.86/291.69 (102) 1111.86/291.69 Obligation: 1111.86/291.69 Complexity RNTS consisting of the following rules: 1111.86/291.69 1111.86/291.69 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> s19 :|: s17 >= 0, s17 <= 2 * (1 + (1 + (z - 4))) + z', s18 >= 0, s18 <= s17 + 2, s19 >= 0, s19 <= s18 + 2, z - 4 >= 0, z' >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> s22 :|: s20 >= 0, s20 <= 2 * (1 + (1 + (z - 4))) + z', s21 >= 0, s21 <= s20 + 2, s22 >= 0, s22 <= s21 + 2, z' >= 0, z - 4 >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> s3 :|: s3 >= 0, s3 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) 1111.86/291.69 #add(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 1111.86/291.69 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) 1111.86/291.69 #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')) 1111.86/291.69 #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')) 1111.86/291.69 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 1111.86/291.69 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 1111.86/291.69 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 1111.86/291.69 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 1111.86/291.69 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 1111.86/291.69 #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) 1111.86/291.69 #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') 1111.86/291.69 #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') 1111.86/291.69 #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 1111.86/291.69 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.86/291.69 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 1111.86/291.69 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 1111.86/291.69 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 1111.86/291.69 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.86/291.69 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.86/291.69 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.86/291.69 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #div(z, z') -{ 0 }-> 1 + s5 :|: s5 >= 0, s5 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.69 #eq(z, z') -{ 0 }-> s10 :|: s10 >= 0, s10 <= 2, z - 1 >= 0, z' - 1 >= 0 1111.86/291.69 #eq(z, z') -{ 0 }-> s13 :|: s11 >= 0, s11 <= 2, s12 >= 0, s12 <= 2, s13 >= 0, s13 <= 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 1111.86/291.69 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 1111.86/291.69 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.86/291.69 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 1111.86/291.69 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.86/291.69 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 1111.86/291.69 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 1111.86/291.69 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 1111.86/291.69 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #equal(z, z') -{ 1 }-> s9 :|: s9 >= 0, s9 <= 2, z >= 0, z' >= 0 1111.86/291.69 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 1111.86/291.69 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.86/291.69 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 1111.86/291.69 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #mult(z, z') -{ 0 }-> 1 + s25 :|: s25 >= 0, s25 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 1111.86/291.69 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.86/291.69 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #natdiv(z, z') -{ 0 }-> 1 + s6 :|: s6 >= 0, s6 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 1111.86/291.69 #natdiv(z, z') -{ 0 }-> 1 + s7 :|: s7 >= 0, s7 <= s + 1, s >= 0, s <= z - 2, z' - 2 >= 0, z - 2 >= 0 1111.86/291.69 #natdiv(z, z') -{ 0 }-> 1 + s8 :|: s8 >= 0, s8 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.69 #natmult(z, z') -{ 0 }-> s14 :|: s14 >= 0, s14 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 1111.86/291.69 #natmult(z, z') -{ 0 }-> s15 :|: s15 >= 0, s15 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 1111.86/291.69 #natmult(z, z') -{ 0 }-> s28 :|: s26 >= 0, s26 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s27 >= 0, s27 <= 2 * (1 + z') + s26, s28 >= 0, s28 <= 2 * (1 + z') + s27, z - 2 >= 0, z' >= 0 1111.86/291.69 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 1111.86/291.69 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #natsub(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= z - 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.69 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.86/291.69 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.86/291.69 #pred(z) -{ 0 }-> 0 :|: z >= 0 1111.86/291.69 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.86/291.69 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.86/291.69 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.86/291.69 #sub(z, z') -{ 0 }-> s16 :|: s16 >= 0, s16 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 1111.86/291.69 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.86/291.69 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.86/291.69 #succ(z) -{ 0 }-> 0 :|: z >= 0 1111.86/291.69 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.86/291.69 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.86/291.69 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.86/291.69 div(z, z') -{ 1 }-> s23 :|: s23 >= 0, s23 <= z + 1, z >= 0, z' >= 0 1111.86/291.69 eratos(z) -{ 1 }-> eratos#1(z) :|: z >= 0 1111.86/291.69 eratos#1(z) -{ 1 }-> 2 :|: z = 2 1111.86/291.69 eratos#1(z) -{ 2 }-> 1 + @x + eratos(filter#1(@xs, @x)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.86/291.69 filter(z, z') -{ 1 }-> filter#1(z', z) :|: z >= 0, z' >= 0 1111.86/291.69 filter#1(z, z') -{ 2 }-> filter#2(filter#1(@xs, z'), z', @x) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.86/291.69 filter#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 1111.86/291.69 filter#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 filter#2(z, z', z'') -{ 3 }-> filter#3(#equal(minus(z'', times(z'', s30)), 0), z'', z) :|: s30 >= 0, s30 <= z'' + 1, z' >= 0, z'' >= 0, z >= 0 1111.86/291.69 filter#3(z, z', z'') -{ 1 }-> z'' :|: z = 2, z' >= 0, z'' >= 0 1111.86/291.69 filter#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 1111.86/291.69 filter#3(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z' >= 0, z'' >= 0, z = 1 1111.86/291.69 minus(z, z') -{ 1 }-> s29 :|: s29 >= 0, s29 <= 2 * z + z', z >= 0, z' >= 0 1111.86/291.69 mod(z, z') -{ 2 }-> minus(z, times(z, s24)) :|: s24 >= 0, s24 <= z + 1, z >= 0, z' >= 0 1111.86/291.69 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 1111.86/291.69 1111.86/291.69 Function symbols to be analyzed: {#mult}, {minus}, {times}, {filter#2}, {mod}, {filter#1}, {filter}, {eratos,eratos#1} 1111.86/291.69 Previous analysis results are: 1111.86/291.69 #natsub: runtime: O(1) [0], size: O(n^1) [z] 1111.86/291.69 #and: runtime: O(1) [0], size: O(1) [2] 1111.86/291.69 filter#3: runtime: O(1) [1], size: O(n^1) [1 + z' + z''] 1111.86/291.69 #pred: runtime: O(1) [0], size: O(n^1) [2 + z] 1111.86/291.69 #succ: runtime: O(1) [0], size: O(n^1) [2 + z] 1111.86/291.69 #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] 1111.86/291.69 #eq: runtime: O(1) [0], size: O(1) [2] 1111.86/291.69 #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] 1111.86/291.69 #div: runtime: O(1) [0], size: O(n^1) [1 + z] 1111.86/291.69 #equal: runtime: O(1) [1], size: O(1) [2] 1111.86/291.69 #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] 1111.86/291.69 #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] 1111.86/291.69 div: runtime: O(1) [1], size: O(n^1) [1 + z] 1111.86/291.69 #mult: runtime: ?, size: O(n^2) [1 + 4*z*z'] 1111.86/291.69 1111.86/291.69 ---------------------------------------- 1111.86/291.69 1111.86/291.69 (103) IntTrsBoundProof (UPPER BOUND(ID)) 1111.86/291.69 1111.86/291.69 Computed RUNTIME bound using CoFloCo for: #mult 1111.86/291.69 after applying outer abstraction to obtain an ITS, 1111.86/291.69 resulting in: O(1) with polynomial bound: 0 1111.86/291.69 1111.86/291.69 ---------------------------------------- 1111.86/291.69 1111.86/291.69 (104) 1111.86/291.69 Obligation: 1111.86/291.69 Complexity RNTS consisting of the following rules: 1111.86/291.69 1111.86/291.69 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> s19 :|: s17 >= 0, s17 <= 2 * (1 + (1 + (z - 4))) + z', s18 >= 0, s18 <= s17 + 2, s19 >= 0, s19 <= s18 + 2, z - 4 >= 0, z' >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> s22 :|: s20 >= 0, s20 <= 2 * (1 + (1 + (z - 4))) + z', s21 >= 0, s21 <= s20 + 2, s22 >= 0, s22 <= s21 + 2, z' >= 0, z - 4 >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> s3 :|: s3 >= 0, s3 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) 1111.86/291.69 #add(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 1111.86/291.69 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) 1111.86/291.69 #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')) 1111.86/291.69 #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')) 1111.86/291.69 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 1111.86/291.69 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 1111.86/291.69 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 1111.86/291.69 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 1111.86/291.69 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 1111.86/291.69 #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) 1111.86/291.69 #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') 1111.86/291.69 #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') 1111.86/291.69 #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 1111.86/291.69 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.86/291.69 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 1111.86/291.69 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 1111.86/291.69 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 1111.86/291.69 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.86/291.69 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.86/291.69 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.86/291.69 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #div(z, z') -{ 0 }-> 1 + s5 :|: s5 >= 0, s5 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.69 #eq(z, z') -{ 0 }-> s10 :|: s10 >= 0, s10 <= 2, z - 1 >= 0, z' - 1 >= 0 1111.86/291.69 #eq(z, z') -{ 0 }-> s13 :|: s11 >= 0, s11 <= 2, s12 >= 0, s12 <= 2, s13 >= 0, s13 <= 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 1111.86/291.69 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 1111.86/291.69 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.86/291.69 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 1111.86/291.69 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.86/291.69 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 1111.86/291.69 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 1111.86/291.69 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 1111.86/291.69 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #equal(z, z') -{ 1 }-> s9 :|: s9 >= 0, s9 <= 2, z >= 0, z' >= 0 1111.86/291.69 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 1111.86/291.69 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.86/291.69 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 1111.86/291.69 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #mult(z, z') -{ 0 }-> 1 + s25 :|: s25 >= 0, s25 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 1111.86/291.69 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.86/291.69 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #natdiv(z, z') -{ 0 }-> 1 + s6 :|: s6 >= 0, s6 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 1111.86/291.69 #natdiv(z, z') -{ 0 }-> 1 + s7 :|: s7 >= 0, s7 <= s + 1, s >= 0, s <= z - 2, z' - 2 >= 0, z - 2 >= 0 1111.86/291.69 #natdiv(z, z') -{ 0 }-> 1 + s8 :|: s8 >= 0, s8 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.69 #natmult(z, z') -{ 0 }-> s14 :|: s14 >= 0, s14 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 1111.86/291.69 #natmult(z, z') -{ 0 }-> s15 :|: s15 >= 0, s15 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 1111.86/291.69 #natmult(z, z') -{ 0 }-> s28 :|: s26 >= 0, s26 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s27 >= 0, s27 <= 2 * (1 + z') + s26, s28 >= 0, s28 <= 2 * (1 + z') + s27, z - 2 >= 0, z' >= 0 1111.86/291.69 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 1111.86/291.69 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #natsub(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= z - 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.69 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.86/291.69 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.86/291.69 #pred(z) -{ 0 }-> 0 :|: z >= 0 1111.86/291.69 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.86/291.69 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.86/291.69 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.86/291.69 #sub(z, z') -{ 0 }-> s16 :|: s16 >= 0, s16 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 1111.86/291.69 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.86/291.69 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.86/291.69 #succ(z) -{ 0 }-> 0 :|: z >= 0 1111.86/291.69 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.86/291.69 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.86/291.69 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.86/291.69 div(z, z') -{ 1 }-> s23 :|: s23 >= 0, s23 <= z + 1, z >= 0, z' >= 0 1111.86/291.69 eratos(z) -{ 1 }-> eratos#1(z) :|: z >= 0 1111.86/291.69 eratos#1(z) -{ 1 }-> 2 :|: z = 2 1111.86/291.69 eratos#1(z) -{ 2 }-> 1 + @x + eratos(filter#1(@xs, @x)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.86/291.69 filter(z, z') -{ 1 }-> filter#1(z', z) :|: z >= 0, z' >= 0 1111.86/291.69 filter#1(z, z') -{ 2 }-> filter#2(filter#1(@xs, z'), z', @x) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.86/291.69 filter#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 1111.86/291.69 filter#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 filter#2(z, z', z'') -{ 3 }-> filter#3(#equal(minus(z'', times(z'', s30)), 0), z'', z) :|: s30 >= 0, s30 <= z'' + 1, z' >= 0, z'' >= 0, z >= 0 1111.86/291.69 filter#3(z, z', z'') -{ 1 }-> z'' :|: z = 2, z' >= 0, z'' >= 0 1111.86/291.69 filter#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 1111.86/291.69 filter#3(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z' >= 0, z'' >= 0, z = 1 1111.86/291.69 minus(z, z') -{ 1 }-> s29 :|: s29 >= 0, s29 <= 2 * z + z', z >= 0, z' >= 0 1111.86/291.69 mod(z, z') -{ 2 }-> minus(z, times(z, s24)) :|: s24 >= 0, s24 <= z + 1, z >= 0, z' >= 0 1111.86/291.69 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 1111.86/291.69 1111.86/291.69 Function symbols to be analyzed: {minus}, {times}, {filter#2}, {mod}, {filter#1}, {filter}, {eratos,eratos#1} 1111.86/291.69 Previous analysis results are: 1111.86/291.69 #natsub: runtime: O(1) [0], size: O(n^1) [z] 1111.86/291.69 #and: runtime: O(1) [0], size: O(1) [2] 1111.86/291.69 filter#3: runtime: O(1) [1], size: O(n^1) [1 + z' + z''] 1111.86/291.69 #pred: runtime: O(1) [0], size: O(n^1) [2 + z] 1111.86/291.69 #succ: runtime: O(1) [0], size: O(n^1) [2 + z] 1111.86/291.69 #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] 1111.86/291.69 #eq: runtime: O(1) [0], size: O(1) [2] 1111.86/291.69 #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] 1111.86/291.69 #div: runtime: O(1) [0], size: O(n^1) [1 + z] 1111.86/291.69 #equal: runtime: O(1) [1], size: O(1) [2] 1111.86/291.69 #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] 1111.86/291.69 #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] 1111.86/291.69 div: runtime: O(1) [1], size: O(n^1) [1 + z] 1111.86/291.69 #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] 1111.86/291.69 1111.86/291.69 ---------------------------------------- 1111.86/291.69 1111.86/291.69 (105) ResultPropagationProof (UPPER BOUND(ID)) 1111.86/291.69 Applied inner abstraction using the recently inferred runtime/size bounds where possible. 1111.86/291.69 ---------------------------------------- 1111.86/291.69 1111.86/291.69 (106) 1111.86/291.69 Obligation: 1111.86/291.69 Complexity RNTS consisting of the following rules: 1111.86/291.69 1111.86/291.69 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> s19 :|: s17 >= 0, s17 <= 2 * (1 + (1 + (z - 4))) + z', s18 >= 0, s18 <= s17 + 2, s19 >= 0, s19 <= s18 + 2, z - 4 >= 0, z' >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> s22 :|: s20 >= 0, s20 <= 2 * (1 + (1 + (z - 4))) + z', s21 >= 0, s21 <= s20 + 2, s22 >= 0, s22 <= s21 + 2, z' >= 0, z - 4 >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> s3 :|: s3 >= 0, s3 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) 1111.86/291.69 #add(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 1111.86/291.69 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) 1111.86/291.69 #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')) 1111.86/291.69 #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')) 1111.86/291.69 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 1111.86/291.69 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 1111.86/291.69 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 1111.86/291.69 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 1111.86/291.69 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 1111.86/291.69 #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) 1111.86/291.69 #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') 1111.86/291.69 #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') 1111.86/291.69 #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 1111.86/291.69 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.86/291.69 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 1111.86/291.69 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 1111.86/291.69 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 1111.86/291.69 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.86/291.69 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.86/291.69 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.86/291.69 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #div(z, z') -{ 0 }-> 1 + s5 :|: s5 >= 0, s5 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.69 #eq(z, z') -{ 0 }-> s10 :|: s10 >= 0, s10 <= 2, z - 1 >= 0, z' - 1 >= 0 1111.86/291.69 #eq(z, z') -{ 0 }-> s13 :|: s11 >= 0, s11 <= 2, s12 >= 0, s12 <= 2, s13 >= 0, s13 <= 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 1111.86/291.69 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 1111.86/291.69 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.86/291.69 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 1111.86/291.69 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.86/291.69 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 1111.86/291.69 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 1111.86/291.69 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 1111.86/291.69 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #equal(z, z') -{ 1 }-> s9 :|: s9 >= 0, s9 <= 2, z >= 0, z' >= 0 1111.86/291.69 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 1111.86/291.69 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.86/291.69 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 1111.86/291.69 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #mult(z, z') -{ 0 }-> 1 + s25 :|: s25 >= 0, s25 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 1111.86/291.69 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.86/291.69 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #natdiv(z, z') -{ 0 }-> 1 + s6 :|: s6 >= 0, s6 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 1111.86/291.69 #natdiv(z, z') -{ 0 }-> 1 + s7 :|: s7 >= 0, s7 <= s + 1, s >= 0, s <= z - 2, z' - 2 >= 0, z - 2 >= 0 1111.86/291.69 #natdiv(z, z') -{ 0 }-> 1 + s8 :|: s8 >= 0, s8 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.69 #natmult(z, z') -{ 0 }-> s14 :|: s14 >= 0, s14 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 1111.86/291.69 #natmult(z, z') -{ 0 }-> s15 :|: s15 >= 0, s15 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 1111.86/291.69 #natmult(z, z') -{ 0 }-> s28 :|: s26 >= 0, s26 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s27 >= 0, s27 <= 2 * (1 + z') + s26, s28 >= 0, s28 <= 2 * (1 + z') + s27, z - 2 >= 0, z' >= 0 1111.86/291.69 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 1111.86/291.69 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #natsub(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= z - 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.69 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.86/291.69 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.86/291.69 #pred(z) -{ 0 }-> 0 :|: z >= 0 1111.86/291.69 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.86/291.69 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.86/291.69 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.86/291.69 #sub(z, z') -{ 0 }-> s16 :|: s16 >= 0, s16 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 1111.86/291.69 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.86/291.69 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.86/291.69 #succ(z) -{ 0 }-> 0 :|: z >= 0 1111.86/291.69 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.86/291.69 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.86/291.69 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.86/291.69 div(z, z') -{ 1 }-> s23 :|: s23 >= 0, s23 <= z + 1, z >= 0, z' >= 0 1111.86/291.69 eratos(z) -{ 1 }-> eratos#1(z) :|: z >= 0 1111.86/291.69 eratos#1(z) -{ 1 }-> 2 :|: z = 2 1111.86/291.69 eratos#1(z) -{ 2 }-> 1 + @x + eratos(filter#1(@xs, @x)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.86/291.69 filter(z, z') -{ 1 }-> filter#1(z', z) :|: z >= 0, z' >= 0 1111.86/291.69 filter#1(z, z') -{ 2 }-> filter#2(filter#1(@xs, z'), z', @x) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.86/291.69 filter#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 1111.86/291.69 filter#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 filter#2(z, z', z'') -{ 3 }-> filter#3(#equal(minus(z'', times(z'', s30)), 0), z'', z) :|: s30 >= 0, s30 <= z'' + 1, z' >= 0, z'' >= 0, z >= 0 1111.86/291.69 filter#3(z, z', z'') -{ 1 }-> z'' :|: z = 2, z' >= 0, z'' >= 0 1111.86/291.69 filter#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 1111.86/291.69 filter#3(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z' >= 0, z'' >= 0, z = 1 1111.86/291.69 minus(z, z') -{ 1 }-> s29 :|: s29 >= 0, s29 <= 2 * z + z', z >= 0, z' >= 0 1111.86/291.69 mod(z, z') -{ 2 }-> minus(z, times(z, s24)) :|: s24 >= 0, s24 <= z + 1, z >= 0, z' >= 0 1111.86/291.69 times(z, z') -{ 1 }-> s31 :|: s31 >= 0, s31 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 1111.86/291.69 1111.86/291.69 Function symbols to be analyzed: {minus}, {times}, {filter#2}, {mod}, {filter#1}, {filter}, {eratos,eratos#1} 1111.86/291.69 Previous analysis results are: 1111.86/291.69 #natsub: runtime: O(1) [0], size: O(n^1) [z] 1111.86/291.69 #and: runtime: O(1) [0], size: O(1) [2] 1111.86/291.69 filter#3: runtime: O(1) [1], size: O(n^1) [1 + z' + z''] 1111.86/291.69 #pred: runtime: O(1) [0], size: O(n^1) [2 + z] 1111.86/291.69 #succ: runtime: O(1) [0], size: O(n^1) [2 + z] 1111.86/291.69 #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] 1111.86/291.69 #eq: runtime: O(1) [0], size: O(1) [2] 1111.86/291.69 #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] 1111.86/291.69 #div: runtime: O(1) [0], size: O(n^1) [1 + z] 1111.86/291.69 #equal: runtime: O(1) [1], size: O(1) [2] 1111.86/291.69 #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] 1111.86/291.69 #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] 1111.86/291.69 div: runtime: O(1) [1], size: O(n^1) [1 + z] 1111.86/291.69 #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] 1111.86/291.69 1111.86/291.69 ---------------------------------------- 1111.86/291.69 1111.86/291.69 (107) IntTrsBoundProof (UPPER BOUND(ID)) 1111.86/291.69 1111.86/291.69 Computed SIZE bound using CoFloCo for: minus 1111.86/291.69 after applying outer abstraction to obtain an ITS, 1111.86/291.69 resulting in: O(n^1) with polynomial bound: 2*z + z' 1111.86/291.69 1111.86/291.69 ---------------------------------------- 1111.86/291.69 1111.86/291.69 (108) 1111.86/291.69 Obligation: 1111.86/291.69 Complexity RNTS consisting of the following rules: 1111.86/291.69 1111.86/291.69 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> s19 :|: s17 >= 0, s17 <= 2 * (1 + (1 + (z - 4))) + z', s18 >= 0, s18 <= s17 + 2, s19 >= 0, s19 <= s18 + 2, z - 4 >= 0, z' >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> s22 :|: s20 >= 0, s20 <= 2 * (1 + (1 + (z - 4))) + z', s21 >= 0, s21 <= s20 + 2, s22 >= 0, s22 <= s21 + 2, z' >= 0, z - 4 >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> s3 :|: s3 >= 0, s3 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) 1111.86/291.69 #add(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 1111.86/291.69 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 1111.86/291.69 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) 1111.86/291.69 #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')) 1111.86/291.69 #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')) 1111.86/291.69 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 1111.86/291.69 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 1111.86/291.69 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 1111.86/291.69 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 1111.86/291.69 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 1111.86/291.69 #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) 1111.86/291.69 #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') 1111.86/291.69 #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') 1111.86/291.69 #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 1111.86/291.69 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.86/291.69 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 1111.86/291.69 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 1111.86/291.69 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 1111.86/291.69 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.86/291.69 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.86/291.69 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.86/291.69 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #div(z, z') -{ 0 }-> 1 + s5 :|: s5 >= 0, s5 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.69 #eq(z, z') -{ 0 }-> s10 :|: s10 >= 0, s10 <= 2, z - 1 >= 0, z' - 1 >= 0 1111.86/291.69 #eq(z, z') -{ 0 }-> s13 :|: s11 >= 0, s11 <= 2, s12 >= 0, s12 <= 2, s13 >= 0, s13 <= 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 1111.86/291.69 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 1111.86/291.69 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.86/291.69 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 1111.86/291.69 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.86/291.69 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 1111.86/291.69 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 1111.86/291.69 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 1111.86/291.69 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #equal(z, z') -{ 1 }-> s9 :|: s9 >= 0, s9 <= 2, z >= 0, z' >= 0 1111.86/291.69 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 1111.86/291.69 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.86/291.69 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 1111.86/291.69 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #mult(z, z') -{ 0 }-> 1 + s25 :|: s25 >= 0, s25 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 1111.86/291.69 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.86/291.69 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #natdiv(z, z') -{ 0 }-> 1 + s6 :|: s6 >= 0, s6 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 1111.86/291.69 #natdiv(z, z') -{ 0 }-> 1 + s7 :|: s7 >= 0, s7 <= s + 1, s >= 0, s <= z - 2, z' - 2 >= 0, z - 2 >= 0 1111.86/291.69 #natdiv(z, z') -{ 0 }-> 1 + s8 :|: s8 >= 0, s8 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.69 #natmult(z, z') -{ 0 }-> s14 :|: s14 >= 0, s14 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 1111.86/291.69 #natmult(z, z') -{ 0 }-> s15 :|: s15 >= 0, s15 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 1111.86/291.69 #natmult(z, z') -{ 0 }-> s28 :|: s26 >= 0, s26 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s27 >= 0, s27 <= 2 * (1 + z') + s26, s28 >= 0, s28 <= 2 * (1 + z') + s27, z - 2 >= 0, z' >= 0 1111.86/291.69 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 1111.86/291.69 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #natsub(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= z - 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.69 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.86/291.69 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.86/291.69 #pred(z) -{ 0 }-> 0 :|: z >= 0 1111.86/291.69 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.86/291.69 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.86/291.69 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.86/291.69 #sub(z, z') -{ 0 }-> s16 :|: s16 >= 0, s16 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 1111.86/291.69 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.86/291.69 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.86/291.69 #succ(z) -{ 0 }-> 0 :|: z >= 0 1111.86/291.69 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.86/291.69 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.86/291.69 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.86/291.69 div(z, z') -{ 1 }-> s23 :|: s23 >= 0, s23 <= z + 1, z >= 0, z' >= 0 1111.86/291.69 eratos(z) -{ 1 }-> eratos#1(z) :|: z >= 0 1111.86/291.69 eratos#1(z) -{ 1 }-> 2 :|: z = 2 1111.86/291.69 eratos#1(z) -{ 2 }-> 1 + @x + eratos(filter#1(@xs, @x)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.86/291.69 filter(z, z') -{ 1 }-> filter#1(z', z) :|: z >= 0, z' >= 0 1111.86/291.69 filter#1(z, z') -{ 2 }-> filter#2(filter#1(@xs, z'), z', @x) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.86/291.69 filter#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 1111.86/291.69 filter#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.69 filter#2(z, z', z'') -{ 3 }-> filter#3(#equal(minus(z'', times(z'', s30)), 0), z'', z) :|: s30 >= 0, s30 <= z'' + 1, z' >= 0, z'' >= 0, z >= 0 1111.86/291.69 filter#3(z, z', z'') -{ 1 }-> z'' :|: z = 2, z' >= 0, z'' >= 0 1111.86/291.69 filter#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 1111.86/291.69 filter#3(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z' >= 0, z'' >= 0, z = 1 1111.86/291.69 minus(z, z') -{ 1 }-> s29 :|: s29 >= 0, s29 <= 2 * z + z', z >= 0, z' >= 0 1111.86/291.70 mod(z, z') -{ 2 }-> minus(z, times(z, s24)) :|: s24 >= 0, s24 <= z + 1, z >= 0, z' >= 0 1111.86/291.70 times(z, z') -{ 1 }-> s31 :|: s31 >= 0, s31 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 1111.86/291.70 1111.86/291.70 Function symbols to be analyzed: {minus}, {times}, {filter#2}, {mod}, {filter#1}, {filter}, {eratos,eratos#1} 1111.86/291.70 Previous analysis results are: 1111.86/291.70 #natsub: runtime: O(1) [0], size: O(n^1) [z] 1111.86/291.70 #and: runtime: O(1) [0], size: O(1) [2] 1111.86/291.70 filter#3: runtime: O(1) [1], size: O(n^1) [1 + z' + z''] 1111.86/291.70 #pred: runtime: O(1) [0], size: O(n^1) [2 + z] 1111.86/291.70 #succ: runtime: O(1) [0], size: O(n^1) [2 + z] 1111.86/291.70 #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] 1111.86/291.70 #eq: runtime: O(1) [0], size: O(1) [2] 1111.86/291.70 #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] 1111.86/291.70 #div: runtime: O(1) [0], size: O(n^1) [1 + z] 1111.86/291.70 #equal: runtime: O(1) [1], size: O(1) [2] 1111.86/291.70 #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] 1111.86/291.70 #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] 1111.86/291.70 div: runtime: O(1) [1], size: O(n^1) [1 + z] 1111.86/291.70 #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] 1111.86/291.70 minus: runtime: ?, size: O(n^1) [2*z + z'] 1111.86/291.70 1111.86/291.70 ---------------------------------------- 1111.86/291.70 1111.86/291.70 (109) IntTrsBoundProof (UPPER BOUND(ID)) 1111.86/291.70 1111.86/291.70 Computed RUNTIME bound using CoFloCo for: minus 1111.86/291.70 after applying outer abstraction to obtain an ITS, 1111.86/291.70 resulting in: O(1) with polynomial bound: 1 1111.86/291.70 1111.86/291.70 ---------------------------------------- 1111.86/291.70 1111.86/291.70 (110) 1111.86/291.70 Obligation: 1111.86/291.70 Complexity RNTS consisting of the following rules: 1111.86/291.70 1111.86/291.70 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 1111.86/291.70 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 1111.86/291.70 #add(z, z') -{ 0 }-> s19 :|: s17 >= 0, s17 <= 2 * (1 + (1 + (z - 4))) + z', s18 >= 0, s18 <= s17 + 2, s19 >= 0, s19 <= s18 + 2, z - 4 >= 0, z' >= 0 1111.86/291.70 #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 1111.86/291.70 #add(z, z') -{ 0 }-> s22 :|: s20 >= 0, s20 <= 2 * (1 + (1 + (z - 4))) + z', s21 >= 0, s21 <= s20 + 2, s22 >= 0, s22 <= s21 + 2, z' >= 0, z - 4 >= 0 1111.86/291.70 #add(z, z') -{ 0 }-> s3 :|: s3 >= 0, s3 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) 1111.86/291.70 #add(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 1111.86/291.70 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 1111.86/291.70 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.70 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) 1111.86/291.70 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 1111.86/291.70 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 1111.86/291.70 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' 1111.86/291.70 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 1111.86/291.70 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) 1111.86/291.70 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 1111.86/291.70 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 1111.86/291.70 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 1111.86/291.70 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) 1111.86/291.70 #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')) 1111.86/291.70 #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')) 1111.86/291.70 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 1111.86/291.70 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 1111.86/291.70 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 1111.86/291.70 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 1111.86/291.70 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 1111.86/291.70 #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) 1111.86/291.70 #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') 1111.86/291.70 #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') 1111.86/291.70 #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 1111.86/291.70 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.86/291.70 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 1111.86/291.70 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 1111.86/291.70 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 1111.86/291.70 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.70 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.86/291.70 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.86/291.70 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.86/291.70 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.70 #div(z, z') -{ 0 }-> 1 + s5 :|: s5 >= 0, s5 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.70 #eq(z, z') -{ 0 }-> s10 :|: s10 >= 0, s10 <= 2, z - 1 >= 0, z' - 1 >= 0 1111.86/291.70 #eq(z, z') -{ 0 }-> s13 :|: s11 >= 0, s11 <= 2, s12 >= 0, s12 <= 2, s13 >= 0, s13 <= 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 1111.86/291.70 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 1111.86/291.70 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.86/291.70 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 1111.86/291.70 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.86/291.70 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 1111.86/291.70 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 1111.86/291.70 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 1111.86/291.70 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.70 #equal(z, z') -{ 1 }-> s9 :|: s9 >= 0, s9 <= 2, z >= 0, z' >= 0 1111.86/291.70 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 1111.86/291.70 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.86/291.70 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 1111.86/291.70 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.70 #mult(z, z') -{ 0 }-> 1 + s25 :|: s25 >= 0, s25 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 1111.86/291.70 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.86/291.70 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.70 #natdiv(z, z') -{ 0 }-> 1 + s6 :|: s6 >= 0, s6 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 1111.86/291.70 #natdiv(z, z') -{ 0 }-> 1 + s7 :|: s7 >= 0, s7 <= s + 1, s >= 0, s <= z - 2, z' - 2 >= 0, z - 2 >= 0 1111.86/291.70 #natdiv(z, z') -{ 0 }-> 1 + s8 :|: s8 >= 0, s8 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.70 #natmult(z, z') -{ 0 }-> s14 :|: s14 >= 0, s14 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 1111.86/291.70 #natmult(z, z') -{ 0 }-> s15 :|: s15 >= 0, s15 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 1111.86/291.70 #natmult(z, z') -{ 0 }-> s28 :|: s26 >= 0, s26 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s27 >= 0, s27 <= 2 * (1 + z') + s26, s28 >= 0, s28 <= 2 * (1 + z') + s27, z - 2 >= 0, z' >= 0 1111.86/291.70 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 1111.86/291.70 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.70 #natsub(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= z - 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.70 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.86/291.70 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.70 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.86/291.70 #pred(z) -{ 0 }-> 0 :|: z >= 0 1111.86/291.70 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.86/291.70 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.86/291.70 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.86/291.70 #sub(z, z') -{ 0 }-> s16 :|: s16 >= 0, s16 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 1111.86/291.70 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.86/291.70 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.70 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.86/291.70 #succ(z) -{ 0 }-> 0 :|: z >= 0 1111.86/291.70 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.86/291.70 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.86/291.70 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.86/291.70 div(z, z') -{ 1 }-> s23 :|: s23 >= 0, s23 <= z + 1, z >= 0, z' >= 0 1111.86/291.70 eratos(z) -{ 1 }-> eratos#1(z) :|: z >= 0 1111.86/291.70 eratos#1(z) -{ 1 }-> 2 :|: z = 2 1111.86/291.70 eratos#1(z) -{ 2 }-> 1 + @x + eratos(filter#1(@xs, @x)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.86/291.70 filter(z, z') -{ 1 }-> filter#1(z', z) :|: z >= 0, z' >= 0 1111.86/291.70 filter#1(z, z') -{ 2 }-> filter#2(filter#1(@xs, z'), z', @x) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.86/291.70 filter#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 1111.86/291.70 filter#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.70 filter#2(z, z', z'') -{ 3 }-> filter#3(#equal(minus(z'', times(z'', s30)), 0), z'', z) :|: s30 >= 0, s30 <= z'' + 1, z' >= 0, z'' >= 0, z >= 0 1111.86/291.70 filter#3(z, z', z'') -{ 1 }-> z'' :|: z = 2, z' >= 0, z'' >= 0 1111.86/291.70 filter#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 1111.86/291.70 filter#3(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z' >= 0, z'' >= 0, z = 1 1111.86/291.70 minus(z, z') -{ 1 }-> s29 :|: s29 >= 0, s29 <= 2 * z + z', z >= 0, z' >= 0 1111.86/291.70 mod(z, z') -{ 2 }-> minus(z, times(z, s24)) :|: s24 >= 0, s24 <= z + 1, z >= 0, z' >= 0 1111.86/291.70 times(z, z') -{ 1 }-> s31 :|: s31 >= 0, s31 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 1111.86/291.70 1111.86/291.70 Function symbols to be analyzed: {times}, {filter#2}, {mod}, {filter#1}, {filter}, {eratos,eratos#1} 1111.86/291.70 Previous analysis results are: 1111.86/291.70 #natsub: runtime: O(1) [0], size: O(n^1) [z] 1111.86/291.70 #and: runtime: O(1) [0], size: O(1) [2] 1111.86/291.70 filter#3: runtime: O(1) [1], size: O(n^1) [1 + z' + z''] 1111.86/291.70 #pred: runtime: O(1) [0], size: O(n^1) [2 + z] 1111.86/291.70 #succ: runtime: O(1) [0], size: O(n^1) [2 + z] 1111.86/291.70 #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] 1111.86/291.70 #eq: runtime: O(1) [0], size: O(1) [2] 1111.86/291.70 #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] 1111.86/291.70 #div: runtime: O(1) [0], size: O(n^1) [1 + z] 1111.86/291.70 #equal: runtime: O(1) [1], size: O(1) [2] 1111.86/291.70 #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] 1111.86/291.70 #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] 1111.86/291.70 div: runtime: O(1) [1], size: O(n^1) [1 + z] 1111.86/291.70 #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] 1111.86/291.70 minus: runtime: O(1) [1], size: O(n^1) [2*z + z'] 1111.86/291.70 1111.86/291.70 ---------------------------------------- 1111.86/291.70 1111.86/291.70 (111) ResultPropagationProof (UPPER BOUND(ID)) 1111.86/291.70 Applied inner abstraction using the recently inferred runtime/size bounds where possible. 1111.86/291.70 ---------------------------------------- 1111.86/291.70 1111.86/291.70 (112) 1111.86/291.70 Obligation: 1111.86/291.70 Complexity RNTS consisting of the following rules: 1111.86/291.70 1111.86/291.70 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 1111.86/291.70 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 1111.86/291.70 #add(z, z') -{ 0 }-> s19 :|: s17 >= 0, s17 <= 2 * (1 + (1 + (z - 4))) + z', s18 >= 0, s18 <= s17 + 2, s19 >= 0, s19 <= s18 + 2, z - 4 >= 0, z' >= 0 1111.86/291.70 #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 1111.86/291.70 #add(z, z') -{ 0 }-> s22 :|: s20 >= 0, s20 <= 2 * (1 + (1 + (z - 4))) + z', s21 >= 0, s21 <= s20 + 2, s22 >= 0, s22 <= s21 + 2, z' >= 0, z - 4 >= 0 1111.86/291.70 #add(z, z') -{ 0 }-> s3 :|: s3 >= 0, s3 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) 1111.86/291.70 #add(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 1111.86/291.70 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 1111.86/291.70 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.70 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) 1111.86/291.70 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 1111.86/291.70 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 1111.86/291.70 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' 1111.86/291.70 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 1111.86/291.70 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) 1111.86/291.70 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 1111.86/291.70 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 1111.86/291.70 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 1111.86/291.70 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) 1111.86/291.70 #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')) 1111.86/291.70 #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')) 1111.86/291.70 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 1111.86/291.70 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 1111.86/291.70 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 1111.86/291.70 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 1111.86/291.70 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 1111.86/291.70 #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) 1111.86/291.70 #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') 1111.86/291.70 #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') 1111.86/291.70 #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 1111.86/291.70 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.86/291.70 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 1111.86/291.70 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 1111.86/291.70 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 1111.86/291.70 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.70 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.86/291.70 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.86/291.70 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.86/291.70 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.70 #div(z, z') -{ 0 }-> 1 + s5 :|: s5 >= 0, s5 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.70 #eq(z, z') -{ 0 }-> s10 :|: s10 >= 0, s10 <= 2, z - 1 >= 0, z' - 1 >= 0 1111.86/291.70 #eq(z, z') -{ 0 }-> s13 :|: s11 >= 0, s11 <= 2, s12 >= 0, s12 <= 2, s13 >= 0, s13 <= 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 1111.86/291.70 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 1111.86/291.70 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.86/291.70 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 1111.86/291.70 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.86/291.70 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 1111.86/291.70 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 1111.86/291.70 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 1111.86/291.70 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.70 #equal(z, z') -{ 1 }-> s9 :|: s9 >= 0, s9 <= 2, z >= 0, z' >= 0 1111.86/291.70 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 1111.86/291.70 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.86/291.70 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 1111.86/291.70 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.70 #mult(z, z') -{ 0 }-> 1 + s25 :|: s25 >= 0, s25 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 1111.86/291.70 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.86/291.70 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.70 #natdiv(z, z') -{ 0 }-> 1 + s6 :|: s6 >= 0, s6 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 1111.86/291.70 #natdiv(z, z') -{ 0 }-> 1 + s7 :|: s7 >= 0, s7 <= s + 1, s >= 0, s <= z - 2, z' - 2 >= 0, z - 2 >= 0 1111.86/291.70 #natdiv(z, z') -{ 0 }-> 1 + s8 :|: s8 >= 0, s8 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.70 #natmult(z, z') -{ 0 }-> s14 :|: s14 >= 0, s14 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 1111.86/291.70 #natmult(z, z') -{ 0 }-> s15 :|: s15 >= 0, s15 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 1111.86/291.70 #natmult(z, z') -{ 0 }-> s28 :|: s26 >= 0, s26 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s27 >= 0, s27 <= 2 * (1 + z') + s26, s28 >= 0, s28 <= 2 * (1 + z') + s27, z - 2 >= 0, z' >= 0 1111.86/291.70 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 1111.86/291.70 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.70 #natsub(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= z - 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.70 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.86/291.70 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.70 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.86/291.70 #pred(z) -{ 0 }-> 0 :|: z >= 0 1111.86/291.70 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.86/291.70 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.86/291.70 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.86/291.70 #sub(z, z') -{ 0 }-> s16 :|: s16 >= 0, s16 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 1111.86/291.70 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.86/291.70 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.70 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.86/291.70 #succ(z) -{ 0 }-> 0 :|: z >= 0 1111.86/291.70 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.86/291.70 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.86/291.70 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.86/291.70 div(z, z') -{ 1 }-> s23 :|: s23 >= 0, s23 <= z + 1, z >= 0, z' >= 0 1111.86/291.70 eratos(z) -{ 1 }-> eratos#1(z) :|: z >= 0 1111.86/291.70 eratos#1(z) -{ 1 }-> 2 :|: z = 2 1111.86/291.70 eratos#1(z) -{ 2 }-> 1 + @x + eratos(filter#1(@xs, @x)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.86/291.70 filter(z, z') -{ 1 }-> filter#1(z', z) :|: z >= 0, z' >= 0 1111.86/291.70 filter#1(z, z') -{ 2 }-> filter#2(filter#1(@xs, z'), z', @x) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.86/291.70 filter#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 1111.86/291.70 filter#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.70 filter#2(z, z', z'') -{ 3 }-> filter#3(#equal(minus(z'', times(z'', s30)), 0), z'', z) :|: s30 >= 0, s30 <= z'' + 1, z' >= 0, z'' >= 0, z >= 0 1111.86/291.70 filter#3(z, z', z'') -{ 1 }-> z'' :|: z = 2, z' >= 0, z'' >= 0 1111.86/291.70 filter#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 1111.86/291.70 filter#3(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z' >= 0, z'' >= 0, z = 1 1111.86/291.70 minus(z, z') -{ 1 }-> s29 :|: s29 >= 0, s29 <= 2 * z + z', z >= 0, z' >= 0 1111.86/291.70 mod(z, z') -{ 2 }-> minus(z, times(z, s24)) :|: s24 >= 0, s24 <= z + 1, z >= 0, z' >= 0 1111.86/291.70 times(z, z') -{ 1 }-> s31 :|: s31 >= 0, s31 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 1111.86/291.70 1111.86/291.70 Function symbols to be analyzed: {times}, {filter#2}, {mod}, {filter#1}, {filter}, {eratos,eratos#1} 1111.86/291.70 Previous analysis results are: 1111.86/291.70 #natsub: runtime: O(1) [0], size: O(n^1) [z] 1111.86/291.70 #and: runtime: O(1) [0], size: O(1) [2] 1111.86/291.70 filter#3: runtime: O(1) [1], size: O(n^1) [1 + z' + z''] 1111.86/291.70 #pred: runtime: O(1) [0], size: O(n^1) [2 + z] 1111.86/291.70 #succ: runtime: O(1) [0], size: O(n^1) [2 + z] 1111.86/291.70 #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] 1111.86/291.70 #eq: runtime: O(1) [0], size: O(1) [2] 1111.86/291.70 #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] 1111.86/291.70 #div: runtime: O(1) [0], size: O(n^1) [1 + z] 1111.86/291.70 #equal: runtime: O(1) [1], size: O(1) [2] 1111.86/291.70 #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] 1111.86/291.70 #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] 1111.86/291.70 div: runtime: O(1) [1], size: O(n^1) [1 + z] 1111.86/291.70 #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] 1111.86/291.70 minus: runtime: O(1) [1], size: O(n^1) [2*z + z'] 1111.86/291.70 1111.86/291.70 ---------------------------------------- 1111.86/291.70 1111.86/291.70 (113) IntTrsBoundProof (UPPER BOUND(ID)) 1111.86/291.70 1111.86/291.70 Computed SIZE bound using KoAT for: times 1111.86/291.70 after applying outer abstraction to obtain an ITS, 1111.86/291.70 resulting in: O(n^2) with polynomial bound: 1 + 4*z*z' 1111.86/291.70 1111.86/291.70 ---------------------------------------- 1111.86/291.70 1111.86/291.70 (114) 1111.86/291.70 Obligation: 1111.86/291.70 Complexity RNTS consisting of the following rules: 1111.86/291.70 1111.86/291.70 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 1111.86/291.70 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 1111.86/291.70 #add(z, z') -{ 0 }-> s19 :|: s17 >= 0, s17 <= 2 * (1 + (1 + (z - 4))) + z', s18 >= 0, s18 <= s17 + 2, s19 >= 0, s19 <= s18 + 2, z - 4 >= 0, z' >= 0 1111.86/291.70 #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 1111.86/291.70 #add(z, z') -{ 0 }-> s22 :|: s20 >= 0, s20 <= 2 * (1 + (1 + (z - 4))) + z', s21 >= 0, s21 <= s20 + 2, s22 >= 0, s22 <= s21 + 2, z' >= 0, z - 4 >= 0 1111.86/291.70 #add(z, z') -{ 0 }-> s3 :|: s3 >= 0, s3 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) 1111.86/291.70 #add(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 1111.86/291.70 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 1111.86/291.71 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.71 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) 1111.86/291.71 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 1111.86/291.71 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 1111.86/291.71 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' 1111.86/291.71 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 1111.86/291.71 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) 1111.86/291.71 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 1111.86/291.71 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 1111.86/291.71 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 1111.86/291.71 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) 1111.86/291.71 #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')) 1111.86/291.71 #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')) 1111.86/291.71 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 1111.86/291.71 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 1111.86/291.71 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 1111.86/291.71 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 1111.86/291.71 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 1111.86/291.71 #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) 1111.86/291.71 #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') 1111.86/291.71 #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') 1111.86/291.71 #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 1111.86/291.71 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.86/291.71 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 1111.86/291.71 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 1111.86/291.71 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 1111.86/291.71 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.71 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.86/291.71 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.86/291.71 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.86/291.71 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.71 #div(z, z') -{ 0 }-> 1 + s5 :|: s5 >= 0, s5 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.71 #eq(z, z') -{ 0 }-> s10 :|: s10 >= 0, s10 <= 2, z - 1 >= 0, z' - 1 >= 0 1111.86/291.71 #eq(z, z') -{ 0 }-> s13 :|: s11 >= 0, s11 <= 2, s12 >= 0, s12 <= 2, s13 >= 0, s13 <= 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 1111.86/291.71 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 1111.86/291.71 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.86/291.71 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 1111.86/291.71 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.86/291.71 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 1111.86/291.71 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 1111.86/291.71 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 1111.86/291.71 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.71 #equal(z, z') -{ 1 }-> s9 :|: s9 >= 0, s9 <= 2, z >= 0, z' >= 0 1111.86/291.71 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 1111.86/291.71 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.86/291.71 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 1111.86/291.71 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.71 #mult(z, z') -{ 0 }-> 1 + s25 :|: s25 >= 0, s25 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 1111.86/291.71 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.86/291.71 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.71 #natdiv(z, z') -{ 0 }-> 1 + s6 :|: s6 >= 0, s6 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 1111.86/291.71 #natdiv(z, z') -{ 0 }-> 1 + s7 :|: s7 >= 0, s7 <= s + 1, s >= 0, s <= z - 2, z' - 2 >= 0, z - 2 >= 0 1111.86/291.71 #natdiv(z, z') -{ 0 }-> 1 + s8 :|: s8 >= 0, s8 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.71 #natmult(z, z') -{ 0 }-> s14 :|: s14 >= 0, s14 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 1111.86/291.71 #natmult(z, z') -{ 0 }-> s15 :|: s15 >= 0, s15 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 1111.86/291.71 #natmult(z, z') -{ 0 }-> s28 :|: s26 >= 0, s26 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s27 >= 0, s27 <= 2 * (1 + z') + s26, s28 >= 0, s28 <= 2 * (1 + z') + s27, z - 2 >= 0, z' >= 0 1111.86/291.71 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 1111.86/291.71 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.71 #natsub(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= z - 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.71 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.86/291.71 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.71 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.86/291.71 #pred(z) -{ 0 }-> 0 :|: z >= 0 1111.86/291.71 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.86/291.71 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.86/291.71 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.86/291.71 #sub(z, z') -{ 0 }-> s16 :|: s16 >= 0, s16 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 1111.86/291.71 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.86/291.71 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.71 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.86/291.71 #succ(z) -{ 0 }-> 0 :|: z >= 0 1111.86/291.71 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.86/291.71 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.86/291.71 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.86/291.71 div(z, z') -{ 1 }-> s23 :|: s23 >= 0, s23 <= z + 1, z >= 0, z' >= 0 1111.86/291.71 eratos(z) -{ 1 }-> eratos#1(z) :|: z >= 0 1111.86/291.71 eratos#1(z) -{ 1 }-> 2 :|: z = 2 1111.86/291.71 eratos#1(z) -{ 2 }-> 1 + @x + eratos(filter#1(@xs, @x)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.86/291.71 filter(z, z') -{ 1 }-> filter#1(z', z) :|: z >= 0, z' >= 0 1111.86/291.71 filter#1(z, z') -{ 2 }-> filter#2(filter#1(@xs, z'), z', @x) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.86/291.71 filter#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 1111.86/291.71 filter#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.71 filter#2(z, z', z'') -{ 3 }-> filter#3(#equal(minus(z'', times(z'', s30)), 0), z'', z) :|: s30 >= 0, s30 <= z'' + 1, z' >= 0, z'' >= 0, z >= 0 1111.86/291.71 filter#3(z, z', z'') -{ 1 }-> z'' :|: z = 2, z' >= 0, z'' >= 0 1111.86/291.71 filter#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 1111.86/291.71 filter#3(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z' >= 0, z'' >= 0, z = 1 1111.86/291.71 minus(z, z') -{ 1 }-> s29 :|: s29 >= 0, s29 <= 2 * z + z', z >= 0, z' >= 0 1111.86/291.71 mod(z, z') -{ 2 }-> minus(z, times(z, s24)) :|: s24 >= 0, s24 <= z + 1, z >= 0, z' >= 0 1111.86/291.71 times(z, z') -{ 1 }-> s31 :|: s31 >= 0, s31 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 1111.86/291.71 1111.86/291.71 Function symbols to be analyzed: {times}, {filter#2}, {mod}, {filter#1}, {filter}, {eratos,eratos#1} 1111.86/291.71 Previous analysis results are: 1111.86/291.71 #natsub: runtime: O(1) [0], size: O(n^1) [z] 1111.86/291.71 #and: runtime: O(1) [0], size: O(1) [2] 1111.86/291.71 filter#3: runtime: O(1) [1], size: O(n^1) [1 + z' + z''] 1111.86/291.71 #pred: runtime: O(1) [0], size: O(n^1) [2 + z] 1111.86/291.71 #succ: runtime: O(1) [0], size: O(n^1) [2 + z] 1111.86/291.71 #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] 1111.86/291.71 #eq: runtime: O(1) [0], size: O(1) [2] 1111.86/291.71 #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] 1111.86/291.71 #div: runtime: O(1) [0], size: O(n^1) [1 + z] 1111.86/291.71 #equal: runtime: O(1) [1], size: O(1) [2] 1111.86/291.71 #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] 1111.86/291.71 #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] 1111.86/291.71 div: runtime: O(1) [1], size: O(n^1) [1 + z] 1111.86/291.71 #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] 1111.86/291.71 minus: runtime: O(1) [1], size: O(n^1) [2*z + z'] 1111.86/291.71 times: runtime: ?, size: O(n^2) [1 + 4*z*z'] 1111.86/291.71 1111.86/291.71 ---------------------------------------- 1111.86/291.71 1111.86/291.71 (115) IntTrsBoundProof (UPPER BOUND(ID)) 1111.86/291.71 1111.86/291.71 Computed RUNTIME bound using CoFloCo for: times 1111.86/291.71 after applying outer abstraction to obtain an ITS, 1111.86/291.71 resulting in: O(1) with polynomial bound: 1 1111.86/291.71 1111.86/291.71 ---------------------------------------- 1111.86/291.71 1111.86/291.71 (116) 1111.86/291.71 Obligation: 1111.86/291.71 Complexity RNTS consisting of the following rules: 1111.86/291.71 1111.86/291.71 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 1111.86/291.71 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 1111.86/291.71 #add(z, z') -{ 0 }-> s19 :|: s17 >= 0, s17 <= 2 * (1 + (1 + (z - 4))) + z', s18 >= 0, s18 <= s17 + 2, s19 >= 0, s19 <= s18 + 2, z - 4 >= 0, z' >= 0 1111.86/291.71 #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 1111.86/291.71 #add(z, z') -{ 0 }-> s22 :|: s20 >= 0, s20 <= 2 * (1 + (1 + (z - 4))) + z', s21 >= 0, s21 <= s20 + 2, s22 >= 0, s22 <= s21 + 2, z' >= 0, z - 4 >= 0 1111.86/291.71 #add(z, z') -{ 0 }-> s3 :|: s3 >= 0, s3 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) 1111.86/291.71 #add(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 1111.86/291.71 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 1111.86/291.71 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.71 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) 1111.86/291.71 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 1111.86/291.71 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 1111.86/291.71 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' 1111.86/291.71 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 1111.86/291.71 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) 1111.86/291.71 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 1111.86/291.71 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 1111.86/291.71 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 1111.86/291.71 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) 1111.86/291.71 #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')) 1111.86/291.71 #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')) 1111.86/291.71 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 1111.86/291.71 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 1111.86/291.71 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 1111.86/291.71 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 1111.86/291.71 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 1111.86/291.71 #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) 1111.86/291.71 #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') 1111.86/291.71 #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') 1111.86/291.71 #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 1111.86/291.71 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.86/291.71 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 1111.86/291.71 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 1111.86/291.71 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 1111.86/291.71 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.71 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.86/291.71 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.86/291.71 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.86/291.71 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.71 #div(z, z') -{ 0 }-> 1 + s5 :|: s5 >= 0, s5 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.71 #eq(z, z') -{ 0 }-> s10 :|: s10 >= 0, s10 <= 2, z - 1 >= 0, z' - 1 >= 0 1111.86/291.71 #eq(z, z') -{ 0 }-> s13 :|: s11 >= 0, s11 <= 2, s12 >= 0, s12 <= 2, s13 >= 0, s13 <= 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 1111.86/291.71 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 1111.86/291.71 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.86/291.71 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 1111.86/291.71 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.86/291.71 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 1111.86/291.71 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 1111.86/291.71 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 1111.86/291.71 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.71 #equal(z, z') -{ 1 }-> s9 :|: s9 >= 0, s9 <= 2, z >= 0, z' >= 0 1111.86/291.71 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 1111.86/291.71 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.86/291.71 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 1111.86/291.71 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.71 #mult(z, z') -{ 0 }-> 1 + s25 :|: s25 >= 0, s25 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 1111.86/291.71 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.86/291.71 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.71 #natdiv(z, z') -{ 0 }-> 1 + s6 :|: s6 >= 0, s6 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 1111.86/291.71 #natdiv(z, z') -{ 0 }-> 1 + s7 :|: s7 >= 0, s7 <= s + 1, s >= 0, s <= z - 2, z' - 2 >= 0, z - 2 >= 0 1111.86/291.71 #natdiv(z, z') -{ 0 }-> 1 + s8 :|: s8 >= 0, s8 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.71 #natmult(z, z') -{ 0 }-> s14 :|: s14 >= 0, s14 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 1111.86/291.71 #natmult(z, z') -{ 0 }-> s15 :|: s15 >= 0, s15 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 1111.86/291.71 #natmult(z, z') -{ 0 }-> s28 :|: s26 >= 0, s26 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s27 >= 0, s27 <= 2 * (1 + z') + s26, s28 >= 0, s28 <= 2 * (1 + z') + s27, z - 2 >= 0, z' >= 0 1111.86/291.71 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 1111.86/291.71 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.71 #natsub(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= z - 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.71 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.86/291.71 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.71 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.86/291.71 #pred(z) -{ 0 }-> 0 :|: z >= 0 1111.86/291.71 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.86/291.71 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.86/291.71 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.86/291.71 #sub(z, z') -{ 0 }-> s16 :|: s16 >= 0, s16 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 1111.86/291.71 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.86/291.71 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.71 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.86/291.71 #succ(z) -{ 0 }-> 0 :|: z >= 0 1111.86/291.71 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.86/291.71 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.86/291.71 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.86/291.71 div(z, z') -{ 1 }-> s23 :|: s23 >= 0, s23 <= z + 1, z >= 0, z' >= 0 1111.86/291.71 eratos(z) -{ 1 }-> eratos#1(z) :|: z >= 0 1111.86/291.71 eratos#1(z) -{ 1 }-> 2 :|: z = 2 1111.86/291.71 eratos#1(z) -{ 2 }-> 1 + @x + eratos(filter#1(@xs, @x)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.86/291.71 filter(z, z') -{ 1 }-> filter#1(z', z) :|: z >= 0, z' >= 0 1111.86/291.71 filter#1(z, z') -{ 2 }-> filter#2(filter#1(@xs, z'), z', @x) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.86/291.71 filter#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 1111.86/291.71 filter#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.71 filter#2(z, z', z'') -{ 3 }-> filter#3(#equal(minus(z'', times(z'', s30)), 0), z'', z) :|: s30 >= 0, s30 <= z'' + 1, z' >= 0, z'' >= 0, z >= 0 1111.86/291.71 filter#3(z, z', z'') -{ 1 }-> z'' :|: z = 2, z' >= 0, z'' >= 0 1111.86/291.71 filter#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 1111.86/291.71 filter#3(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z' >= 0, z'' >= 0, z = 1 1111.86/291.71 minus(z, z') -{ 1 }-> s29 :|: s29 >= 0, s29 <= 2 * z + z', z >= 0, z' >= 0 1111.86/291.71 mod(z, z') -{ 2 }-> minus(z, times(z, s24)) :|: s24 >= 0, s24 <= z + 1, z >= 0, z' >= 0 1111.86/291.71 times(z, z') -{ 1 }-> s31 :|: s31 >= 0, s31 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 1111.86/291.71 1111.86/291.71 Function symbols to be analyzed: {filter#2}, {mod}, {filter#1}, {filter}, {eratos,eratos#1} 1111.86/291.71 Previous analysis results are: 1111.86/291.71 #natsub: runtime: O(1) [0], size: O(n^1) [z] 1111.86/291.71 #and: runtime: O(1) [0], size: O(1) [2] 1111.86/291.71 filter#3: runtime: O(1) [1], size: O(n^1) [1 + z' + z''] 1111.86/291.71 #pred: runtime: O(1) [0], size: O(n^1) [2 + z] 1111.86/291.71 #succ: runtime: O(1) [0], size: O(n^1) [2 + z] 1111.86/291.71 #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] 1111.86/291.71 #eq: runtime: O(1) [0], size: O(1) [2] 1111.86/291.71 #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] 1111.86/291.71 #div: runtime: O(1) [0], size: O(n^1) [1 + z] 1111.86/291.71 #equal: runtime: O(1) [1], size: O(1) [2] 1111.86/291.71 #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] 1111.86/291.71 #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] 1111.86/291.71 div: runtime: O(1) [1], size: O(n^1) [1 + z] 1111.86/291.71 #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] 1111.86/291.71 minus: runtime: O(1) [1], size: O(n^1) [2*z + z'] 1111.86/291.71 times: runtime: O(1) [1], size: O(n^2) [1 + 4*z*z'] 1111.86/291.71 1111.86/291.71 ---------------------------------------- 1111.86/291.71 1111.86/291.71 (117) ResultPropagationProof (UPPER BOUND(ID)) 1111.86/291.71 Applied inner abstraction using the recently inferred runtime/size bounds where possible. 1111.86/291.71 ---------------------------------------- 1111.86/291.71 1111.86/291.71 (118) 1111.86/291.71 Obligation: 1111.86/291.71 Complexity RNTS consisting of the following rules: 1111.86/291.71 1111.86/291.71 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 1111.86/291.71 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 1111.86/291.71 #add(z, z') -{ 0 }-> s19 :|: s17 >= 0, s17 <= 2 * (1 + (1 + (z - 4))) + z', s18 >= 0, s18 <= s17 + 2, s19 >= 0, s19 <= s18 + 2, z - 4 >= 0, z' >= 0 1111.86/291.71 #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 1111.86/291.71 #add(z, z') -{ 0 }-> s22 :|: s20 >= 0, s20 <= 2 * (1 + (1 + (z - 4))) + z', s21 >= 0, s21 <= s20 + 2, s22 >= 0, s22 <= s21 + 2, z' >= 0, z - 4 >= 0 1111.86/291.71 #add(z, z') -{ 0 }-> s3 :|: s3 >= 0, s3 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) 1111.86/291.71 #add(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 1111.86/291.71 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 1111.86/291.71 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.71 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) 1111.86/291.71 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 1111.86/291.71 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 1111.86/291.71 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' 1111.86/291.71 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 1111.86/291.71 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) 1111.86/291.71 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 1111.86/291.71 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 1111.86/291.71 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 1111.86/291.71 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) 1111.86/291.71 #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')) 1111.86/291.71 #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')) 1111.86/291.71 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 1111.86/291.71 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 1111.86/291.71 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 1111.86/291.71 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 1111.86/291.71 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 1111.86/291.71 #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) 1111.86/291.71 #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') 1111.86/291.71 #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') 1111.86/291.71 #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 1111.86/291.71 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.86/291.71 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 1111.86/291.71 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 1111.86/291.71 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 1111.86/291.71 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.71 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.86/291.71 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.86/291.71 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.86/291.71 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.71 #div(z, z') -{ 0 }-> 1 + s5 :|: s5 >= 0, s5 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.71 #eq(z, z') -{ 0 }-> s10 :|: s10 >= 0, s10 <= 2, z - 1 >= 0, z' - 1 >= 0 1111.86/291.71 #eq(z, z') -{ 0 }-> s13 :|: s11 >= 0, s11 <= 2, s12 >= 0, s12 <= 2, s13 >= 0, s13 <= 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 1111.86/291.71 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 1111.86/291.71 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.86/291.71 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 1111.86/291.71 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.86/291.71 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 1111.86/291.71 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 1111.86/291.71 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 1111.86/291.71 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.71 #equal(z, z') -{ 1 }-> s9 :|: s9 >= 0, s9 <= 2, z >= 0, z' >= 0 1111.86/291.71 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 1111.86/291.71 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.86/291.71 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 1111.86/291.71 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.71 #mult(z, z') -{ 0 }-> 1 + s25 :|: s25 >= 0, s25 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 1111.86/291.71 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.86/291.71 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.71 #natdiv(z, z') -{ 0 }-> 1 + s6 :|: s6 >= 0, s6 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 1111.86/291.71 #natdiv(z, z') -{ 0 }-> 1 + s7 :|: s7 >= 0, s7 <= s + 1, s >= 0, s <= z - 2, z' - 2 >= 0, z - 2 >= 0 1111.86/291.71 #natdiv(z, z') -{ 0 }-> 1 + s8 :|: s8 >= 0, s8 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.71 #natmult(z, z') -{ 0 }-> s14 :|: s14 >= 0, s14 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 1111.86/291.71 #natmult(z, z') -{ 0 }-> s15 :|: s15 >= 0, s15 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 1111.86/291.71 #natmult(z, z') -{ 0 }-> s28 :|: s26 >= 0, s26 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s27 >= 0, s27 <= 2 * (1 + z') + s26, s28 >= 0, s28 <= 2 * (1 + z') + s27, z - 2 >= 0, z' >= 0 1111.86/291.71 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 1111.86/291.71 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.71 #natsub(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= z - 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.71 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.86/291.71 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.71 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.86/291.71 #pred(z) -{ 0 }-> 0 :|: z >= 0 1111.86/291.71 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.86/291.71 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.86/291.71 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.86/291.71 #sub(z, z') -{ 0 }-> s16 :|: s16 >= 0, s16 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 1111.86/291.71 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.86/291.71 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.71 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.86/291.71 #succ(z) -{ 0 }-> 0 :|: z >= 0 1111.86/291.71 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.86/291.71 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.86/291.71 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.86/291.71 div(z, z') -{ 1 }-> s23 :|: s23 >= 0, s23 <= z + 1, z >= 0, z' >= 0 1111.86/291.71 eratos(z) -{ 1 }-> eratos#1(z) :|: z >= 0 1111.86/291.71 eratos#1(z) -{ 1 }-> 2 :|: z = 2 1111.86/291.71 eratos#1(z) -{ 2 }-> 1 + @x + eratos(filter#1(@xs, @x)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.86/291.71 filter(z, z') -{ 1 }-> filter#1(z', z) :|: z >= 0, z' >= 0 1111.86/291.71 filter#1(z, z') -{ 2 }-> filter#2(filter#1(@xs, z'), z', @x) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.86/291.71 filter#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 1111.86/291.71 filter#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.71 filter#2(z, z', z'') -{ 7 }-> s37 :|: s34 >= 0, s34 <= 4 * (s30 * z'') + 1, s35 >= 0, s35 <= 2 * z'' + s34, s36 >= 0, s36 <= 2, s37 >= 0, s37 <= z'' + z + 1, s30 >= 0, s30 <= z'' + 1, z' >= 0, z'' >= 0, z >= 0 1111.86/291.71 filter#3(z, z', z'') -{ 1 }-> z'' :|: z = 2, z' >= 0, z'' >= 0 1111.86/291.71 filter#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 1111.86/291.71 filter#3(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z' >= 0, z'' >= 0, z = 1 1111.86/291.71 minus(z, z') -{ 1 }-> s29 :|: s29 >= 0, s29 <= 2 * z + z', z >= 0, z' >= 0 1111.86/291.71 mod(z, z') -{ 4 }-> s33 :|: s32 >= 0, s32 <= 4 * (s24 * z) + 1, s33 >= 0, s33 <= 2 * z + s32, s24 >= 0, s24 <= z + 1, z >= 0, z' >= 0 1111.86/291.71 times(z, z') -{ 1 }-> s31 :|: s31 >= 0, s31 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 1111.86/291.71 1111.86/291.71 Function symbols to be analyzed: {filter#2}, {mod}, {filter#1}, {filter}, {eratos,eratos#1} 1111.86/291.71 Previous analysis results are: 1111.86/291.71 #natsub: runtime: O(1) [0], size: O(n^1) [z] 1111.86/291.71 #and: runtime: O(1) [0], size: O(1) [2] 1111.86/291.71 filter#3: runtime: O(1) [1], size: O(n^1) [1 + z' + z''] 1111.86/291.71 #pred: runtime: O(1) [0], size: O(n^1) [2 + z] 1111.86/291.71 #succ: runtime: O(1) [0], size: O(n^1) [2 + z] 1111.86/291.71 #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] 1111.86/291.71 #eq: runtime: O(1) [0], size: O(1) [2] 1111.86/291.71 #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] 1111.86/291.71 #div: runtime: O(1) [0], size: O(n^1) [1 + z] 1111.86/291.71 #equal: runtime: O(1) [1], size: O(1) [2] 1111.86/291.71 #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] 1111.86/291.71 #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] 1111.86/291.71 div: runtime: O(1) [1], size: O(n^1) [1 + z] 1111.86/291.71 #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] 1111.86/291.71 minus: runtime: O(1) [1], size: O(n^1) [2*z + z'] 1111.86/291.71 times: runtime: O(1) [1], size: O(n^2) [1 + 4*z*z'] 1111.86/291.71 1111.86/291.71 ---------------------------------------- 1111.86/291.71 1111.86/291.71 (119) IntTrsBoundProof (UPPER BOUND(ID)) 1111.86/291.71 1111.86/291.71 Computed SIZE bound using CoFloCo for: filter#2 1111.86/291.71 after applying outer abstraction to obtain an ITS, 1111.86/291.71 resulting in: O(n^1) with polynomial bound: 1 + z + z'' 1111.86/291.71 1111.86/291.71 ---------------------------------------- 1111.86/291.71 1111.86/291.71 (120) 1111.86/291.71 Obligation: 1111.86/291.71 Complexity RNTS consisting of the following rules: 1111.86/291.71 1111.86/291.71 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 1111.86/291.71 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 1111.86/291.71 #add(z, z') -{ 0 }-> s19 :|: s17 >= 0, s17 <= 2 * (1 + (1 + (z - 4))) + z', s18 >= 0, s18 <= s17 + 2, s19 >= 0, s19 <= s18 + 2, z - 4 >= 0, z' >= 0 1111.86/291.71 #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 1111.86/291.71 #add(z, z') -{ 0 }-> s22 :|: s20 >= 0, s20 <= 2 * (1 + (1 + (z - 4))) + z', s21 >= 0, s21 <= s20 + 2, s22 >= 0, s22 <= s21 + 2, z' >= 0, z - 4 >= 0 1111.86/291.71 #add(z, z') -{ 0 }-> s3 :|: s3 >= 0, s3 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) 1111.86/291.71 #add(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 1111.86/291.71 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 1111.86/291.71 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.71 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) 1111.86/291.71 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 1111.86/291.71 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 1111.86/291.71 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' 1111.86/291.71 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 1111.86/291.71 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) 1111.86/291.71 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 1111.86/291.71 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 1111.86/291.71 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 1111.86/291.71 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) 1111.86/291.71 #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')) 1111.86/291.71 #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')) 1111.86/291.71 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 1111.86/291.71 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 1111.86/291.71 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 1111.86/291.71 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 1111.86/291.71 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 1111.86/291.71 #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) 1111.86/291.71 #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') 1111.86/291.71 #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') 1111.86/291.71 #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 1111.86/291.71 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.86/291.71 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 1111.86/291.71 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 1111.86/291.71 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 1111.86/291.71 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.71 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.86/291.71 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.86/291.71 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.86/291.71 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.71 #div(z, z') -{ 0 }-> 1 + s5 :|: s5 >= 0, s5 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.71 #eq(z, z') -{ 0 }-> s10 :|: s10 >= 0, s10 <= 2, z - 1 >= 0, z' - 1 >= 0 1111.86/291.71 #eq(z, z') -{ 0 }-> s13 :|: s11 >= 0, s11 <= 2, s12 >= 0, s12 <= 2, s13 >= 0, s13 <= 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 1111.86/291.71 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 1111.86/291.71 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.86/291.71 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 1111.86/291.71 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.86/291.71 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 1111.86/291.71 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 1111.86/291.71 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 1111.86/291.71 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.71 #equal(z, z') -{ 1 }-> s9 :|: s9 >= 0, s9 <= 2, z >= 0, z' >= 0 1111.86/291.71 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 1111.86/291.71 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.86/291.71 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 1111.86/291.71 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.71 #mult(z, z') -{ 0 }-> 1 + s25 :|: s25 >= 0, s25 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 1111.86/291.71 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.86/291.71 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.71 #natdiv(z, z') -{ 0 }-> 1 + s6 :|: s6 >= 0, s6 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 1111.86/291.71 #natdiv(z, z') -{ 0 }-> 1 + s7 :|: s7 >= 0, s7 <= s + 1, s >= 0, s <= z - 2, z' - 2 >= 0, z - 2 >= 0 1111.86/291.71 #natdiv(z, z') -{ 0 }-> 1 + s8 :|: s8 >= 0, s8 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.71 #natmult(z, z') -{ 0 }-> s14 :|: s14 >= 0, s14 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 1111.86/291.71 #natmult(z, z') -{ 0 }-> s15 :|: s15 >= 0, s15 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 1111.86/291.71 #natmult(z, z') -{ 0 }-> s28 :|: s26 >= 0, s26 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s27 >= 0, s27 <= 2 * (1 + z') + s26, s28 >= 0, s28 <= 2 * (1 + z') + s27, z - 2 >= 0, z' >= 0 1111.86/291.71 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 1111.86/291.71 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.71 #natsub(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= z - 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.71 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.86/291.71 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.71 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.86/291.71 #pred(z) -{ 0 }-> 0 :|: z >= 0 1111.86/291.71 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.86/291.71 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.86/291.71 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.86/291.71 #sub(z, z') -{ 0 }-> s16 :|: s16 >= 0, s16 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 1111.86/291.71 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.86/291.71 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.71 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.86/291.71 #succ(z) -{ 0 }-> 0 :|: z >= 0 1111.86/291.71 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.86/291.71 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.86/291.71 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.86/291.71 div(z, z') -{ 1 }-> s23 :|: s23 >= 0, s23 <= z + 1, z >= 0, z' >= 0 1111.86/291.71 eratos(z) -{ 1 }-> eratos#1(z) :|: z >= 0 1111.86/291.71 eratos#1(z) -{ 1 }-> 2 :|: z = 2 1111.86/291.71 eratos#1(z) -{ 2 }-> 1 + @x + eratos(filter#1(@xs, @x)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.86/291.71 filter(z, z') -{ 1 }-> filter#1(z', z) :|: z >= 0, z' >= 0 1111.86/291.71 filter#1(z, z') -{ 2 }-> filter#2(filter#1(@xs, z'), z', @x) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.86/291.71 filter#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 1111.86/291.71 filter#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.71 filter#2(z, z', z'') -{ 7 }-> s37 :|: s34 >= 0, s34 <= 4 * (s30 * z'') + 1, s35 >= 0, s35 <= 2 * z'' + s34, s36 >= 0, s36 <= 2, s37 >= 0, s37 <= z'' + z + 1, s30 >= 0, s30 <= z'' + 1, z' >= 0, z'' >= 0, z >= 0 1111.86/291.71 filter#3(z, z', z'') -{ 1 }-> z'' :|: z = 2, z' >= 0, z'' >= 0 1111.86/291.71 filter#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 1111.86/291.71 filter#3(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z' >= 0, z'' >= 0, z = 1 1111.86/291.71 minus(z, z') -{ 1 }-> s29 :|: s29 >= 0, s29 <= 2 * z + z', z >= 0, z' >= 0 1111.86/291.71 mod(z, z') -{ 4 }-> s33 :|: s32 >= 0, s32 <= 4 * (s24 * z) + 1, s33 >= 0, s33 <= 2 * z + s32, s24 >= 0, s24 <= z + 1, z >= 0, z' >= 0 1111.86/291.71 times(z, z') -{ 1 }-> s31 :|: s31 >= 0, s31 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 1111.86/291.71 1111.86/291.71 Function symbols to be analyzed: {filter#2}, {mod}, {filter#1}, {filter}, {eratos,eratos#1} 1111.86/291.71 Previous analysis results are: 1111.86/291.71 #natsub: runtime: O(1) [0], size: O(n^1) [z] 1111.86/291.71 #and: runtime: O(1) [0], size: O(1) [2] 1111.86/291.71 filter#3: runtime: O(1) [1], size: O(n^1) [1 + z' + z''] 1111.86/291.71 #pred: runtime: O(1) [0], size: O(n^1) [2 + z] 1111.86/291.71 #succ: runtime: O(1) [0], size: O(n^1) [2 + z] 1111.86/291.71 #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] 1111.86/291.71 #eq: runtime: O(1) [0], size: O(1) [2] 1111.86/291.71 #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] 1111.86/291.71 #div: runtime: O(1) [0], size: O(n^1) [1 + z] 1111.86/291.71 #equal: runtime: O(1) [1], size: O(1) [2] 1111.86/291.71 #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] 1111.86/291.71 #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] 1111.86/291.71 div: runtime: O(1) [1], size: O(n^1) [1 + z] 1111.86/291.71 #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] 1111.86/291.71 minus: runtime: O(1) [1], size: O(n^1) [2*z + z'] 1111.86/291.71 times: runtime: O(1) [1], size: O(n^2) [1 + 4*z*z'] 1111.86/291.71 filter#2: runtime: ?, size: O(n^1) [1 + z + z''] 1111.86/291.71 1111.86/291.71 ---------------------------------------- 1111.86/291.71 1111.86/291.71 (121) IntTrsBoundProof (UPPER BOUND(ID)) 1111.86/291.71 1111.86/291.71 Computed RUNTIME bound using CoFloCo for: filter#2 1111.86/291.71 after applying outer abstraction to obtain an ITS, 1111.86/291.71 resulting in: O(1) with polynomial bound: 7 1111.86/291.71 1111.86/291.71 ---------------------------------------- 1111.86/291.71 1111.86/291.71 (122) 1111.86/291.71 Obligation: 1111.86/291.71 Complexity RNTS consisting of the following rules: 1111.86/291.71 1111.86/291.71 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 1111.86/291.71 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 1111.86/291.71 #add(z, z') -{ 0 }-> s19 :|: s17 >= 0, s17 <= 2 * (1 + (1 + (z - 4))) + z', s18 >= 0, s18 <= s17 + 2, s19 >= 0, s19 <= s18 + 2, z - 4 >= 0, z' >= 0 1111.86/291.71 #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 1111.86/291.71 #add(z, z') -{ 0 }-> s22 :|: s20 >= 0, s20 <= 2 * (1 + (1 + (z - 4))) + z', s21 >= 0, s21 <= s20 + 2, s22 >= 0, s22 <= s21 + 2, z' >= 0, z - 4 >= 0 1111.86/291.71 #add(z, z') -{ 0 }-> s3 :|: s3 >= 0, s3 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) 1111.86/291.71 #add(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 1111.86/291.71 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 1111.86/291.71 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.71 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) 1111.86/291.71 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 1111.86/291.71 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 1111.86/291.71 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' 1111.86/291.71 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 1111.86/291.71 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) 1111.86/291.71 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 1111.86/291.71 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 1111.86/291.71 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 1111.86/291.71 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) 1111.86/291.71 #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')) 1111.86/291.71 #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')) 1111.86/291.71 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 1111.86/291.71 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 1111.86/291.71 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 1111.86/291.71 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 1111.86/291.71 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 1111.86/291.71 #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) 1111.86/291.71 #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') 1111.86/291.71 #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') 1111.86/291.71 #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 1111.86/291.71 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.86/291.71 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 1111.86/291.71 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 1111.86/291.71 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 1111.86/291.71 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.71 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.86/291.71 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.86/291.71 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.86/291.71 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.71 #div(z, z') -{ 0 }-> 1 + s5 :|: s5 >= 0, s5 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.71 #eq(z, z') -{ 0 }-> s10 :|: s10 >= 0, s10 <= 2, z - 1 >= 0, z' - 1 >= 0 1111.86/291.71 #eq(z, z') -{ 0 }-> s13 :|: s11 >= 0, s11 <= 2, s12 >= 0, s12 <= 2, s13 >= 0, s13 <= 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 1111.86/291.71 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 1111.86/291.71 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.86/291.71 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 1111.86/291.71 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.86/291.71 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 1111.86/291.71 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 1111.86/291.71 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 1111.86/291.71 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.71 #equal(z, z') -{ 1 }-> s9 :|: s9 >= 0, s9 <= 2, z >= 0, z' >= 0 1111.86/291.71 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 1111.86/291.71 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.86/291.71 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 1111.86/291.71 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.71 #mult(z, z') -{ 0 }-> 1 + s25 :|: s25 >= 0, s25 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 1111.86/291.71 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.86/291.71 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.71 #natdiv(z, z') -{ 0 }-> 1 + s6 :|: s6 >= 0, s6 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 1111.86/291.71 #natdiv(z, z') -{ 0 }-> 1 + s7 :|: s7 >= 0, s7 <= s + 1, s >= 0, s <= z - 2, z' - 2 >= 0, z - 2 >= 0 1111.86/291.71 #natdiv(z, z') -{ 0 }-> 1 + s8 :|: s8 >= 0, s8 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.71 #natmult(z, z') -{ 0 }-> s14 :|: s14 >= 0, s14 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 1111.86/291.71 #natmult(z, z') -{ 0 }-> s15 :|: s15 >= 0, s15 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 1111.86/291.71 #natmult(z, z') -{ 0 }-> s28 :|: s26 >= 0, s26 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s27 >= 0, s27 <= 2 * (1 + z') + s26, s28 >= 0, s28 <= 2 * (1 + z') + s27, z - 2 >= 0, z' >= 0 1111.86/291.71 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 1111.86/291.71 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.71 #natsub(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= z - 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.71 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.86/291.71 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.71 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.86/291.71 #pred(z) -{ 0 }-> 0 :|: z >= 0 1111.86/291.71 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.86/291.71 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.86/291.71 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.86/291.71 #sub(z, z') -{ 0 }-> s16 :|: s16 >= 0, s16 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 1111.86/291.71 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.86/291.71 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.71 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.86/291.71 #succ(z) -{ 0 }-> 0 :|: z >= 0 1111.86/291.71 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.86/291.71 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.86/291.71 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.86/291.71 div(z, z') -{ 1 }-> s23 :|: s23 >= 0, s23 <= z + 1, z >= 0, z' >= 0 1111.86/291.71 eratos(z) -{ 1 }-> eratos#1(z) :|: z >= 0 1111.86/291.71 eratos#1(z) -{ 1 }-> 2 :|: z = 2 1111.86/291.71 eratos#1(z) -{ 2 }-> 1 + @x + eratos(filter#1(@xs, @x)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.86/291.71 filter(z, z') -{ 1 }-> filter#1(z', z) :|: z >= 0, z' >= 0 1111.86/291.71 filter#1(z, z') -{ 2 }-> filter#2(filter#1(@xs, z'), z', @x) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.86/291.71 filter#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 1111.86/291.71 filter#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.71 filter#2(z, z', z'') -{ 7 }-> s37 :|: s34 >= 0, s34 <= 4 * (s30 * z'') + 1, s35 >= 0, s35 <= 2 * z'' + s34, s36 >= 0, s36 <= 2, s37 >= 0, s37 <= z'' + z + 1, s30 >= 0, s30 <= z'' + 1, z' >= 0, z'' >= 0, z >= 0 1111.86/291.71 filter#3(z, z', z'') -{ 1 }-> z'' :|: z = 2, z' >= 0, z'' >= 0 1111.86/291.71 filter#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 1111.86/291.71 filter#3(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z' >= 0, z'' >= 0, z = 1 1111.86/291.71 minus(z, z') -{ 1 }-> s29 :|: s29 >= 0, s29 <= 2 * z + z', z >= 0, z' >= 0 1111.86/291.71 mod(z, z') -{ 4 }-> s33 :|: s32 >= 0, s32 <= 4 * (s24 * z) + 1, s33 >= 0, s33 <= 2 * z + s32, s24 >= 0, s24 <= z + 1, z >= 0, z' >= 0 1111.86/291.71 times(z, z') -{ 1 }-> s31 :|: s31 >= 0, s31 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 1111.86/291.71 1111.86/291.71 Function symbols to be analyzed: {mod}, {filter#1}, {filter}, {eratos,eratos#1} 1111.86/291.71 Previous analysis results are: 1111.86/291.71 #natsub: runtime: O(1) [0], size: O(n^1) [z] 1111.86/291.71 #and: runtime: O(1) [0], size: O(1) [2] 1111.86/291.71 filter#3: runtime: O(1) [1], size: O(n^1) [1 + z' + z''] 1111.86/291.71 #pred: runtime: O(1) [0], size: O(n^1) [2 + z] 1111.86/291.71 #succ: runtime: O(1) [0], size: O(n^1) [2 + z] 1111.86/291.71 #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] 1111.86/291.71 #eq: runtime: O(1) [0], size: O(1) [2] 1111.86/291.71 #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] 1111.86/291.71 #div: runtime: O(1) [0], size: O(n^1) [1 + z] 1111.86/291.71 #equal: runtime: O(1) [1], size: O(1) [2] 1111.86/291.71 #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] 1111.86/291.71 #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] 1111.86/291.71 div: runtime: O(1) [1], size: O(n^1) [1 + z] 1111.86/291.71 #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] 1111.86/291.71 minus: runtime: O(1) [1], size: O(n^1) [2*z + z'] 1111.86/291.71 times: runtime: O(1) [1], size: O(n^2) [1 + 4*z*z'] 1111.86/291.71 filter#2: runtime: O(1) [7], size: O(n^1) [1 + z + z''] 1111.86/291.71 1111.86/291.71 ---------------------------------------- 1111.86/291.71 1111.86/291.71 (123) ResultPropagationProof (UPPER BOUND(ID)) 1111.86/291.71 Applied inner abstraction using the recently inferred runtime/size bounds where possible. 1111.86/291.71 ---------------------------------------- 1111.86/291.71 1111.86/291.71 (124) 1111.86/291.71 Obligation: 1111.86/291.71 Complexity RNTS consisting of the following rules: 1111.86/291.71 1111.86/291.71 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 1111.86/291.71 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 1111.86/291.71 #add(z, z') -{ 0 }-> s19 :|: s17 >= 0, s17 <= 2 * (1 + (1 + (z - 4))) + z', s18 >= 0, s18 <= s17 + 2, s19 >= 0, s19 <= s18 + 2, z - 4 >= 0, z' >= 0 1111.86/291.71 #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 1111.86/291.71 #add(z, z') -{ 0 }-> s22 :|: s20 >= 0, s20 <= 2 * (1 + (1 + (z - 4))) + z', s21 >= 0, s21 <= s20 + 2, s22 >= 0, s22 <= s21 + 2, z' >= 0, z - 4 >= 0 1111.86/291.71 #add(z, z') -{ 0 }-> s3 :|: s3 >= 0, s3 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) 1111.86/291.71 #add(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 1111.86/291.71 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 1111.86/291.71 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.71 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) 1111.86/291.71 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 1111.86/291.71 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 1111.86/291.71 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' 1111.86/291.71 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 1111.86/291.71 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) 1111.86/291.71 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 1111.86/291.71 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 1111.86/291.71 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 1111.86/291.71 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) 1111.86/291.71 #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')) 1111.86/291.71 #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')) 1111.86/291.71 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 1111.86/291.71 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 1111.86/291.71 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 1111.86/291.71 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 1111.86/291.71 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 1111.86/291.71 #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) 1111.86/291.71 #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') 1111.86/291.71 #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') 1111.86/291.71 #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 1111.86/291.71 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.86/291.71 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 1111.86/291.71 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 1111.86/291.71 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 1111.86/291.71 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.71 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.86/291.71 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.86/291.71 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.86/291.71 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.71 #div(z, z') -{ 0 }-> 1 + s5 :|: s5 >= 0, s5 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.71 #eq(z, z') -{ 0 }-> s10 :|: s10 >= 0, s10 <= 2, z - 1 >= 0, z' - 1 >= 0 1111.86/291.71 #eq(z, z') -{ 0 }-> s13 :|: s11 >= 0, s11 <= 2, s12 >= 0, s12 <= 2, s13 >= 0, s13 <= 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 1111.86/291.71 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 1111.86/291.71 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.86/291.71 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 1111.86/291.71 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.86/291.71 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 1111.86/291.71 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 1111.86/291.71 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 1111.86/291.71 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.71 #equal(z, z') -{ 1 }-> s9 :|: s9 >= 0, s9 <= 2, z >= 0, z' >= 0 1111.86/291.71 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 1111.86/291.71 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.86/291.71 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 1111.86/291.71 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.71 #mult(z, z') -{ 0 }-> 1 + s25 :|: s25 >= 0, s25 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 1111.86/291.71 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.86/291.71 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.71 #natdiv(z, z') -{ 0 }-> 1 + s6 :|: s6 >= 0, s6 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 1111.86/291.71 #natdiv(z, z') -{ 0 }-> 1 + s7 :|: s7 >= 0, s7 <= s + 1, s >= 0, s <= z - 2, z' - 2 >= 0, z - 2 >= 0 1111.86/291.71 #natdiv(z, z') -{ 0 }-> 1 + s8 :|: s8 >= 0, s8 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.71 #natmult(z, z') -{ 0 }-> s14 :|: s14 >= 0, s14 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 1111.86/291.71 #natmult(z, z') -{ 0 }-> s15 :|: s15 >= 0, s15 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 1111.86/291.71 #natmult(z, z') -{ 0 }-> s28 :|: s26 >= 0, s26 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s27 >= 0, s27 <= 2 * (1 + z') + s26, s28 >= 0, s28 <= 2 * (1 + z') + s27, z - 2 >= 0, z' >= 0 1111.86/291.71 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 1111.86/291.71 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.71 #natsub(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= z - 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.71 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.86/291.71 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.71 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.86/291.71 #pred(z) -{ 0 }-> 0 :|: z >= 0 1111.86/291.71 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.86/291.71 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.86/291.71 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.86/291.71 #sub(z, z') -{ 0 }-> s16 :|: s16 >= 0, s16 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 1111.86/291.71 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.86/291.71 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.71 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.86/291.71 #succ(z) -{ 0 }-> 0 :|: z >= 0 1111.86/291.71 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.86/291.71 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.86/291.71 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.86/291.71 div(z, z') -{ 1 }-> s23 :|: s23 >= 0, s23 <= z + 1, z >= 0, z' >= 0 1111.86/291.71 eratos(z) -{ 1 }-> eratos#1(z) :|: z >= 0 1111.86/291.71 eratos#1(z) -{ 1 }-> 2 :|: z = 2 1111.86/291.71 eratos#1(z) -{ 2 }-> 1 + @x + eratos(filter#1(@xs, @x)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.86/291.71 filter(z, z') -{ 1 }-> filter#1(z', z) :|: z >= 0, z' >= 0 1111.86/291.71 filter#1(z, z') -{ 2 }-> filter#2(filter#1(@xs, z'), z', @x) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.86/291.71 filter#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 1111.86/291.71 filter#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.71 filter#2(z, z', z'') -{ 7 }-> s37 :|: s34 >= 0, s34 <= 4 * (s30 * z'') + 1, s35 >= 0, s35 <= 2 * z'' + s34, s36 >= 0, s36 <= 2, s37 >= 0, s37 <= z'' + z + 1, s30 >= 0, s30 <= z'' + 1, z' >= 0, z'' >= 0, z >= 0 1111.86/291.71 filter#3(z, z', z'') -{ 1 }-> z'' :|: z = 2, z' >= 0, z'' >= 0 1111.86/291.71 filter#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 1111.86/291.71 filter#3(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z' >= 0, z'' >= 0, z = 1 1111.86/291.71 minus(z, z') -{ 1 }-> s29 :|: s29 >= 0, s29 <= 2 * z + z', z >= 0, z' >= 0 1111.86/291.71 mod(z, z') -{ 4 }-> s33 :|: s32 >= 0, s32 <= 4 * (s24 * z) + 1, s33 >= 0, s33 <= 2 * z + s32, s24 >= 0, s24 <= z + 1, z >= 0, z' >= 0 1111.86/291.71 times(z, z') -{ 1 }-> s31 :|: s31 >= 0, s31 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 1111.86/291.71 1111.86/291.71 Function symbols to be analyzed: {mod}, {filter#1}, {filter}, {eratos,eratos#1} 1111.86/291.71 Previous analysis results are: 1111.86/291.71 #natsub: runtime: O(1) [0], size: O(n^1) [z] 1111.86/291.71 #and: runtime: O(1) [0], size: O(1) [2] 1111.86/291.71 filter#3: runtime: O(1) [1], size: O(n^1) [1 + z' + z''] 1111.86/291.71 #pred: runtime: O(1) [0], size: O(n^1) [2 + z] 1111.86/291.71 #succ: runtime: O(1) [0], size: O(n^1) [2 + z] 1111.86/291.71 #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] 1111.86/291.71 #eq: runtime: O(1) [0], size: O(1) [2] 1111.86/291.71 #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] 1111.86/291.71 #div: runtime: O(1) [0], size: O(n^1) [1 + z] 1111.86/291.71 #equal: runtime: O(1) [1], size: O(1) [2] 1111.86/291.71 #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] 1111.86/291.71 #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] 1111.86/291.71 div: runtime: O(1) [1], size: O(n^1) [1 + z] 1111.86/291.71 #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] 1111.86/291.71 minus: runtime: O(1) [1], size: O(n^1) [2*z + z'] 1111.86/291.71 times: runtime: O(1) [1], size: O(n^2) [1 + 4*z*z'] 1111.86/291.71 filter#2: runtime: O(1) [7], size: O(n^1) [1 + z + z''] 1111.86/291.71 1111.86/291.71 ---------------------------------------- 1111.86/291.71 1111.86/291.71 (125) IntTrsBoundProof (UPPER BOUND(ID)) 1111.86/291.71 1111.86/291.71 Computed SIZE bound using CoFloCo for: mod 1111.86/291.71 after applying outer abstraction to obtain an ITS, 1111.86/291.71 resulting in: INF with polynomial bound: ? 1111.86/291.71 1111.86/291.71 ---------------------------------------- 1111.86/291.71 1111.86/291.71 (126) 1111.86/291.71 Obligation: 1111.86/291.71 Complexity RNTS consisting of the following rules: 1111.86/291.71 1111.86/291.71 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 1111.86/291.71 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 1111.86/291.71 #add(z, z') -{ 0 }-> s19 :|: s17 >= 0, s17 <= 2 * (1 + (1 + (z - 4))) + z', s18 >= 0, s18 <= s17 + 2, s19 >= 0, s19 <= s18 + 2, z - 4 >= 0, z' >= 0 1111.86/291.71 #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 1111.86/291.71 #add(z, z') -{ 0 }-> s22 :|: s20 >= 0, s20 <= 2 * (1 + (1 + (z - 4))) + z', s21 >= 0, s21 <= s20 + 2, s22 >= 0, s22 <= s21 + 2, z' >= 0, z - 4 >= 0 1111.86/291.71 #add(z, z') -{ 0 }-> s3 :|: s3 >= 0, s3 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) 1111.86/291.71 #add(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 1111.86/291.71 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 1111.86/291.71 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.71 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) 1111.86/291.71 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 1111.86/291.71 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 1111.86/291.71 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' 1111.86/291.71 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 1111.86/291.71 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) 1111.86/291.71 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 1111.86/291.71 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 1111.86/291.71 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 1111.86/291.71 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) 1111.86/291.71 #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')) 1111.86/291.71 #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')) 1111.86/291.71 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 1111.86/291.71 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 1111.86/291.71 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 1111.86/291.71 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 1111.86/291.71 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 1111.86/291.71 #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) 1111.86/291.71 #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') 1111.86/291.71 #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') 1111.86/291.71 #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 1111.86/291.71 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.86/291.71 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 1111.86/291.71 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 1111.86/291.71 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 1111.86/291.71 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.71 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.86/291.71 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.86/291.71 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.86/291.71 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.71 #div(z, z') -{ 0 }-> 1 + s5 :|: s5 >= 0, s5 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.71 #eq(z, z') -{ 0 }-> s10 :|: s10 >= 0, s10 <= 2, z - 1 >= 0, z' - 1 >= 0 1111.86/291.71 #eq(z, z') -{ 0 }-> s13 :|: s11 >= 0, s11 <= 2, s12 >= 0, s12 <= 2, s13 >= 0, s13 <= 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 1111.86/291.71 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 1111.86/291.71 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.86/291.71 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 1111.86/291.71 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.86/291.71 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 1111.86/291.71 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 1111.86/291.71 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 1111.86/291.71 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.71 #equal(z, z') -{ 1 }-> s9 :|: s9 >= 0, s9 <= 2, z >= 0, z' >= 0 1111.86/291.71 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 1111.86/291.71 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.86/291.71 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 1111.86/291.71 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.71 #mult(z, z') -{ 0 }-> 1 + s25 :|: s25 >= 0, s25 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 1111.86/291.71 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.86/291.71 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.71 #natdiv(z, z') -{ 0 }-> 1 + s6 :|: s6 >= 0, s6 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 1111.86/291.71 #natdiv(z, z') -{ 0 }-> 1 + s7 :|: s7 >= 0, s7 <= s + 1, s >= 0, s <= z - 2, z' - 2 >= 0, z - 2 >= 0 1111.86/291.71 #natdiv(z, z') -{ 0 }-> 1 + s8 :|: s8 >= 0, s8 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.71 #natmult(z, z') -{ 0 }-> s14 :|: s14 >= 0, s14 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 1111.86/291.71 #natmult(z, z') -{ 0 }-> s15 :|: s15 >= 0, s15 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 1111.86/291.71 #natmult(z, z') -{ 0 }-> s28 :|: s26 >= 0, s26 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s27 >= 0, s27 <= 2 * (1 + z') + s26, s28 >= 0, s28 <= 2 * (1 + z') + s27, z - 2 >= 0, z' >= 0 1111.86/291.71 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 1111.86/291.71 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.71 #natsub(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= z - 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.71 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.86/291.71 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.71 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.86/291.71 #pred(z) -{ 0 }-> 0 :|: z >= 0 1111.86/291.71 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.86/291.71 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.86/291.71 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.86/291.71 #sub(z, z') -{ 0 }-> s16 :|: s16 >= 0, s16 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 1111.86/291.71 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.86/291.71 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.71 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.86/291.71 #succ(z) -{ 0 }-> 0 :|: z >= 0 1111.86/291.71 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.86/291.71 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.86/291.71 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.86/291.71 div(z, z') -{ 1 }-> s23 :|: s23 >= 0, s23 <= z + 1, z >= 0, z' >= 0 1111.86/291.71 eratos(z) -{ 1 }-> eratos#1(z) :|: z >= 0 1111.86/291.71 eratos#1(z) -{ 1 }-> 2 :|: z = 2 1111.86/291.71 eratos#1(z) -{ 2 }-> 1 + @x + eratos(filter#1(@xs, @x)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.86/291.71 filter(z, z') -{ 1 }-> filter#1(z', z) :|: z >= 0, z' >= 0 1111.86/291.71 filter#1(z, z') -{ 2 }-> filter#2(filter#1(@xs, z'), z', @x) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.86/291.71 filter#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 1111.86/291.71 filter#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.71 filter#2(z, z', z'') -{ 7 }-> s37 :|: s34 >= 0, s34 <= 4 * (s30 * z'') + 1, s35 >= 0, s35 <= 2 * z'' + s34, s36 >= 0, s36 <= 2, s37 >= 0, s37 <= z'' + z + 1, s30 >= 0, s30 <= z'' + 1, z' >= 0, z'' >= 0, z >= 0 1111.86/291.71 filter#3(z, z', z'') -{ 1 }-> z'' :|: z = 2, z' >= 0, z'' >= 0 1111.86/291.71 filter#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 1111.86/291.71 filter#3(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z' >= 0, z'' >= 0, z = 1 1111.86/291.71 minus(z, z') -{ 1 }-> s29 :|: s29 >= 0, s29 <= 2 * z + z', z >= 0, z' >= 0 1111.86/291.71 mod(z, z') -{ 4 }-> s33 :|: s32 >= 0, s32 <= 4 * (s24 * z) + 1, s33 >= 0, s33 <= 2 * z + s32, s24 >= 0, s24 <= z + 1, z >= 0, z' >= 0 1111.86/291.71 times(z, z') -{ 1 }-> s31 :|: s31 >= 0, s31 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 1111.86/291.71 1111.86/291.71 Function symbols to be analyzed: {mod}, {filter#1}, {filter}, {eratos,eratos#1} 1111.86/291.71 Previous analysis results are: 1111.86/291.71 #natsub: runtime: O(1) [0], size: O(n^1) [z] 1111.86/291.71 #and: runtime: O(1) [0], size: O(1) [2] 1111.86/291.71 filter#3: runtime: O(1) [1], size: O(n^1) [1 + z' + z''] 1111.86/291.71 #pred: runtime: O(1) [0], size: O(n^1) [2 + z] 1111.86/291.71 #succ: runtime: O(1) [0], size: O(n^1) [2 + z] 1111.86/291.71 #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] 1111.86/291.71 #eq: runtime: O(1) [0], size: O(1) [2] 1111.86/291.71 #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] 1111.86/291.71 #div: runtime: O(1) [0], size: O(n^1) [1 + z] 1111.86/291.71 #equal: runtime: O(1) [1], size: O(1) [2] 1111.86/291.71 #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] 1111.86/291.71 #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] 1111.86/291.71 div: runtime: O(1) [1], size: O(n^1) [1 + z] 1111.86/291.71 #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] 1111.86/291.71 minus: runtime: O(1) [1], size: O(n^1) [2*z + z'] 1111.86/291.71 times: runtime: O(1) [1], size: O(n^2) [1 + 4*z*z'] 1111.86/291.71 filter#2: runtime: O(1) [7], size: O(n^1) [1 + z + z''] 1111.86/291.71 mod: runtime: ?, size: INF 1111.86/291.71 1111.86/291.71 ---------------------------------------- 1111.86/291.71 1111.86/291.71 (127) IntTrsBoundProof (UPPER BOUND(ID)) 1111.86/291.71 1111.86/291.71 Computed RUNTIME bound using CoFloCo for: mod 1111.86/291.71 after applying outer abstraction to obtain an ITS, 1111.86/291.71 resulting in: O(1) with polynomial bound: 4 1111.86/291.71 1111.86/291.71 ---------------------------------------- 1111.86/291.71 1111.86/291.71 (128) 1111.86/291.71 Obligation: 1111.86/291.71 Complexity RNTS consisting of the following rules: 1111.86/291.71 1111.86/291.71 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 1111.86/291.71 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 1111.86/291.71 #add(z, z') -{ 0 }-> s19 :|: s17 >= 0, s17 <= 2 * (1 + (1 + (z - 4))) + z', s18 >= 0, s18 <= s17 + 2, s19 >= 0, s19 <= s18 + 2, z - 4 >= 0, z' >= 0 1111.86/291.71 #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 1111.86/291.71 #add(z, z') -{ 0 }-> s22 :|: s20 >= 0, s20 <= 2 * (1 + (1 + (z - 4))) + z', s21 >= 0, s21 <= s20 + 2, s22 >= 0, s22 <= s21 + 2, z' >= 0, z - 4 >= 0 1111.86/291.71 #add(z, z') -{ 0 }-> s3 :|: s3 >= 0, s3 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) 1111.86/291.71 #add(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 1111.86/291.71 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 1111.86/291.71 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.71 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) 1111.86/291.71 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 1111.86/291.71 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 1111.86/291.71 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' 1111.86/291.71 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 1111.86/291.71 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) 1111.86/291.71 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 1111.86/291.71 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 1111.86/291.71 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 1111.86/291.71 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) 1111.86/291.71 #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')) 1111.86/291.71 #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')) 1111.86/291.71 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 1111.86/291.71 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 1111.86/291.71 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 1111.86/291.71 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 1111.86/291.71 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 1111.86/291.71 #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) 1111.86/291.71 #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') 1111.86/291.71 #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') 1111.86/291.71 #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 1111.86/291.71 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.86/291.71 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 1111.86/291.71 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 1111.86/291.71 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 1111.86/291.71 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.71 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.86/291.71 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.86/291.71 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.86/291.71 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.71 #div(z, z') -{ 0 }-> 1 + s5 :|: s5 >= 0, s5 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.71 #eq(z, z') -{ 0 }-> s10 :|: s10 >= 0, s10 <= 2, z - 1 >= 0, z' - 1 >= 0 1111.86/291.71 #eq(z, z') -{ 0 }-> s13 :|: s11 >= 0, s11 <= 2, s12 >= 0, s12 <= 2, s13 >= 0, s13 <= 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 1111.86/291.71 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 1111.86/291.71 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.86/291.71 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 1111.86/291.71 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.86/291.71 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 1111.86/291.71 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 1111.86/291.71 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 1111.86/291.71 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.71 #equal(z, z') -{ 1 }-> s9 :|: s9 >= 0, s9 <= 2, z >= 0, z' >= 0 1111.86/291.71 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 1111.86/291.71 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.86/291.71 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 1111.86/291.71 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.71 #mult(z, z') -{ 0 }-> 1 + s25 :|: s25 >= 0, s25 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 1111.86/291.71 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.86/291.71 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.71 #natdiv(z, z') -{ 0 }-> 1 + s6 :|: s6 >= 0, s6 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 1111.86/291.71 #natdiv(z, z') -{ 0 }-> 1 + s7 :|: s7 >= 0, s7 <= s + 1, s >= 0, s <= z - 2, z' - 2 >= 0, z - 2 >= 0 1111.86/291.71 #natdiv(z, z') -{ 0 }-> 1 + s8 :|: s8 >= 0, s8 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.71 #natmult(z, z') -{ 0 }-> s14 :|: s14 >= 0, s14 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 1111.86/291.71 #natmult(z, z') -{ 0 }-> s15 :|: s15 >= 0, s15 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 1111.86/291.71 #natmult(z, z') -{ 0 }-> s28 :|: s26 >= 0, s26 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s27 >= 0, s27 <= 2 * (1 + z') + s26, s28 >= 0, s28 <= 2 * (1 + z') + s27, z - 2 >= 0, z' >= 0 1111.86/291.71 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 1111.86/291.71 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.71 #natsub(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= z - 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.71 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.86/291.71 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.71 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.86/291.71 #pred(z) -{ 0 }-> 0 :|: z >= 0 1111.86/291.71 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.86/291.71 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.86/291.71 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.86/291.71 #sub(z, z') -{ 0 }-> s16 :|: s16 >= 0, s16 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 1111.86/291.71 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.86/291.71 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.71 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.86/291.71 #succ(z) -{ 0 }-> 0 :|: z >= 0 1111.86/291.71 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.86/291.71 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.86/291.71 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.86/291.71 div(z, z') -{ 1 }-> s23 :|: s23 >= 0, s23 <= z + 1, z >= 0, z' >= 0 1111.86/291.71 eratos(z) -{ 1 }-> eratos#1(z) :|: z >= 0 1111.86/291.71 eratos#1(z) -{ 1 }-> 2 :|: z = 2 1111.86/291.71 eratos#1(z) -{ 2 }-> 1 + @x + eratos(filter#1(@xs, @x)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.86/291.71 filter(z, z') -{ 1 }-> filter#1(z', z) :|: z >= 0, z' >= 0 1111.86/291.71 filter#1(z, z') -{ 2 }-> filter#2(filter#1(@xs, z'), z', @x) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.86/291.71 filter#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 1111.86/291.71 filter#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.71 filter#2(z, z', z'') -{ 7 }-> s37 :|: s34 >= 0, s34 <= 4 * (s30 * z'') + 1, s35 >= 0, s35 <= 2 * z'' + s34, s36 >= 0, s36 <= 2, s37 >= 0, s37 <= z'' + z + 1, s30 >= 0, s30 <= z'' + 1, z' >= 0, z'' >= 0, z >= 0 1111.86/291.71 filter#3(z, z', z'') -{ 1 }-> z'' :|: z = 2, z' >= 0, z'' >= 0 1111.86/291.71 filter#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 1111.86/291.71 filter#3(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z' >= 0, z'' >= 0, z = 1 1111.86/291.71 minus(z, z') -{ 1 }-> s29 :|: s29 >= 0, s29 <= 2 * z + z', z >= 0, z' >= 0 1111.86/291.71 mod(z, z') -{ 4 }-> s33 :|: s32 >= 0, s32 <= 4 * (s24 * z) + 1, s33 >= 0, s33 <= 2 * z + s32, s24 >= 0, s24 <= z + 1, z >= 0, z' >= 0 1111.86/291.71 times(z, z') -{ 1 }-> s31 :|: s31 >= 0, s31 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 1111.86/291.71 1111.86/291.71 Function symbols to be analyzed: {filter#1}, {filter}, {eratos,eratos#1} 1111.86/291.71 Previous analysis results are: 1111.86/291.71 #natsub: runtime: O(1) [0], size: O(n^1) [z] 1111.86/291.71 #and: runtime: O(1) [0], size: O(1) [2] 1111.86/291.71 filter#3: runtime: O(1) [1], size: O(n^1) [1 + z' + z''] 1111.86/291.71 #pred: runtime: O(1) [0], size: O(n^1) [2 + z] 1111.86/291.71 #succ: runtime: O(1) [0], size: O(n^1) [2 + z] 1111.86/291.71 #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] 1111.86/291.71 #eq: runtime: O(1) [0], size: O(1) [2] 1111.86/291.71 #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] 1111.86/291.71 #div: runtime: O(1) [0], size: O(n^1) [1 + z] 1111.86/291.71 #equal: runtime: O(1) [1], size: O(1) [2] 1111.86/291.71 #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] 1111.86/291.71 #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] 1111.86/291.71 div: runtime: O(1) [1], size: O(n^1) [1 + z] 1111.86/291.71 #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] 1111.86/291.71 minus: runtime: O(1) [1], size: O(n^1) [2*z + z'] 1111.86/291.71 times: runtime: O(1) [1], size: O(n^2) [1 + 4*z*z'] 1111.86/291.71 filter#2: runtime: O(1) [7], size: O(n^1) [1 + z + z''] 1111.86/291.71 mod: runtime: O(1) [4], size: INF 1111.86/291.71 1111.86/291.71 ---------------------------------------- 1111.86/291.71 1111.86/291.71 (129) ResultPropagationProof (UPPER BOUND(ID)) 1111.86/291.71 Applied inner abstraction using the recently inferred runtime/size bounds where possible. 1111.86/291.71 ---------------------------------------- 1111.86/291.71 1111.86/291.71 (130) 1111.86/291.71 Obligation: 1111.86/291.71 Complexity RNTS consisting of the following rules: 1111.86/291.71 1111.86/291.71 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 1111.86/291.71 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 1111.86/291.71 #add(z, z') -{ 0 }-> s19 :|: s17 >= 0, s17 <= 2 * (1 + (1 + (z - 4))) + z', s18 >= 0, s18 <= s17 + 2, s19 >= 0, s19 <= s18 + 2, z - 4 >= 0, z' >= 0 1111.86/291.71 #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 1111.86/291.71 #add(z, z') -{ 0 }-> s22 :|: s20 >= 0, s20 <= 2 * (1 + (1 + (z - 4))) + z', s21 >= 0, s21 <= s20 + 2, s22 >= 0, s22 <= s21 + 2, z' >= 0, z - 4 >= 0 1111.86/291.71 #add(z, z') -{ 0 }-> s3 :|: s3 >= 0, s3 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) 1111.86/291.71 #add(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 1111.86/291.71 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 1111.86/291.71 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.71 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) 1111.86/291.71 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 1111.86/291.71 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 1111.86/291.71 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' 1111.86/291.71 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 1111.86/291.71 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) 1111.86/291.71 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 1111.86/291.71 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 1111.86/291.71 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 1111.86/291.71 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) 1111.86/291.71 #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')) 1111.86/291.71 #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')) 1111.86/291.71 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 1111.86/291.71 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 1111.86/291.71 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 1111.86/291.71 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 1111.86/291.71 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 1111.86/291.71 #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) 1111.86/291.71 #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') 1111.86/291.71 #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') 1111.86/291.71 #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 1111.86/291.71 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.86/291.71 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 1111.86/291.71 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 1111.86/291.71 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 1111.86/291.71 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.71 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.86/291.71 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.86/291.71 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.86/291.71 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.71 #div(z, z') -{ 0 }-> 1 + s5 :|: s5 >= 0, s5 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.71 #eq(z, z') -{ 0 }-> s10 :|: s10 >= 0, s10 <= 2, z - 1 >= 0, z' - 1 >= 0 1111.86/291.71 #eq(z, z') -{ 0 }-> s13 :|: s11 >= 0, s11 <= 2, s12 >= 0, s12 <= 2, s13 >= 0, s13 <= 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 1111.86/291.71 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 1111.86/291.71 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.86/291.71 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 1111.86/291.71 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.86/291.71 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 1111.86/291.71 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 1111.86/291.71 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 1111.86/291.71 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.71 #equal(z, z') -{ 1 }-> s9 :|: s9 >= 0, s9 <= 2, z >= 0, z' >= 0 1111.86/291.71 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 1111.86/291.71 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.86/291.71 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 1111.86/291.71 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.71 #mult(z, z') -{ 0 }-> 1 + s25 :|: s25 >= 0, s25 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 1111.86/291.71 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.86/291.71 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.71 #natdiv(z, z') -{ 0 }-> 1 + s6 :|: s6 >= 0, s6 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 1111.86/291.71 #natdiv(z, z') -{ 0 }-> 1 + s7 :|: s7 >= 0, s7 <= s + 1, s >= 0, s <= z - 2, z' - 2 >= 0, z - 2 >= 0 1111.86/291.71 #natdiv(z, z') -{ 0 }-> 1 + s8 :|: s8 >= 0, s8 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.71 #natmult(z, z') -{ 0 }-> s14 :|: s14 >= 0, s14 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 1111.86/291.71 #natmult(z, z') -{ 0 }-> s15 :|: s15 >= 0, s15 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 1111.86/291.71 #natmult(z, z') -{ 0 }-> s28 :|: s26 >= 0, s26 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s27 >= 0, s27 <= 2 * (1 + z') + s26, s28 >= 0, s28 <= 2 * (1 + z') + s27, z - 2 >= 0, z' >= 0 1111.86/291.71 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 1111.86/291.71 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.71 #natsub(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= z - 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.71 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.86/291.71 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.71 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.86/291.71 #pred(z) -{ 0 }-> 0 :|: z >= 0 1111.86/291.71 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.86/291.71 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.86/291.71 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.86/291.71 #sub(z, z') -{ 0 }-> s16 :|: s16 >= 0, s16 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 1111.86/291.71 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.86/291.71 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.71 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.86/291.71 #succ(z) -{ 0 }-> 0 :|: z >= 0 1111.86/291.71 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.86/291.71 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.86/291.71 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.86/291.71 div(z, z') -{ 1 }-> s23 :|: s23 >= 0, s23 <= z + 1, z >= 0, z' >= 0 1111.86/291.71 eratos(z) -{ 1 }-> eratos#1(z) :|: z >= 0 1111.86/291.71 eratos#1(z) -{ 1 }-> 2 :|: z = 2 1111.86/291.71 eratos#1(z) -{ 2 }-> 1 + @x + eratos(filter#1(@xs, @x)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.86/291.71 filter(z, z') -{ 1 }-> filter#1(z', z) :|: z >= 0, z' >= 0 1111.86/291.71 filter#1(z, z') -{ 2 }-> filter#2(filter#1(@xs, z'), z', @x) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.86/291.71 filter#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 1111.86/291.71 filter#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.71 filter#2(z, z', z'') -{ 7 }-> s37 :|: s34 >= 0, s34 <= 4 * (s30 * z'') + 1, s35 >= 0, s35 <= 2 * z'' + s34, s36 >= 0, s36 <= 2, s37 >= 0, s37 <= z'' + z + 1, s30 >= 0, s30 <= z'' + 1, z' >= 0, z'' >= 0, z >= 0 1111.86/291.71 filter#3(z, z', z'') -{ 1 }-> z'' :|: z = 2, z' >= 0, z'' >= 0 1111.86/291.71 filter#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 1111.86/291.71 filter#3(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z' >= 0, z'' >= 0, z = 1 1111.86/291.71 minus(z, z') -{ 1 }-> s29 :|: s29 >= 0, s29 <= 2 * z + z', z >= 0, z' >= 0 1111.86/291.71 mod(z, z') -{ 4 }-> s33 :|: s32 >= 0, s32 <= 4 * (s24 * z) + 1, s33 >= 0, s33 <= 2 * z + s32, s24 >= 0, s24 <= z + 1, z >= 0, z' >= 0 1111.86/291.71 times(z, z') -{ 1 }-> s31 :|: s31 >= 0, s31 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 1111.86/291.71 1111.86/291.71 Function symbols to be analyzed: {filter#1}, {filter}, {eratos,eratos#1} 1111.86/291.71 Previous analysis results are: 1111.86/291.71 #natsub: runtime: O(1) [0], size: O(n^1) [z] 1111.86/291.71 #and: runtime: O(1) [0], size: O(1) [2] 1111.86/291.71 filter#3: runtime: O(1) [1], size: O(n^1) [1 + z' + z''] 1111.86/291.71 #pred: runtime: O(1) [0], size: O(n^1) [2 + z] 1111.86/291.71 #succ: runtime: O(1) [0], size: O(n^1) [2 + z] 1111.86/291.71 #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] 1111.86/291.71 #eq: runtime: O(1) [0], size: O(1) [2] 1111.86/291.71 #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] 1111.86/291.71 #div: runtime: O(1) [0], size: O(n^1) [1 + z] 1111.86/291.71 #equal: runtime: O(1) [1], size: O(1) [2] 1111.86/291.71 #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] 1111.86/291.71 #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] 1111.86/291.71 div: runtime: O(1) [1], size: O(n^1) [1 + z] 1111.86/291.71 #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] 1111.86/291.71 minus: runtime: O(1) [1], size: O(n^1) [2*z + z'] 1111.86/291.71 times: runtime: O(1) [1], size: O(n^2) [1 + 4*z*z'] 1111.86/291.71 filter#2: runtime: O(1) [7], size: O(n^1) [1 + z + z''] 1111.86/291.71 mod: runtime: O(1) [4], size: INF 1111.86/291.71 1111.86/291.71 ---------------------------------------- 1111.86/291.71 1111.86/291.71 (131) IntTrsBoundProof (UPPER BOUND(ID)) 1111.86/291.71 1111.86/291.71 Computed SIZE bound using KoAT for: filter#1 1111.86/291.71 after applying outer abstraction to obtain an ITS, 1111.86/291.71 resulting in: O(n^1) with polynomial bound: z 1111.86/291.71 1111.86/291.71 ---------------------------------------- 1111.86/291.71 1111.86/291.71 (132) 1111.86/291.71 Obligation: 1111.86/291.71 Complexity RNTS consisting of the following rules: 1111.86/291.71 1111.86/291.71 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 1111.86/291.71 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 1111.86/291.71 #add(z, z') -{ 0 }-> s19 :|: s17 >= 0, s17 <= 2 * (1 + (1 + (z - 4))) + z', s18 >= 0, s18 <= s17 + 2, s19 >= 0, s19 <= s18 + 2, z - 4 >= 0, z' >= 0 1111.86/291.71 #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 1111.86/291.71 #add(z, z') -{ 0 }-> s22 :|: s20 >= 0, s20 <= 2 * (1 + (1 + (z - 4))) + z', s21 >= 0, s21 <= s20 + 2, s22 >= 0, s22 <= s21 + 2, z' >= 0, z - 4 >= 0 1111.86/291.71 #add(z, z') -{ 0 }-> s3 :|: s3 >= 0, s3 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) 1111.86/291.71 #add(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 1111.86/291.71 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 1111.86/291.71 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.71 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) 1111.86/291.71 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 1111.86/291.71 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 1111.86/291.71 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' 1111.86/291.71 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 1111.86/291.71 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) 1111.86/291.71 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 1111.86/291.71 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 1111.86/291.71 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 1111.86/291.71 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) 1111.86/291.71 #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')) 1111.86/291.71 #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')) 1111.86/291.71 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 1111.86/291.71 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 1111.86/291.71 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 1111.86/291.71 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 1111.86/291.71 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 1111.86/291.71 #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) 1111.86/291.71 #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') 1111.86/291.71 #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') 1111.86/291.71 #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 1111.86/291.71 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.86/291.71 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 1111.86/291.71 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 1111.86/291.71 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 1111.86/291.71 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.71 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.86/291.71 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.86/291.71 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.86/291.71 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.71 #div(z, z') -{ 0 }-> 1 + s5 :|: s5 >= 0, s5 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.71 #eq(z, z') -{ 0 }-> s10 :|: s10 >= 0, s10 <= 2, z - 1 >= 0, z' - 1 >= 0 1111.86/291.71 #eq(z, z') -{ 0 }-> s13 :|: s11 >= 0, s11 <= 2, s12 >= 0, s12 <= 2, s13 >= 0, s13 <= 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 1111.86/291.71 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 1111.86/291.71 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.86/291.71 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 1111.86/291.71 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.86/291.71 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 1111.86/291.71 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 1111.86/291.71 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 1111.86/291.71 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.71 #equal(z, z') -{ 1 }-> s9 :|: s9 >= 0, s9 <= 2, z >= 0, z' >= 0 1111.86/291.71 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 1111.86/291.71 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.86/291.71 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 1111.86/291.71 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.71 #mult(z, z') -{ 0 }-> 1 + s25 :|: s25 >= 0, s25 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 1111.86/291.71 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.86/291.71 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.71 #natdiv(z, z') -{ 0 }-> 1 + s6 :|: s6 >= 0, s6 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 1111.86/291.71 #natdiv(z, z') -{ 0 }-> 1 + s7 :|: s7 >= 0, s7 <= s + 1, s >= 0, s <= z - 2, z' - 2 >= 0, z - 2 >= 0 1111.86/291.71 #natdiv(z, z') -{ 0 }-> 1 + s8 :|: s8 >= 0, s8 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.71 #natmult(z, z') -{ 0 }-> s14 :|: s14 >= 0, s14 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 1111.86/291.71 #natmult(z, z') -{ 0 }-> s15 :|: s15 >= 0, s15 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 1111.86/291.71 #natmult(z, z') -{ 0 }-> s28 :|: s26 >= 0, s26 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s27 >= 0, s27 <= 2 * (1 + z') + s26, s28 >= 0, s28 <= 2 * (1 + z') + s27, z - 2 >= 0, z' >= 0 1111.86/291.71 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 1111.86/291.71 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.71 #natsub(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= z - 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.71 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.86/291.71 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.71 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.86/291.71 #pred(z) -{ 0 }-> 0 :|: z >= 0 1111.86/291.71 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.86/291.71 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.86/291.71 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.86/291.71 #sub(z, z') -{ 0 }-> s16 :|: s16 >= 0, s16 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 1111.86/291.71 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.86/291.71 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.71 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.86/291.71 #succ(z) -{ 0 }-> 0 :|: z >= 0 1111.86/291.71 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.86/291.71 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.86/291.71 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.86/291.71 div(z, z') -{ 1 }-> s23 :|: s23 >= 0, s23 <= z + 1, z >= 0, z' >= 0 1111.86/291.71 eratos(z) -{ 1 }-> eratos#1(z) :|: z >= 0 1111.86/291.71 eratos#1(z) -{ 1 }-> 2 :|: z = 2 1111.86/291.71 eratos#1(z) -{ 2 }-> 1 + @x + eratos(filter#1(@xs, @x)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.86/291.71 filter(z, z') -{ 1 }-> filter#1(z', z) :|: z >= 0, z' >= 0 1111.86/291.71 filter#1(z, z') -{ 2 }-> filter#2(filter#1(@xs, z'), z', @x) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.86/291.71 filter#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 1111.86/291.71 filter#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.71 filter#2(z, z', z'') -{ 7 }-> s37 :|: s34 >= 0, s34 <= 4 * (s30 * z'') + 1, s35 >= 0, s35 <= 2 * z'' + s34, s36 >= 0, s36 <= 2, s37 >= 0, s37 <= z'' + z + 1, s30 >= 0, s30 <= z'' + 1, z' >= 0, z'' >= 0, z >= 0 1111.86/291.71 filter#3(z, z', z'') -{ 1 }-> z'' :|: z = 2, z' >= 0, z'' >= 0 1111.86/291.71 filter#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 1111.86/291.71 filter#3(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z' >= 0, z'' >= 0, z = 1 1111.86/291.71 minus(z, z') -{ 1 }-> s29 :|: s29 >= 0, s29 <= 2 * z + z', z >= 0, z' >= 0 1111.86/291.71 mod(z, z') -{ 4 }-> s33 :|: s32 >= 0, s32 <= 4 * (s24 * z) + 1, s33 >= 0, s33 <= 2 * z + s32, s24 >= 0, s24 <= z + 1, z >= 0, z' >= 0 1111.86/291.71 times(z, z') -{ 1 }-> s31 :|: s31 >= 0, s31 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 1111.86/291.71 1111.86/291.71 Function symbols to be analyzed: {filter#1}, {filter}, {eratos,eratos#1} 1111.86/291.71 Previous analysis results are: 1111.86/291.71 #natsub: runtime: O(1) [0], size: O(n^1) [z] 1111.86/291.71 #and: runtime: O(1) [0], size: O(1) [2] 1111.86/291.71 filter#3: runtime: O(1) [1], size: O(n^1) [1 + z' + z''] 1111.86/291.71 #pred: runtime: O(1) [0], size: O(n^1) [2 + z] 1111.86/291.71 #succ: runtime: O(1) [0], size: O(n^1) [2 + z] 1111.86/291.71 #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] 1111.86/291.71 #eq: runtime: O(1) [0], size: O(1) [2] 1111.86/291.71 #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] 1111.86/291.71 #div: runtime: O(1) [0], size: O(n^1) [1 + z] 1111.86/291.71 #equal: runtime: O(1) [1], size: O(1) [2] 1111.86/291.71 #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] 1111.86/291.71 #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] 1111.86/291.71 div: runtime: O(1) [1], size: O(n^1) [1 + z] 1111.86/291.71 #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] 1111.86/291.71 minus: runtime: O(1) [1], size: O(n^1) [2*z + z'] 1111.86/291.71 times: runtime: O(1) [1], size: O(n^2) [1 + 4*z*z'] 1111.86/291.71 filter#2: runtime: O(1) [7], size: O(n^1) [1 + z + z''] 1111.86/291.71 mod: runtime: O(1) [4], size: INF 1111.86/291.71 filter#1: runtime: ?, size: O(n^1) [z] 1111.86/291.71 1111.86/291.71 ---------------------------------------- 1111.86/291.71 1111.86/291.71 (133) IntTrsBoundProof (UPPER BOUND(ID)) 1111.86/291.71 1111.86/291.71 Computed RUNTIME bound using KoAT for: filter#1 1111.86/291.71 after applying outer abstraction to obtain an ITS, 1111.86/291.71 resulting in: O(n^1) with polynomial bound: 1 + 9*z 1111.86/291.71 1111.86/291.71 ---------------------------------------- 1111.86/291.71 1111.86/291.71 (134) 1111.86/291.71 Obligation: 1111.86/291.71 Complexity RNTS consisting of the following rules: 1111.86/291.71 1111.86/291.71 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 1111.86/291.71 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 1111.86/291.72 #add(z, z') -{ 0 }-> s19 :|: s17 >= 0, s17 <= 2 * (1 + (1 + (z - 4))) + z', s18 >= 0, s18 <= s17 + 2, s19 >= 0, s19 <= s18 + 2, z - 4 >= 0, z' >= 0 1111.86/291.72 #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 1111.86/291.72 #add(z, z') -{ 0 }-> s22 :|: s20 >= 0, s20 <= 2 * (1 + (1 + (z - 4))) + z', s21 >= 0, s21 <= s20 + 2, s22 >= 0, s22 <= s21 + 2, z' >= 0, z - 4 >= 0 1111.86/291.72 #add(z, z') -{ 0 }-> s3 :|: s3 >= 0, s3 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) 1111.86/291.72 #add(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 1111.86/291.72 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 1111.86/291.72 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.72 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) 1111.86/291.72 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 1111.86/291.72 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 1111.86/291.72 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' 1111.86/291.72 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 1111.86/291.72 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) 1111.86/291.72 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 1111.86/291.72 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 1111.86/291.72 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 1111.86/291.72 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) 1111.86/291.72 #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')) 1111.86/291.72 #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')) 1111.86/291.72 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 1111.86/291.72 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 1111.86/291.72 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 1111.86/291.72 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 1111.86/291.72 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 1111.86/291.72 #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) 1111.86/291.72 #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') 1111.86/291.72 #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') 1111.86/291.72 #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 1111.86/291.72 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.86/291.72 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 1111.86/291.72 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 1111.86/291.72 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 1111.86/291.72 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.72 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.86/291.72 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.86/291.72 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.86/291.72 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.72 #div(z, z') -{ 0 }-> 1 + s5 :|: s5 >= 0, s5 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.72 #eq(z, z') -{ 0 }-> s10 :|: s10 >= 0, s10 <= 2, z - 1 >= 0, z' - 1 >= 0 1111.86/291.72 #eq(z, z') -{ 0 }-> s13 :|: s11 >= 0, s11 <= 2, s12 >= 0, s12 <= 2, s13 >= 0, s13 <= 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 1111.86/291.72 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 1111.86/291.72 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.86/291.72 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 1111.86/291.72 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.86/291.72 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 1111.86/291.72 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 1111.86/291.72 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 1111.86/291.72 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.72 #equal(z, z') -{ 1 }-> s9 :|: s9 >= 0, s9 <= 2, z >= 0, z' >= 0 1111.86/291.72 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 1111.86/291.72 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.86/291.72 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 1111.86/291.72 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.72 #mult(z, z') -{ 0 }-> 1 + s25 :|: s25 >= 0, s25 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 1111.86/291.72 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.86/291.72 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.72 #natdiv(z, z') -{ 0 }-> 1 + s6 :|: s6 >= 0, s6 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 1111.86/291.72 #natdiv(z, z') -{ 0 }-> 1 + s7 :|: s7 >= 0, s7 <= s + 1, s >= 0, s <= z - 2, z' - 2 >= 0, z - 2 >= 0 1111.86/291.72 #natdiv(z, z') -{ 0 }-> 1 + s8 :|: s8 >= 0, s8 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.72 #natmult(z, z') -{ 0 }-> s14 :|: s14 >= 0, s14 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 1111.86/291.72 #natmult(z, z') -{ 0 }-> s15 :|: s15 >= 0, s15 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 1111.86/291.72 #natmult(z, z') -{ 0 }-> s28 :|: s26 >= 0, s26 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s27 >= 0, s27 <= 2 * (1 + z') + s26, s28 >= 0, s28 <= 2 * (1 + z') + s27, z - 2 >= 0, z' >= 0 1111.86/291.72 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 1111.86/291.72 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.72 #natsub(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= z - 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.72 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.86/291.72 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.72 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.86/291.72 #pred(z) -{ 0 }-> 0 :|: z >= 0 1111.86/291.72 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.86/291.72 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.86/291.72 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.86/291.72 #sub(z, z') -{ 0 }-> s16 :|: s16 >= 0, s16 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 1111.86/291.72 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.86/291.72 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.72 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.86/291.72 #succ(z) -{ 0 }-> 0 :|: z >= 0 1111.86/291.72 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.86/291.72 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.86/291.72 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.86/291.72 div(z, z') -{ 1 }-> s23 :|: s23 >= 0, s23 <= z + 1, z >= 0, z' >= 0 1111.86/291.72 eratos(z) -{ 1 }-> eratos#1(z) :|: z >= 0 1111.86/291.72 eratos#1(z) -{ 1 }-> 2 :|: z = 2 1111.86/291.72 eratos#1(z) -{ 2 }-> 1 + @x + eratos(filter#1(@xs, @x)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.86/291.72 filter(z, z') -{ 1 }-> filter#1(z', z) :|: z >= 0, z' >= 0 1111.86/291.72 filter#1(z, z') -{ 2 }-> filter#2(filter#1(@xs, z'), z', @x) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.86/291.72 filter#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 1111.86/291.72 filter#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.72 filter#2(z, z', z'') -{ 7 }-> s37 :|: s34 >= 0, s34 <= 4 * (s30 * z'') + 1, s35 >= 0, s35 <= 2 * z'' + s34, s36 >= 0, s36 <= 2, s37 >= 0, s37 <= z'' + z + 1, s30 >= 0, s30 <= z'' + 1, z' >= 0, z'' >= 0, z >= 0 1111.86/291.72 filter#3(z, z', z'') -{ 1 }-> z'' :|: z = 2, z' >= 0, z'' >= 0 1111.86/291.72 filter#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 1111.86/291.72 filter#3(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z' >= 0, z'' >= 0, z = 1 1111.86/291.72 minus(z, z') -{ 1 }-> s29 :|: s29 >= 0, s29 <= 2 * z + z', z >= 0, z' >= 0 1111.86/291.72 mod(z, z') -{ 4 }-> s33 :|: s32 >= 0, s32 <= 4 * (s24 * z) + 1, s33 >= 0, s33 <= 2 * z + s32, s24 >= 0, s24 <= z + 1, z >= 0, z' >= 0 1111.86/291.72 times(z, z') -{ 1 }-> s31 :|: s31 >= 0, s31 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 1111.86/291.72 1111.86/291.72 Function symbols to be analyzed: {filter}, {eratos,eratos#1} 1111.86/291.72 Previous analysis results are: 1111.86/291.72 #natsub: runtime: O(1) [0], size: O(n^1) [z] 1111.86/291.72 #and: runtime: O(1) [0], size: O(1) [2] 1111.86/291.72 filter#3: runtime: O(1) [1], size: O(n^1) [1 + z' + z''] 1111.86/291.72 #pred: runtime: O(1) [0], size: O(n^1) [2 + z] 1111.86/291.72 #succ: runtime: O(1) [0], size: O(n^1) [2 + z] 1111.86/291.72 #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] 1111.86/291.72 #eq: runtime: O(1) [0], size: O(1) [2] 1111.86/291.72 #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] 1111.86/291.72 #div: runtime: O(1) [0], size: O(n^1) [1 + z] 1111.86/291.72 #equal: runtime: O(1) [1], size: O(1) [2] 1111.86/291.72 #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] 1111.86/291.72 #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] 1111.86/291.72 div: runtime: O(1) [1], size: O(n^1) [1 + z] 1111.86/291.72 #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] 1111.86/291.72 minus: runtime: O(1) [1], size: O(n^1) [2*z + z'] 1111.86/291.72 times: runtime: O(1) [1], size: O(n^2) [1 + 4*z*z'] 1111.86/291.72 filter#2: runtime: O(1) [7], size: O(n^1) [1 + z + z''] 1111.86/291.72 mod: runtime: O(1) [4], size: INF 1111.86/291.72 filter#1: runtime: O(n^1) [1 + 9*z], size: O(n^1) [z] 1111.86/291.72 1111.86/291.72 ---------------------------------------- 1111.86/291.72 1111.86/291.72 (135) ResultPropagationProof (UPPER BOUND(ID)) 1111.86/291.72 Applied inner abstraction using the recently inferred runtime/size bounds where possible. 1111.86/291.72 ---------------------------------------- 1111.86/291.72 1111.86/291.72 (136) 1111.86/291.72 Obligation: 1111.86/291.72 Complexity RNTS consisting of the following rules: 1111.86/291.72 1111.86/291.72 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 1111.86/291.72 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 1111.86/291.72 #add(z, z') -{ 0 }-> s19 :|: s17 >= 0, s17 <= 2 * (1 + (1 + (z - 4))) + z', s18 >= 0, s18 <= s17 + 2, s19 >= 0, s19 <= s18 + 2, z - 4 >= 0, z' >= 0 1111.86/291.72 #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 1111.86/291.72 #add(z, z') -{ 0 }-> s22 :|: s20 >= 0, s20 <= 2 * (1 + (1 + (z - 4))) + z', s21 >= 0, s21 <= s20 + 2, s22 >= 0, s22 <= s21 + 2, z' >= 0, z - 4 >= 0 1111.86/291.72 #add(z, z') -{ 0 }-> s3 :|: s3 >= 0, s3 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) 1111.86/291.72 #add(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 1111.86/291.72 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 1111.86/291.72 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.72 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) 1111.86/291.72 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 1111.86/291.72 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 1111.86/291.72 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' 1111.86/291.72 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 1111.86/291.72 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) 1111.86/291.72 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 1111.86/291.72 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 1111.86/291.72 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 1111.86/291.72 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) 1111.86/291.72 #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')) 1111.86/291.72 #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')) 1111.86/291.72 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 1111.86/291.72 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 1111.86/291.72 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 1111.86/291.72 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 1111.86/291.72 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 1111.86/291.72 #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) 1111.86/291.72 #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') 1111.86/291.72 #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') 1111.86/291.72 #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 1111.86/291.72 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.86/291.72 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 1111.86/291.72 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 1111.86/291.72 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 1111.86/291.72 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.72 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.86/291.72 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.86/291.72 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.86/291.72 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.72 #div(z, z') -{ 0 }-> 1 + s5 :|: s5 >= 0, s5 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.72 #eq(z, z') -{ 0 }-> s10 :|: s10 >= 0, s10 <= 2, z - 1 >= 0, z' - 1 >= 0 1111.86/291.72 #eq(z, z') -{ 0 }-> s13 :|: s11 >= 0, s11 <= 2, s12 >= 0, s12 <= 2, s13 >= 0, s13 <= 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 1111.86/291.72 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 1111.86/291.72 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.86/291.72 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 1111.86/291.72 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.86/291.72 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 1111.86/291.72 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 1111.86/291.72 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 1111.86/291.72 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.72 #equal(z, z') -{ 1 }-> s9 :|: s9 >= 0, s9 <= 2, z >= 0, z' >= 0 1111.86/291.72 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 1111.86/291.72 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.86/291.72 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 1111.86/291.72 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.72 #mult(z, z') -{ 0 }-> 1 + s25 :|: s25 >= 0, s25 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 1111.86/291.72 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.86/291.72 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.72 #natdiv(z, z') -{ 0 }-> 1 + s6 :|: s6 >= 0, s6 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 1111.86/291.72 #natdiv(z, z') -{ 0 }-> 1 + s7 :|: s7 >= 0, s7 <= s + 1, s >= 0, s <= z - 2, z' - 2 >= 0, z - 2 >= 0 1111.86/291.72 #natdiv(z, z') -{ 0 }-> 1 + s8 :|: s8 >= 0, s8 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.72 #natmult(z, z') -{ 0 }-> s14 :|: s14 >= 0, s14 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 1111.86/291.72 #natmult(z, z') -{ 0 }-> s15 :|: s15 >= 0, s15 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 1111.86/291.72 #natmult(z, z') -{ 0 }-> s28 :|: s26 >= 0, s26 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s27 >= 0, s27 <= 2 * (1 + z') + s26, s28 >= 0, s28 <= 2 * (1 + z') + s27, z - 2 >= 0, z' >= 0 1111.86/291.72 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 1111.86/291.72 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.72 #natsub(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= z - 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.72 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.86/291.72 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.72 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.86/291.72 #pred(z) -{ 0 }-> 0 :|: z >= 0 1111.86/291.72 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.86/291.72 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.86/291.72 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.86/291.72 #sub(z, z') -{ 0 }-> s16 :|: s16 >= 0, s16 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 1111.86/291.72 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.86/291.72 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.72 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.86/291.72 #succ(z) -{ 0 }-> 0 :|: z >= 0 1111.86/291.72 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.86/291.72 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.86/291.72 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.86/291.72 div(z, z') -{ 1 }-> s23 :|: s23 >= 0, s23 <= z + 1, z >= 0, z' >= 0 1111.86/291.72 eratos(z) -{ 1 }-> eratos#1(z) :|: z >= 0 1111.86/291.72 eratos#1(z) -{ 1 }-> 2 :|: z = 2 1111.86/291.72 eratos#1(z) -{ 3 + 9*@xs }-> 1 + @x + eratos(s38) :|: s38 >= 0, s38 <= @xs, @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.86/291.72 filter(z, z') -{ 2 + 9*z' }-> s39 :|: s39 >= 0, s39 <= z', z >= 0, z' >= 0 1111.86/291.72 filter#1(z, z') -{ 10 + 9*@xs }-> s41 :|: s40 >= 0, s40 <= @xs, s41 >= 0, s41 <= s40 + @x + 1, z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.86/291.72 filter#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 1111.86/291.72 filter#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.72 filter#2(z, z', z'') -{ 7 }-> s37 :|: s34 >= 0, s34 <= 4 * (s30 * z'') + 1, s35 >= 0, s35 <= 2 * z'' + s34, s36 >= 0, s36 <= 2, s37 >= 0, s37 <= z'' + z + 1, s30 >= 0, s30 <= z'' + 1, z' >= 0, z'' >= 0, z >= 0 1111.86/291.72 filter#3(z, z', z'') -{ 1 }-> z'' :|: z = 2, z' >= 0, z'' >= 0 1111.86/291.72 filter#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 1111.86/291.72 filter#3(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z' >= 0, z'' >= 0, z = 1 1111.86/291.72 minus(z, z') -{ 1 }-> s29 :|: s29 >= 0, s29 <= 2 * z + z', z >= 0, z' >= 0 1111.86/291.72 mod(z, z') -{ 4 }-> s33 :|: s32 >= 0, s32 <= 4 * (s24 * z) + 1, s33 >= 0, s33 <= 2 * z + s32, s24 >= 0, s24 <= z + 1, z >= 0, z' >= 0 1111.86/291.72 times(z, z') -{ 1 }-> s31 :|: s31 >= 0, s31 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 1111.86/291.72 1111.86/291.72 Function symbols to be analyzed: {filter}, {eratos,eratos#1} 1111.86/291.72 Previous analysis results are: 1111.86/291.72 #natsub: runtime: O(1) [0], size: O(n^1) [z] 1111.86/291.72 #and: runtime: O(1) [0], size: O(1) [2] 1111.86/291.72 filter#3: runtime: O(1) [1], size: O(n^1) [1 + z' + z''] 1111.86/291.72 #pred: runtime: O(1) [0], size: O(n^1) [2 + z] 1111.86/291.72 #succ: runtime: O(1) [0], size: O(n^1) [2 + z] 1111.86/291.72 #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] 1111.86/291.72 #eq: runtime: O(1) [0], size: O(1) [2] 1111.86/291.72 #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] 1111.86/291.72 #div: runtime: O(1) [0], size: O(n^1) [1 + z] 1111.86/291.72 #equal: runtime: O(1) [1], size: O(1) [2] 1111.86/291.72 #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] 1111.86/291.72 #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] 1111.86/291.72 div: runtime: O(1) [1], size: O(n^1) [1 + z] 1111.86/291.72 #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] 1111.86/291.72 minus: runtime: O(1) [1], size: O(n^1) [2*z + z'] 1111.86/291.72 times: runtime: O(1) [1], size: O(n^2) [1 + 4*z*z'] 1111.86/291.72 filter#2: runtime: O(1) [7], size: O(n^1) [1 + z + z''] 1111.86/291.72 mod: runtime: O(1) [4], size: INF 1111.86/291.72 filter#1: runtime: O(n^1) [1 + 9*z], size: O(n^1) [z] 1111.86/291.72 1111.86/291.72 ---------------------------------------- 1111.86/291.72 1111.86/291.72 (137) IntTrsBoundProof (UPPER BOUND(ID)) 1111.86/291.72 1111.86/291.72 Computed SIZE bound using CoFloCo for: filter 1111.86/291.72 after applying outer abstraction to obtain an ITS, 1111.86/291.72 resulting in: O(n^1) with polynomial bound: z' 1111.86/291.72 1111.86/291.72 ---------------------------------------- 1111.86/291.72 1111.86/291.72 (138) 1111.86/291.72 Obligation: 1111.86/291.72 Complexity RNTS consisting of the following rules: 1111.86/291.72 1111.86/291.72 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 1111.86/291.72 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 1111.86/291.72 #add(z, z') -{ 0 }-> s19 :|: s17 >= 0, s17 <= 2 * (1 + (1 + (z - 4))) + z', s18 >= 0, s18 <= s17 + 2, s19 >= 0, s19 <= s18 + 2, z - 4 >= 0, z' >= 0 1111.86/291.72 #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 1111.86/291.72 #add(z, z') -{ 0 }-> s22 :|: s20 >= 0, s20 <= 2 * (1 + (1 + (z - 4))) + z', s21 >= 0, s21 <= s20 + 2, s22 >= 0, s22 <= s21 + 2, z' >= 0, z - 4 >= 0 1111.86/291.72 #add(z, z') -{ 0 }-> s3 :|: s3 >= 0, s3 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) 1111.86/291.72 #add(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 1111.86/291.72 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 1111.86/291.72 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.72 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) 1111.86/291.72 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 1111.86/291.72 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 1111.86/291.72 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' 1111.86/291.72 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 1111.86/291.72 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) 1111.86/291.72 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 1111.86/291.72 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 1111.86/291.72 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 1111.86/291.72 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) 1111.86/291.72 #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')) 1111.86/291.72 #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')) 1111.86/291.72 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 1111.86/291.72 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 1111.86/291.72 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 1111.86/291.72 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 1111.86/291.72 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 1111.86/291.72 #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) 1111.86/291.72 #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') 1111.86/291.72 #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') 1111.86/291.72 #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 1111.86/291.72 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.86/291.72 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 1111.86/291.72 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 1111.86/291.72 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 1111.86/291.72 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.72 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.86/291.72 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.86/291.72 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.86/291.72 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.72 #div(z, z') -{ 0 }-> 1 + s5 :|: s5 >= 0, s5 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.72 #eq(z, z') -{ 0 }-> s10 :|: s10 >= 0, s10 <= 2, z - 1 >= 0, z' - 1 >= 0 1111.86/291.72 #eq(z, z') -{ 0 }-> s13 :|: s11 >= 0, s11 <= 2, s12 >= 0, s12 <= 2, s13 >= 0, s13 <= 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 1111.86/291.72 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 1111.86/291.72 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.86/291.72 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 1111.86/291.72 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.86/291.72 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 1111.86/291.72 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 1111.86/291.72 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 1111.86/291.72 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.72 #equal(z, z') -{ 1 }-> s9 :|: s9 >= 0, s9 <= 2, z >= 0, z' >= 0 1111.86/291.72 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 1111.86/291.72 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.86/291.72 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 1111.86/291.72 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.72 #mult(z, z') -{ 0 }-> 1 + s25 :|: s25 >= 0, s25 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 1111.86/291.72 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.86/291.72 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.72 #natdiv(z, z') -{ 0 }-> 1 + s6 :|: s6 >= 0, s6 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 1111.86/291.72 #natdiv(z, z') -{ 0 }-> 1 + s7 :|: s7 >= 0, s7 <= s + 1, s >= 0, s <= z - 2, z' - 2 >= 0, z - 2 >= 0 1111.86/291.72 #natdiv(z, z') -{ 0 }-> 1 + s8 :|: s8 >= 0, s8 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.72 #natmult(z, z') -{ 0 }-> s14 :|: s14 >= 0, s14 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 1111.86/291.72 #natmult(z, z') -{ 0 }-> s15 :|: s15 >= 0, s15 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 1111.86/291.72 #natmult(z, z') -{ 0 }-> s28 :|: s26 >= 0, s26 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s27 >= 0, s27 <= 2 * (1 + z') + s26, s28 >= 0, s28 <= 2 * (1 + z') + s27, z - 2 >= 0, z' >= 0 1111.86/291.72 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 1111.86/291.72 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.72 #natsub(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= z - 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.72 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.86/291.72 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.72 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.86/291.72 #pred(z) -{ 0 }-> 0 :|: z >= 0 1111.86/291.72 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.86/291.72 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.86/291.72 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.86/291.72 #sub(z, z') -{ 0 }-> s16 :|: s16 >= 0, s16 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 1111.86/291.72 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.86/291.72 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.72 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.86/291.72 #succ(z) -{ 0 }-> 0 :|: z >= 0 1111.86/291.72 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.86/291.72 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.86/291.72 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.86/291.72 div(z, z') -{ 1 }-> s23 :|: s23 >= 0, s23 <= z + 1, z >= 0, z' >= 0 1111.86/291.72 eratos(z) -{ 1 }-> eratos#1(z) :|: z >= 0 1111.86/291.72 eratos#1(z) -{ 1 }-> 2 :|: z = 2 1111.86/291.72 eratos#1(z) -{ 3 + 9*@xs }-> 1 + @x + eratos(s38) :|: s38 >= 0, s38 <= @xs, @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.86/291.72 filter(z, z') -{ 2 + 9*z' }-> s39 :|: s39 >= 0, s39 <= z', z >= 0, z' >= 0 1111.86/291.72 filter#1(z, z') -{ 10 + 9*@xs }-> s41 :|: s40 >= 0, s40 <= @xs, s41 >= 0, s41 <= s40 + @x + 1, z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.86/291.72 filter#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 1111.86/291.72 filter#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.72 filter#2(z, z', z'') -{ 7 }-> s37 :|: s34 >= 0, s34 <= 4 * (s30 * z'') + 1, s35 >= 0, s35 <= 2 * z'' + s34, s36 >= 0, s36 <= 2, s37 >= 0, s37 <= z'' + z + 1, s30 >= 0, s30 <= z'' + 1, z' >= 0, z'' >= 0, z >= 0 1111.86/291.72 filter#3(z, z', z'') -{ 1 }-> z'' :|: z = 2, z' >= 0, z'' >= 0 1111.86/291.72 filter#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 1111.86/291.72 filter#3(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z' >= 0, z'' >= 0, z = 1 1111.86/291.72 minus(z, z') -{ 1 }-> s29 :|: s29 >= 0, s29 <= 2 * z + z', z >= 0, z' >= 0 1111.86/291.72 mod(z, z') -{ 4 }-> s33 :|: s32 >= 0, s32 <= 4 * (s24 * z) + 1, s33 >= 0, s33 <= 2 * z + s32, s24 >= 0, s24 <= z + 1, z >= 0, z' >= 0 1111.86/291.72 times(z, z') -{ 1 }-> s31 :|: s31 >= 0, s31 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 1111.86/291.72 1111.86/291.72 Function symbols to be analyzed: {filter}, {eratos,eratos#1} 1111.86/291.72 Previous analysis results are: 1111.86/291.72 #natsub: runtime: O(1) [0], size: O(n^1) [z] 1111.86/291.72 #and: runtime: O(1) [0], size: O(1) [2] 1111.86/291.72 filter#3: runtime: O(1) [1], size: O(n^1) [1 + z' + z''] 1111.86/291.72 #pred: runtime: O(1) [0], size: O(n^1) [2 + z] 1111.86/291.72 #succ: runtime: O(1) [0], size: O(n^1) [2 + z] 1111.86/291.72 #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] 1111.86/291.72 #eq: runtime: O(1) [0], size: O(1) [2] 1111.86/291.72 #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] 1111.86/291.72 #div: runtime: O(1) [0], size: O(n^1) [1 + z] 1111.86/291.72 #equal: runtime: O(1) [1], size: O(1) [2] 1111.86/291.72 #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] 1111.86/291.72 #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] 1111.86/291.72 div: runtime: O(1) [1], size: O(n^1) [1 + z] 1111.86/291.72 #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] 1111.86/291.72 minus: runtime: O(1) [1], size: O(n^1) [2*z + z'] 1111.86/291.72 times: runtime: O(1) [1], size: O(n^2) [1 + 4*z*z'] 1111.86/291.72 filter#2: runtime: O(1) [7], size: O(n^1) [1 + z + z''] 1111.86/291.72 mod: runtime: O(1) [4], size: INF 1111.86/291.72 filter#1: runtime: O(n^1) [1 + 9*z], size: O(n^1) [z] 1111.86/291.72 filter: runtime: ?, size: O(n^1) [z'] 1111.86/291.72 1111.86/291.72 ---------------------------------------- 1111.86/291.72 1111.86/291.72 (139) IntTrsBoundProof (UPPER BOUND(ID)) 1111.86/291.72 1111.86/291.72 Computed RUNTIME bound using CoFloCo for: filter 1111.86/291.72 after applying outer abstraction to obtain an ITS, 1111.86/291.72 resulting in: O(n^1) with polynomial bound: 2 + 9*z' 1111.86/291.72 1111.86/291.72 ---------------------------------------- 1111.86/291.72 1111.86/291.72 (140) 1111.86/291.72 Obligation: 1111.86/291.72 Complexity RNTS consisting of the following rules: 1111.86/291.72 1111.86/291.72 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 1111.86/291.72 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 1111.86/291.72 #add(z, z') -{ 0 }-> s19 :|: s17 >= 0, s17 <= 2 * (1 + (1 + (z - 4))) + z', s18 >= 0, s18 <= s17 + 2, s19 >= 0, s19 <= s18 + 2, z - 4 >= 0, z' >= 0 1111.86/291.72 #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 1111.86/291.72 #add(z, z') -{ 0 }-> s22 :|: s20 >= 0, s20 <= 2 * (1 + (1 + (z - 4))) + z', s21 >= 0, s21 <= s20 + 2, s22 >= 0, s22 <= s21 + 2, z' >= 0, z - 4 >= 0 1111.86/291.72 #add(z, z') -{ 0 }-> s3 :|: s3 >= 0, s3 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) 1111.86/291.72 #add(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 1111.86/291.72 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 1111.86/291.72 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.72 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) 1111.86/291.72 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 1111.86/291.72 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 1111.86/291.72 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' 1111.86/291.72 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 1111.86/291.72 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) 1111.86/291.72 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 1111.86/291.72 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 1111.86/291.72 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 1111.86/291.72 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) 1111.86/291.72 #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')) 1111.86/291.72 #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')) 1111.86/291.72 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 1111.86/291.72 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 1111.86/291.72 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 1111.86/291.72 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 1111.86/291.72 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 1111.86/291.72 #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) 1111.86/291.72 #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') 1111.86/291.72 #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') 1111.86/291.72 #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 1111.86/291.72 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.86/291.72 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 1111.86/291.72 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 1111.86/291.72 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 1111.86/291.72 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.72 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.86/291.72 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.86/291.72 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.86/291.72 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.72 #div(z, z') -{ 0 }-> 1 + s5 :|: s5 >= 0, s5 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.72 #eq(z, z') -{ 0 }-> s10 :|: s10 >= 0, s10 <= 2, z - 1 >= 0, z' - 1 >= 0 1111.86/291.72 #eq(z, z') -{ 0 }-> s13 :|: s11 >= 0, s11 <= 2, s12 >= 0, s12 <= 2, s13 >= 0, s13 <= 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 1111.86/291.72 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 1111.86/291.72 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.86/291.72 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 1111.86/291.72 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.86/291.72 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 1111.86/291.72 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 1111.86/291.72 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 1111.86/291.72 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.72 #equal(z, z') -{ 1 }-> s9 :|: s9 >= 0, s9 <= 2, z >= 0, z' >= 0 1111.86/291.72 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 1111.86/291.72 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.86/291.72 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 1111.86/291.72 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.72 #mult(z, z') -{ 0 }-> 1 + s25 :|: s25 >= 0, s25 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 1111.86/291.72 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.86/291.72 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.72 #natdiv(z, z') -{ 0 }-> 1 + s6 :|: s6 >= 0, s6 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 1111.86/291.72 #natdiv(z, z') -{ 0 }-> 1 + s7 :|: s7 >= 0, s7 <= s + 1, s >= 0, s <= z - 2, z' - 2 >= 0, z - 2 >= 0 1111.86/291.72 #natdiv(z, z') -{ 0 }-> 1 + s8 :|: s8 >= 0, s8 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.72 #natmult(z, z') -{ 0 }-> s14 :|: s14 >= 0, s14 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 1111.86/291.72 #natmult(z, z') -{ 0 }-> s15 :|: s15 >= 0, s15 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 1111.86/291.72 #natmult(z, z') -{ 0 }-> s28 :|: s26 >= 0, s26 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s27 >= 0, s27 <= 2 * (1 + z') + s26, s28 >= 0, s28 <= 2 * (1 + z') + s27, z - 2 >= 0, z' >= 0 1111.86/291.72 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 1111.86/291.72 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.72 #natsub(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= z - 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.72 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.86/291.72 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.72 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.86/291.72 #pred(z) -{ 0 }-> 0 :|: z >= 0 1111.86/291.72 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.86/291.72 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.86/291.72 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.86/291.72 #sub(z, z') -{ 0 }-> s16 :|: s16 >= 0, s16 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 1111.86/291.72 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.86/291.72 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.72 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.86/291.72 #succ(z) -{ 0 }-> 0 :|: z >= 0 1111.86/291.72 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.86/291.72 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.86/291.72 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.86/291.72 div(z, z') -{ 1 }-> s23 :|: s23 >= 0, s23 <= z + 1, z >= 0, z' >= 0 1111.86/291.72 eratos(z) -{ 1 }-> eratos#1(z) :|: z >= 0 1111.86/291.72 eratos#1(z) -{ 1 }-> 2 :|: z = 2 1111.86/291.72 eratos#1(z) -{ 3 + 9*@xs }-> 1 + @x + eratos(s38) :|: s38 >= 0, s38 <= @xs, @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.86/291.72 filter(z, z') -{ 2 + 9*z' }-> s39 :|: s39 >= 0, s39 <= z', z >= 0, z' >= 0 1111.86/291.72 filter#1(z, z') -{ 10 + 9*@xs }-> s41 :|: s40 >= 0, s40 <= @xs, s41 >= 0, s41 <= s40 + @x + 1, z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.86/291.72 filter#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 1111.86/291.72 filter#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.72 filter#2(z, z', z'') -{ 7 }-> s37 :|: s34 >= 0, s34 <= 4 * (s30 * z'') + 1, s35 >= 0, s35 <= 2 * z'' + s34, s36 >= 0, s36 <= 2, s37 >= 0, s37 <= z'' + z + 1, s30 >= 0, s30 <= z'' + 1, z' >= 0, z'' >= 0, z >= 0 1111.86/291.72 filter#3(z, z', z'') -{ 1 }-> z'' :|: z = 2, z' >= 0, z'' >= 0 1111.86/291.72 filter#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 1111.86/291.72 filter#3(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z' >= 0, z'' >= 0, z = 1 1111.86/291.72 minus(z, z') -{ 1 }-> s29 :|: s29 >= 0, s29 <= 2 * z + z', z >= 0, z' >= 0 1111.86/291.72 mod(z, z') -{ 4 }-> s33 :|: s32 >= 0, s32 <= 4 * (s24 * z) + 1, s33 >= 0, s33 <= 2 * z + s32, s24 >= 0, s24 <= z + 1, z >= 0, z' >= 0 1111.86/291.72 times(z, z') -{ 1 }-> s31 :|: s31 >= 0, s31 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 1111.86/291.72 1111.86/291.72 Function symbols to be analyzed: {eratos,eratos#1} 1111.86/291.72 Previous analysis results are: 1111.86/291.72 #natsub: runtime: O(1) [0], size: O(n^1) [z] 1111.86/291.72 #and: runtime: O(1) [0], size: O(1) [2] 1111.86/291.72 filter#3: runtime: O(1) [1], size: O(n^1) [1 + z' + z''] 1111.86/291.72 #pred: runtime: O(1) [0], size: O(n^1) [2 + z] 1111.86/291.72 #succ: runtime: O(1) [0], size: O(n^1) [2 + z] 1111.86/291.72 #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] 1111.86/291.72 #eq: runtime: O(1) [0], size: O(1) [2] 1111.86/291.72 #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] 1111.86/291.72 #div: runtime: O(1) [0], size: O(n^1) [1 + z] 1111.86/291.72 #equal: runtime: O(1) [1], size: O(1) [2] 1111.86/291.72 #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] 1111.86/291.72 #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] 1111.86/291.72 div: runtime: O(1) [1], size: O(n^1) [1 + z] 1111.86/291.72 #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] 1111.86/291.72 minus: runtime: O(1) [1], size: O(n^1) [2*z + z'] 1111.86/291.72 times: runtime: O(1) [1], size: O(n^2) [1 + 4*z*z'] 1111.86/291.72 filter#2: runtime: O(1) [7], size: O(n^1) [1 + z + z''] 1111.86/291.72 mod: runtime: O(1) [4], size: INF 1111.86/291.72 filter#1: runtime: O(n^1) [1 + 9*z], size: O(n^1) [z] 1111.86/291.72 filter: runtime: O(n^1) [2 + 9*z'], size: O(n^1) [z'] 1111.86/291.72 1111.86/291.72 ---------------------------------------- 1111.86/291.72 1111.86/291.72 (141) ResultPropagationProof (UPPER BOUND(ID)) 1111.86/291.72 Applied inner abstraction using the recently inferred runtime/size bounds where possible. 1111.86/291.72 ---------------------------------------- 1111.86/291.72 1111.86/291.72 (142) 1111.86/291.72 Obligation: 1111.86/291.72 Complexity RNTS consisting of the following rules: 1111.86/291.72 1111.86/291.72 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 1111.86/291.72 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 1111.86/291.72 #add(z, z') -{ 0 }-> s19 :|: s17 >= 0, s17 <= 2 * (1 + (1 + (z - 4))) + z', s18 >= 0, s18 <= s17 + 2, s19 >= 0, s19 <= s18 + 2, z - 4 >= 0, z' >= 0 1111.86/291.72 #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 1111.86/291.72 #add(z, z') -{ 0 }-> s22 :|: s20 >= 0, s20 <= 2 * (1 + (1 + (z - 4))) + z', s21 >= 0, s21 <= s20 + 2, s22 >= 0, s22 <= s21 + 2, z' >= 0, z - 4 >= 0 1111.86/291.72 #add(z, z') -{ 0 }-> s3 :|: s3 >= 0, s3 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) 1111.86/291.72 #add(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 1111.86/291.72 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 1111.86/291.72 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.72 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) 1111.86/291.72 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 1111.86/291.72 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 1111.86/291.72 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' 1111.86/291.72 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 1111.86/291.72 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) 1111.86/291.72 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 1111.86/291.72 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 1111.86/291.72 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 1111.86/291.72 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) 1111.86/291.72 #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')) 1111.86/291.72 #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')) 1111.86/291.72 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 1111.86/291.72 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 1111.86/291.72 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 1111.86/291.72 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 1111.86/291.72 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 1111.86/291.72 #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) 1111.86/291.72 #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') 1111.86/291.72 #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') 1111.86/291.72 #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 1111.86/291.72 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.86/291.72 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 1111.86/291.72 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 1111.86/291.72 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 1111.86/291.72 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.72 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.86/291.72 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.86/291.72 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.86/291.72 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.72 #div(z, z') -{ 0 }-> 1 + s5 :|: s5 >= 0, s5 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.72 #eq(z, z') -{ 0 }-> s10 :|: s10 >= 0, s10 <= 2, z - 1 >= 0, z' - 1 >= 0 1111.86/291.72 #eq(z, z') -{ 0 }-> s13 :|: s11 >= 0, s11 <= 2, s12 >= 0, s12 <= 2, s13 >= 0, s13 <= 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 1111.86/291.72 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 1111.86/291.72 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.86/291.72 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 1111.86/291.72 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.86/291.72 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 1111.86/291.72 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 1111.86/291.72 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 1111.86/291.72 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.72 #equal(z, z') -{ 1 }-> s9 :|: s9 >= 0, s9 <= 2, z >= 0, z' >= 0 1111.86/291.72 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 1111.86/291.72 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.86/291.72 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 1111.86/291.72 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.72 #mult(z, z') -{ 0 }-> 1 + s25 :|: s25 >= 0, s25 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 1111.86/291.72 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.86/291.72 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.72 #natdiv(z, z') -{ 0 }-> 1 + s6 :|: s6 >= 0, s6 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 1111.86/291.72 #natdiv(z, z') -{ 0 }-> 1 + s7 :|: s7 >= 0, s7 <= s + 1, s >= 0, s <= z - 2, z' - 2 >= 0, z - 2 >= 0 1111.86/291.72 #natdiv(z, z') -{ 0 }-> 1 + s8 :|: s8 >= 0, s8 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.72 #natmult(z, z') -{ 0 }-> s14 :|: s14 >= 0, s14 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 1111.86/291.72 #natmult(z, z') -{ 0 }-> s15 :|: s15 >= 0, s15 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 1111.86/291.72 #natmult(z, z') -{ 0 }-> s28 :|: s26 >= 0, s26 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s27 >= 0, s27 <= 2 * (1 + z') + s26, s28 >= 0, s28 <= 2 * (1 + z') + s27, z - 2 >= 0, z' >= 0 1111.86/291.72 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 1111.86/291.72 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.72 #natsub(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= z - 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.72 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.86/291.72 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.72 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.86/291.72 #pred(z) -{ 0 }-> 0 :|: z >= 0 1111.86/291.72 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.86/291.72 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.86/291.72 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.86/291.72 #sub(z, z') -{ 0 }-> s16 :|: s16 >= 0, s16 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 1111.86/291.72 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.86/291.72 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.72 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.86/291.72 #succ(z) -{ 0 }-> 0 :|: z >= 0 1111.86/291.72 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.86/291.72 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.86/291.72 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.86/291.72 div(z, z') -{ 1 }-> s23 :|: s23 >= 0, s23 <= z + 1, z >= 0, z' >= 0 1111.86/291.72 eratos(z) -{ 1 }-> eratos#1(z) :|: z >= 0 1111.86/291.72 eratos#1(z) -{ 1 }-> 2 :|: z = 2 1111.86/291.72 eratos#1(z) -{ 3 + 9*@xs }-> 1 + @x + eratos(s38) :|: s38 >= 0, s38 <= @xs, @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.86/291.72 filter(z, z') -{ 2 + 9*z' }-> s39 :|: s39 >= 0, s39 <= z', z >= 0, z' >= 0 1111.86/291.72 filter#1(z, z') -{ 10 + 9*@xs }-> s41 :|: s40 >= 0, s40 <= @xs, s41 >= 0, s41 <= s40 + @x + 1, z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.86/291.72 filter#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 1111.86/291.72 filter#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.72 filter#2(z, z', z'') -{ 7 }-> s37 :|: s34 >= 0, s34 <= 4 * (s30 * z'') + 1, s35 >= 0, s35 <= 2 * z'' + s34, s36 >= 0, s36 <= 2, s37 >= 0, s37 <= z'' + z + 1, s30 >= 0, s30 <= z'' + 1, z' >= 0, z'' >= 0, z >= 0 1111.86/291.72 filter#3(z, z', z'') -{ 1 }-> z'' :|: z = 2, z' >= 0, z'' >= 0 1111.86/291.72 filter#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 1111.86/291.72 filter#3(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z' >= 0, z'' >= 0, z = 1 1111.86/291.72 minus(z, z') -{ 1 }-> s29 :|: s29 >= 0, s29 <= 2 * z + z', z >= 0, z' >= 0 1111.86/291.72 mod(z, z') -{ 4 }-> s33 :|: s32 >= 0, s32 <= 4 * (s24 * z) + 1, s33 >= 0, s33 <= 2 * z + s32, s24 >= 0, s24 <= z + 1, z >= 0, z' >= 0 1111.86/291.72 times(z, z') -{ 1 }-> s31 :|: s31 >= 0, s31 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 1111.86/291.72 1111.86/291.72 Function symbols to be analyzed: {eratos,eratos#1} 1111.86/291.72 Previous analysis results are: 1111.86/291.72 #natsub: runtime: O(1) [0], size: O(n^1) [z] 1111.86/291.72 #and: runtime: O(1) [0], size: O(1) [2] 1111.86/291.72 filter#3: runtime: O(1) [1], size: O(n^1) [1 + z' + z''] 1111.86/291.72 #pred: runtime: O(1) [0], size: O(n^1) [2 + z] 1111.86/291.72 #succ: runtime: O(1) [0], size: O(n^1) [2 + z] 1111.86/291.72 #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] 1111.86/291.72 #eq: runtime: O(1) [0], size: O(1) [2] 1111.86/291.72 #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] 1111.86/291.72 #div: runtime: O(1) [0], size: O(n^1) [1 + z] 1111.86/291.72 #equal: runtime: O(1) [1], size: O(1) [2] 1111.86/291.72 #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] 1111.86/291.72 #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] 1111.86/291.72 div: runtime: O(1) [1], size: O(n^1) [1 + z] 1111.86/291.72 #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] 1111.86/291.72 minus: runtime: O(1) [1], size: O(n^1) [2*z + z'] 1111.86/291.72 times: runtime: O(1) [1], size: O(n^2) [1 + 4*z*z'] 1111.86/291.72 filter#2: runtime: O(1) [7], size: O(n^1) [1 + z + z''] 1111.86/291.72 mod: runtime: O(1) [4], size: INF 1111.86/291.72 filter#1: runtime: O(n^1) [1 + 9*z], size: O(n^1) [z] 1111.86/291.72 filter: runtime: O(n^1) [2 + 9*z'], size: O(n^1) [z'] 1111.86/291.72 1111.86/291.72 ---------------------------------------- 1111.86/291.72 1111.86/291.72 (143) IntTrsBoundProof (UPPER BOUND(ID)) 1111.86/291.72 1111.86/291.72 Computed SIZE bound using KoAT for: eratos 1111.86/291.72 after applying outer abstraction to obtain an ITS, 1111.86/291.72 resulting in: O(n^1) with polynomial bound: z 1111.86/291.72 1111.86/291.72 Computed SIZE bound using CoFloCo for: eratos#1 1111.86/291.72 after applying outer abstraction to obtain an ITS, 1111.86/291.72 resulting in: O(n^1) with polynomial bound: z 1111.86/291.72 1111.86/291.72 ---------------------------------------- 1111.86/291.72 1111.86/291.72 (144) 1111.86/291.72 Obligation: 1111.86/291.72 Complexity RNTS consisting of the following rules: 1111.86/291.72 1111.86/291.72 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 1111.86/291.72 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 1111.86/291.72 #add(z, z') -{ 0 }-> s19 :|: s17 >= 0, s17 <= 2 * (1 + (1 + (z - 4))) + z', s18 >= 0, s18 <= s17 + 2, s19 >= 0, s19 <= s18 + 2, z - 4 >= 0, z' >= 0 1111.86/291.72 #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 1111.86/291.72 #add(z, z') -{ 0 }-> s22 :|: s20 >= 0, s20 <= 2 * (1 + (1 + (z - 4))) + z', s21 >= 0, s21 <= s20 + 2, s22 >= 0, s22 <= s21 + 2, z' >= 0, z - 4 >= 0 1111.86/291.72 #add(z, z') -{ 0 }-> s3 :|: s3 >= 0, s3 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) 1111.86/291.72 #add(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 1111.86/291.72 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 1111.86/291.72 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.72 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) 1111.86/291.72 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 1111.86/291.72 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 1111.86/291.72 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' 1111.86/291.72 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 1111.86/291.72 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) 1111.86/291.72 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 1111.86/291.72 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 1111.86/291.72 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 1111.86/291.72 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) 1111.86/291.72 #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')) 1111.86/291.72 #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')) 1111.86/291.72 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 1111.86/291.72 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 1111.86/291.72 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 1111.86/291.72 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 1111.86/291.72 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 1111.86/291.72 #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) 1111.86/291.72 #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') 1111.86/291.72 #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') 1111.86/291.72 #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 1111.86/291.72 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.86/291.72 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 1111.86/291.72 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 1111.86/291.72 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 1111.86/291.72 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.72 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.86/291.72 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.86/291.72 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.86/291.72 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.72 #div(z, z') -{ 0 }-> 1 + s5 :|: s5 >= 0, s5 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.72 #eq(z, z') -{ 0 }-> s10 :|: s10 >= 0, s10 <= 2, z - 1 >= 0, z' - 1 >= 0 1111.86/291.72 #eq(z, z') -{ 0 }-> s13 :|: s11 >= 0, s11 <= 2, s12 >= 0, s12 <= 2, s13 >= 0, s13 <= 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 1111.86/291.72 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 1111.86/291.72 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.86/291.72 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 1111.86/291.72 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.86/291.72 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 1111.86/291.72 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 1111.86/291.72 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 1111.86/291.72 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.72 #equal(z, z') -{ 1 }-> s9 :|: s9 >= 0, s9 <= 2, z >= 0, z' >= 0 1111.86/291.72 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 1111.86/291.72 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.86/291.72 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 1111.86/291.72 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.72 #mult(z, z') -{ 0 }-> 1 + s25 :|: s25 >= 0, s25 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 1111.86/291.72 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.86/291.72 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.72 #natdiv(z, z') -{ 0 }-> 1 + s6 :|: s6 >= 0, s6 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 1111.86/291.72 #natdiv(z, z') -{ 0 }-> 1 + s7 :|: s7 >= 0, s7 <= s + 1, s >= 0, s <= z - 2, z' - 2 >= 0, z - 2 >= 0 1111.86/291.72 #natdiv(z, z') -{ 0 }-> 1 + s8 :|: s8 >= 0, s8 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.72 #natmult(z, z') -{ 0 }-> s14 :|: s14 >= 0, s14 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 1111.86/291.72 #natmult(z, z') -{ 0 }-> s15 :|: s15 >= 0, s15 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 1111.86/291.72 #natmult(z, z') -{ 0 }-> s28 :|: s26 >= 0, s26 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s27 >= 0, s27 <= 2 * (1 + z') + s26, s28 >= 0, s28 <= 2 * (1 + z') + s27, z - 2 >= 0, z' >= 0 1111.86/291.72 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 1111.86/291.72 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.72 #natsub(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= z - 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.72 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.86/291.72 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.72 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.86/291.72 #pred(z) -{ 0 }-> 0 :|: z >= 0 1111.86/291.72 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.86/291.72 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.86/291.72 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.86/291.72 #sub(z, z') -{ 0 }-> s16 :|: s16 >= 0, s16 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 1111.86/291.72 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.86/291.72 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.72 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.86/291.72 #succ(z) -{ 0 }-> 0 :|: z >= 0 1111.86/291.72 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.86/291.72 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.86/291.72 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.86/291.72 div(z, z') -{ 1 }-> s23 :|: s23 >= 0, s23 <= z + 1, z >= 0, z' >= 0 1111.86/291.72 eratos(z) -{ 1 }-> eratos#1(z) :|: z >= 0 1111.86/291.72 eratos#1(z) -{ 1 }-> 2 :|: z = 2 1111.86/291.72 eratos#1(z) -{ 3 + 9*@xs }-> 1 + @x + eratos(s38) :|: s38 >= 0, s38 <= @xs, @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.86/291.72 filter(z, z') -{ 2 + 9*z' }-> s39 :|: s39 >= 0, s39 <= z', z >= 0, z' >= 0 1111.86/291.72 filter#1(z, z') -{ 10 + 9*@xs }-> s41 :|: s40 >= 0, s40 <= @xs, s41 >= 0, s41 <= s40 + @x + 1, z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.86/291.72 filter#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 1111.86/291.72 filter#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.72 filter#2(z, z', z'') -{ 7 }-> s37 :|: s34 >= 0, s34 <= 4 * (s30 * z'') + 1, s35 >= 0, s35 <= 2 * z'' + s34, s36 >= 0, s36 <= 2, s37 >= 0, s37 <= z'' + z + 1, s30 >= 0, s30 <= z'' + 1, z' >= 0, z'' >= 0, z >= 0 1111.86/291.72 filter#3(z, z', z'') -{ 1 }-> z'' :|: z = 2, z' >= 0, z'' >= 0 1111.86/291.72 filter#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 1111.86/291.72 filter#3(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z' >= 0, z'' >= 0, z = 1 1111.86/291.72 minus(z, z') -{ 1 }-> s29 :|: s29 >= 0, s29 <= 2 * z + z', z >= 0, z' >= 0 1111.86/291.72 mod(z, z') -{ 4 }-> s33 :|: s32 >= 0, s32 <= 4 * (s24 * z) + 1, s33 >= 0, s33 <= 2 * z + s32, s24 >= 0, s24 <= z + 1, z >= 0, z' >= 0 1111.86/291.72 times(z, z') -{ 1 }-> s31 :|: s31 >= 0, s31 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 1111.86/291.72 1111.86/291.72 Function symbols to be analyzed: {eratos,eratos#1} 1111.86/291.72 Previous analysis results are: 1111.86/291.72 #natsub: runtime: O(1) [0], size: O(n^1) [z] 1111.86/291.72 #and: runtime: O(1) [0], size: O(1) [2] 1111.86/291.72 filter#3: runtime: O(1) [1], size: O(n^1) [1 + z' + z''] 1111.86/291.72 #pred: runtime: O(1) [0], size: O(n^1) [2 + z] 1111.86/291.72 #succ: runtime: O(1) [0], size: O(n^1) [2 + z] 1111.86/291.72 #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] 1111.86/291.72 #eq: runtime: O(1) [0], size: O(1) [2] 1111.86/291.72 #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] 1111.86/291.72 #div: runtime: O(1) [0], size: O(n^1) [1 + z] 1111.86/291.72 #equal: runtime: O(1) [1], size: O(1) [2] 1111.86/291.72 #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] 1111.86/291.72 #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] 1111.86/291.72 div: runtime: O(1) [1], size: O(n^1) [1 + z] 1111.86/291.72 #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] 1111.86/291.72 minus: runtime: O(1) [1], size: O(n^1) [2*z + z'] 1111.86/291.72 times: runtime: O(1) [1], size: O(n^2) [1 + 4*z*z'] 1111.86/291.72 filter#2: runtime: O(1) [7], size: O(n^1) [1 + z + z''] 1111.86/291.72 mod: runtime: O(1) [4], size: INF 1111.86/291.72 filter#1: runtime: O(n^1) [1 + 9*z], size: O(n^1) [z] 1111.86/291.72 filter: runtime: O(n^1) [2 + 9*z'], size: O(n^1) [z'] 1111.86/291.72 eratos: runtime: ?, size: O(n^1) [z] 1111.86/291.72 eratos#1: runtime: ?, size: O(n^1) [z] 1111.86/291.72 1111.86/291.72 ---------------------------------------- 1111.86/291.72 1111.86/291.72 (145) IntTrsBoundProof (UPPER BOUND(ID)) 1111.86/291.72 1111.86/291.72 Computed RUNTIME bound using CoFloCo for: eratos 1111.86/291.72 after applying outer abstraction to obtain an ITS, 1111.86/291.72 resulting in: O(n^2) with polynomial bound: 16 + 25*z + 9*z^2 1111.86/291.72 1111.86/291.72 Computed RUNTIME bound using KoAT for: eratos#1 1111.86/291.72 after applying outer abstraction to obtain an ITS, 1111.86/291.72 resulting in: O(n^2) with polynomial bound: 20 + 34*z + 9*z^2 1111.86/291.72 1111.86/291.72 ---------------------------------------- 1111.86/291.72 1111.86/291.72 (146) 1111.86/291.72 Obligation: 1111.86/291.72 Complexity RNTS consisting of the following rules: 1111.86/291.72 1111.86/291.72 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 1111.86/291.72 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 1111.86/291.72 #add(z, z') -{ 0 }-> s19 :|: s17 >= 0, s17 <= 2 * (1 + (1 + (z - 4))) + z', s18 >= 0, s18 <= s17 + 2, s19 >= 0, s19 <= s18 + 2, z - 4 >= 0, z' >= 0 1111.86/291.72 #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 1111.86/291.72 #add(z, z') -{ 0 }-> s22 :|: s20 >= 0, s20 <= 2 * (1 + (1 + (z - 4))) + z', s21 >= 0, s21 <= s20 + 2, s22 >= 0, s22 <= s21 + 2, z' >= 0, z - 4 >= 0 1111.86/291.72 #add(z, z') -{ 0 }-> s3 :|: s3 >= 0, s3 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) 1111.86/291.72 #add(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 1111.86/291.72 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 1111.86/291.72 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.72 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) 1111.86/291.72 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 1111.86/291.72 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 1111.86/291.72 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' 1111.86/291.72 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 1111.86/291.72 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) 1111.86/291.72 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 1111.86/291.72 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 1111.86/291.72 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 1111.86/291.72 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) 1111.86/291.72 #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')) 1111.86/291.72 #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')) 1111.86/291.72 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 1111.86/291.72 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 1111.86/291.72 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 1111.86/291.72 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 1111.86/291.72 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 1111.86/291.72 #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) 1111.86/291.72 #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') 1111.86/291.72 #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') 1111.86/291.72 #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 1111.86/291.72 #and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.86/291.72 #and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 1111.86/291.72 #and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 1111.86/291.72 #and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 1111.86/291.72 #and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.72 #div(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.86/291.72 #div(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.86/291.72 #div(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.86/291.72 #div(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.72 #div(z, z') -{ 0 }-> 1 + s5 :|: s5 >= 0, s5 <= z - 1 + 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.72 #eq(z, z') -{ 0 }-> s10 :|: s10 >= 0, s10 <= 2, z - 1 >= 0, z' - 1 >= 0 1111.86/291.72 #eq(z, z') -{ 0 }-> s13 :|: s11 >= 0, s11 <= 2, s12 >= 0, s12 <= 2, s13 >= 0, s13 <= 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 1111.86/291.72 #eq(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 1111.86/291.72 #eq(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 1111.86/291.72 #eq(z, z') -{ 0 }-> 1 :|: z = 0, z' - 1 >= 0 1111.86/291.72 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 1111.86/291.72 #eq(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0 1111.86/291.72 #eq(z, z') -{ 0 }-> 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0 1111.86/291.72 #eq(z, z') -{ 0 }-> 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2 1111.86/291.72 #eq(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.72 #equal(z, z') -{ 1 }-> s9 :|: s9 >= 0, s9 <= 2, z >= 0, z' >= 0 1111.86/291.72 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 1111.86/291.72 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 1111.86/291.72 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 1111.86/291.72 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.72 #mult(z, z') -{ 0 }-> 1 + s25 :|: s25 >= 0, s25 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 1111.86/291.72 #natdiv(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 1111.86/291.72 #natdiv(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.72 #natdiv(z, z') -{ 0 }-> 1 + s6 :|: s6 >= 0, s6 <= z - 1 + 1, z - 1 >= 0, z' = 1 + 0 1111.86/291.72 #natdiv(z, z') -{ 0 }-> 1 + s7 :|: s7 >= 0, s7 <= s + 1, s >= 0, s <= z - 2, z' - 2 >= 0, z - 2 >= 0 1111.86/291.72 #natdiv(z, z') -{ 0 }-> 1 + s8 :|: s8 >= 0, s8 <= 0 + 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.72 #natmult(z, z') -{ 0 }-> s14 :|: s14 >= 0, s14 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 1111.86/291.72 #natmult(z, z') -{ 0 }-> s15 :|: s15 >= 0, s15 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 1111.86/291.72 #natmult(z, z') -{ 0 }-> s28 :|: s26 >= 0, s26 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s27 >= 0, s27 <= 2 * (1 + z') + s26, s28 >= 0, s28 <= 2 * (1 + z') + s27, z - 2 >= 0, z' >= 0 1111.86/291.72 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 1111.86/291.72 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.72 #natsub(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= z - 1, z - 1 >= 0, z' - 1 >= 0 1111.86/291.72 #natsub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.86/291.72 #natsub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.72 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.86/291.72 #pred(z) -{ 0 }-> 0 :|: z >= 0 1111.86/291.72 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.86/291.72 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.86/291.72 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.86/291.72 #sub(z, z') -{ 0 }-> s16 :|: s16 >= 0, s16 <= 2 * z + (1 + (z' - 1)), z >= 0, z' - 1 >= 0 1111.86/291.72 #sub(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 1111.86/291.72 #sub(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.72 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 1111.86/291.72 #succ(z) -{ 0 }-> 0 :|: z >= 0 1111.86/291.72 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 1111.86/291.72 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 1111.86/291.72 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 1111.86/291.72 div(z, z') -{ 1 }-> s23 :|: s23 >= 0, s23 <= z + 1, z >= 0, z' >= 0 1111.86/291.72 eratos(z) -{ 1 }-> eratos#1(z) :|: z >= 0 1111.86/291.72 eratos#1(z) -{ 1 }-> 2 :|: z = 2 1111.86/291.72 eratos#1(z) -{ 3 + 9*@xs }-> 1 + @x + eratos(s38) :|: s38 >= 0, s38 <= @xs, @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.86/291.72 filter(z, z') -{ 2 + 9*z' }-> s39 :|: s39 >= 0, s39 <= z', z >= 0, z' >= 0 1111.86/291.72 filter#1(z, z') -{ 10 + 9*@xs }-> s41 :|: s40 >= 0, s40 <= @xs, s41 >= 0, s41 <= s40 + @x + 1, z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 1111.86/291.72 filter#1(z, z') -{ 1 }-> 2 :|: z = 2, z' >= 0 1111.86/291.72 filter#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 1111.86/291.72 filter#2(z, z', z'') -{ 7 }-> s37 :|: s34 >= 0, s34 <= 4 * (s30 * z'') + 1, s35 >= 0, s35 <= 2 * z'' + s34, s36 >= 0, s36 <= 2, s37 >= 0, s37 <= z'' + z + 1, s30 >= 0, s30 <= z'' + 1, z' >= 0, z'' >= 0, z >= 0 1111.86/291.72 filter#3(z, z', z'') -{ 1 }-> z'' :|: z = 2, z' >= 0, z'' >= 0 1111.86/291.72 filter#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 1111.86/291.72 filter#3(z, z', z'') -{ 1 }-> 1 + z' + z'' :|: z' >= 0, z'' >= 0, z = 1 1111.86/291.72 minus(z, z') -{ 1 }-> s29 :|: s29 >= 0, s29 <= 2 * z + z', z >= 0, z' >= 0 1111.86/291.72 mod(z, z') -{ 4 }-> s33 :|: s32 >= 0, s32 <= 4 * (s24 * z) + 1, s33 >= 0, s33 <= 2 * z + s32, s24 >= 0, s24 <= z + 1, z >= 0, z' >= 0 1111.86/291.72 times(z, z') -{ 1 }-> s31 :|: s31 >= 0, s31 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 1111.86/291.72 1111.86/291.72 Function symbols to be analyzed: 1111.86/291.72 Previous analysis results are: 1111.86/291.72 #natsub: runtime: O(1) [0], size: O(n^1) [z] 1111.86/291.72 #and: runtime: O(1) [0], size: O(1) [2] 1111.86/291.72 filter#3: runtime: O(1) [1], size: O(n^1) [1 + z' + z''] 1111.86/291.72 #pred: runtime: O(1) [0], size: O(n^1) [2 + z] 1111.86/291.72 #succ: runtime: O(1) [0], size: O(n^1) [2 + z] 1111.86/291.72 #natdiv: runtime: O(1) [0], size: O(n^1) [1 + z] 1111.86/291.72 #eq: runtime: O(1) [0], size: O(1) [2] 1111.86/291.72 #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] 1111.86/291.72 #div: runtime: O(1) [0], size: O(n^1) [1 + z] 1111.86/291.72 #equal: runtime: O(1) [1], size: O(1) [2] 1111.86/291.72 #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] 1111.86/291.72 #sub: runtime: O(1) [0], size: O(n^1) [2*z + z'] 1111.86/291.72 div: runtime: O(1) [1], size: O(n^1) [1 + z] 1111.86/291.72 #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] 1111.86/291.72 minus: runtime: O(1) [1], size: O(n^1) [2*z + z'] 1111.86/291.72 times: runtime: O(1) [1], size: O(n^2) [1 + 4*z*z'] 1111.86/291.72 filter#2: runtime: O(1) [7], size: O(n^1) [1 + z + z''] 1111.86/291.72 mod: runtime: O(1) [4], size: INF 1111.86/291.72 filter#1: runtime: O(n^1) [1 + 9*z], size: O(n^1) [z] 1111.86/291.72 filter: runtime: O(n^1) [2 + 9*z'], size: O(n^1) [z'] 1111.86/291.72 eratos: runtime: O(n^2) [16 + 25*z + 9*z^2], size: O(n^1) [z] 1111.86/291.72 eratos#1: runtime: O(n^2) [20 + 34*z + 9*z^2], size: O(n^1) [z] 1111.86/291.72 1111.86/291.72 ---------------------------------------- 1111.86/291.72 1111.86/291.72 (147) FinalProof (FINISHED) 1111.86/291.72 Computed overall runtime complexity 1111.86/291.72 ---------------------------------------- 1111.86/291.72 1111.86/291.72 (148) 1111.86/291.72 BOUNDS(1, n^2) 1111.86/291.72 1111.86/291.72 ---------------------------------------- 1111.86/291.72 1111.86/291.72 (149) RenamingProof (BOTH BOUNDS(ID, ID)) 1111.86/291.72 Renamed function symbols to avoid clashes with predefined symbol. 1111.86/291.72 ---------------------------------------- 1111.86/291.72 1111.86/291.72 (150) 1111.86/291.72 Obligation: 1111.86/291.72 The Runtime Complexity (innermost) of the given CpxRelTRS could be proven to be BOUNDS(n^1, INF). 1111.86/291.72 1111.86/291.72 1111.86/291.72 The TRS R consists of the following rules: 1111.86/291.72 1111.86/291.72 #equal(@x, @y) -> #eq(@x, @y) 1111.86/291.72 *'(@x, @y) -> #mult(@x, @y) 1111.86/291.72 -(@x, @y) -> #sub(@x, @y) 1111.86/291.72 div(@x, @y) -> #div(@x, @y) 1111.86/291.72 eratos(@l) -> eratos#1(@l) 1111.86/291.72 eratos#1(::(@x, @xs)) -> ::(@x, eratos(filter(@x, @xs))) 1111.86/291.72 eratos#1(nil) -> nil 1111.86/291.72 filter(@p, @l) -> filter#1(@l, @p) 1111.86/291.72 filter#1(::(@x, @xs), @p) -> filter#2(filter(@p, @xs), @p, @x) 1111.86/291.72 filter#1(nil, @p) -> nil 1111.86/291.72 filter#2(@xs', @p, @x) -> filter#3(#equal(mod(@x, @p), #0), @x, @xs') 1111.86/291.72 filter#3(#false, @x, @xs') -> ::(@x, @xs') 1111.86/291.72 filter#3(#true, @x, @xs') -> @xs' 1111.86/291.72 mod(@x, @y) -> -(@x, *'(@x, div(@x, @y))) 1111.86/291.72 1111.86/291.72 The (relative) TRS S consists of the following rules: 1111.86/291.72 1111.86/291.72 #add(#0, @y) -> @y 1111.86/291.72 #add(#neg(#s(#0)), @y) -> #pred(@y) 1111.86/291.72 #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) 1111.86/291.72 #add(#pos(#s(#0)), @y) -> #succ(@y) 1111.86/291.72 #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) 1111.86/291.72 #and(#false, #false) -> #false 1111.86/291.72 #and(#false, #true) -> #false 1111.86/291.72 #and(#true, #false) -> #false 1111.86/291.72 #and(#true, #true) -> #true 1111.86/291.72 #div(#0, #0) -> #divByZero 1111.86/291.72 #div(#0, #neg(@y)) -> #0 1111.86/291.72 #div(#0, #pos(@y)) -> #0 1111.86/291.72 #div(#neg(@x), #0) -> #divByZero 1111.86/291.72 #div(#neg(@x), #neg(@y)) -> #pos(#natdiv(@x, @y)) 1111.86/291.72 #div(#neg(@x), #pos(@y)) -> #neg(#natdiv(@x, @y)) 1111.86/291.72 #div(#pos(@x), #0) -> #divByZero 1111.86/291.72 #div(#pos(@x), #neg(@y)) -> #neg(#natdiv(@x, @y)) 1111.86/291.72 #div(#pos(@x), #pos(@y)) -> #pos(#natdiv(@x, @y)) 1111.86/291.72 #eq(#0, #0) -> #true 1111.86/291.72 #eq(#0, #neg(@y)) -> #false 1111.86/291.72 #eq(#0, #pos(@y)) -> #false 1111.86/291.72 #eq(#0, #s(@y)) -> #false 1111.86/291.72 #eq(#neg(@x), #0) -> #false 1111.86/291.72 #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y) 1111.86/291.72 #eq(#neg(@x), #pos(@y)) -> #false 1111.86/291.72 #eq(#pos(@x), #0) -> #false 1111.86/291.72 #eq(#pos(@x), #neg(@y)) -> #false 1111.86/291.72 #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y) 1111.86/291.72 #eq(#s(@x), #0) -> #false 1111.86/291.72 #eq(#s(@x), #s(@y)) -> #eq(@x, @y) 1111.86/291.72 #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) -> #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) 1111.86/291.72 #eq(::(@x_1, @x_2), nil) -> #false 1111.86/291.72 #eq(nil, ::(@y_1, @y_2)) -> #false 1111.86/291.72 #eq(nil, nil) -> #true 1111.86/291.72 #mult(#0, #0) -> #0 1111.86/291.72 #mult(#0, #neg(@y)) -> #0 1111.86/291.72 #mult(#0, #pos(@y)) -> #0 1111.86/291.72 #mult(#neg(@x), #0) -> #0 1111.86/291.72 #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) 1111.86/291.72 #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) 1111.86/291.72 #mult(#pos(@x), #0) -> #0 1111.86/291.72 #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) 1111.86/291.72 #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) 1111.86/291.72 #natdiv(#0, #0) -> #divByZero 1111.86/291.72 #natdiv(#s(@x), #s(@y)) -> #s(#natdiv(#natsub(@x, @y), #s(@y))) 1111.86/291.72 #natmult(#0, @y) -> #0 1111.86/291.72 #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) 1111.86/291.72 #natsub(@x, #0) -> @x 1111.86/291.72 #natsub(#s(@x), #s(@y)) -> #natsub(@x, @y) 1111.86/291.72 #pred(#0) -> #neg(#s(#0)) 1111.86/291.72 #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) 1111.86/291.72 #pred(#pos(#s(#0))) -> #0 1111.86/291.72 #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) 1111.86/291.72 #sub(@x, #0) -> @x 1111.86/291.72 #sub(@x, #neg(@y)) -> #add(@x, #pos(@y)) 1111.86/291.72 #sub(@x, #pos(@y)) -> #add(@x, #neg(@y)) 1111.86/291.72 #succ(#0) -> #pos(#s(#0)) 1111.86/291.72 #succ(#neg(#s(#0))) -> #0 1111.86/291.72 #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) 1111.86/291.72 #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) 1111.86/291.72 1111.86/291.72 Rewrite Strategy: INNERMOST 1111.86/291.72 ---------------------------------------- 1111.86/291.72 1111.86/291.72 (151) TypeInferenceProof (BOTH BOUNDS(ID, ID)) 1111.86/291.72 Infered types. 1111.86/291.72 ---------------------------------------- 1111.86/291.72 1111.86/291.72 (152) 1111.86/291.72 Obligation: 1111.86/291.72 Innermost TRS: 1111.86/291.72 Rules: 1111.86/291.72 #equal(@x, @y) -> #eq(@x, @y) 1111.86/291.72 *'(@x, @y) -> #mult(@x, @y) 1111.86/291.72 -(@x, @y) -> #sub(@x, @y) 1111.86/291.72 div(@x, @y) -> #div(@x, @y) 1111.86/291.72 eratos(@l) -> eratos#1(@l) 1111.86/291.72 eratos#1(::(@x, @xs)) -> ::(@x, eratos(filter(@x, @xs))) 1111.86/291.72 eratos#1(nil) -> nil 1111.86/291.72 filter(@p, @l) -> filter#1(@l, @p) 1111.86/291.72 filter#1(::(@x, @xs), @p) -> filter#2(filter(@p, @xs), @p, @x) 1111.86/291.72 filter#1(nil, @p) -> nil 1111.86/291.72 filter#2(@xs', @p, @x) -> filter#3(#equal(mod(@x, @p), #0), @x, @xs') 1111.86/291.72 filter#3(#false, @x, @xs') -> ::(@x, @xs') 1111.86/291.72 filter#3(#true, @x, @xs') -> @xs' 1111.86/291.72 mod(@x, @y) -> -(@x, *'(@x, div(@x, @y))) 1111.86/291.72 #add(#0, @y) -> @y 1111.86/291.72 #add(#neg(#s(#0)), @y) -> #pred(@y) 1111.86/291.72 #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) 1111.86/291.72 #add(#pos(#s(#0)), @y) -> #succ(@y) 1111.86/291.72 #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) 1111.86/291.72 #and(#false, #false) -> #false 1111.86/291.72 #and(#false, #true) -> #false 1111.86/291.72 #and(#true, #false) -> #false 1111.86/291.72 #and(#true, #true) -> #true 1111.86/291.72 #div(#0, #0) -> #divByZero 1111.86/291.72 #div(#0, #neg(@y)) -> #0 1111.86/291.72 #div(#0, #pos(@y)) -> #0 1111.86/291.72 #div(#neg(@x), #0) -> #divByZero 1111.86/291.72 #div(#neg(@x), #neg(@y)) -> #pos(#natdiv(@x, @y)) 1111.86/291.72 #div(#neg(@x), #pos(@y)) -> #neg(#natdiv(@x, @y)) 1111.86/291.72 #div(#pos(@x), #0) -> #divByZero 1111.86/291.72 #div(#pos(@x), #neg(@y)) -> #neg(#natdiv(@x, @y)) 1111.86/291.72 #div(#pos(@x), #pos(@y)) -> #pos(#natdiv(@x, @y)) 1111.86/291.72 #eq(#0, #0) -> #true 1111.86/291.72 #eq(#0, #neg(@y)) -> #false 1111.86/291.72 #eq(#0, #pos(@y)) -> #false 1111.86/291.72 #eq(#0, #s(@y)) -> #false 1111.86/291.72 #eq(#neg(@x), #0) -> #false 1111.86/291.72 #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y) 1111.86/291.72 #eq(#neg(@x), #pos(@y)) -> #false 1111.86/291.72 #eq(#pos(@x), #0) -> #false 1111.86/291.72 #eq(#pos(@x), #neg(@y)) -> #false 1111.86/291.72 #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y) 1111.86/291.72 #eq(#s(@x), #0) -> #false 1111.86/291.72 #eq(#s(@x), #s(@y)) -> #eq(@x, @y) 1111.86/291.72 #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) -> #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) 1111.86/291.72 #eq(::(@x_1, @x_2), nil) -> #false 1111.86/291.72 #eq(nil, ::(@y_1, @y_2)) -> #false 1111.86/291.72 #eq(nil, nil) -> #true 1111.86/291.72 #mult(#0, #0) -> #0 1111.86/291.72 #mult(#0, #neg(@y)) -> #0 1111.86/291.72 #mult(#0, #pos(@y)) -> #0 1111.86/291.72 #mult(#neg(@x), #0) -> #0 1111.86/291.72 #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) 1111.86/291.72 #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) 1111.86/291.72 #mult(#pos(@x), #0) -> #0 1111.86/291.72 #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) 1111.86/291.72 #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) 1111.86/291.72 #natdiv(#0, #0) -> #divByZero 1111.86/291.72 #natdiv(#s(@x), #s(@y)) -> #s(#natdiv(#natsub(@x, @y), #s(@y))) 1111.86/291.72 #natmult(#0, @y) -> #0 1111.86/291.72 #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) 1111.86/291.72 #natsub(@x, #0) -> @x 1111.86/291.72 #natsub(#s(@x), #s(@y)) -> #natsub(@x, @y) 1111.86/291.72 #pred(#0) -> #neg(#s(#0)) 1111.86/291.72 #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) 1111.86/291.72 #pred(#pos(#s(#0))) -> #0 1111.86/291.72 #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) 1111.86/291.72 #sub(@x, #0) -> @x 1111.86/291.72 #sub(@x, #neg(@y)) -> #add(@x, #pos(@y)) 1111.86/291.72 #sub(@x, #pos(@y)) -> #add(@x, #neg(@y)) 1111.86/291.72 #succ(#0) -> #pos(#s(#0)) 1111.86/291.72 #succ(#neg(#s(#0))) -> #0 1111.86/291.72 #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) 1111.86/291.72 #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) 1111.86/291.72 1111.86/291.72 Types: 1111.86/291.72 #equal :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> #false:#true 1111.86/291.72 #eq :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> #false:#true 1111.86/291.72 *' :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 #mult :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 - :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 #sub :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 div :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 #div :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 eratos :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 eratos#1 :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 :: :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 filter :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 nil :: :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 filter#1 :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 filter#2 :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 filter#3 :: #false:#true -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 mod :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 #0 :: :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 #false :: #false:#true 1111.86/291.72 #true :: #false:#true 1111.86/291.72 #add :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 #neg :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 #s :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 #pred :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 #pos :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 #succ :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 #and :: #false:#true -> #false:#true -> #false:#true 1111.86/291.72 #divByZero :: :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 #natdiv :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 #natmult :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 #natsub :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 hole_#false:#true1_4 :: #false:#true 1111.86/291.72 hole_:::nil:#0:#s:#neg:#pos:#divByZero2_4 :: :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4 :: Nat -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 1111.86/291.72 ---------------------------------------- 1111.86/291.72 1111.86/291.72 (153) OrderProof (LOWER BOUND(ID)) 1111.86/291.72 Heuristically decided to analyse the following defined symbols: 1111.86/291.72 #eq, eratos, eratos#1, filter, filter#1, #add, #natdiv, #natmult, #natsub 1111.86/291.72 1111.86/291.72 They will be analysed ascendingly in the following order: 1111.86/291.72 eratos = eratos#1 1111.86/291.72 filter < eratos#1 1111.86/291.72 filter = filter#1 1111.86/291.72 #add < #natmult 1111.86/291.72 #natsub < #natdiv 1111.86/291.72 1111.86/291.72 ---------------------------------------- 1111.86/291.72 1111.86/291.72 (154) 1111.86/291.72 Obligation: 1111.86/291.72 Innermost TRS: 1111.86/291.72 Rules: 1111.86/291.72 #equal(@x, @y) -> #eq(@x, @y) 1111.86/291.72 *'(@x, @y) -> #mult(@x, @y) 1111.86/291.72 -(@x, @y) -> #sub(@x, @y) 1111.86/291.72 div(@x, @y) -> #div(@x, @y) 1111.86/291.72 eratos(@l) -> eratos#1(@l) 1111.86/291.72 eratos#1(::(@x, @xs)) -> ::(@x, eratos(filter(@x, @xs))) 1111.86/291.72 eratos#1(nil) -> nil 1111.86/291.72 filter(@p, @l) -> filter#1(@l, @p) 1111.86/291.72 filter#1(::(@x, @xs), @p) -> filter#2(filter(@p, @xs), @p, @x) 1111.86/291.72 filter#1(nil, @p) -> nil 1111.86/291.72 filter#2(@xs', @p, @x) -> filter#3(#equal(mod(@x, @p), #0), @x, @xs') 1111.86/291.72 filter#3(#false, @x, @xs') -> ::(@x, @xs') 1111.86/291.72 filter#3(#true, @x, @xs') -> @xs' 1111.86/291.72 mod(@x, @y) -> -(@x, *'(@x, div(@x, @y))) 1111.86/291.72 #add(#0, @y) -> @y 1111.86/291.72 #add(#neg(#s(#0)), @y) -> #pred(@y) 1111.86/291.72 #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) 1111.86/291.72 #add(#pos(#s(#0)), @y) -> #succ(@y) 1111.86/291.72 #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) 1111.86/291.72 #and(#false, #false) -> #false 1111.86/291.72 #and(#false, #true) -> #false 1111.86/291.72 #and(#true, #false) -> #false 1111.86/291.72 #and(#true, #true) -> #true 1111.86/291.72 #div(#0, #0) -> #divByZero 1111.86/291.72 #div(#0, #neg(@y)) -> #0 1111.86/291.72 #div(#0, #pos(@y)) -> #0 1111.86/291.72 #div(#neg(@x), #0) -> #divByZero 1111.86/291.72 #div(#neg(@x), #neg(@y)) -> #pos(#natdiv(@x, @y)) 1111.86/291.72 #div(#neg(@x), #pos(@y)) -> #neg(#natdiv(@x, @y)) 1111.86/291.72 #div(#pos(@x), #0) -> #divByZero 1111.86/291.72 #div(#pos(@x), #neg(@y)) -> #neg(#natdiv(@x, @y)) 1111.86/291.72 #div(#pos(@x), #pos(@y)) -> #pos(#natdiv(@x, @y)) 1111.86/291.72 #eq(#0, #0) -> #true 1111.86/291.72 #eq(#0, #neg(@y)) -> #false 1111.86/291.72 #eq(#0, #pos(@y)) -> #false 1111.86/291.72 #eq(#0, #s(@y)) -> #false 1111.86/291.72 #eq(#neg(@x), #0) -> #false 1111.86/291.72 #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y) 1111.86/291.72 #eq(#neg(@x), #pos(@y)) -> #false 1111.86/291.72 #eq(#pos(@x), #0) -> #false 1111.86/291.72 #eq(#pos(@x), #neg(@y)) -> #false 1111.86/291.72 #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y) 1111.86/291.72 #eq(#s(@x), #0) -> #false 1111.86/291.72 #eq(#s(@x), #s(@y)) -> #eq(@x, @y) 1111.86/291.72 #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) -> #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) 1111.86/291.72 #eq(::(@x_1, @x_2), nil) -> #false 1111.86/291.72 #eq(nil, ::(@y_1, @y_2)) -> #false 1111.86/291.72 #eq(nil, nil) -> #true 1111.86/291.72 #mult(#0, #0) -> #0 1111.86/291.72 #mult(#0, #neg(@y)) -> #0 1111.86/291.72 #mult(#0, #pos(@y)) -> #0 1111.86/291.72 #mult(#neg(@x), #0) -> #0 1111.86/291.72 #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) 1111.86/291.72 #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) 1111.86/291.72 #mult(#pos(@x), #0) -> #0 1111.86/291.72 #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) 1111.86/291.72 #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) 1111.86/291.72 #natdiv(#0, #0) -> #divByZero 1111.86/291.72 #natdiv(#s(@x), #s(@y)) -> #s(#natdiv(#natsub(@x, @y), #s(@y))) 1111.86/291.72 #natmult(#0, @y) -> #0 1111.86/291.72 #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) 1111.86/291.72 #natsub(@x, #0) -> @x 1111.86/291.72 #natsub(#s(@x), #s(@y)) -> #natsub(@x, @y) 1111.86/291.72 #pred(#0) -> #neg(#s(#0)) 1111.86/291.72 #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) 1111.86/291.72 #pred(#pos(#s(#0))) -> #0 1111.86/291.72 #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) 1111.86/291.72 #sub(@x, #0) -> @x 1111.86/291.72 #sub(@x, #neg(@y)) -> #add(@x, #pos(@y)) 1111.86/291.72 #sub(@x, #pos(@y)) -> #add(@x, #neg(@y)) 1111.86/291.72 #succ(#0) -> #pos(#s(#0)) 1111.86/291.72 #succ(#neg(#s(#0))) -> #0 1111.86/291.72 #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) 1111.86/291.72 #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) 1111.86/291.72 1111.86/291.72 Types: 1111.86/291.72 #equal :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> #false:#true 1111.86/291.72 #eq :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> #false:#true 1111.86/291.72 *' :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 #mult :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 - :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 #sub :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 div :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 #div :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 eratos :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 eratos#1 :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 :: :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 filter :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 nil :: :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 filter#1 :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 filter#2 :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 filter#3 :: #false:#true -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 mod :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 #0 :: :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 #false :: #false:#true 1111.86/291.72 #true :: #false:#true 1111.86/291.72 #add :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 #neg :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 #s :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 #pred :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 #pos :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 #succ :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 #and :: #false:#true -> #false:#true -> #false:#true 1111.86/291.72 #divByZero :: :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 #natdiv :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 #natmult :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 #natsub :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 hole_#false:#true1_4 :: #false:#true 1111.86/291.72 hole_:::nil:#0:#s:#neg:#pos:#divByZero2_4 :: :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4 :: Nat -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 1111.86/291.72 1111.86/291.72 Generator Equations: 1111.86/291.72 gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(0) <=> nil 1111.86/291.72 gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(+(x, 1)) <=> ::(nil, gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(x)) 1111.86/291.72 1111.86/291.72 1111.86/291.72 The following defined symbols remain to be analysed: 1111.86/291.72 #eq, eratos, eratos#1, filter, filter#1, #add, #natdiv, #natmult, #natsub 1111.86/291.72 1111.86/291.72 They will be analysed ascendingly in the following order: 1111.86/291.72 eratos = eratos#1 1111.86/291.72 filter < eratos#1 1111.86/291.72 filter = filter#1 1111.86/291.72 #add < #natmult 1111.86/291.72 #natsub < #natdiv 1111.86/291.72 1111.86/291.72 ---------------------------------------- 1111.86/291.72 1111.86/291.72 (155) RewriteLemmaProof (LOWER BOUND(ID)) 1111.86/291.72 Proved the following rewrite lemma: 1111.86/291.72 #eq(gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(+(1, n5_4)), gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(n5_4)) -> #false, rt in Omega(0) 1111.86/291.72 1111.86/291.72 Induction Base: 1111.86/291.72 #eq(gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(+(1, 0)), gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(0)) ->_R^Omega(0) 1111.86/291.72 #false 1111.86/291.72 1111.86/291.72 Induction Step: 1111.86/291.72 #eq(gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(+(1, +(n5_4, 1))), gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(+(n5_4, 1))) ->_R^Omega(0) 1111.86/291.72 #and(#eq(nil, nil), #eq(gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(+(1, n5_4)), gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(n5_4))) ->_R^Omega(0) 1111.86/291.72 #and(#true, #eq(gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(+(1, n5_4)), gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(n5_4))) ->_IH 1111.86/291.72 #and(#true, #false) ->_R^Omega(0) 1111.86/291.72 #false 1111.86/291.72 1111.86/291.72 We have rt in Omega(1) and sz in O(n). Thus, we have irc_R in Omega(n^0). 1111.86/291.72 ---------------------------------------- 1111.86/291.72 1111.86/291.72 (156) 1111.86/291.72 Obligation: 1111.86/291.72 Innermost TRS: 1111.86/291.72 Rules: 1111.86/291.72 #equal(@x, @y) -> #eq(@x, @y) 1111.86/291.72 *'(@x, @y) -> #mult(@x, @y) 1111.86/291.72 -(@x, @y) -> #sub(@x, @y) 1111.86/291.72 div(@x, @y) -> #div(@x, @y) 1111.86/291.72 eratos(@l) -> eratos#1(@l) 1111.86/291.72 eratos#1(::(@x, @xs)) -> ::(@x, eratos(filter(@x, @xs))) 1111.86/291.72 eratos#1(nil) -> nil 1111.86/291.72 filter(@p, @l) -> filter#1(@l, @p) 1111.86/291.72 filter#1(::(@x, @xs), @p) -> filter#2(filter(@p, @xs), @p, @x) 1111.86/291.72 filter#1(nil, @p) -> nil 1111.86/291.72 filter#2(@xs', @p, @x) -> filter#3(#equal(mod(@x, @p), #0), @x, @xs') 1111.86/291.72 filter#3(#false, @x, @xs') -> ::(@x, @xs') 1111.86/291.72 filter#3(#true, @x, @xs') -> @xs' 1111.86/291.72 mod(@x, @y) -> -(@x, *'(@x, div(@x, @y))) 1111.86/291.72 #add(#0, @y) -> @y 1111.86/291.72 #add(#neg(#s(#0)), @y) -> #pred(@y) 1111.86/291.72 #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) 1111.86/291.72 #add(#pos(#s(#0)), @y) -> #succ(@y) 1111.86/291.72 #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) 1111.86/291.72 #and(#false, #false) -> #false 1111.86/291.72 #and(#false, #true) -> #false 1111.86/291.72 #and(#true, #false) -> #false 1111.86/291.72 #and(#true, #true) -> #true 1111.86/291.72 #div(#0, #0) -> #divByZero 1111.86/291.72 #div(#0, #neg(@y)) -> #0 1111.86/291.72 #div(#0, #pos(@y)) -> #0 1111.86/291.72 #div(#neg(@x), #0) -> #divByZero 1111.86/291.72 #div(#neg(@x), #neg(@y)) -> #pos(#natdiv(@x, @y)) 1111.86/291.72 #div(#neg(@x), #pos(@y)) -> #neg(#natdiv(@x, @y)) 1111.86/291.72 #div(#pos(@x), #0) -> #divByZero 1111.86/291.72 #div(#pos(@x), #neg(@y)) -> #neg(#natdiv(@x, @y)) 1111.86/291.72 #div(#pos(@x), #pos(@y)) -> #pos(#natdiv(@x, @y)) 1111.86/291.72 #eq(#0, #0) -> #true 1111.86/291.72 #eq(#0, #neg(@y)) -> #false 1111.86/291.72 #eq(#0, #pos(@y)) -> #false 1111.86/291.72 #eq(#0, #s(@y)) -> #false 1111.86/291.72 #eq(#neg(@x), #0) -> #false 1111.86/291.72 #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y) 1111.86/291.72 #eq(#neg(@x), #pos(@y)) -> #false 1111.86/291.72 #eq(#pos(@x), #0) -> #false 1111.86/291.72 #eq(#pos(@x), #neg(@y)) -> #false 1111.86/291.72 #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y) 1111.86/291.72 #eq(#s(@x), #0) -> #false 1111.86/291.72 #eq(#s(@x), #s(@y)) -> #eq(@x, @y) 1111.86/291.72 #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) -> #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) 1111.86/291.72 #eq(::(@x_1, @x_2), nil) -> #false 1111.86/291.72 #eq(nil, ::(@y_1, @y_2)) -> #false 1111.86/291.72 #eq(nil, nil) -> #true 1111.86/291.72 #mult(#0, #0) -> #0 1111.86/291.72 #mult(#0, #neg(@y)) -> #0 1111.86/291.72 #mult(#0, #pos(@y)) -> #0 1111.86/291.72 #mult(#neg(@x), #0) -> #0 1111.86/291.72 #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) 1111.86/291.72 #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) 1111.86/291.72 #mult(#pos(@x), #0) -> #0 1111.86/291.72 #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) 1111.86/291.72 #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) 1111.86/291.72 #natdiv(#0, #0) -> #divByZero 1111.86/291.72 #natdiv(#s(@x), #s(@y)) -> #s(#natdiv(#natsub(@x, @y), #s(@y))) 1111.86/291.72 #natmult(#0, @y) -> #0 1111.86/291.72 #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) 1111.86/291.72 #natsub(@x, #0) -> @x 1111.86/291.72 #natsub(#s(@x), #s(@y)) -> #natsub(@x, @y) 1111.86/291.72 #pred(#0) -> #neg(#s(#0)) 1111.86/291.72 #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) 1111.86/291.72 #pred(#pos(#s(#0))) -> #0 1111.86/291.72 #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) 1111.86/291.72 #sub(@x, #0) -> @x 1111.86/291.72 #sub(@x, #neg(@y)) -> #add(@x, #pos(@y)) 1111.86/291.72 #sub(@x, #pos(@y)) -> #add(@x, #neg(@y)) 1111.86/291.72 #succ(#0) -> #pos(#s(#0)) 1111.86/291.72 #succ(#neg(#s(#0))) -> #0 1111.86/291.72 #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) 1111.86/291.72 #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) 1111.86/291.72 1111.86/291.72 Types: 1111.86/291.72 #equal :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> #false:#true 1111.86/291.72 #eq :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> #false:#true 1111.86/291.72 *' :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 #mult :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 - :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 #sub :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 div :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 #div :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 eratos :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 eratos#1 :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 :: :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 filter :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 nil :: :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 filter#1 :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 filter#2 :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 filter#3 :: #false:#true -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 mod :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 #0 :: :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 #false :: #false:#true 1111.86/291.72 #true :: #false:#true 1111.86/291.72 #add :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 #neg :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 #s :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 #pred :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 #pos :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 #succ :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 #and :: #false:#true -> #false:#true -> #false:#true 1111.86/291.72 #divByZero :: :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 #natdiv :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 #natmult :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 #natsub :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 hole_#false:#true1_4 :: #false:#true 1111.86/291.72 hole_:::nil:#0:#s:#neg:#pos:#divByZero2_4 :: :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4 :: Nat -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 1111.86/291.72 1111.86/291.72 Lemmas: 1111.86/291.72 #eq(gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(+(1, n5_4)), gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(n5_4)) -> #false, rt in Omega(0) 1111.86/291.72 1111.86/291.72 1111.86/291.72 Generator Equations: 1111.86/291.72 gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(0) <=> nil 1111.86/291.72 gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(+(x, 1)) <=> ::(nil, gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(x)) 1111.86/291.72 1111.86/291.72 1111.86/291.72 The following defined symbols remain to be analysed: 1111.86/291.72 #add, eratos, eratos#1, filter, filter#1, #natdiv, #natmult, #natsub 1111.86/291.72 1111.86/291.72 They will be analysed ascendingly in the following order: 1111.86/291.72 eratos = eratos#1 1111.86/291.72 filter < eratos#1 1111.86/291.72 filter = filter#1 1111.86/291.72 #add < #natmult 1111.86/291.72 #natsub < #natdiv 1111.86/291.72 1111.86/291.72 ---------------------------------------- 1111.86/291.72 1111.86/291.72 (157) RewriteLemmaProof (LOWER BOUND(ID)) 1111.86/291.72 Proved the following rewrite lemma: 1111.86/291.72 filter#1(gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(+(1, n6574734_4)), gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(b)) -> *4_4, rt in Omega(n6574734_4) 1111.86/291.72 1111.86/291.72 Induction Base: 1111.86/291.72 filter#1(gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(+(1, 0)), gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(b)) 1111.86/291.72 1111.86/291.72 Induction Step: 1111.86/291.72 filter#1(gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(+(1, +(n6574734_4, 1))), gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(b)) ->_R^Omega(1) 1111.86/291.72 filter#2(filter(gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(b), gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(+(1, n6574734_4))), gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(b), nil) ->_R^Omega(1) 1111.86/291.72 filter#2(filter#1(gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(+(1, n6574734_4)), gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(b)), gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(b), nil) ->_IH 1111.86/291.72 filter#2(*4_4, gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(b), nil) 1111.86/291.72 1111.86/291.72 We have rt in Omega(n^1) and sz in O(n). Thus, we have irc_R in Omega(n). 1111.86/291.72 ---------------------------------------- 1111.86/291.72 1111.86/291.72 (158) 1111.86/291.72 Complex Obligation (BEST) 1111.86/291.72 1111.86/291.72 ---------------------------------------- 1111.86/291.72 1111.86/291.72 (159) 1111.86/291.72 Obligation: 1111.86/291.72 Proved the lower bound n^1 for the following obligation: 1111.86/291.72 1111.86/291.72 Innermost TRS: 1111.86/291.72 Rules: 1111.86/291.72 #equal(@x, @y) -> #eq(@x, @y) 1111.86/291.72 *'(@x, @y) -> #mult(@x, @y) 1111.86/291.72 -(@x, @y) -> #sub(@x, @y) 1111.86/291.72 div(@x, @y) -> #div(@x, @y) 1111.86/291.72 eratos(@l) -> eratos#1(@l) 1111.86/291.72 eratos#1(::(@x, @xs)) -> ::(@x, eratos(filter(@x, @xs))) 1111.86/291.72 eratos#1(nil) -> nil 1111.86/291.72 filter(@p, @l) -> filter#1(@l, @p) 1111.86/291.72 filter#1(::(@x, @xs), @p) -> filter#2(filter(@p, @xs), @p, @x) 1111.86/291.72 filter#1(nil, @p) -> nil 1111.86/291.72 filter#2(@xs', @p, @x) -> filter#3(#equal(mod(@x, @p), #0), @x, @xs') 1111.86/291.72 filter#3(#false, @x, @xs') -> ::(@x, @xs') 1111.86/291.72 filter#3(#true, @x, @xs') -> @xs' 1111.86/291.72 mod(@x, @y) -> -(@x, *'(@x, div(@x, @y))) 1111.86/291.72 #add(#0, @y) -> @y 1111.86/291.72 #add(#neg(#s(#0)), @y) -> #pred(@y) 1111.86/291.72 #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) 1111.86/291.72 #add(#pos(#s(#0)), @y) -> #succ(@y) 1111.86/291.72 #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) 1111.86/291.72 #and(#false, #false) -> #false 1111.86/291.72 #and(#false, #true) -> #false 1111.86/291.72 #and(#true, #false) -> #false 1111.86/291.72 #and(#true, #true) -> #true 1111.86/291.72 #div(#0, #0) -> #divByZero 1111.86/291.72 #div(#0, #neg(@y)) -> #0 1111.86/291.72 #div(#0, #pos(@y)) -> #0 1111.86/291.72 #div(#neg(@x), #0) -> #divByZero 1111.86/291.72 #div(#neg(@x), #neg(@y)) -> #pos(#natdiv(@x, @y)) 1111.86/291.72 #div(#neg(@x), #pos(@y)) -> #neg(#natdiv(@x, @y)) 1111.86/291.72 #div(#pos(@x), #0) -> #divByZero 1111.86/291.72 #div(#pos(@x), #neg(@y)) -> #neg(#natdiv(@x, @y)) 1111.86/291.72 #div(#pos(@x), #pos(@y)) -> #pos(#natdiv(@x, @y)) 1111.86/291.72 #eq(#0, #0) -> #true 1111.86/291.72 #eq(#0, #neg(@y)) -> #false 1111.86/291.72 #eq(#0, #pos(@y)) -> #false 1111.86/291.72 #eq(#0, #s(@y)) -> #false 1111.86/291.72 #eq(#neg(@x), #0) -> #false 1111.86/291.72 #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y) 1111.86/291.72 #eq(#neg(@x), #pos(@y)) -> #false 1111.86/291.72 #eq(#pos(@x), #0) -> #false 1111.86/291.72 #eq(#pos(@x), #neg(@y)) -> #false 1111.86/291.72 #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y) 1111.86/291.72 #eq(#s(@x), #0) -> #false 1111.86/291.72 #eq(#s(@x), #s(@y)) -> #eq(@x, @y) 1111.86/291.72 #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) -> #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) 1111.86/291.72 #eq(::(@x_1, @x_2), nil) -> #false 1111.86/291.72 #eq(nil, ::(@y_1, @y_2)) -> #false 1111.86/291.72 #eq(nil, nil) -> #true 1111.86/291.72 #mult(#0, #0) -> #0 1111.86/291.72 #mult(#0, #neg(@y)) -> #0 1111.86/291.72 #mult(#0, #pos(@y)) -> #0 1111.86/291.72 #mult(#neg(@x), #0) -> #0 1111.86/291.72 #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) 1111.86/291.72 #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) 1111.86/291.72 #mult(#pos(@x), #0) -> #0 1111.86/291.72 #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) 1111.86/291.72 #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) 1111.86/291.72 #natdiv(#0, #0) -> #divByZero 1111.86/291.72 #natdiv(#s(@x), #s(@y)) -> #s(#natdiv(#natsub(@x, @y), #s(@y))) 1111.86/291.72 #natmult(#0, @y) -> #0 1111.86/291.72 #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) 1111.86/291.72 #natsub(@x, #0) -> @x 1111.86/291.72 #natsub(#s(@x), #s(@y)) -> #natsub(@x, @y) 1111.86/291.72 #pred(#0) -> #neg(#s(#0)) 1111.86/291.72 #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) 1111.86/291.72 #pred(#pos(#s(#0))) -> #0 1111.86/291.72 #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) 1111.86/291.72 #sub(@x, #0) -> @x 1111.86/291.72 #sub(@x, #neg(@y)) -> #add(@x, #pos(@y)) 1111.86/291.72 #sub(@x, #pos(@y)) -> #add(@x, #neg(@y)) 1111.86/291.72 #succ(#0) -> #pos(#s(#0)) 1111.86/291.72 #succ(#neg(#s(#0))) -> #0 1111.86/291.72 #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) 1111.86/291.72 #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) 1111.86/291.72 1111.86/291.72 Types: 1111.86/291.72 #equal :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> #false:#true 1111.86/291.72 #eq :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> #false:#true 1111.86/291.72 *' :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 #mult :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 - :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 #sub :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 div :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 #div :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 eratos :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 eratos#1 :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 :: :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 filter :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 nil :: :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 filter#1 :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 filter#2 :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 filter#3 :: #false:#true -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 mod :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 #0 :: :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 #false :: #false:#true 1111.86/291.72 #true :: #false:#true 1111.86/291.72 #add :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 #neg :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 #s :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 #pred :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 #pos :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 #succ :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 #and :: #false:#true -> #false:#true -> #false:#true 1111.86/291.72 #divByZero :: :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 #natdiv :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 #natmult :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 #natsub :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 hole_#false:#true1_4 :: #false:#true 1111.86/291.72 hole_:::nil:#0:#s:#neg:#pos:#divByZero2_4 :: :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4 :: Nat -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 1111.86/291.72 1111.86/291.72 Lemmas: 1111.86/291.72 #eq(gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(+(1, n5_4)), gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(n5_4)) -> #false, rt in Omega(0) 1111.86/291.72 1111.86/291.72 1111.86/291.72 Generator Equations: 1111.86/291.72 gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(0) <=> nil 1111.86/291.72 gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(+(x, 1)) <=> ::(nil, gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(x)) 1111.86/291.72 1111.86/291.72 1111.86/291.72 The following defined symbols remain to be analysed: 1111.86/291.72 filter#1, eratos, eratos#1, filter 1111.86/291.72 1111.86/291.72 They will be analysed ascendingly in the following order: 1111.86/291.72 eratos = eratos#1 1111.86/291.72 filter < eratos#1 1111.86/291.72 filter = filter#1 1111.86/291.72 1111.86/291.72 ---------------------------------------- 1111.86/291.72 1111.86/291.72 (160) LowerBoundPropagationProof (FINISHED) 1111.86/291.72 Propagated lower bound. 1111.86/291.72 ---------------------------------------- 1111.86/291.72 1111.86/291.72 (161) 1111.86/291.72 BOUNDS(n^1, INF) 1111.86/291.72 1111.86/291.72 ---------------------------------------- 1111.86/291.72 1111.86/291.72 (162) 1111.86/291.72 Obligation: 1111.86/291.72 Innermost TRS: 1111.86/291.72 Rules: 1111.86/291.72 #equal(@x, @y) -> #eq(@x, @y) 1111.86/291.72 *'(@x, @y) -> #mult(@x, @y) 1111.86/291.72 -(@x, @y) -> #sub(@x, @y) 1111.86/291.72 div(@x, @y) -> #div(@x, @y) 1111.86/291.72 eratos(@l) -> eratos#1(@l) 1111.86/291.72 eratos#1(::(@x, @xs)) -> ::(@x, eratos(filter(@x, @xs))) 1111.86/291.72 eratos#1(nil) -> nil 1111.86/291.72 filter(@p, @l) -> filter#1(@l, @p) 1111.86/291.72 filter#1(::(@x, @xs), @p) -> filter#2(filter(@p, @xs), @p, @x) 1111.86/291.72 filter#1(nil, @p) -> nil 1111.86/291.72 filter#2(@xs', @p, @x) -> filter#3(#equal(mod(@x, @p), #0), @x, @xs') 1111.86/291.72 filter#3(#false, @x, @xs') -> ::(@x, @xs') 1111.86/291.72 filter#3(#true, @x, @xs') -> @xs' 1111.86/291.72 mod(@x, @y) -> -(@x, *'(@x, div(@x, @y))) 1111.86/291.72 #add(#0, @y) -> @y 1111.86/291.72 #add(#neg(#s(#0)), @y) -> #pred(@y) 1111.86/291.72 #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) 1111.86/291.72 #add(#pos(#s(#0)), @y) -> #succ(@y) 1111.86/291.72 #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) 1111.86/291.72 #and(#false, #false) -> #false 1111.86/291.72 #and(#false, #true) -> #false 1111.86/291.72 #and(#true, #false) -> #false 1111.86/291.72 #and(#true, #true) -> #true 1111.86/291.72 #div(#0, #0) -> #divByZero 1111.86/291.72 #div(#0, #neg(@y)) -> #0 1111.86/291.72 #div(#0, #pos(@y)) -> #0 1111.86/291.72 #div(#neg(@x), #0) -> #divByZero 1111.86/291.72 #div(#neg(@x), #neg(@y)) -> #pos(#natdiv(@x, @y)) 1111.86/291.72 #div(#neg(@x), #pos(@y)) -> #neg(#natdiv(@x, @y)) 1111.86/291.72 #div(#pos(@x), #0) -> #divByZero 1111.86/291.72 #div(#pos(@x), #neg(@y)) -> #neg(#natdiv(@x, @y)) 1111.86/291.72 #div(#pos(@x), #pos(@y)) -> #pos(#natdiv(@x, @y)) 1111.86/291.72 #eq(#0, #0) -> #true 1111.86/291.72 #eq(#0, #neg(@y)) -> #false 1111.86/291.72 #eq(#0, #pos(@y)) -> #false 1111.86/291.72 #eq(#0, #s(@y)) -> #false 1111.86/291.72 #eq(#neg(@x), #0) -> #false 1111.86/291.72 #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y) 1111.86/291.72 #eq(#neg(@x), #pos(@y)) -> #false 1111.86/291.72 #eq(#pos(@x), #0) -> #false 1111.86/291.72 #eq(#pos(@x), #neg(@y)) -> #false 1111.86/291.72 #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y) 1111.86/291.72 #eq(#s(@x), #0) -> #false 1111.86/291.72 #eq(#s(@x), #s(@y)) -> #eq(@x, @y) 1111.86/291.72 #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) -> #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) 1111.86/291.72 #eq(::(@x_1, @x_2), nil) -> #false 1111.86/291.72 #eq(nil, ::(@y_1, @y_2)) -> #false 1111.86/291.72 #eq(nil, nil) -> #true 1111.86/291.72 #mult(#0, #0) -> #0 1111.86/291.72 #mult(#0, #neg(@y)) -> #0 1111.86/291.72 #mult(#0, #pos(@y)) -> #0 1111.86/291.72 #mult(#neg(@x), #0) -> #0 1111.86/291.72 #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) 1111.86/291.72 #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) 1111.86/291.72 #mult(#pos(@x), #0) -> #0 1111.86/291.72 #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) 1111.86/291.72 #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) 1111.86/291.72 #natdiv(#0, #0) -> #divByZero 1111.86/291.72 #natdiv(#s(@x), #s(@y)) -> #s(#natdiv(#natsub(@x, @y), #s(@y))) 1111.86/291.72 #natmult(#0, @y) -> #0 1111.86/291.72 #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) 1111.86/291.72 #natsub(@x, #0) -> @x 1111.86/291.72 #natsub(#s(@x), #s(@y)) -> #natsub(@x, @y) 1111.86/291.72 #pred(#0) -> #neg(#s(#0)) 1111.86/291.72 #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) 1111.86/291.72 #pred(#pos(#s(#0))) -> #0 1111.86/291.72 #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) 1111.86/291.72 #sub(@x, #0) -> @x 1111.86/291.72 #sub(@x, #neg(@y)) -> #add(@x, #pos(@y)) 1111.86/291.72 #sub(@x, #pos(@y)) -> #add(@x, #neg(@y)) 1111.86/291.72 #succ(#0) -> #pos(#s(#0)) 1111.86/291.72 #succ(#neg(#s(#0))) -> #0 1111.86/291.72 #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) 1111.86/291.72 #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) 1111.86/291.72 1111.86/291.72 Types: 1111.86/291.72 #equal :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> #false:#true 1111.86/291.72 #eq :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> #false:#true 1111.86/291.72 *' :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 #mult :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 - :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 #sub :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 div :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 #div :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 eratos :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 eratos#1 :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 :: :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 filter :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 nil :: :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 filter#1 :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 filter#2 :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 filter#3 :: #false:#true -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 mod :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 #0 :: :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 #false :: #false:#true 1111.86/291.72 #true :: #false:#true 1111.86/291.72 #add :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 #neg :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 #s :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 #pred :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 #pos :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 #succ :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 #and :: #false:#true -> #false:#true -> #false:#true 1111.86/291.72 #divByZero :: :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 #natdiv :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 #natmult :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 #natsub :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 hole_#false:#true1_4 :: #false:#true 1111.86/291.72 hole_:::nil:#0:#s:#neg:#pos:#divByZero2_4 :: :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4 :: Nat -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 1111.86/291.72 1111.86/291.72 Lemmas: 1111.86/291.72 #eq(gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(+(1, n5_4)), gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(n5_4)) -> #false, rt in Omega(0) 1111.86/291.72 filter#1(gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(+(1, n6574734_4)), gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(b)) -> *4_4, rt in Omega(n6574734_4) 1111.86/291.72 1111.86/291.72 1111.86/291.72 Generator Equations: 1111.86/291.72 gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(0) <=> nil 1111.86/291.72 gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(+(x, 1)) <=> ::(nil, gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(x)) 1111.86/291.72 1111.86/291.72 1111.86/291.72 The following defined symbols remain to be analysed: 1111.86/291.72 filter, eratos, eratos#1 1111.86/291.72 1111.86/291.72 They will be analysed ascendingly in the following order: 1111.86/291.72 eratos = eratos#1 1111.86/291.72 filter < eratos#1 1111.86/291.72 filter = filter#1 1111.86/291.72 1111.86/291.72 ---------------------------------------- 1111.86/291.72 1111.86/291.72 (163) RewriteLemmaProof (LOWER BOUND(ID)) 1111.86/291.72 Proved the following rewrite lemma: 1111.86/291.72 filter(gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(a), gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(n8696838_4)) -> *4_4, rt in Omega(n8696838_4) 1111.86/291.72 1111.86/291.72 Induction Base: 1111.86/291.72 filter(gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(a), gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(0)) 1111.86/291.72 1111.86/291.72 Induction Step: 1111.86/291.72 filter(gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(a), gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(+(n8696838_4, 1))) ->_R^Omega(1) 1111.86/291.72 filter#1(gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(+(n8696838_4, 1)), gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(a)) ->_R^Omega(1) 1111.86/291.72 filter#2(filter(gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(a), gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(n8696838_4)), gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(a), nil) ->_IH 1111.86/291.72 filter#2(*4_4, gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(a), nil) 1111.86/291.72 1111.86/291.72 We have rt in Omega(n^1) and sz in O(n). Thus, we have irc_R in Omega(n). 1111.86/291.72 ---------------------------------------- 1111.86/291.72 1111.86/291.72 (164) 1111.86/291.72 Obligation: 1111.86/291.72 Innermost TRS: 1111.86/291.72 Rules: 1111.86/291.72 #equal(@x, @y) -> #eq(@x, @y) 1111.86/291.72 *'(@x, @y) -> #mult(@x, @y) 1111.86/291.72 -(@x, @y) -> #sub(@x, @y) 1111.86/291.72 div(@x, @y) -> #div(@x, @y) 1111.86/291.72 eratos(@l) -> eratos#1(@l) 1111.86/291.72 eratos#1(::(@x, @xs)) -> ::(@x, eratos(filter(@x, @xs))) 1111.86/291.72 eratos#1(nil) -> nil 1111.86/291.72 filter(@p, @l) -> filter#1(@l, @p) 1111.86/291.72 filter#1(::(@x, @xs), @p) -> filter#2(filter(@p, @xs), @p, @x) 1111.86/291.72 filter#1(nil, @p) -> nil 1111.86/291.72 filter#2(@xs', @p, @x) -> filter#3(#equal(mod(@x, @p), #0), @x, @xs') 1111.86/291.72 filter#3(#false, @x, @xs') -> ::(@x, @xs') 1111.86/291.72 filter#3(#true, @x, @xs') -> @xs' 1111.86/291.72 mod(@x, @y) -> -(@x, *'(@x, div(@x, @y))) 1111.86/291.72 #add(#0, @y) -> @y 1111.86/291.72 #add(#neg(#s(#0)), @y) -> #pred(@y) 1111.86/291.72 #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) 1111.86/291.72 #add(#pos(#s(#0)), @y) -> #succ(@y) 1111.86/291.72 #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) 1111.86/291.72 #and(#false, #false) -> #false 1111.86/291.72 #and(#false, #true) -> #false 1111.86/291.72 #and(#true, #false) -> #false 1111.86/291.72 #and(#true, #true) -> #true 1111.86/291.72 #div(#0, #0) -> #divByZero 1111.86/291.72 #div(#0, #neg(@y)) -> #0 1111.86/291.72 #div(#0, #pos(@y)) -> #0 1111.86/291.72 #div(#neg(@x), #0) -> #divByZero 1111.86/291.72 #div(#neg(@x), #neg(@y)) -> #pos(#natdiv(@x, @y)) 1111.86/291.72 #div(#neg(@x), #pos(@y)) -> #neg(#natdiv(@x, @y)) 1111.86/291.72 #div(#pos(@x), #0) -> #divByZero 1111.86/291.72 #div(#pos(@x), #neg(@y)) -> #neg(#natdiv(@x, @y)) 1111.86/291.72 #div(#pos(@x), #pos(@y)) -> #pos(#natdiv(@x, @y)) 1111.86/291.72 #eq(#0, #0) -> #true 1111.86/291.72 #eq(#0, #neg(@y)) -> #false 1111.86/291.72 #eq(#0, #pos(@y)) -> #false 1111.86/291.72 #eq(#0, #s(@y)) -> #false 1111.86/291.72 #eq(#neg(@x), #0) -> #false 1111.86/291.72 #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y) 1111.86/291.72 #eq(#neg(@x), #pos(@y)) -> #false 1111.86/291.72 #eq(#pos(@x), #0) -> #false 1111.86/291.72 #eq(#pos(@x), #neg(@y)) -> #false 1111.86/291.72 #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y) 1111.86/291.72 #eq(#s(@x), #0) -> #false 1111.86/291.72 #eq(#s(@x), #s(@y)) -> #eq(@x, @y) 1111.86/291.72 #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) -> #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) 1111.86/291.72 #eq(::(@x_1, @x_2), nil) -> #false 1111.86/291.72 #eq(nil, ::(@y_1, @y_2)) -> #false 1111.86/291.72 #eq(nil, nil) -> #true 1111.86/291.72 #mult(#0, #0) -> #0 1111.86/291.72 #mult(#0, #neg(@y)) -> #0 1111.86/291.72 #mult(#0, #pos(@y)) -> #0 1111.86/291.72 #mult(#neg(@x), #0) -> #0 1111.86/291.72 #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) 1111.86/291.72 #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) 1111.86/291.72 #mult(#pos(@x), #0) -> #0 1111.86/291.72 #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) 1111.86/291.72 #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) 1111.86/291.72 #natdiv(#0, #0) -> #divByZero 1111.86/291.72 #natdiv(#s(@x), #s(@y)) -> #s(#natdiv(#natsub(@x, @y), #s(@y))) 1111.86/291.72 #natmult(#0, @y) -> #0 1111.86/291.72 #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) 1111.86/291.72 #natsub(@x, #0) -> @x 1111.86/291.72 #natsub(#s(@x), #s(@y)) -> #natsub(@x, @y) 1111.86/291.72 #pred(#0) -> #neg(#s(#0)) 1111.86/291.72 #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) 1111.86/291.72 #pred(#pos(#s(#0))) -> #0 1111.86/291.72 #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) 1111.86/291.72 #sub(@x, #0) -> @x 1111.86/291.72 #sub(@x, #neg(@y)) -> #add(@x, #pos(@y)) 1111.86/291.72 #sub(@x, #pos(@y)) -> #add(@x, #neg(@y)) 1111.86/291.72 #succ(#0) -> #pos(#s(#0)) 1111.86/291.72 #succ(#neg(#s(#0))) -> #0 1111.86/291.72 #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) 1111.86/291.72 #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) 1111.86/291.72 1111.86/291.72 Types: 1111.86/291.72 #equal :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> #false:#true 1111.86/291.72 #eq :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> #false:#true 1111.86/291.72 *' :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 #mult :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 - :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 #sub :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 div :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 #div :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 eratos :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 eratos#1 :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 :: :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 filter :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 nil :: :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 filter#1 :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 filter#2 :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 filter#3 :: #false:#true -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 mod :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 #0 :: :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 #false :: #false:#true 1111.86/291.72 #true :: #false:#true 1111.86/291.72 #add :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 #neg :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 #s :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 #pred :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 #pos :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 #succ :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 #and :: #false:#true -> #false:#true -> #false:#true 1111.86/291.72 #divByZero :: :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 #natdiv :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 #natmult :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 #natsub :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 hole_#false:#true1_4 :: #false:#true 1111.86/291.72 hole_:::nil:#0:#s:#neg:#pos:#divByZero2_4 :: :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4 :: Nat -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.72 1111.86/291.72 1111.86/291.72 Lemmas: 1111.86/291.72 #eq(gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(+(1, n5_4)), gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(n5_4)) -> #false, rt in Omega(0) 1111.86/291.72 filter#1(gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(+(1, n6574734_4)), gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(b)) -> *4_4, rt in Omega(n6574734_4) 1111.86/291.72 filter(gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(a), gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(n8696838_4)) -> *4_4, rt in Omega(n8696838_4) 1111.86/291.72 1111.86/291.72 1111.86/291.72 Generator Equations: 1111.86/291.72 gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(0) <=> nil 1111.86/291.72 gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(+(x, 1)) <=> ::(nil, gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(x)) 1111.86/291.72 1111.86/291.72 1111.86/291.72 The following defined symbols remain to be analysed: 1111.86/291.72 filter#1, eratos, eratos#1 1111.86/291.72 1111.86/291.72 They will be analysed ascendingly in the following order: 1111.86/291.72 eratos = eratos#1 1111.86/291.72 filter < eratos#1 1111.86/291.72 filter = filter#1 1111.86/291.72 1111.86/291.72 ---------------------------------------- 1111.86/291.72 1111.86/291.72 (165) RewriteLemmaProof (LOWER BOUND(ID)) 1111.86/291.72 Proved the following rewrite lemma: 1111.86/291.72 filter#1(gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(+(1, n10760341_4)), gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(b)) -> *4_4, rt in Omega(n10760341_4) 1111.86/291.72 1111.86/291.72 Induction Base: 1111.86/291.72 filter#1(gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(+(1, 0)), gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(b)) 1111.86/291.72 1111.86/291.72 Induction Step: 1111.86/291.72 filter#1(gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(+(1, +(n10760341_4, 1))), gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(b)) ->_R^Omega(1) 1111.86/291.72 filter#2(filter(gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(b), gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(+(1, n10760341_4))), gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(b), nil) ->_R^Omega(1) 1111.86/291.72 filter#2(filter#1(gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(+(1, n10760341_4)), gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(b)), gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(b), nil) ->_IH 1111.86/291.72 filter#2(*4_4, gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(b), nil) 1111.86/291.72 1111.86/291.72 We have rt in Omega(n^1) and sz in O(n). Thus, we have irc_R in Omega(n). 1111.86/291.72 ---------------------------------------- 1111.86/291.72 1111.86/291.72 (166) 1111.86/291.72 Obligation: 1111.86/291.72 Innermost TRS: 1111.86/291.72 Rules: 1111.86/291.72 #equal(@x, @y) -> #eq(@x, @y) 1111.86/291.72 *'(@x, @y) -> #mult(@x, @y) 1111.86/291.72 -(@x, @y) -> #sub(@x, @y) 1111.86/291.72 div(@x, @y) -> #div(@x, @y) 1111.86/291.72 eratos(@l) -> eratos#1(@l) 1111.86/291.72 eratos#1(::(@x, @xs)) -> ::(@x, eratos(filter(@x, @xs))) 1111.86/291.72 eratos#1(nil) -> nil 1111.86/291.72 filter(@p, @l) -> filter#1(@l, @p) 1111.86/291.72 filter#1(::(@x, @xs), @p) -> filter#2(filter(@p, @xs), @p, @x) 1111.86/291.73 filter#1(nil, @p) -> nil 1111.86/291.73 filter#2(@xs', @p, @x) -> filter#3(#equal(mod(@x, @p), #0), @x, @xs') 1111.86/291.73 filter#3(#false, @x, @xs') -> ::(@x, @xs') 1111.86/291.73 filter#3(#true, @x, @xs') -> @xs' 1111.86/291.73 mod(@x, @y) -> -(@x, *'(@x, div(@x, @y))) 1111.86/291.73 #add(#0, @y) -> @y 1111.86/291.73 #add(#neg(#s(#0)), @y) -> #pred(@y) 1111.86/291.73 #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) 1111.86/291.73 #add(#pos(#s(#0)), @y) -> #succ(@y) 1111.86/291.73 #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) 1111.86/291.73 #and(#false, #false) -> #false 1111.86/291.73 #and(#false, #true) -> #false 1111.86/291.73 #and(#true, #false) -> #false 1111.86/291.73 #and(#true, #true) -> #true 1111.86/291.73 #div(#0, #0) -> #divByZero 1111.86/291.73 #div(#0, #neg(@y)) -> #0 1111.86/291.73 #div(#0, #pos(@y)) -> #0 1111.86/291.73 #div(#neg(@x), #0) -> #divByZero 1111.86/291.73 #div(#neg(@x), #neg(@y)) -> #pos(#natdiv(@x, @y)) 1111.86/291.73 #div(#neg(@x), #pos(@y)) -> #neg(#natdiv(@x, @y)) 1111.86/291.73 #div(#pos(@x), #0) -> #divByZero 1111.86/291.73 #div(#pos(@x), #neg(@y)) -> #neg(#natdiv(@x, @y)) 1111.86/291.73 #div(#pos(@x), #pos(@y)) -> #pos(#natdiv(@x, @y)) 1111.86/291.73 #eq(#0, #0) -> #true 1111.86/291.73 #eq(#0, #neg(@y)) -> #false 1111.86/291.73 #eq(#0, #pos(@y)) -> #false 1111.86/291.73 #eq(#0, #s(@y)) -> #false 1111.86/291.73 #eq(#neg(@x), #0) -> #false 1111.86/291.73 #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y) 1111.86/291.73 #eq(#neg(@x), #pos(@y)) -> #false 1111.86/291.73 #eq(#pos(@x), #0) -> #false 1111.86/291.73 #eq(#pos(@x), #neg(@y)) -> #false 1111.86/291.73 #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y) 1111.86/291.73 #eq(#s(@x), #0) -> #false 1111.86/291.73 #eq(#s(@x), #s(@y)) -> #eq(@x, @y) 1111.86/291.73 #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) -> #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) 1111.86/291.73 #eq(::(@x_1, @x_2), nil) -> #false 1111.86/291.73 #eq(nil, ::(@y_1, @y_2)) -> #false 1111.86/291.73 #eq(nil, nil) -> #true 1111.86/291.73 #mult(#0, #0) -> #0 1111.86/291.73 #mult(#0, #neg(@y)) -> #0 1111.86/291.73 #mult(#0, #pos(@y)) -> #0 1111.86/291.73 #mult(#neg(@x), #0) -> #0 1111.86/291.73 #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) 1111.86/291.73 #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) 1111.86/291.73 #mult(#pos(@x), #0) -> #0 1111.86/291.73 #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) 1111.86/291.73 #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) 1111.86/291.73 #natdiv(#0, #0) -> #divByZero 1111.86/291.73 #natdiv(#s(@x), #s(@y)) -> #s(#natdiv(#natsub(@x, @y), #s(@y))) 1111.86/291.73 #natmult(#0, @y) -> #0 1111.86/291.73 #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) 1111.86/291.73 #natsub(@x, #0) -> @x 1111.86/291.73 #natsub(#s(@x), #s(@y)) -> #natsub(@x, @y) 1111.86/291.73 #pred(#0) -> #neg(#s(#0)) 1111.86/291.73 #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) 1111.86/291.73 #pred(#pos(#s(#0))) -> #0 1111.86/291.73 #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) 1111.86/291.73 #sub(@x, #0) -> @x 1111.86/291.73 #sub(@x, #neg(@y)) -> #add(@x, #pos(@y)) 1111.86/291.73 #sub(@x, #pos(@y)) -> #add(@x, #neg(@y)) 1111.86/291.73 #succ(#0) -> #pos(#s(#0)) 1111.86/291.73 #succ(#neg(#s(#0))) -> #0 1111.86/291.73 #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) 1111.86/291.73 #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) 1111.86/291.73 1111.86/291.73 Types: 1111.86/291.73 #equal :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> #false:#true 1111.86/291.73 #eq :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> #false:#true 1111.86/291.73 *' :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.73 #mult :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.73 - :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.73 #sub :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.73 div :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.73 #div :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.73 eratos :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.73 eratos#1 :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.73 :: :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.73 filter :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.73 nil :: :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.73 filter#1 :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.73 filter#2 :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.73 filter#3 :: #false:#true -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.73 mod :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.73 #0 :: :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.73 #false :: #false:#true 1111.86/291.73 #true :: #false:#true 1111.86/291.73 #add :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.73 #neg :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.73 #s :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.73 #pred :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.73 #pos :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.73 #succ :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.73 #and :: #false:#true -> #false:#true -> #false:#true 1111.86/291.73 #divByZero :: :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.73 #natdiv :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.73 #natmult :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.73 #natsub :: :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.73 hole_#false:#true1_4 :: #false:#true 1111.86/291.73 hole_:::nil:#0:#s:#neg:#pos:#divByZero2_4 :: :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.73 gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4 :: Nat -> :::nil:#0:#s:#neg:#pos:#divByZero 1111.86/291.73 1111.86/291.73 1111.86/291.73 Lemmas: 1111.86/291.73 #eq(gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(+(1, n5_4)), gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(n5_4)) -> #false, rt in Omega(0) 1111.86/291.73 filter#1(gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(+(1, n10760341_4)), gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(b)) -> *4_4, rt in Omega(n10760341_4) 1111.86/291.73 filter(gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(a), gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(n8696838_4)) -> *4_4, rt in Omega(n8696838_4) 1111.86/291.73 1111.86/291.73 1111.86/291.73 Generator Equations: 1111.86/291.73 gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(0) <=> nil 1111.86/291.73 gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(+(x, 1)) <=> ::(nil, gen_:::nil:#0:#s:#neg:#pos:#divByZero3_4(x)) 1111.86/291.73 1111.86/291.73 1111.86/291.73 The following defined symbols remain to be analysed: 1111.86/291.73 eratos#1, eratos 1111.86/291.73 1111.86/291.73 They will be analysed ascendingly in the following order: 1111.86/291.73 eratos = eratos#1 1112.10/291.82 EOF