5.33/2.40 NO 5.33/2.41 proof of /export/starexec/sandbox/benchmark/theBenchmark.jar 5.33/2.41 # AProVE Commit ID: 48fb2092695e11cc9f56e44b17a92a5f88ffb256 marcel 20180622 unpublished dirty 5.33/2.41 5.33/2.41 5.33/2.41 termination of the given Bare JBC problem could be disproven: 5.33/2.41 5.33/2.41 (0) Bare JBC problem 5.33/2.41 (1) BareJBCToJBCProof [EQUIVALENT, 96 ms] 5.33/2.41 (2) JBC problem 5.33/2.41 (3) JBCToGraph [EQUIVALENT, 298 ms] 5.33/2.41 (4) JBCTerminationGraph 5.33/2.41 (5) JBCNonTerm [COMPLETE, 94 ms] 5.33/2.41 (6) NO 5.33/2.41 5.33/2.41 5.33/2.41 ---------------------------------------- 5.33/2.41 5.33/2.41 (0) 5.33/2.41 Obligation: 5.33/2.41 need to prove termination of the following program: 5.33/2.41 package simple.whileNestedOffset; 5.33/2.41 5.33/2.41 public class Main { 5.33/2.41 5.33/2.41 /** 5.33/2.41 * @param args 5.33/2.41 */ 5.33/2.41 public static void main(String[] args) { 5.33/2.41 WhileNestedOffset.increase(args.length); 5.33/2.41 5.33/2.41 } 5.33/2.41 5.33/2.41 } 5.33/2.41 5.33/2.41 5.33/2.41 package simple.whileNestedOffset; 5.33/2.41 5.33/2.41 public class WhileNestedOffset { 5.33/2.41 5.33/2.41 public static void increase(int i) { 5.33/2.41 int j; 5.33/2.41 while (i < 10) { 5.33/2.41 j = i; 5.33/2.41 while (j > 5) { 5.33/2.41 j++; 5.33/2.41 } 5.33/2.41 i++; 5.33/2.41 } 5.33/2.41 } 5.33/2.41 } 5.33/2.41 5.33/2.41 5.33/2.41 5.33/2.41 ---------------------------------------- 5.33/2.41 5.33/2.41 (1) BareJBCToJBCProof (EQUIVALENT) 5.33/2.41 initialized classpath 5.33/2.41 ---------------------------------------- 5.33/2.41 5.33/2.41 (2) 5.33/2.41 Obligation: 5.33/2.41 need to prove termination of the following program: 5.33/2.41 package simple.whileNestedOffset; 5.33/2.41 5.33/2.41 public class Main { 5.33/2.41 5.33/2.41 /** 5.33/2.41 * @param args 5.33/2.41 */ 5.33/2.41 public static void main(String[] args) { 5.33/2.41 WhileNestedOffset.increase(args.length); 5.33/2.41 5.33/2.41 } 5.33/2.41 5.33/2.41 } 5.33/2.41 5.33/2.41 5.33/2.41 package simple.whileNestedOffset; 5.33/2.41 5.33/2.41 public class WhileNestedOffset { 5.33/2.41 5.33/2.41 public static void increase(int i) { 5.33/2.41 int j; 5.33/2.41 while (i < 10) { 5.33/2.41 j = i; 5.33/2.41 while (j > 5) { 5.33/2.41 j++; 5.33/2.41 } 5.33/2.41 i++; 5.33/2.41 } 5.33/2.41 } 5.33/2.41 } 5.33/2.41 5.33/2.41 5.33/2.41 5.33/2.41 ---------------------------------------- 5.33/2.41 5.33/2.41 (3) JBCToGraph (EQUIVALENT) 5.33/2.41 Constructed TerminationGraph. 5.33/2.41 ---------------------------------------- 5.33/2.41 5.33/2.41 (4) 5.33/2.41 Obligation: 5.33/2.41 Termination Graph based on JBC Program: 5.33/2.41 simple.whileNestedOffset.Main.main([Ljava/lang/String;)V: Graph of 28 nodes with 1 SCC. 5.33/2.41 5.33/2.41 5.33/2.41 5.33/2.41 5.33/2.41 5.33/2.41 ---------------------------------------- 5.33/2.41 5.33/2.41 (5) JBCNonTerm (COMPLETE) 5.33/2.41 Reached a loop using the following run: 5.33/2.41 5.33/2.41 0: 5.33/2.41 a29([java.lang.String...]): length 6 -->{java.lang.Object...} 5.33/2.41 YES: (JL1) 5.33/2.41 1: 5.33/2.41 a29([java.lang.String...]): length 6 -->{java.lang.Object...} 5.33/2.41 YES: (JL1) 5.33/2.41 2: 5.33/2.41 YES: (JL1) 5.33/2.41 3: 5.33/2.41 5.33/2.41 YES: (JL1) 5.33/2.41 4: 5.33/2.41 5.33/2.41 YES: (JL1) 5.33/2.41 5: 5.33/2.41 5.33/2.41 YES: (JL1) 5.33/2.41 6: 5.33/2.41 5.33/2.41 YES: (JL1) 5.33/2.41 7: 5.33/2.41 5.33/2.41 YES: (JL1) 5.33/2.41 8: 5.33/2.41 5.33/2.41 YES: (JL1) 5.33/2.41 Start state of loop: 5.33/2.41 5.33/2.41 5.33/2.41 [a11(lv_0_0)] 5.33/2.41 5.33/2.41 i44: [0,9](2,1){0,+inf} 5.33/2.41 i69: [0,+inf)(l3) 5.33/2.41 i29: [0,9](u1){0,+inf} 5.33/2.41 a11([java.lang.String...]): length i29 -->{java.lang.Object...} 5.33/2.41 YES: (JL1) 5.33/2.41 5.33/2.41 5.33/2.41 In the loop head node, references [i69, i44, i29] were interesting. 5.33/2.41 5.33/2.41 All methods calls in the loop body are side-effect free, hence they can be ignored. 5.33/2.41 5.33/2.41 By SMT, we could prove 5.33/2.41 5.33/2.41 ((0 <= initial_i44 and initial_i44 <= 9 and 0 <= initial_i69 and 0 <= initial_i29 and initial_i29 <= 9) and (((path1_i69 = path1_i79 and path1_i81 = (path1_i79 + 1) and path1_i44 = res_i44 and path1_i81 = res_i69 and path1_i29 = res_i29 and path1_i44 = initial_i44 and path1_i69 = initial_i69 and path1_i29 = initial_i29) and (T and 5 = 5 and path1_i79 > 5)) and ((res1_i69 = res1_i79 and res1_i81 = (res1_i79 + 1) and res_i44 = res1_i44 and res_i69 = res1_i69 and res_i29 = res1_i29) and !(T and 5 = 5 and res1_i79 > 5)))) 5.33/2.41 5.33/2.41 to be UNSAT. Consequently, the loop will not terminate. 5.33/2.41 ---------------------------------------- 5.33/2.41 5.33/2.41 (6) 5.33/2.41 NO 5.33/2.43 EOF