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