6.46/2.63 NO 6.46/2.64 proof of /export/starexec/sandbox/benchmark/theBenchmark.jar 6.46/2.64 # AProVE Commit ID: 48fb2092695e11cc9f56e44b17a92a5f88ffb256 marcel 20180622 unpublished dirty 6.46/2.64 6.46/2.64 6.46/2.64 termination of the given Bare JBC problem could be disproven: 6.46/2.64 6.46/2.64 (0) Bare JBC problem 6.46/2.64 (1) BareJBCToJBCProof [EQUIVALENT, 96 ms] 6.46/2.64 (2) JBC problem 6.46/2.64 (3) JBCNonTerm [COMPLETE, 347 ms] 6.46/2.64 (4) NO 6.46/2.64 6.46/2.64 6.46/2.64 ---------------------------------------- 6.46/2.64 6.46/2.64 (0) 6.46/2.64 Obligation: 6.46/2.64 need to prove termination of the following program: 6.46/2.64 package simple.fib; 6.46/2.64 6.46/2.64 public class Fibonacci { 6.46/2.64 6.46/2.64 public static void fib(int n) { 6.46/2.64 int i = 0; 6.46/2.64 int j = 1; 6.46/2.64 int t = 0; 6.46/2.64 while (j != n) { 6.46/2.64 t = j+i; 6.46/2.64 i = j; 6.46/2.64 j = t; 6.46/2.64 } 6.46/2.64 } 6.46/2.64 } 6.46/2.64 6.46/2.64 6.46/2.64 package simple.fib; 6.46/2.64 6.46/2.64 public class Main { 6.46/2.64 6.46/2.64 /** 6.46/2.64 * @param args 6.46/2.64 */ 6.46/2.64 public static void main(String[] args) { 6.46/2.64 Fibonacci.fib(args.length); 6.46/2.64 } 6.46/2.64 6.46/2.64 } 6.46/2.64 6.46/2.64 6.46/2.64 6.46/2.64 ---------------------------------------- 6.46/2.64 6.46/2.64 (1) BareJBCToJBCProof (EQUIVALENT) 6.46/2.64 initialized classpath 6.46/2.64 ---------------------------------------- 6.46/2.64 6.46/2.64 (2) 6.46/2.64 Obligation: 6.46/2.64 need to prove termination of the following program: 6.46/2.64 package simple.fib; 6.46/2.64 6.46/2.64 public class Fibonacci { 6.46/2.64 6.46/2.64 public static void fib(int n) { 6.46/2.64 int i = 0; 6.46/2.64 int j = 1; 6.46/2.64 int t = 0; 6.46/2.64 while (j != n) { 6.46/2.64 t = j+i; 6.46/2.64 i = j; 6.46/2.64 j = t; 6.46/2.64 } 6.46/2.64 } 6.46/2.64 } 6.46/2.64 6.46/2.64 6.46/2.64 package simple.fib; 6.46/2.64 6.46/2.64 public class Main { 6.46/2.64 6.46/2.64 /** 6.46/2.64 * @param args 6.46/2.64 */ 6.46/2.64 public static void main(String[] args) { 6.46/2.64 Fibonacci.fib(args.length); 6.46/2.64 } 6.46/2.64 6.46/2.64 } 6.46/2.64 6.46/2.64 6.46/2.64 6.46/2.64 ---------------------------------------- 6.46/2.64 6.46/2.64 (3) JBCNonTerm (COMPLETE) 6.46/2.64 Reached a loop using the following run: 6.46/2.64 6.46/2.64 0: 6.46/2.64 a18([java.lang.String...]): length 0 -->{java.lang.Object...} 6.46/2.64 YES: (JL1) 6.46/2.64 1: 6.46/2.64 a18([java.lang.String...]): length 0 -->{java.lang.Object...} 6.46/2.64 YES: (JL1) 6.46/2.64 2: 6.46/2.64 YES: (JL1) 6.46/2.64 3: 6.46/2.64 6.46/2.64 YES: (JL1) 6.46/2.64 4: 6.46/2.64 6.46/2.64 YES: (JL1) 6.46/2.64 5: 6.46/2.64 6.46/2.64 YES: (JL1) 6.46/2.64 6: 6.46/2.64 6.46/2.64 YES: (JL1) 6.46/2.64 7: 6.46/2.64 6.46/2.64 YES: (JL1) 6.46/2.64 8: 6.46/2.64 6.46/2.64 YES: (JL1) 6.46/2.64 9: 6.46/2.64 6.46/2.64 YES: (JL1) 6.46/2.64 Start state of loop: 6.46/2.64 6.46/2.64 6.46/2.64 [a7(lv_0_0)] 6.46/2.64 6.46/2.64 i19: [0,+inf) 6.46/2.64 i31: [0,+inf)(l3) 6.46/2.64 i32: [1,+inf)(l2){0,+inf} 6.46/2.64 a7([java.lang.String...]): length i19 -->{java.lang.Object...} 6.46/2.64 YES: (JL1) 6.46/2.64 6.46/2.64 6.46/2.64 In the loop head node, references [i32, i19, i31] were interesting. 6.46/2.64 6.46/2.64 All methods calls in the loop body are side-effect free, hence they can be ignored. 6.46/2.64 6.46/2.64 By SMT, we could prove 6.46/2.64 6.46/2.64 ((0 <= initial_i19 and 0 <= initial_i31 and 1 <= initial_i32) and ((((path1_i36 = (path1_i32 + path1_i31) and path1_i19 = res_i19 and path1_i32 = res_i31 and path1_i36 = res_i32 and path1_i19 = initial_i19 and path1_i31 = initial_i31 and path1_i32 = initial_i32) and (path1_i32 != path1_i19 and path1_i32 > path1_i19)) or ((path1_i36 = (path1_i32 + path1_i31) and path1_i19 = res_i19 and path1_i32 = res_i31 and path1_i36 = res_i32 and path1_i19 = initial_i19 and path1_i31 = initial_i31 and path1_i32 = initial_i32) and (path1_i32 != path1_i19 and path1_i32 > path1_i19))) and (((res1_i36 = (res1_i32 + res1_i31) and res_i19 = res1_i19 and res_i31 = res1_i31 and res_i32 = res1_i32) and !(res1_i32 != res1_i19 and res1_i32 > res1_i19)) and ((res1_i36 = (res1_i32 + res1_i31) and res_i19 = res1_i19 and res_i31 = res1_i31 and res_i32 = res1_i32) and !(res1_i32 != res1_i19 and res1_i32 > res1_i19))))) 6.46/2.64 6.46/2.64 to be UNSAT. Consequently, the loop will not terminate. 6.46/2.64 ---------------------------------------- 6.46/2.64 6.46/2.64 (4) 6.46/2.64 NO 6.66/2.69 EOF