Trying to load file: main.koat Initial Control flow graph problem: Start location: evalfstart 0: evalfstart -> evalfentryin : [], cost: 1 1: evalfentryin -> evalfbb7in : A'=B, C'=0, [], cost: 1 2: evalfbb7in -> evalfbbin : [ A>=0 && C>=0 ], cost: 1 3: evalfbb7in -> evalfreturnin : [ 0>=1+A ], cost: 1 4: evalfbb7in -> evalfreturnin : [ 0>=1+C ], cost: 1 5: evalfbbin -> evalfbb3in : D'=C, [ 0>=1+free ], cost: 1 6: evalfbbin -> evalfbb3in : D'=C, [ free_1>=1 ], cost: 1 7: evalfbbin -> evalfbb6in : D'=A, E'=C, [], cost: 1 16: evalfreturnin -> evalfstop : [], cost: 1 8: evalfbb3in -> evalfbb5in : [ D>=1+B ], cost: 1 9: evalfbb3in -> evalfbb4in : [ B>=D ], cost: 1 15: evalfbb6in -> evalfbb7in : A'=D, C'=-1+E, [], cost: 1 14: evalfbb5in -> evalfbb6in : D'=-1+A, E'=D, [], cost: 1 12: evalfbb4in -> evalfbb5in : [], cost: 1 10: evalfbb4in -> evalfbb2in : [ 0>=1+free_2 ], cost: 1 11: evalfbb4in -> evalfbb2in : [ free_3>=1 ], cost: 1 13: evalfbb2in -> evalfbb3in : D'=1+D, [], cost: 1 Removing duplicate transition: 5. Removing duplicate transition: 10. Simplified the transitions: Start location: evalfstart 0: evalfstart -> evalfentryin : [], cost: 1 1: evalfentryin -> evalfbb7in : A'=B, C'=0, [], cost: 1 2: evalfbb7in -> evalfbbin : [ A>=0 && C>=0 ], cost: 1 6: evalfbbin -> evalfbb3in : D'=C, [], cost: 1 7: evalfbbin -> evalfbb6in : D'=A, E'=C, [], cost: 1 8: evalfbb3in -> evalfbb5in : [ D>=1+B ], cost: 1 9: evalfbb3in -> evalfbb4in : [ B>=D ], cost: 1 15: evalfbb6in -> evalfbb7in : A'=D, C'=-1+E, [], cost: 1 14: evalfbb5in -> evalfbb6in : D'=-1+A, E'=D, [], cost: 1 12: evalfbb4in -> evalfbb5in : [], cost: 1 11: evalfbb4in -> evalfbb2in : [], cost: 1 13: evalfbb2in -> evalfbb3in : D'=1+D, [], cost: 1 Applied simple chaining: Start location: evalfstart 0: evalfstart -> evalfbb7in : A'=B, C'=0, [], cost: 2 2: evalfbb7in -> evalfbbin : [ A>=0 && C>=0 ], cost: 1 6: evalfbbin -> evalfbb3in : D'=C, [], cost: 1 7: evalfbbin -> evalfbb6in : D'=A, E'=C, [], cost: 1 8: evalfbb3in -> evalfbb5in : [ D>=1+B ], cost: 1 9: evalfbb3in -> evalfbb4in : [ B>=D ], cost: 1 15: evalfbb6in -> evalfbb7in : A'=D, C'=-1+E, [], cost: 1 14: evalfbb5in -> evalfbb6in : D'=-1+A, E'=D, [], cost: 1 11: evalfbb4in -> evalfbb3in : D'=1+D, [], cost: 2 12: evalfbb4in -> evalfbb5in : [], cost: 1 Applied chaining over branches and pruning: Start location: evalfstart 0: evalfstart -> evalfbb7in : A'=B, C'=0, [], cost: 2 17: evalfbb7in -> evalfbb3in : D'=C, [ A>=0 && C>=0 ], cost: 2 18: evalfbb7in -> evalfbb6in : D'=A, E'=C, [ A>=0 && C>=0 ], cost: 2 19: evalfbb3in -> evalfbb3in : D'=1+D, [ B>=D ], cost: 3 8: evalfbb3in -> evalfbb5in : [ D>=1+B ], cost: 1 20: evalfbb3in -> evalfbb5in : [ B>=D ], cost: 2 15: evalfbb6in -> evalfbb7in : A'=D, C'=-1+E, [], cost: 1 14: evalfbb5in -> evalfbb6in : D'=-1+A, E'=D, [], cost: 1 Eliminating 1 self-loops for location evalfbb3in Self-Loop 19 has the metering function: 1+B-D, resulting in the new transition 21. Removing the self-loops: 19. Removed all Self-loops using metering functions (where possible): Start location: evalfstart 0: evalfstart -> evalfbb7in : A'=B, C'=0, [], cost: 2 17: evalfbb7in -> evalfbb3in : D'=C, [ A>=0 && C>=0 ], cost: 2 18: evalfbb7in -> evalfbb6in : D'=A, E'=C, [ A>=0 && C>=0 ], cost: 2 21: evalfbb3in -> [11] : D'=1+B, [ B>=D ], cost: 3+3*B-3*D 15: evalfbb6in -> evalfbb7in : A'=D, C'=-1+E, [], cost: 1 14: evalfbb5in -> evalfbb6in : D'=-1+A, E'=D, [], cost: 1 8: [11] -> evalfbb5in : [ D>=1+B ], cost: 1 20: [11] -> evalfbb5in : [ B>=D ], cost: 2 Applied simple chaining: Start location: evalfstart 0: evalfstart -> evalfbb7in : A'=B, C'=0, [], cost: 2 18: evalfbb7in -> evalfbb6in : D'=A, E'=C, [ A>=0 && C>=0 ], cost: 2 17: evalfbb7in -> [11] : D'=1+B, [ A>=0 && C>=0 && B>=C ], cost: 5+3*B-3*C 15: evalfbb6in -> evalfbb7in : A'=D, C'=-1+E, [], cost: 1 14: evalfbb5in -> evalfbb6in : D'=-1+A, E'=D, [], cost: 1 8: [11] -> evalfbb5in : [ D>=1+B ], cost: 1 20: [11] -> evalfbb5in : [ B>=D ], cost: 2 Applied chaining over branches and pruning: Start location: evalfstart 0: evalfstart -> evalfbb7in : A'=B, C'=0, [], cost: 2 18: evalfbb7in -> evalfbb6in : D'=A, E'=C, [ A>=0 && C>=0 ], cost: 2 22: evalfbb7in -> evalfbb5in : D'=1+B, [ A>=0 && C>=0 && B>=C && 1+B>=1+B ], cost: 6+3*B-3*C 23: evalfbb7in -> [12] : D'=1+B, [ A>=0 && C>=0 && B>=C ], cost: 5+3*B-3*C 15: evalfbb6in -> evalfbb7in : A'=D, C'=-1+E, [], cost: 1 14: evalfbb5in -> evalfbb6in : D'=-1+A, E'=D, [], cost: 1 Applied simple chaining: Start location: evalfstart 0: evalfstart -> evalfbb7in : A'=B, C'=0, [], cost: 2 18: evalfbb7in -> evalfbb6in : D'=A, E'=C, [ A>=0 && C>=0 ], cost: 2 22: evalfbb7in -> evalfbb6in : D'=-1+A, E'=1+B, [ A>=0 && C>=0 && B>=C && 1+B>=1+B ], cost: 7+3*B-3*C 23: evalfbb7in -> [12] : D'=1+B, [ A>=0 && C>=0 && B>=C ], cost: 5+3*B-3*C 15: evalfbb6in -> evalfbb7in : A'=D, C'=-1+E, [], cost: 1 Applied chaining over branches and pruning: Start location: evalfstart 0: evalfstart -> evalfbb7in : A'=B, C'=0, [], cost: 2 24: evalfbb7in -> evalfbb7in : A'=A, C'=-1+C, D'=A, E'=C, [ A>=0 && C>=0 ], cost: 3 25: evalfbb7in -> evalfbb7in : A'=-1+A, C'=B, D'=-1+A, E'=1+B, [ A>=0 && C>=0 && B>=C && 1+B>=1+B ], cost: 8+3*B-3*C 23: evalfbb7in -> [12] : D'=1+B, [ A>=0 && C>=0 && B>=C ], cost: 5+3*B-3*C Eliminating 2 self-loops for location evalfbb7in Self-Loop 24 has the metering function: 1+C, resulting in the new transition 26. Self-Loop 25 has the metering function: 1+A, resulting in the new transition 27. Removing the self-loops: 24 25. Removed all Self-loops using metering functions (where possible): Start location: evalfstart 0: evalfstart -> evalfbb7in : A'=B, C'=0, [], cost: 2 26: evalfbb7in -> [13] : C'=-1, D'=A, E'=0, [ A>=0 && C>=0 ], cost: 3+3*C 27: evalfbb7in -> [13] : A'=-1, C'=B, D'=-1, E'=1+B, [ A>=0 && C>=0 && B>=C ], cost: 8+8*A 23: [13] -> [12] : D'=1+B, [ A>=0 && C>=0 && B>=C ], cost: 5+3*B-3*C Applied chaining over branches and pruning: Start location: evalfstart 28: evalfstart -> [13] : A'=B, C'=-1, D'=B, E'=0, [ B>=0 && 0>=0 ], cost: 5 29: evalfstart -> [13] : A'=-1, C'=B, D'=-1, E'=1+B, [ B>=0 && 0>=0 && B>=0 ], cost: 10+8*B 23: [13] -> [12] : D'=1+B, [ A>=0 && C>=0 && B>=C ], cost: 5+3*B-3*C Applied chaining over branches and pruning: Start location: evalfstart 30: evalfstart -> [14] : A'=-1, C'=B, D'=-1, E'=1+B, [ B>=0 && 0>=0 && B>=0 ], cost: 10+8*B Final control flow graph problem, now checking costs for infinitely many models: Start location: evalfstart 30: evalfstart -> [14] : A'=-1, C'=B, D'=-1, E'=1+B, [ B>=0 && 0>=0 && B>=0 ], cost: 10+8*B Computing complexity for remaining 1 transitions. Found configuration with infinitely models for cost: 10+8*B and guard: B>=0 && 0>=0 && B>=0: B: Pos Found new complexity n^1, because: Found infinity configuration. The final runtime is determined by this resulting transition: Final Guard: B>=0 && 0>=0 && B>=0 Final Cost: 10+8*B Obtained the following complexity w.r.t. the length of the input n: Complexity class: n^1 Complexity value: 1 WORST_CASE(Omega(n^1),?)