5.04/2.25 NO 5.04/2.26 proof of /export/starexec/sandbox/benchmark/theBenchmark.jar 5.04/2.26 # AProVE Commit ID: 48fb2092695e11cc9f56e44b17a92a5f88ffb256 marcel 20180622 unpublished dirty 5.04/2.26 5.04/2.26 5.04/2.26 termination of the given Bare JBC problem could be disproven: 5.04/2.26 5.04/2.26 (0) Bare JBC problem 5.04/2.26 (1) BareJBCToJBCProof [EQUIVALENT, 96 ms] 5.04/2.26 (2) JBC problem 5.04/2.26 (3) JBCToGraph [EQUIVALENT, 279 ms] 5.04/2.26 (4) JBCTerminationGraph 5.04/2.26 (5) JBCNonTerm [COMPLETE, 98 ms] 5.04/2.26 (6) NO 5.04/2.26 5.04/2.26 5.04/2.26 ---------------------------------------- 5.04/2.26 5.04/2.26 (0) 5.04/2.26 Obligation: 5.04/2.26 need to prove termination of the following program: 5.04/2.26 public class NO_12 { 5.04/2.26 public static void main(String args[]) { 5.04/2.26 int j = 0; 5.04/2.26 for (int i = 0; i <= j; i++) 5.04/2.26 if (j-i < 1) j += 2; 5.04/2.26 } 5.04/2.26 } 5.04/2.26 5.04/2.26 5.04/2.26 ---------------------------------------- 5.04/2.26 5.04/2.26 (1) BareJBCToJBCProof (EQUIVALENT) 5.04/2.26 initialized classpath 5.04/2.26 ---------------------------------------- 5.04/2.26 5.04/2.26 (2) 5.04/2.26 Obligation: 5.04/2.26 need to prove termination of the following program: 5.04/2.26 public class NO_12 { 5.04/2.26 public static void main(String args[]) { 5.04/2.26 int j = 0; 5.04/2.26 for (int i = 0; i <= j; i++) 5.04/2.26 if (j-i < 1) j += 2; 5.04/2.26 } 5.04/2.26 } 5.04/2.26 5.04/2.26 5.04/2.26 ---------------------------------------- 5.04/2.26 5.04/2.26 (3) JBCToGraph (EQUIVALENT) 5.04/2.26 Constructed TerminationGraph. 5.04/2.26 ---------------------------------------- 5.04/2.26 5.04/2.26 (4) 5.04/2.26 Obligation: 5.04/2.26 Termination Graph based on JBC Program: 5.04/2.26 NO_12.main([Ljava/lang/String;)V: Graph of 30 nodes with 1 SCC. 5.04/2.26 5.04/2.26 5.04/2.26 5.04/2.26 5.04/2.26 5.04/2.26 ---------------------------------------- 5.04/2.26 5.04/2.26 (5) JBCNonTerm (COMPLETE) 5.04/2.26 Reached a loop using the following run: 5.04/2.26 5.04/2.26 0: 5.04/2.26 YES: (JL1) 5.04/2.26 1: 5.04/2.26 YES: (JL1) 5.04/2.26 2: 5.04/2.26 YES: (JL1) 5.04/2.26 3: 5.04/2.26 YES: (JL1) 5.04/2.26 4: 5.04/2.26 YES: (JL1) 5.04/2.26 Start state of loop: 5.04/2.26 5.04/2.26 [o30(lv_0_0)] 5.04/2.26 5.04/2.26 o30([java.lang.String...]): Object() -->{java.lang.Object...} 5.04/2.26 i35: [0,+inf)(l3) 5.04/2.26 i36: [0,+inf)(l5) 5.04/2.26 YES: (JL1) 5.04/2.26 5.04/2.26 5.04/2.26 In the loop head node, references [i36, i35] were interesting. 5.04/2.26 5.04/2.26 All methods calls in the loop body are side-effect free, hence they can be ignored. 5.04/2.26 5.04/2.26 By SMT, we could prove 5.04/2.26 5.04/2.26 ((0 <= initial_i35 and 0 <= initial_i36) and ((((path1_i39 = (path1_i35 - path1_i36) and path1_i39 = path1_i40 and path1_i42 = (path1_i36 + 1) and path1_i35 = res_i35 and path1_i42 = res_i36 and path1_i35 = initial_i35 and path1_i36 = initial_i36) and (path1_i36 <= path1_i35 and path1_i36 <= path1_i35 and T and 1 = 1 and path1_i40 >= 1)) or ((path2_i39 = (path2_i35 - path2_i36) and path2_i41 = (path2_i35 + 2) and path2_i43 = (path2_i36 + 1) and path2_i41 = res_i35 and path2_i43 = res_i36 and path2_i35 = initial_i35 and path2_i36 = initial_i36) and (path2_i36 <= path2_i35 and path2_i36 <= path2_i35 and path2_i39 = 0 and path2_i39 = 0 and 1 = 1))) and (((res1_i39 = (res1_i35 - res1_i36) and res1_i39 = res1_i40 and res1_i42 = (res1_i36 + 1) and res_i35 = res1_i35 and res_i36 = res1_i36) and !(res1_i36 <= res1_i35 and res1_i36 <= res1_i35 and T and 1 = 1 and res1_i40 >= 1)) and ((res2_i39 = (res2_i35 - res2_i36) and res2_i41 = (res2_i35 + 2) and res2_i43 = (res2_i36 + 1) and res_i35 = res2_i35 and res_i36 = res2_i36) and !(res2_i36 <= res2_i35 and res2_i36 <= res2_i35 and res2_i39 = 0 and res2_i39 = 0 and 1 = 1))))) 5.04/2.27 5.04/2.27 to be UNSAT. Consequently, the loop will not terminate. 5.04/2.27 ---------------------------------------- 5.04/2.27 5.04/2.27 (6) 5.04/2.27 NO 5.04/2.29 EOF