Trying to load file: main.koat Initial Control flow graph problem: Start location: evalNestedMultiplestart 0: evalNestedMultiplestart -> evalNestedMultipleentryin : [], cost: 1 1: evalNestedMultipleentryin -> evalNestedMultiplebb5in : A'=B, B'=A, C'=D, D'=C, [], cost: 1 2: evalNestedMultiplebb5in -> evalNestedMultiplebb2in : E'=D, [ A>=1+B ], cost: 1 3: evalNestedMultiplebb5in -> evalNestedMultiplereturnin : [ B>=A ], cost: 1 4: evalNestedMultiplebb2in -> evalNestedMultiplebb4in : [ E>=C ], cost: 1 5: evalNestedMultiplebb2in -> evalNestedMultiplebb3in : [ C>=1+E ], cost: 1 11: evalNestedMultiplereturnin -> evalNestedMultiplestop : [], cost: 1 10: evalNestedMultiplebb4in -> evalNestedMultiplebb5in : B'=1+B, D'=E, [], cost: 1 8: evalNestedMultiplebb3in -> evalNestedMultiplebb4in : [], cost: 1 6: evalNestedMultiplebb3in -> evalNestedMultiplebb1in : [ 0>=1+free ], cost: 1 7: evalNestedMultiplebb3in -> evalNestedMultiplebb1in : [ free_1>=1 ], cost: 1 9: evalNestedMultiplebb1in -> evalNestedMultiplebb2in : E'=1+E, [], cost: 1 Removing duplicate transition: 6. Simplified the transitions: Start location: evalNestedMultiplestart 0: evalNestedMultiplestart -> evalNestedMultipleentryin : [], cost: 1 1: evalNestedMultipleentryin -> evalNestedMultiplebb5in : A'=B, B'=A, C'=D, D'=C, [], cost: 1 2: evalNestedMultiplebb5in -> evalNestedMultiplebb2in : E'=D, [ A>=1+B ], cost: 1 4: evalNestedMultiplebb2in -> evalNestedMultiplebb4in : [ E>=C ], cost: 1 5: evalNestedMultiplebb2in -> evalNestedMultiplebb3in : [ C>=1+E ], cost: 1 10: evalNestedMultiplebb4in -> evalNestedMultiplebb5in : B'=1+B, D'=E, [], cost: 1 8: evalNestedMultiplebb3in -> evalNestedMultiplebb4in : [], cost: 1 7: evalNestedMultiplebb3in -> evalNestedMultiplebb1in : [], cost: 1 9: evalNestedMultiplebb1in -> evalNestedMultiplebb2in : E'=1+E, [], cost: 1 Applied simple chaining: Start location: evalNestedMultiplestart 0: evalNestedMultiplestart -> evalNestedMultiplebb5in : A'=B, B'=A, C'=D, D'=C, [], cost: 2 2: evalNestedMultiplebb5in -> evalNestedMultiplebb2in : E'=D, [ A>=1+B ], cost: 1 4: evalNestedMultiplebb2in -> evalNestedMultiplebb4in : [ E>=C ], cost: 1 5: evalNestedMultiplebb2in -> evalNestedMultiplebb3in : [ C>=1+E ], cost: 1 10: evalNestedMultiplebb4in -> evalNestedMultiplebb5in : B'=1+B, D'=E, [], cost: 1 7: evalNestedMultiplebb3in -> evalNestedMultiplebb2in : E'=1+E, [], cost: 2 8: evalNestedMultiplebb3in -> evalNestedMultiplebb4in : [], cost: 1 Applied chaining over branches and pruning: Start location: evalNestedMultiplestart 0: evalNestedMultiplestart -> evalNestedMultiplebb5in : A'=B, B'=A, C'=D, D'=C, [], cost: 2 2: evalNestedMultiplebb5in -> evalNestedMultiplebb2in : E'=D, [ A>=1+B ], cost: 1 12: evalNestedMultiplebb2in -> evalNestedMultiplebb2in : E'=1+E, [ C>=1+E ], cost: 3 4: evalNestedMultiplebb2in -> evalNestedMultiplebb4in : [ E>=C ], cost: 1 13: evalNestedMultiplebb2in -> evalNestedMultiplebb4in : [ C>=1+E ], cost: 2 10: evalNestedMultiplebb4in -> evalNestedMultiplebb5in : B'=1+B, D'=E, [], cost: 1 Eliminating 1 self-loops for location evalNestedMultiplebb2in Self-Loop 12 has the metering function: -E+C, resulting in the new transition 14. Removing the self-loops: 12. Removed all Self-loops using metering functions (where possible): Start location: evalNestedMultiplestart 0: evalNestedMultiplestart -> evalNestedMultiplebb5in : A'=B, B'=A, C'=D, D'=C, [], cost: 2 2: evalNestedMultiplebb5in -> evalNestedMultiplebb2in : E'=D, [ A>=1+B ], cost: 1 14: evalNestedMultiplebb2in -> [9] : E'=C, [ C>=1+E ], cost: -3*E+3*C 10: evalNestedMultiplebb4in -> evalNestedMultiplebb5in : B'=1+B, D'=E, [], cost: 1 4: [9] -> evalNestedMultiplebb4in : [ E>=C ], cost: 1 13: [9] -> evalNestedMultiplebb4in : [ C>=1+E ], cost: 2 Applied simple chaining: Start location: evalNestedMultiplestart 0: evalNestedMultiplestart -> evalNestedMultiplebb5in : A'=B, B'=A, C'=D, D'=C, [], cost: 2 2: evalNestedMultiplebb5in -> [9] : E'=C, [ A>=1+B && C>=1+D ], cost: 1+3*C-3*D 10: evalNestedMultiplebb4in -> evalNestedMultiplebb5in : B'=1+B, D'=E, [], cost: 1 4: [9] -> evalNestedMultiplebb4in : [ E>=C ], cost: 1 13: [9] -> evalNestedMultiplebb4in : [ C>=1+E ], cost: 2 Applied chaining over branches and pruning: Start location: evalNestedMultiplestart 0: evalNestedMultiplestart -> evalNestedMultiplebb5in : A'=B, B'=A, C'=D, D'=C, [], cost: 2 15: evalNestedMultiplebb5in -> evalNestedMultiplebb4in : E'=C, [ A>=1+B && C>=1+D && C>=C ], cost: 2+3*C-3*D 16: evalNestedMultiplebb5in -> [10] : E'=C, [ A>=1+B && C>=1+D ], cost: 1+3*C-3*D 10: evalNestedMultiplebb4in -> evalNestedMultiplebb5in : B'=1+B, D'=E, [], cost: 1 Applied simple chaining: Start location: evalNestedMultiplestart 0: evalNestedMultiplestart -> evalNestedMultiplebb5in : A'=B, B'=A, C'=D, D'=C, [], cost: 2 15: evalNestedMultiplebb5in -> evalNestedMultiplebb5in : B'=1+B, D'=C, E'=C, [ A>=1+B && C>=1+D && C>=C ], cost: 3+3*C-3*D 16: evalNestedMultiplebb5in -> [10] : E'=C, [ A>=1+B && C>=1+D ], cost: 1+3*C-3*D Eliminating 1 self-loops for location evalNestedMultiplebb5in Removing the self-loops: 15. Adding an epsilon transition (to model nonexecution of the loops): 18. Removed all Self-loops using metering functions (where possible): Start location: evalNestedMultiplestart 0: evalNestedMultiplestart -> evalNestedMultiplebb5in : A'=B, B'=A, C'=D, D'=C, [], cost: 2 17: evalNestedMultiplebb5in -> [11] : B'=1+B, D'=C, E'=C, [ A>=1+B && C>=1+D ], cost: 3+3*C-3*D 18: evalNestedMultiplebb5in -> [11] : [], cost: 0 16: [11] -> [10] : E'=C, [ A>=1+B && C>=1+D ], cost: 1+3*C-3*D Applied chaining over branches and pruning: Start location: evalNestedMultiplestart 19: evalNestedMultiplestart -> [11] : A'=B, B'=1+A, C'=D, D'=D, E'=D, [ B>=1+A && D>=1+C ], cost: 5-3*C+3*D 20: evalNestedMultiplestart -> [11] : A'=B, B'=A, C'=D, D'=C, [], cost: 2 16: [11] -> [10] : E'=C, [ A>=1+B && C>=1+D ], cost: 1+3*C-3*D Applied chaining over branches and pruning: Start location: evalNestedMultiplestart 22: evalNestedMultiplestart -> [10] : A'=B, B'=A, C'=D, D'=C, E'=D, [ B>=1+A && D>=1+C ], cost: 3-3*C+3*D 21: evalNestedMultiplestart -> [12] : A'=B, B'=1+A, C'=D, D'=D, E'=D, [ B>=1+A && D>=1+C ], cost: 5-3*C+3*D Final control flow graph problem, now checking costs for infinitely many models: Start location: evalNestedMultiplestart 22: evalNestedMultiplestart -> [10] : A'=B, B'=A, C'=D, D'=C, E'=D, [ B>=1+A && D>=1+C ], cost: 3-3*C+3*D 21: evalNestedMultiplestart -> [12] : A'=B, B'=1+A, C'=D, D'=D, E'=D, [ B>=1+A && D>=1+C ], cost: 5-3*C+3*D Computing complexity for remaining 2 transitions. Found configuration with infinitely models for cost: 3-3*C+3*D and guard: B>=1+A && D>=1+C: B: Pos, C: Pos, D: Pos, A: Pos, where: B > A D > C Found new complexity n^1, because: Found infinity configuration. The final runtime is determined by this resulting transition: Final Guard: B>=1+A && D>=1+C Final Cost: 3-3*C+3*D 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),?)