3.59/1.75 YES 3.59/1.76 proof of /export/starexec/sandbox/benchmark/theBenchmark.jar 3.59/1.76 # AProVE Commit ID: 48fb2092695e11cc9f56e44b17a92a5f88ffb256 marcel 20180622 unpublished dirty 3.59/1.76 3.59/1.76 3.59/1.76 termination of the given Bare JBC problem could be proven: 3.59/1.76 3.59/1.76 (0) Bare JBC problem 3.59/1.76 (1) BareJBCToJBCProof [EQUIVALENT, 95 ms] 3.59/1.76 (2) JBC problem 3.59/1.76 (3) JBCToGraph [EQUIVALENT, 105 ms] 3.59/1.76 (4) JBCTerminationGraph 3.59/1.76 (5) TerminationGraphToSCCProof [SOUND, 0 ms] 3.59/1.76 (6) TRUE 3.59/1.76 3.59/1.76 3.59/1.76 ---------------------------------------- 3.59/1.76 3.59/1.76 (0) 3.59/1.76 Obligation: 3.59/1.76 need to prove termination of the following program: 3.59/1.76 public class A { 3.59/1.76 public boolean hasSuperType() { 3.59/1.76 return false; 3.59/1.76 } 3.59/1.76 3.59/1.76 public A getSuperType() { 3.59/1.76 return null; 3.59/1.76 } 3.59/1.76 } 3.59/1.76 3.59/1.76 3.59/1.76 public class B extends A { 3.59/1.76 public boolean hasSuperType() { 3.59/1.76 return true; 3.59/1.76 } 3.59/1.76 3.59/1.76 public A getSuperType() { 3.59/1.76 return new A(); 3.59/1.76 } 3.59/1.76 } 3.59/1.76 3.59/1.76 3.59/1.76 public class C extends B { 3.59/1.76 public A getSuperType() { 3.59/1.76 return new B(); 3.59/1.76 } 3.59/1.76 } 3.59/1.76 3.59/1.76 3.59/1.76 public class TypeSwitch { 3.59/1.76 public static void main(String[] args) { 3.59/1.76 A x = null; 3.59/1.76 switch (args.length) { 3.59/1.76 case 0: x = new A(); 3.59/1.76 break; 3.59/1.76 case 1: x = new B(); 3.59/1.76 break; 3.59/1.76 case 2: x = new C(); 3.59/1.76 break; 3.59/1.76 } 3.59/1.76 3.59/1.76 while (x.hasSuperType()) { 3.59/1.76 x = x.getSuperType(); 3.59/1.76 } 3.59/1.76 } 3.59/1.76 } 3.59/1.76 3.59/1.76 3.59/1.76 3.59/1.76 ---------------------------------------- 3.59/1.76 3.59/1.76 (1) BareJBCToJBCProof (EQUIVALENT) 3.59/1.76 initialized classpath 3.59/1.76 ---------------------------------------- 3.59/1.76 3.59/1.76 (2) 3.59/1.76 Obligation: 3.59/1.76 need to prove termination of the following program: 3.59/1.76 public class A { 3.59/1.76 public boolean hasSuperType() { 3.59/1.76 return false; 3.59/1.76 } 3.59/1.76 3.59/1.76 public A getSuperType() { 3.59/1.76 return null; 3.59/1.76 } 3.59/1.76 } 3.59/1.76 3.59/1.76 3.59/1.76 public class B extends A { 3.59/1.76 public boolean hasSuperType() { 3.59/1.76 return true; 3.59/1.76 } 3.59/1.76 3.59/1.76 public A getSuperType() { 3.59/1.76 return new A(); 3.59/1.76 } 3.59/1.76 } 3.59/1.76 3.59/1.76 3.59/1.76 public class C extends B { 3.59/1.76 public A getSuperType() { 3.59/1.76 return new B(); 3.59/1.76 } 3.59/1.76 } 3.59/1.76 3.59/1.76 3.59/1.76 public class TypeSwitch { 3.59/1.76 public static void main(String[] args) { 3.59/1.76 A x = null; 3.59/1.76 switch (args.length) { 3.59/1.76 case 0: x = new A(); 3.59/1.76 break; 3.59/1.76 case 1: x = new B(); 3.59/1.76 break; 3.59/1.76 case 2: x = new C(); 3.59/1.76 break; 3.59/1.76 } 3.59/1.76 3.59/1.76 while (x.hasSuperType()) { 3.59/1.76 x = x.getSuperType(); 3.59/1.76 } 3.59/1.76 } 3.59/1.76 } 3.59/1.76 3.59/1.76 3.59/1.76 3.59/1.76 ---------------------------------------- 3.59/1.76 3.59/1.76 (3) JBCToGraph (EQUIVALENT) 3.59/1.76 Constructed TerminationGraph. 3.59/1.76 ---------------------------------------- 3.59/1.76 3.59/1.76 (4) 3.59/1.76 Obligation: 3.59/1.76 Termination Graph based on JBC Program: 3.59/1.76 TypeSwitch.main([Ljava/lang/String;)V: Graph of 137 nodes with 0 SCCs. 3.59/1.76 3.59/1.76 3.59/1.76 3.59/1.76 3.59/1.76 3.59/1.76 ---------------------------------------- 3.59/1.76 3.59/1.76 (5) TerminationGraphToSCCProof (SOUND) 3.59/1.76 Proven termination by absence of SCCs 3.59/1.76 ---------------------------------------- 3.59/1.76 3.59/1.76 (6) 3.59/1.76 TRUE 3.59/1.78 EOF