4.81/2.10 NO 4.89/2.11 proof of /export/starexec/sandbox2/benchmark/theBenchmark.jar 4.89/2.11 # AProVE Commit ID: 48fb2092695e11cc9f56e44b17a92a5f88ffb256 marcel 20180622 unpublished dirty 4.89/2.11 4.89/2.11 4.89/2.11 termination of the given Bare JBC problem could be disproven: 4.89/2.11 4.89/2.11 (0) Bare JBC problem 4.89/2.11 (1) BareJBCToJBCProof [EQUIVALENT, 96 ms] 4.89/2.11 (2) JBC problem 4.89/2.11 (3) JBCToGraph [EQUIVALENT, 193 ms] 4.89/2.11 (4) JBCTerminationGraph 4.89/2.11 (5) JBCNonTerm [COMPLETE, 75 ms] 4.89/2.11 (6) NO 4.89/2.11 4.89/2.11 4.89/2.11 ---------------------------------------- 4.89/2.11 4.89/2.11 (0) 4.89/2.11 Obligation: 4.89/2.11 need to prove termination of the following program: 4.89/2.11 package simple.whileIncr; 4.89/2.11 4.89/2.11 public class Main { 4.89/2.11 4.89/2.11 /** 4.89/2.11 * @param args 4.89/2.11 */ 4.89/2.11 public static void main(String[] args) { 4.89/2.11 WhileIncr.increase(args.length); 4.89/2.11 4.89/2.11 } 4.89/2.11 4.89/2.11 } 4.89/2.11 4.89/2.11 4.89/2.11 package simple.whileIncr; 4.89/2.11 4.89/2.11 public class WhileIncr { 4.89/2.11 4.89/2.11 public static void increase(int i) { 4.89/2.11 while (i > 0) { 4.89/2.11 i++; 4.89/2.11 } 4.89/2.11 } 4.89/2.11 } 4.89/2.11 4.89/2.11 4.89/2.11 4.89/2.11 ---------------------------------------- 4.89/2.11 4.89/2.11 (1) BareJBCToJBCProof (EQUIVALENT) 4.89/2.11 initialized classpath 4.89/2.11 ---------------------------------------- 4.89/2.11 4.89/2.11 (2) 4.89/2.11 Obligation: 4.89/2.11 need to prove termination of the following program: 4.89/2.11 package simple.whileIncr; 4.89/2.11 4.89/2.11 public class Main { 4.89/2.11 4.89/2.11 /** 4.89/2.11 * @param args 4.89/2.11 */ 4.89/2.11 public static void main(String[] args) { 4.89/2.11 WhileIncr.increase(args.length); 4.89/2.11 4.89/2.11 } 4.89/2.11 4.89/2.11 } 4.89/2.11 4.89/2.11 4.89/2.11 package simple.whileIncr; 4.89/2.11 4.89/2.11 public class WhileIncr { 4.89/2.11 4.89/2.11 public static void increase(int i) { 4.89/2.11 while (i > 0) { 4.89/2.11 i++; 4.89/2.11 } 4.89/2.11 } 4.89/2.11 } 4.89/2.11 4.89/2.11 4.89/2.11 4.89/2.11 ---------------------------------------- 4.89/2.11 4.89/2.11 (3) JBCToGraph (EQUIVALENT) 4.89/2.11 Constructed TerminationGraph. 4.89/2.11 ---------------------------------------- 4.89/2.11 4.89/2.11 (4) 4.89/2.11 Obligation: 4.89/2.11 Termination Graph based on JBC Program: 4.89/2.11 simple.whileIncr.Main.main([Ljava/lang/String;)V: Graph of 15 nodes with 1 SCC. 4.89/2.11 4.89/2.11 4.89/2.11 4.89/2.11 4.89/2.11 4.89/2.11 ---------------------------------------- 4.89/2.11 4.89/2.11 (5) JBCNonTerm (COMPLETE) 4.89/2.11 Reached a loop using the following run: 4.89/2.11 4.89/2.11 0: 4.89/2.11 a10([java.lang.String...]): length 1 -->{java.lang.Object...} 4.89/2.11 YES: (JL1) 4.89/2.11 1: 4.89/2.11 a10([java.lang.String...]): length 1 -->{java.lang.Object...} 4.89/2.11 YES: (JL1) 4.89/2.11 2: 4.89/2.11 YES: (JL1) 4.89/2.11 3: 4.89/2.11 4.89/2.11 YES: (JL1) 4.89/2.11 Start state of loop: 4.89/2.11 4.89/2.11 4.89/2.11 [a4(lv_0_0)] 4.89/2.11 4.89/2.11 i17: [0,+inf)(l1) 4.89/2.11 i18: [0,+inf)(l1) 4.89/2.11 a4([java.lang.String...]): length i18 -->{java.lang.Object...} 4.89/2.11 YES: (JL1) 4.89/2.11 4.89/2.11 4.89/2.11 In the loop head node, references [i17] were interesting. 4.89/2.11 4.89/2.11 All methods calls in the loop body are side-effect free, hence they can be ignored. 4.89/2.11 4.89/2.11 By SMT, we could prove 4.89/2.11 4.89/2.11 ((0 <= initial_i17 and 0 <= initial_i18) and (((path1_i17 = path1_i151 and path1_i152 = (path1_i151 + 1) and path1_i152 = res_i17 and path1_i17 = initial_i17) and path1_i151 > 0) and ((res1_i17 = res1_i151 and res1_i152 = (res1_i151 + 1) and res_i17 = res1_i17) and !res1_i151 > 0))) 4.89/2.11 4.89/2.11 to be UNSAT. Consequently, the loop will not terminate. 4.89/2.11 ---------------------------------------- 4.89/2.11 4.89/2.11 (6) 4.89/2.11 NO 4.92/2.13 EOF