5.92/2.42 NO 5.92/2.42 proof of /export/starexec/sandbox2/benchmark/theBenchmark.jar 5.92/2.42 # AProVE Commit ID: 48fb2092695e11cc9f56e44b17a92a5f88ffb256 marcel 20180622 unpublished dirty 5.92/2.42 5.92/2.42 5.92/2.42 termination of the given Bare JBC problem could be disproven: 5.92/2.42 5.92/2.42 (0) Bare JBC problem 5.92/2.42 (1) BareJBCToJBCProof [EQUIVALENT, 94 ms] 5.92/2.42 (2) JBC problem 5.92/2.42 (3) JBCNonTerm [COMPLETE, 583 ms] 5.92/2.42 (4) NO 5.92/2.42 5.92/2.42 5.92/2.42 ---------------------------------------- 5.92/2.42 5.92/2.42 (0) 5.92/2.42 Obligation: 5.92/2.42 need to prove termination of the following program: 5.92/2.42 public class List { 5.92/2.42 public int head; 5.92/2.42 public List tail; 5.92/2.42 5.92/2.42 public List(int h, List t) { 5.92/2.42 head = h; 5.92/2.42 tail = t; 5.92/2.42 } 5.92/2.42 } 5.92/2.42 5.92/2.42 public class Test13 { 5.92/2.42 private static List l1, l2; 5.92/2.42 5.92/2.42 public static void main(String[] args) { 5.92/2.42 List l = new List(13, null); 5.92/2.42 List start = l; 5.92/2.42 5.92/2.42 for (int i = 0; i < args.length + 1; i++) 5.92/2.42 l = l.tail = new List(11, null); 5.92/2.42 5.92/2.42 l1 = l; 5.92/2.42 l2 = start; 5.92/2.42 5.92/2.42 test(); 5.92/2.42 5.92/2.42 length(start); 5.92/2.42 } 5.92/2.42 5.92/2.42 private static int length(List l) { 5.92/2.42 int length = 0; 5.92/2.42 5.92/2.42 while (l != null) { 5.92/2.42 l = l.tail; 5.92/2.42 length++; 5.92/2.42 } 5.92/2.42 5.92/2.42 return length; 5.92/2.42 } 5.92/2.42 5.92/2.42 private static void test() { 5.92/2.42 l1.tail = l2; 5.92/2.42 } 5.92/2.42 } 5.92/2.42 5.92/2.42 5.92/2.42 ---------------------------------------- 5.92/2.42 5.92/2.42 (1) BareJBCToJBCProof (EQUIVALENT) 5.92/2.42 initialized classpath 5.92/2.42 ---------------------------------------- 5.92/2.42 5.92/2.42 (2) 5.92/2.42 Obligation: 5.92/2.42 need to prove termination of the following program: 5.92/2.42 public class List { 5.92/2.42 public int head; 5.92/2.42 public List tail; 5.92/2.42 5.92/2.42 public List(int h, List t) { 5.92/2.42 head = h; 5.92/2.42 tail = t; 5.92/2.42 } 5.92/2.42 } 5.92/2.42 5.92/2.42 public class Test13 { 5.92/2.42 private static List l1, l2; 5.92/2.42 5.92/2.42 public static void main(String[] args) { 5.92/2.42 List l = new List(13, null); 5.92/2.42 List start = l; 5.92/2.42 5.92/2.42 for (int i = 0; i < args.length + 1; i++) 5.92/2.42 l = l.tail = new List(11, null); 5.92/2.42 5.92/2.42 l1 = l; 5.92/2.42 l2 = start; 5.92/2.42 5.92/2.42 test(); 5.92/2.42 5.92/2.42 length(start); 5.92/2.42 } 5.92/2.42 5.92/2.42 private static int length(List l) { 5.92/2.42 int length = 0; 5.92/2.42 5.92/2.42 while (l != null) { 5.92/2.42 l = l.tail; 5.92/2.42 length++; 5.92/2.42 } 5.92/2.42 5.92/2.42 return length; 5.92/2.42 } 5.92/2.42 5.92/2.42 private static void test() { 5.92/2.42 l1.tail = l2; 5.92/2.42 } 5.92/2.42 } 5.92/2.42 5.92/2.42 5.92/2.42 ---------------------------------------- 5.92/2.42 5.92/2.42 (3) JBCNonTerm (COMPLETE) 5.92/2.42 Symbolic evaluation of method public static main([Ljava/lang/String;)V never reaches a method end (by explicit return or exception). 5.92/2.42 5.92/2.42 As this is the main method, we can conclude non-termination of the input program. 5.92/2.42 ---------------------------------------- 5.92/2.42 5.92/2.42 (4) 5.92/2.42 NO 6.04/2.47 EOF