4.90/2.22 NO 4.90/2.23 proof of /export/starexec/sandbox/benchmark/theBenchmark.jar 4.90/2.23 # AProVE Commit ID: 48fb2092695e11cc9f56e44b17a92a5f88ffb256 marcel 20180622 unpublished dirty 4.90/2.23 4.90/2.23 4.90/2.23 termination of the given Bare JBC problem could be disproven: 4.90/2.23 4.90/2.23 (0) Bare JBC problem 4.90/2.23 (1) BareJBCToJBCProof [EQUIVALENT, 95 ms] 4.90/2.23 (2) JBC problem 4.90/2.23 (3) JBCNonTerm [COMPLETE, 336 ms] 4.90/2.23 (4) NO 4.90/2.23 4.90/2.23 4.90/2.23 ---------------------------------------- 4.90/2.23 4.90/2.23 (0) 4.90/2.23 Obligation: 4.90/2.23 need to prove termination of the following program: 4.90/2.23 package simple.whileIncrPart; 4.90/2.23 4.90/2.23 public class Main { 4.90/2.23 4.90/2.23 /** 4.90/2.23 * @param args 4.90/2.23 */ 4.90/2.23 public static void main(String[] args) { 4.90/2.23 WhileIncrPart.increase(args.length); 4.90/2.23 4.90/2.23 } 4.90/2.23 4.90/2.23 } 4.90/2.23 4.90/2.23 4.90/2.23 package simple.whileIncrPart; 4.90/2.23 4.90/2.23 public class WhileIncrPart { 4.90/2.23 4.90/2.23 public static void increase(int i) { 4.90/2.23 while (i > 0) { 4.90/2.23 if (i > 3) { 4.90/2.23 i++; 4.90/2.23 } else { 4.90/2.23 i--; 4.90/2.23 } 4.90/2.23 } 4.90/2.23 } 4.90/2.23 } 4.90/2.23 4.90/2.23 4.90/2.23 4.90/2.23 ---------------------------------------- 4.90/2.23 4.90/2.23 (1) BareJBCToJBCProof (EQUIVALENT) 4.90/2.23 initialized classpath 4.90/2.23 ---------------------------------------- 4.90/2.23 4.90/2.23 (2) 4.90/2.23 Obligation: 4.90/2.23 need to prove termination of the following program: 4.90/2.23 package simple.whileIncrPart; 4.90/2.23 4.90/2.23 public class Main { 4.90/2.23 4.90/2.23 /** 4.90/2.23 * @param args 4.90/2.23 */ 4.90/2.23 public static void main(String[] args) { 4.90/2.23 WhileIncrPart.increase(args.length); 4.90/2.23 4.90/2.23 } 4.90/2.23 4.90/2.23 } 4.90/2.23 4.90/2.23 4.90/2.23 package simple.whileIncrPart; 4.90/2.23 4.90/2.23 public class WhileIncrPart { 4.90/2.23 4.90/2.23 public static void increase(int i) { 4.90/2.23 while (i > 0) { 4.90/2.23 if (i > 3) { 4.90/2.23 i++; 4.90/2.23 } else { 4.90/2.23 i--; 4.90/2.23 } 4.90/2.23 } 4.90/2.23 } 4.90/2.23 } 4.90/2.23 4.90/2.23 4.90/2.23 4.90/2.23 ---------------------------------------- 4.90/2.23 4.90/2.23 (3) JBCNonTerm (COMPLETE) 4.90/2.23 Reached a loop using the following run: 4.90/2.23 4.90/2.23 0: 4.90/2.23 a19([java.lang.String...]): length 4 -->{java.lang.Object...} 4.90/2.23 YES: (JL1) 4.90/2.23 1: 4.90/2.23 a19([java.lang.String...]): length 4 -->{java.lang.Object...} 4.90/2.23 YES: (JL1) 4.90/2.23 2: 4.90/2.23 YES: (JL1) 4.90/2.23 3: 4.90/2.23 4.90/2.23 YES: (JL1) 4.90/2.23 Start state of loop: 4.90/2.23 4.90/2.23 4.90/2.23 [a9(lv_0_0)] 4.90/2.23 4.90/2.23 i43: [0,+inf)(l1) 4.90/2.23 i45: [0,+inf)(l2) 4.90/2.23 a9([java.lang.String...]): length i45 -->{java.lang.Object...} 4.90/2.23 YES: (JL1) 4.90/2.23 4.90/2.23 4.90/2.23 In the loop head node, references [i43] were interesting. 4.90/2.23 4.90/2.23 All methods calls in the loop body are side-effect free, hence they can be ignored. 4.90/2.23 4.90/2.23 By SMT, we could prove 4.90/2.23 4.90/2.23 ((0 <= initial_i43 and 0 <= initial_i45) and (((path2_i43 = path2_i76 and path2_i76 = path2_i79 and path2_i82 = (path2_i79 + 1) and path2_i82 = res_i43 and path2_i43 = initial_i43) and (path2_i76 > 0 and T and 3 = 3 and path2_i79 > 3)) and ((res2_i43 = res2_i76 and res2_i76 = res2_i79 and res2_i82 = (res2_i79 + 1) and res_i43 = res2_i43) and !(res2_i76 > 0 and T and 3 = 3 and res2_i79 > 3)))) 4.90/2.23 4.90/2.23 to be UNSAT. Consequently, the loop will not terminate. 4.90/2.23 ---------------------------------------- 4.90/2.23 4.90/2.23 (4) 4.90/2.23 NO 4.90/2.26 EOF