5.85/2.46 NO 5.85/2.48 proof of /export/starexec/sandbox/benchmark/theBenchmark.jar 5.85/2.48 # AProVE Commit ID: 48fb2092695e11cc9f56e44b17a92a5f88ffb256 marcel 20180622 unpublished dirty 5.85/2.48 5.85/2.48 5.85/2.48 termination of the given Bare JBC problem could be disproven: 5.85/2.48 5.85/2.48 (0) Bare JBC problem 5.85/2.48 (1) BareJBCToJBCProof [EQUIVALENT, 96 ms] 5.85/2.48 (2) JBC problem 5.85/2.48 (3) JBCNonTerm [COMPLETE, 253 ms] 5.85/2.48 (4) NO 5.85/2.48 5.85/2.48 5.85/2.48 ---------------------------------------- 5.85/2.48 5.85/2.48 (0) 5.85/2.48 Obligation: 5.85/2.48 need to prove termination of the following program: 5.85/2.48 public class Choose { 5.85/2.48 public static void main(String[] args) { 5.85/2.48 int i = 3; 5.85/2.48 while (i >= 3) { 5.85/2.48 if (i > 5) 5.85/2.48 i += 3; 5.85/2.48 else if (i > 10) 5.85/2.48 i -= 2; 5.85/2.48 else 5.85/2.48 i++; 5.85/2.48 } 5.85/2.48 } 5.85/2.48 } 5.85/2.48 5.85/2.48 5.85/2.48 ---------------------------------------- 5.85/2.48 5.85/2.48 (1) BareJBCToJBCProof (EQUIVALENT) 5.85/2.48 initialized classpath 5.85/2.48 ---------------------------------------- 5.85/2.48 5.85/2.48 (2) 5.85/2.48 Obligation: 5.85/2.48 need to prove termination of the following program: 5.85/2.48 public class Choose { 5.85/2.48 public static void main(String[] args) { 5.85/2.48 int i = 3; 5.85/2.48 while (i >= 3) { 5.85/2.48 if (i > 5) 5.85/2.48 i += 3; 5.85/2.48 else if (i > 10) 5.85/2.48 i -= 2; 5.85/2.48 else 5.85/2.48 i++; 5.85/2.48 } 5.85/2.48 } 5.85/2.48 } 5.85/2.48 5.85/2.48 5.85/2.48 ---------------------------------------- 5.85/2.48 5.85/2.48 (3) JBCNonTerm (COMPLETE) 5.85/2.48 Reached a loop using the following run: 5.85/2.48 5.85/2.48 0: 5.85/2.48 YES: (JL1) 5.85/2.48 1: 5.85/2.48 YES: (JL1) 5.85/2.48 2: 5.85/2.48 YES: (JL1) 5.85/2.48 3: 5.85/2.48 YES: (JL1) 5.85/2.48 4: 5.85/2.48 YES: (JL1) 5.85/2.48 5: 5.85/2.48 YES: (JL1) 5.85/2.48 6: 5.85/2.48 YES: (JL1) 5.85/2.48 7: 5.85/2.48 YES: (JL1) 5.85/2.48 8: 5.85/2.48 YES: (JL1) 5.85/2.48 9: 5.85/2.48 YES: (JL1) 5.85/2.48 10: 5.85/2.48 YES: (JL1) 5.85/2.48 11: 5.85/2.48 YES: (JL1) 5.85/2.48 12: 5.85/2.48 YES: (JL1) 5.85/2.48 13: 5.85/2.48 YES: (JL1) 5.85/2.48 14: 5.85/2.48 YES: (JL1) 5.85/2.48 15: 5.85/2.48 YES: (JL1) 5.85/2.48 16: 5.85/2.48 YES: (JL1) 5.85/2.48 17: 5.85/2.48 YES: (JL1) 5.85/2.48 18: 5.85/2.48 YES: (JL1) 5.85/2.48 19: 5.85/2.48 YES: (JL1) 5.85/2.48 20: 5.85/2.48 YES: (JL1) 5.85/2.48 21: 5.85/2.48 YES: (JL1) 5.85/2.48 22: 5.85/2.48 YES: (JL1) 5.85/2.48 23: 5.85/2.48 YES: (JL1) 5.85/2.48 24: 5.85/2.48 YES: (JL1) 5.85/2.48 25: 5.85/2.48 YES: (JL1) 5.85/2.48 26: 5.85/2.48 YES: (JL1) 5.85/2.48 27: 5.85/2.48 YES: (JL1) 5.85/2.48 28: 5.85/2.48 YES: (JL1) 5.85/2.48 29: 5.85/2.48 YES: (JL1) 5.85/2.48 30: 5.85/2.48 YES: (JL1) 5.85/2.48 31: 5.85/2.48 YES: (JL1) 5.85/2.48 32: 5.85/2.48 YES: (JL1) 5.85/2.48 33: 5.85/2.48 YES: (JL1) 5.85/2.48 34: 5.85/2.48 YES: (JL1) 5.85/2.48 35: 5.85/2.48 YES: (JL1) 5.85/2.48 Start state of loop: 5.85/2.48 5.85/2.48 [o12(lv_0_0)] 5.85/2.48 5.85/2.48 o12([java.lang.String...]): Object() -->{java.lang.Object...} 5.85/2.48 i7: [3,+inf)(l3) 5.85/2.48 YES: (JL1) 5.85/2.48 5.85/2.48 5.85/2.48 In the loop head node, references [i7] were interesting. 5.85/2.48 5.85/2.48 All methods calls in the loop body are side-effect free, hence they can be ignored. 5.85/2.48 5.85/2.48 By SMT, we could prove 5.85/2.48 5.85/2.48 (3 <= initial_i7 and (((path1_i7 = path1_i10 and path1_i11 = (path1_i10 + 3) and path1_i11 = res_i7 and path1_i7 = initial_i7) and (path1_i7 >= 3 and T and 5 = 5 and path1_i10 > 5)) and ((res1_i7 = res1_i10 and res1_i11 = (res1_i10 + 3) and res_i7 = res1_i7) and !(res1_i7 >= 3 and T and 5 = 5 and res1_i10 > 5)))) 5.85/2.48 5.85/2.48 to be UNSAT. Consequently, the loop will not terminate. 5.85/2.48 ---------------------------------------- 5.85/2.48 5.85/2.48 (4) 5.85/2.48 NO 5.85/2.50 EOF