YES Solver Timeout: 4 Global Timeout: 60 No parsing errors! Init Location: 0 Transitions: ~(1)) /\ (arg1 > 0) /\ (undef1 > 0), par{arg1 -> undef1, arg2 -> 0, arg3 -> (arg2 - 1), arg4 -> arg2}> arg2) /\ (arg2 < arg4) /\ (arg4 > ~(1)) /\ (undef5 <= arg1) /\ (arg1 > 0) /\ (undef5 > 0), par{arg1 -> undef5, arg2 -> (arg2 + 1), arg3 -> (arg4 - 1)}> ~(1)) /\ (arg1 >= undef9) /\ (arg1 > 0) /\ (undef9 > 0), par{arg1 -> undef9, arg2 -> 0, arg3 -> (arg4 - 1)}> ~(1)) /\ (arg3 > arg2) /\ (undef14 <= arg1) /\ (arg1 > 0) /\ (undef14 > 0), par{arg1 -> arg2, arg2 -> undef14, arg3 -> (arg2 + 1)}> ~(1)) /\ (arg4 <= arg3) /\ (undef17 <= arg2) /\ (arg2 > 0) /\ (undef17 > 0), par{arg1 -> undef17, arg2 -> (arg1 + 1), arg3 -> (arg4 - 1)}> ~(1)) /\ (undef21 <= arg1) /\ (arg1 > 0) /\ (undef21 > 0), par{arg1 -> undef21, arg2 -> 0, arg3 -> (arg4 - 1)}> ~(1)) /\ (arg3 > arg2) /\ (undef25 <= arg1) /\ (arg1 > 0) /\ (undef25 > 0), par{arg1 -> undef25, arg2 -> (arg2 + 1), arg3 -> (arg4 - 1)}> arg3) /\ (arg4 > arg1) /\ (undef33 >= undef34) /\ (undef30 <= arg2) /\ (arg2 > 0) /\ (undef30 > 0), par{arg2 -> undef30, arg3 -> (arg3 + 1)}> arg3) /\ (arg4 > arg1) /\ (undef39 < undef40) /\ (undef36 <= arg2) /\ (arg2 > 0) /\ (undef36 > 0), par{arg2 -> undef36, arg3 -> (arg3 + 1)}> undef41, arg2 -> undef42, arg3 -> undef43, arg4 -> undef44}> Fresh variables: undef1, undef5, undef9, undef14, undef17, undef21, undef25, undef30, undef33, undef34, undef36, undef39, undef40, undef41, undef42, undef43, undef44, Undef variables: undef1, undef5, undef9, undef14, undef17, undef21, undef25, undef30, undef33, undef34, undef36, undef39, undef40, undef41, undef42, undef43, undef44, Abstraction variables: Exit nodes: Accepting locations: Asserts: Preprocessed LLVMGraph Init Location: 0 Transitions: ~(1)) /\ (undef41 > 0) /\ (undef1 > 0)> arg2) /\ (arg2 < arg4) /\ (arg4 > ~(1)) /\ (undef5 <= arg1) /\ (arg1 > 0) /\ (undef5 > 0), par{arg1 -> undef5, arg2 -> (arg2 + 1), arg3 -> (arg4 - 1)}> ~(1)) /\ (arg1 >= undef9) /\ (arg1 > 0) /\ (undef9 > 0) /\ (0 > ~(1)) /\ ((arg4 - 1) > 0) /\ (undef14 <= undef9) /\ (undef9 > 0) /\ (undef14 > 0), par{arg1 -> 0, arg2 -> undef14, arg3 -> (0 + 1)}> ~(1)) /\ (arg1 >= undef9) /\ (arg1 > 0) /\ (undef9 > 0) /\ ((arg4 - 1) <= 0) /\ (arg4 > ~(1)) /\ (undef21 <= undef9) /\ (undef9 > 0) /\ (undef21 > 0), par{arg1 -> undef21, arg2 -> 0, arg3 -> (arg4 - 1)}> ~(1)) /\ (arg4 <= arg3) /\ (undef17 <= arg2) /\ (arg2 > 0) /\ (undef17 > 0) /\ ((arg1 + 1) > ~(1)) /\ ((arg4 - 1) > (arg1 + 1)) /\ (undef14 <= undef17) /\ (undef17 > 0) /\ (undef14 > 0), par{arg1 -> (arg1 + 1), arg2 -> undef14, arg3 -> ((arg1 + 1) + 1)}> ~(1)) /\ (arg4 <= arg3) /\ (undef17 <= arg2) /\ (arg2 > 0) /\ (undef17 > 0) /\ ((arg4 - 1) <= (arg1 + 1)) /\ (arg4 > ~(1)) /\ (undef21 <= undef17) /\ (undef17 > 0) /\ (undef21 > 0), par{arg1 -> undef21, arg2 -> 0, arg3 -> (arg4 - 1)}> arg3) /\ (arg4 > arg1) /\ (undef33 >= undef34) /\ (undef30 <= arg2) /\ (arg2 > 0) /\ (undef30 > 0), par{arg2 -> undef30, arg3 -> (arg3 + 1)}> arg3) /\ (arg4 > arg1) /\ (undef39 < undef40) /\ (undef36 <= arg2) /\ (arg2 > 0) /\ (undef36 > 0), par{arg2 -> undef36, arg3 -> (arg3 + 1)}> ~(1)) /\ (arg3 > arg2) /\ (undef25 <= arg1) /\ (arg1 > 0) /\ (undef25 > 0), par{arg1 -> undef25, arg2 -> (arg2 + 1), arg3 -> (arg4 - 1)}> Fresh variables: undef1, undef5, undef9, undef14, undef17, undef21, undef25, undef30, undef33, undef34, undef36, undef39, undef40, undef41, undef42, undef43, undef44, Undef variables: undef1, undef5, undef9, undef14, undef17, undef21, undef25, undef30, undef33, undef34, undef36, undef39, undef40, undef41, undef42, undef43, undef44, Abstraction variables: Exit nodes: Accepting locations: Asserts: ************************************************************* ******************************************************************************************* *********************** WORKING TRANSITION SYSTEM (DAG) *********************** ******************************************************************************************* Init Location: 0 Graph 0: Transitions: Variables: Graph 1: Transitions: undef5, arg2 -> 1 + arg2, arg3 -> -1 + arg4, rest remain the same}> Variables: arg1, arg2, arg3, arg4 Graph 2: Transitions: 1 + arg1, arg2 -> undef14, arg3 -> 2 + arg1, rest remain the same}> undef30, arg3 -> 1 + arg3, rest remain the same}> undef36, arg3 -> 1 + arg3, rest remain the same}> Variables: arg1, arg2, arg3, arg4 Graph 3: Transitions: undef25, arg2 -> 1 + arg2, arg3 -> -1 + arg4, rest remain the same}> Variables: arg1, arg2, arg3, arg4 Precedence: Graph 0 Graph 1 Graph 2 0, arg2 -> undef14, arg3 -> 1, rest remain the same}> Graph 3 undef21, arg2 -> 0, arg3 -> -1 + arg4, rest remain the same}> undef21, arg2 -> 0, arg3 -> -1 + arg4, rest remain the same}> Map Locations to Subgraph: ( 0 , 0 ) ( 2 , 1 ) ( 4 , 2 ) ( 5 , 3 ) ******************************************************************************************* ******************************** CHECKING ASSERTIONS ******************************** ******************************************************************************************* Proving termination of subgraph 0 Proving termination of subgraph 1 Checking unfeasibility... Time used: 0.00441 Checking conditional termination of SCC {l2}... LOG: CALL solveLinear LOG: RETURN solveLinear - Elapsed time: 0.001312s Ranking function: -1 - arg2 + arg4 New Graphs: Proving termination of subgraph 2 Checking unfeasibility... Time used: 0.160819 Checking conditional termination of SCC {l4}... LOG: CALL solveLinear LOG: RETURN solveLinear - Elapsed time: 0.004842s Ranking function: (~(15) / 2) + (~(5) / 2)*arg1 + (5 / 2)*arg4 New Graphs: Transitions: undef30, arg3 -> 1 + arg3, rest remain the same}> undef36, arg3 -> 1 + arg3, rest remain the same}> Variables: arg1, arg2, arg3, arg4 Checking conditional termination of SCC {l4}... LOG: CALL solveLinear LOG: RETURN solveLinear - Elapsed time: 0.002309s Ranking function: -1 - arg3 + arg4 New Graphs: Proving termination of subgraph 3 Checking unfeasibility... Time used: 0.004475 Checking conditional termination of SCC {l5}... LOG: CALL solveLinear LOG: RETURN solveLinear - Elapsed time: 0.001049s LOG: CALL solveLinear LOG: RETURN solveLinear - Elapsed time: 0.003978s Trying to remove transition: undef25, arg2 -> 1 + arg2, arg3 -> -1 + arg4, rest remain the same}> Solving with 1 template(s). LOG: CALL solveNonLinearGetFirstSolution LOG: RETURN solveNonLinearGetFirstSolution - Elapsed time: 0.012501s Time used: 0.012236 Solving with 1 template(s). LOG: CALL solveNonLinearGetFirstSolution LOG: RETURN solveNonLinearGetFirstSolution - Elapsed time: 0.012768s Time used: 0.012215 LOG: SAT solveNonLinear - Elapsed time: 0.012768s Cost: 0; Total time: 0.012215 Termination implied by a set of invariant(s): Invariant at l5: arg3 <= arg4 [ Invariant Graph ] Strengthening and disabling transitions... LOG: CALL solverLinear in Graph for feasibility LOG: RETURN solveLinear in Graph for feasibility Strengthening transition (result): undef25, arg2 -> 1 + arg2, arg3 -> -1 + arg4, rest remain the same}> [ Termination Graph ] Strengthening and disabling transitions... LOG: CALL solverLinear in Graph for feasibility LOG: RETURN solveLinear in Graph for feasibility Strengthening transition (result): undef25, arg2 -> 1 + arg2, arg3 -> -1 + arg4, rest remain the same}> Ranking function: -arg2 + arg4 New Graphs: INVARIANTS: 5: arg3 <= arg4 , Quasi-INVARIANTS to narrow Graph: 5: Program Terminates