Trying to load file: main.koat Initial Control flow graph problem: Start location: evalperfectstart 0: evalperfectstart -> evalperfectentryin : [], cost: 1 1: evalperfectentryin -> evalperfectreturnin : [ 1>=A ], cost: 1 2: evalperfectentryin -> evalperfectbb1in : [ A>=2 ], cost: 1 15: evalperfectreturnin -> evalperfectstop : [], cost: 1 3: evalperfectbb1in -> evalperfectbb8in : B'=A, C'=-1+A, [], cost: 1 4: evalperfectbb8in -> evalperfectbb4in : D'=A, [ C>=1 ], cost: 1 5: evalperfectbb8in -> evalperfectbb9in : A'=B, [ 0>=C ], cost: 1 6: evalperfectbb4in -> evalperfectbb3in : [ D>=C ], cost: 1 7: evalperfectbb4in -> evalperfectbb5in : [ C>=1+D ], cost: 1 12: evalperfectbb9in -> evalperfectreturnin : [ 0>=1+A ], cost: 1 13: evalperfectbb9in -> evalperfectreturnin : [ A>=1 ], cost: 1 14: evalperfectbb9in -> evalperfectreturnin : [ A==0 ], cost: 1 8: evalperfectbb3in -> evalperfectbb4in : D'=-C+D, [], cost: 1 9: evalperfectbb5in -> evalperfectbb8in : B'=B-C, C'=-1+C, [ D==0 ], cost: 1 10: evalperfectbb5in -> evalperfectbb8in : C'=-1+C, [ 0>=1+D ], cost: 1 11: evalperfectbb5in -> evalperfectbb8in : C'=-1+C, [ D>=1 ], cost: 1 Simplified the transitions: Start location: evalperfectstart 0: evalperfectstart -> evalperfectentryin : [], cost: 1 2: evalperfectentryin -> evalperfectbb1in : [ A>=2 ], cost: 1 3: evalperfectbb1in -> evalperfectbb8in : B'=A, C'=-1+A, [], cost: 1 4: evalperfectbb8in -> evalperfectbb4in : D'=A, [ C>=1 ], cost: 1 6: evalperfectbb4in -> evalperfectbb3in : [ D>=C ], cost: 1 7: evalperfectbb4in -> evalperfectbb5in : [ C>=1+D ], cost: 1 8: evalperfectbb3in -> evalperfectbb4in : D'=-C+D, [], cost: 1 9: evalperfectbb5in -> evalperfectbb8in : B'=B-C, C'=-1+C, [ D==0 ], cost: 1 10: evalperfectbb5in -> evalperfectbb8in : C'=-1+C, [ 0>=1+D ], cost: 1 11: evalperfectbb5in -> evalperfectbb8in : C'=-1+C, [ D>=1 ], cost: 1 Applied simple chaining: Start location: evalperfectstart 0: evalperfectstart -> evalperfectbb8in : B'=A, C'=-1+A, [ A>=2 ], cost: 3 4: evalperfectbb8in -> evalperfectbb4in : D'=A, [ C>=1 ], cost: 1 6: evalperfectbb4in -> evalperfectbb4in : D'=-C+D, [ D>=C ], cost: 2 7: evalperfectbb4in -> evalperfectbb5in : [ C>=1+D ], cost: 1 9: evalperfectbb5in -> evalperfectbb8in : B'=B-C, C'=-1+C, [ D==0 ], cost: 1 10: evalperfectbb5in -> evalperfectbb8in : C'=-1+C, [ 0>=1+D ], cost: 1 11: evalperfectbb5in -> evalperfectbb8in : C'=-1+C, [ D>=1 ], cost: 1 Eliminating 1 self-loops for location evalperfectbb4in Removing the self-loops: 6. Adding an epsilon transition (to model nonexecution of the loops): 17. Removed all Self-loops using metering functions (where possible): Start location: evalperfectstart 0: evalperfectstart -> evalperfectbb8in : B'=A, C'=-1+A, [ A>=2 ], cost: 3 4: evalperfectbb8in -> evalperfectbb4in : D'=A, [ C>=1 ], cost: 1 16: evalperfectbb4in -> [10] : D'=-C+D, [ D>=C ], cost: 2 17: evalperfectbb4in -> [10] : [], cost: 0 9: evalperfectbb5in -> evalperfectbb8in : B'=B-C, C'=-1+C, [ D==0 ], cost: 1 10: evalperfectbb5in -> evalperfectbb8in : C'=-1+C, [ 0>=1+D ], cost: 1 11: evalperfectbb5in -> evalperfectbb8in : C'=-1+C, [ D>=1 ], cost: 1 7: [10] -> evalperfectbb5in : [ C>=1+D ], cost: 1 Applied chaining over branches and pruning: Start location: evalperfectstart 0: evalperfectstart -> evalperfectbb8in : B'=A, C'=-1+A, [ A>=2 ], cost: 3 18: evalperfectbb8in -> [10] : D'=-C+A, [ C>=1 && A>=C ], cost: 3 19: evalperfectbb8in -> [10] : D'=A, [ C>=1 ], cost: 1 20: [10] -> evalperfectbb8in : B'=B-C, C'=-1+C, [ C>=1+D && D==0 ], cost: 2 21: [10] -> evalperfectbb8in : C'=-1+C, [ C>=1+D && 0>=1+D ], cost: 2 22: [10] -> evalperfectbb8in : C'=-1+C, [ C>=1+D && D>=1 ], cost: 2 Applied chaining over branches and pruning: Start location: evalperfectstart 0: evalperfectstart -> evalperfectbb8in : B'=A, C'=-1+A, [ A>=2 ], cost: 3 23: evalperfectbb8in -> evalperfectbb8in : B'=B-C, C'=-1+C, D'=-C+A, [ C>=1 && A>=C && C>=1-C+A && -C+A==0 ], cost: 5 24: evalperfectbb8in -> evalperfectbb8in : C'=-1+C, D'=-C+A, [ C>=1 && A>=C && C>=1-C+A && -C+A>=1 ], cost: 5 25: evalperfectbb8in -> evalperfectbb8in : B'=B-C, C'=-1+C, D'=A, [ C>=1 && C>=1+A && A==0 ], cost: 3 26: evalperfectbb8in -> evalperfectbb8in : C'=-1+C, D'=A, [ C>=1 && C>=1+A && 0>=1+A ], cost: 3 27: evalperfectbb8in -> evalperfectbb8in : C'=-1+C, D'=A, [ C>=1 && C>=1+A && A>=1 ], cost: 3 Eliminating 5 self-loops for location evalperfectbb8in Self-Loop 23 has the metering function: C-A, resulting in the new transition 28. Self-Loop 24 has the metering function: meter, resulting in the new transition 29. Self-Loop 25 has the metering function: C-A, resulting in the new transition 30. Self-Loop 26 has the metering function: C, resulting in the new transition 31. Self-Loop 27 has the metering function: C-A, resulting in the new transition 32. Found this metering function when nesting loops: -1+C-A, Removing the self-loops: 23 24 25 26 27. Removed all Self-loops using metering functions (where possible): Start location: evalperfectstart 0: evalperfectstart -> evalperfectbb8in : B'=A, C'=-1+A, [ A>=2 ], cost: 3 28: evalperfectbb8in -> [11] : B'=-1-(C-A)*C+B+1/2*C+1/2*(C-A)^2-1/2*A, C'=A, D'=-1, [ C>=1 && C>=1-C+A && -C+A==0 ], cost: 5*C-5*A 29: evalperfectbb8in -> [11] : C'=C-meter, D'=-1-C+meter+A, [ C>=1 && C>=1-C+A && -C+A>=1 && 2*meter==2*C-A ], cost: 5*meter 30: evalperfectbb8in -> [11] : B'=-1-(C-A)*C+B+1/2*C+1/2*(C-A)^2-1/2*A, C'=A, D'=A, [ C>=1 && C>=1+A && A==0 ], cost: 3*C-3*A 31: evalperfectbb8in -> [11] : C'=0, D'=A, [ C>=1 && C>=1+A && 0>=1+A ], cost: 3*C 32: evalperfectbb8in -> [11] : C'=A, D'=A, [ C>=1 && C>=1+A && A>=1 ], cost: 3*C-3*A Applied chaining over branches and pruning: Start location: evalperfectstart 33: evalperfectstart -> [11] : B'=A, C'=-1-meter+A, D'=meter, [ A>=2 && -1+A>=1 && -1+A>=2 && 1>=1 && 2*meter==-2+A ], cost: 3+5*meter Final control flow graph problem, now checking costs for infinitely many models: Start location: evalperfectstart 33: evalperfectstart -> [11] : B'=A, C'=-1-meter+A, D'=meter, [ A>=2 && -1+A>=1 && -1+A>=2 && 1>=1 && 2*meter==-2+A ], cost: 3+5*meter Computing complexity for remaining 1 transitions. Found configuration with infinitely models for cost: 3+5*meter and guard: A>=2 && -1+A>=1 && -1+A>=2 && 1>=1 && 2*meter==-2+A: meter: Pos, A: Both Found new complexity n^1, because: Found infinity configuration. The final runtime is determined by this resulting transition: Final Guard: A>=2 && -1+A>=1 && -1+A>=2 && 1>=1 && 2*meter==-2+A Final Cost: 3+5*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),?)