Trying to load file: main.koat Initial Control flow graph problem: Start location: evalfstart 0: evalfstart -> evalfentryin : [], cost: 1 1: evalfentryin -> evalfbb5in : A'=B, [], cost: 1 2: evalfbb5in -> evalfbbin : [ B>=2 ], cost: 1 3: evalfbb5in -> evalfreturnin : [ 1>=B ], cost: 1 4: evalfbbin -> evalfbb2in : C'=-1+B, D'=-1+B+A, [], cost: 1 12: evalfreturnin -> evalfstop : [], cost: 1 5: evalfbb2in -> evalfbb4in : [ C>=1+D ], cost: 1 6: evalfbb2in -> evalfbb3in : [ D>=C ], cost: 1 11: evalfbb4in -> evalfbb5in : A'=1-C+D, B'=-1+C, [], cost: 1 9: evalfbb3in -> evalfbb4in : [], cost: 1 7: evalfbb3in -> evalfbb1in : [ 0>=1+free ], cost: 1 8: evalfbb3in -> evalfbb1in : [ free_1>=1 ], cost: 1 10: evalfbb1in -> evalfbb2in : D'=-1+D, [], cost: 1 Removing duplicate transition: 7. Simplified the transitions: Start location: evalfstart 0: evalfstart -> evalfentryin : [], cost: 1 1: evalfentryin -> evalfbb5in : A'=B, [], cost: 1 2: evalfbb5in -> evalfbbin : [ B>=2 ], cost: 1 4: evalfbbin -> evalfbb2in : C'=-1+B, D'=-1+B+A, [], cost: 1 5: evalfbb2in -> evalfbb4in : [ C>=1+D ], cost: 1 6: evalfbb2in -> evalfbb3in : [ D>=C ], cost: 1 11: evalfbb4in -> evalfbb5in : A'=1-C+D, B'=-1+C, [], cost: 1 9: evalfbb3in -> evalfbb4in : [], cost: 1 8: evalfbb3in -> evalfbb1in : [], cost: 1 10: evalfbb1in -> evalfbb2in : D'=-1+D, [], cost: 1 Applied simple chaining: Start location: evalfstart 0: evalfstart -> evalfbb5in : A'=B, [], cost: 2 2: evalfbb5in -> evalfbb2in : C'=-1+B, D'=-1+B+A, [ B>=2 ], cost: 2 5: evalfbb2in -> evalfbb4in : [ C>=1+D ], cost: 1 6: evalfbb2in -> evalfbb3in : [ D>=C ], cost: 1 11: evalfbb4in -> evalfbb5in : A'=1-C+D, B'=-1+C, [], cost: 1 8: evalfbb3in -> evalfbb2in : D'=-1+D, [], cost: 2 9: evalfbb3in -> evalfbb4in : [], cost: 1 Applied chaining over branches and pruning: Start location: evalfstart 0: evalfstart -> evalfbb5in : A'=B, [], cost: 2 2: evalfbb5in -> evalfbb2in : C'=-1+B, D'=-1+B+A, [ B>=2 ], cost: 2 13: evalfbb2in -> evalfbb2in : D'=-1+D, [ D>=C ], cost: 3 5: evalfbb2in -> evalfbb4in : [ C>=1+D ], cost: 1 14: evalfbb2in -> evalfbb4in : [ D>=C ], cost: 2 11: evalfbb4in -> evalfbb5in : A'=1-C+D, B'=-1+C, [], cost: 1 Eliminating 1 self-loops for location evalfbb2in Self-Loop 13 has the metering function: 1-C+D, resulting in the new transition 15. Removing the self-loops: 13. Removed all Self-loops using metering functions (where possible): Start location: evalfstart 0: evalfstart -> evalfbb5in : A'=B, [], cost: 2 2: evalfbb5in -> evalfbb2in : C'=-1+B, D'=-1+B+A, [ B>=2 ], cost: 2 15: evalfbb2in -> [10] : D'=-1+C, [ D>=C ], cost: 3-3*C+3*D 11: evalfbb4in -> evalfbb5in : A'=1-C+D, B'=-1+C, [], cost: 1 5: [10] -> evalfbb4in : [ C>=1+D ], cost: 1 14: [10] -> evalfbb4in : [ D>=C ], cost: 2 Applied simple chaining: Start location: evalfstart 0: evalfstart -> evalfbb5in : A'=B, [], cost: 2 2: evalfbb5in -> [10] : C'=-1+B, D'=-2+B, [ B>=2 && -1+B+A>=-1+B ], cost: 5+3*A 11: evalfbb4in -> evalfbb5in : A'=1-C+D, B'=-1+C, [], cost: 1 5: [10] -> evalfbb4in : [ C>=1+D ], cost: 1 14: [10] -> evalfbb4in : [ D>=C ], cost: 2 Applied chaining over branches and pruning: Start location: evalfstart 0: evalfstart -> evalfbb5in : A'=B, [], cost: 2 16: evalfbb5in -> evalfbb4in : C'=-1+B, D'=-2+B, [ B>=2 && -1+B+A>=-1+B && -1+B>=-1+B ], cost: 6+3*A 17: evalfbb5in -> [11] : C'=-1+B, D'=-2+B, [ B>=2 && -1+B+A>=-1+B ], cost: 5+3*A 11: evalfbb4in -> evalfbb5in : A'=1-C+D, B'=-1+C, [], cost: 1 Applied simple chaining: Start location: evalfstart 0: evalfstart -> evalfbb5in : A'=B, [], cost: 2 16: evalfbb5in -> evalfbb5in : A'=0, B'=-2+B, C'=-1+B, D'=-2+B, [ B>=2 && -1+B+A>=-1+B && -1+B>=-1+B ], cost: 7+3*A 17: evalfbb5in -> [11] : C'=-1+B, D'=-2+B, [ B>=2 && -1+B+A>=-1+B ], cost: 5+3*A Eliminating 1 self-loops for location evalfbb5in Self-Loop 16 has the metering function: meter, resulting in the new transition 18. Removing the self-loops: 16. Removed all Self-loops using metering functions (where possible): Start location: evalfstart 0: evalfstart -> evalfbb5in : A'=B, [], cost: 2 18: evalfbb5in -> [12] : A'=0, B'=-2*meter+B, C'=1-2*meter+B, D'=-2*meter+B, [ B>=2 && -1+B+A>=-1+B && 2*meter==-1+B ], cost: 7*meter 17: [12] -> [11] : C'=-1+B, D'=-2+B, [ B>=2 && -1+B+A>=-1+B ], cost: 5+3*A Applied simple chaining: Start location: evalfstart 0: evalfstart -> [12] : A'=0, B'=-2*meter+B, C'=1-2*meter+B, D'=-2*meter+B, [ B>=2 && -1+2*B>=-1+B && 2*meter==-1+B ], cost: 2+7*meter 17: [12] -> [11] : C'=-1+B, D'=-2+B, [ B>=2 && -1+B+A>=-1+B ], cost: 5+3*A Applied chaining over branches and pruning: Start location: evalfstart 19: evalfstart -> [13] : A'=0, B'=-2*meter+B, C'=1-2*meter+B, D'=-2*meter+B, [ B>=2 && -1+2*B>=-1+B && 2*meter==-1+B ], cost: 2+7*meter Final control flow graph problem, now checking costs for infinitely many models: Start location: evalfstart 19: evalfstart -> [13] : A'=0, B'=-2*meter+B, C'=1-2*meter+B, D'=-2*meter+B, [ B>=2 && -1+2*B>=-1+B && 2*meter==-1+B ], cost: 2+7*meter Computing complexity for remaining 1 transitions. Found configuration with infinitely models for cost: 2+7*meter and guard: B>=2 && -1+2*B>=-1+B && 2*meter==-1+B: meter: Pos, B: Both Found new complexity n^1, because: Found infinity configuration. The final runtime is determined by this resulting transition: Final Guard: B>=2 && -1+2*B>=-1+B && 2*meter==-1+B Final Cost: 2+7*meter 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),?)