5.60/2.38 NO 5.90/2.45 proof of /export/starexec/sandbox/benchmark/theBenchmark.jar 5.90/2.45 # AProVE Commit ID: 48fb2092695e11cc9f56e44b17a92a5f88ffb256 marcel 20180622 unpublished dirty 5.90/2.45 5.90/2.45 5.90/2.45 termination of the given Bare JBC problem could be disproven: 5.90/2.45 5.90/2.45 (0) Bare JBC problem 5.90/2.45 (1) BareJBCToJBCProof [EQUIVALENT, 94 ms] 5.90/2.45 (2) JBC problem 5.90/2.45 (3) JBCNonTerm [COMPLETE, 480 ms] 5.90/2.45 (4) NO 5.90/2.45 5.90/2.45 5.90/2.45 ---------------------------------------- 5.90/2.45 5.90/2.45 (0) 5.90/2.45 Obligation: 5.90/2.45 need to prove termination of the following program: 5.90/2.45 /** 5.90/2.45 * A loop continously throwing and catching an exception. 5.90/2.45 * Since the exception is thrown before the statement that makes the loop 5.90/2.45 * progress, that loop diverges. 5.90/2.45 * 5.90/2.45 * The call to main() diverges. 5.90/2.45 * 5.90/2.45 * Julia + BinTerm cannot prove that the call to main() terminates. 5.90/2.45 * 5.90/2.45 * @author Fausto Spoto 5.90/2.45 */ 5.90/2.45 5.90/2.45 public class Exc2 { 5.90/2.45 public static void main(String[] args) { 5.90/2.45 int i = 0; 5.90/2.45 5.90/2.45 while (i < 20) { 5.90/2.45 try { 5.90/2.45 if (i > 10) throw null; 5.90/2.45 i++; 5.90/2.45 } 5.90/2.45 catch (NullPointerException e) { 5.90/2.45 } 5.90/2.45 } 5.90/2.45 } 5.90/2.45 } 5.90/2.45 5.90/2.45 5.90/2.45 ---------------------------------------- 5.90/2.45 5.90/2.45 (1) BareJBCToJBCProof (EQUIVALENT) 5.90/2.45 initialized classpath 5.90/2.45 ---------------------------------------- 5.90/2.45 5.90/2.45 (2) 5.90/2.45 Obligation: 5.90/2.45 need to prove termination of the following program: 5.90/2.45 /** 5.90/2.45 * A loop continously throwing and catching an exception. 5.90/2.45 * Since the exception is thrown before the statement that makes the loop 5.90/2.45 * progress, that loop diverges. 5.90/2.45 * 5.90/2.45 * The call to main() diverges. 5.90/2.45 * 5.90/2.45 * Julia + BinTerm cannot prove that the call to main() terminates. 5.90/2.45 * 5.90/2.45 * @author Fausto Spoto 5.90/2.45 */ 5.90/2.45 5.90/2.45 public class Exc2 { 5.90/2.45 public static void main(String[] args) { 5.90/2.45 int i = 0; 5.90/2.45 5.90/2.45 while (i < 20) { 5.90/2.45 try { 5.90/2.45 if (i > 10) throw null; 5.90/2.45 i++; 5.90/2.45 } 5.90/2.45 catch (NullPointerException e) { 5.90/2.45 } 5.90/2.45 } 5.90/2.45 } 5.90/2.45 } 5.90/2.45 5.90/2.45 5.90/2.45 ---------------------------------------- 5.90/2.45 5.90/2.45 (3) JBCNonTerm (COMPLETE) 5.90/2.45 Constructed a run with a repetition. States 98 and 117 are repetitions (when considering only the interesting positions [lv_0_1]). 5.90/2.45 5.90/2.45 0: 5.90/2.45 YES: (JL1) 5.90/2.45 1: 5.90/2.45 YES: (JL1) 5.90/2.45 2: 5.90/2.45 YES: (JL1) 5.90/2.45 3: 5.90/2.45 YES: (JL1) 5.90/2.45 4: 5.90/2.45 YES: (JL1) 5.90/2.45 5: 5.90/2.45 YES: (JL1) 5.90/2.45 6: 5.90/2.45 YES: (JL1) 5.90/2.45 7: 5.90/2.45 YES: (JL1) 5.90/2.45 8: 5.90/2.45 YES: (JL1) 5.90/2.45 9: 5.90/2.45 YES: (JL1) 5.90/2.45 10: 5.90/2.45 YES: (JL1) 5.90/2.45 11: 5.90/2.45 YES: (JL1) 5.90/2.45 12: 5.90/2.45 YES: (JL1) 5.90/2.45 13: 5.90/2.45 YES: (JL1) 5.90/2.45 14: 5.90/2.45 YES: (JL1) 5.90/2.45 15: 5.90/2.45 YES: (JL1) 5.90/2.45 16: 5.90/2.45 YES: (JL1) 5.90/2.45 17: 5.90/2.45 YES: (JL1) 5.90/2.45 18: 5.90/2.45 YES: (JL1) 5.90/2.45 19: 5.90/2.45 YES: (JL1) 5.90/2.45 20: 5.90/2.45 YES: (JL1) 5.90/2.45 21: 5.90/2.45 YES: (JL1) 5.90/2.45 22: 5.90/2.45 YES: (JL1) 5.90/2.45 23: 5.90/2.45 YES: (JL1) 5.90/2.45 24: 5.90/2.45 YES: (JL1) 5.90/2.45 25: 5.90/2.45 YES: (JL1) 5.90/2.45 26: 5.90/2.45 YES: (JL1) 5.90/2.45 27: 5.90/2.45 YES: (JL1) 5.90/2.45 28: 5.90/2.45 YES: (JL1) 5.90/2.45 29: 5.90/2.45 YES: (JL1) 5.90/2.45 30: 5.90/2.45 YES: (JL1) 5.90/2.45 31: 5.90/2.45 YES: (JL1) 5.90/2.45 32: 5.90/2.45 YES: (JL1) 5.90/2.45 33: 5.90/2.45 YES: (JL1) 5.90/2.45 34: 5.90/2.45 YES: (JL1) 5.90/2.45 35: 5.90/2.45 YES: (JL1) 5.90/2.45 36: 5.90/2.45 YES: (JL1) 5.90/2.45 37: 5.90/2.45 YES: (JL1) 5.90/2.45 38: 5.90/2.45 YES: (JL1) 5.90/2.45 39: 5.90/2.45 YES: (JL1) 5.90/2.45 40: 5.90/2.45 YES: (JL1) 5.90/2.45 41: 5.90/2.45 YES: (JL1) 5.90/2.45 42: 5.90/2.45 YES: (JL1) 5.90/2.45 43: 5.90/2.45 YES: (JL1) 5.90/2.45 44: 5.90/2.45 YES: (JL1) 5.90/2.45 45: 5.90/2.45 YES: (JL1) 5.90/2.45 46: 5.90/2.45 YES: (JL1) 5.90/2.45 47: 5.90/2.45 YES: (JL1) 5.90/2.45 48: 5.90/2.45 YES: (JL1) 5.90/2.45 49: 5.90/2.45 YES: (JL1) 5.90/2.45 50: 5.90/2.45 YES: (JL1) 5.90/2.45 51: 5.90/2.45 YES: (JL1) 5.90/2.45 52: 5.90/2.45 YES: (JL1) 5.90/2.45 53: 5.90/2.45 YES: (JL1) 5.90/2.45 54: 5.90/2.45 YES: (JL1) 5.90/2.45 55: 5.90/2.45 YES: (JL1) 5.90/2.45 56: 5.90/2.45 YES: (JL1) 5.90/2.45 57: 5.90/2.45 YES: (JL1) 5.90/2.45 58: 5.90/2.45 YES: (JL1) 5.90/2.45 59: 5.90/2.45 YES: (JL1) 5.90/2.45 60: 5.90/2.45 YES: (JL1) 5.90/2.45 61: 5.90/2.45 YES: (JL1) 5.90/2.45 62: 5.90/2.45 YES: (JL1) 5.90/2.45 63: 5.90/2.45 YES: (JL1) 5.90/2.45 64: 5.90/2.45 YES: (JL1) 5.90/2.45 65: 5.90/2.45 YES: (JL1) 5.90/2.45 66: 5.90/2.45 YES: (JL1) 5.90/2.45 67: 5.90/2.45 YES: (JL1) 5.90/2.45 68: 5.90/2.45 YES: (JL1) 5.90/2.45 69: 5.90/2.45 YES: (JL1) 5.90/2.45 70: 5.90/2.45 YES: (JL1) 5.90/2.45 71: 5.90/2.45 YES: (JL1) 5.90/2.45 72: 5.90/2.45 YES: (JL1) 5.90/2.45 73: 5.90/2.45 YES: (JL1) 5.90/2.45 74: 5.90/2.45 YES: (JL1) 5.90/2.45 75: 5.90/2.45 YES: (JL1) 5.90/2.45 76: 5.90/2.45 YES: (JL1) 5.90/2.45 77: 5.90/2.45 YES: (JL1) 5.90/2.45 78: 5.90/2.45 YES: (JL1) 5.90/2.45 79: 5.90/2.45 YES: (JL1) 5.90/2.45 80: 5.90/2.45 YES: (JL1) 5.90/2.45 81: 5.90/2.45 YES: (JL1) 5.90/2.45 82: 5.90/2.45 YES: (JL1) 5.90/2.45 83: 5.90/2.45 YES: (JL1) 5.90/2.45 84: 5.90/2.45 YES: (JL1) 5.90/2.45 85: 5.90/2.45 YES: (JL1) 5.90/2.45 86: 5.90/2.45 YES: (JL1) 5.90/2.45 87: 5.90/2.45 YES: (JL1) 5.90/2.45 88: 5.90/2.45 YES: (JL1) 5.90/2.45 89: 5.90/2.45 YES: (JL1) 5.90/2.45 90: 5.90/2.45 YES: (JL1) 5.90/2.45 91: 5.90/2.45 YES: (JL1) 5.90/2.45 92: 5.90/2.45 YES: (JL1) 5.90/2.45 93: 5.90/2.45 YES: (JL1) 5.90/2.45 94: 5.90/2.45 YES: (JL1) 5.90/2.45 95: 5.90/2.45 YES: (JL1) 5.90/2.45 96: 5.90/2.45 YES: (JL1) 5.90/2.45 97: 5.90/2.45 YES: (JL1) 5.90/2.45 98: 5.90/2.45 YES: (JL1) 5.90/2.45 99:()V||0: load ADDR this||this: o208|| -> 5.90/2.45 5.90/2.45 o208!: Throwable(Exception(RuntimeException(NullPointerException())), backtrace=#, cause=#, detailMessage=#, stackTrace=#) -->{java.lang.Object|} 5.90/2.45 YES: (JL1) 5.90/2.45 100:()V||1: java.lang.RuntimeException.()V|| - ||o208> 5.90/2.45 5.90/2.45 o208!: Throwable(Exception(RuntimeException(NullPointerException())), backtrace=#, cause=#, detailMessage=#, stackTrace=#) -->{java.lang.Object|} 5.90/2.45 YES: (JL1) 5.90/2.45 101:()V||0: load ADDR this||this: o208|| -> 5.90/2.45 ()V||1: java.lang.RuntimeException.|| - || -> 5.90/2.45 5.90/2.45 o208!: Throwable(Exception(RuntimeException(NullPointerException())), backtrace=#, cause=#, detailMessage=#, stackTrace=#) -->{java.lang.Object|} 5.90/2.45 YES: (JL1) 5.90/2.45 102:()V||1: java.lang.Exception.()V|| - ||o208> 5.90/2.45 ()V||1: java.lang.RuntimeException.|| - || -> 5.90/2.45 5.90/2.45 o208!: Throwable(Exception(RuntimeException(NullPointerException())), backtrace=#, cause=#, detailMessage=#, stackTrace=#) -->{java.lang.Object|} 5.90/2.45 YES: (JL1) 5.90/2.45 103:()V||0: load ADDR this||this: o208|| -> 5.90/2.45 ()V||1: java.lang.Exception.|| - || -> 5.90/2.45 ()V||1: java.lang.RuntimeException.|| - || -> 5.90/2.45 5.90/2.45 o208!: Throwable(Exception(RuntimeException(NullPointerException())), backtrace=#, cause=#, detailMessage=#, stackTrace=#) -->{java.lang.Object|} 5.90/2.45 YES: (JL1) 5.90/2.45 104:()V||1: java.lang.Throwable.()V|| - ||o208> 5.90/2.45 ()V||1: java.lang.Exception.|| - || -> 5.90/2.45 ()V||1: java.lang.RuntimeException.|| - || -> 5.90/2.45 5.90/2.45 o208!: Throwable(Exception(RuntimeException(NullPointerException())), backtrace=#, cause=#, detailMessage=#, stackTrace=#) -->{java.lang.Object|} 5.90/2.45 YES: (JL1) 5.90/2.45 105:()V||0: load ADDR this||this: o208|| -> 5.90/2.45 ()V||1: java.lang.Throwable.|| - || -> 5.90/2.45 ()V||1: java.lang.Exception.|| - || -> 5.90/2.45 ()V||1: java.lang.RuntimeException.|| - || -> 5.90/2.45 5.90/2.45 o208!: Throwable(Exception(RuntimeException(NullPointerException())), backtrace=#, cause=#, detailMessage=#, stackTrace=#) -->{java.lang.Object|} 5.90/2.45 YES: (JL1) 5.90/2.45 106:()V||1: java.lang.Object.()V||this: o208||o208> 5.90/2.45 ()V||1: java.lang.Throwable.|| - || -> 5.90/2.45 ()V||1: java.lang.Exception.|| - || -> 5.90/2.45 ()V||1: java.lang.RuntimeException.|| - || -> 5.90/2.45 5.90/2.45 o208!: Throwable(Exception(RuntimeException(NullPointerException())), backtrace=#, cause=#, detailMessage=#, stackTrace=#) -->{java.lang.Object|} 5.90/2.45 YES: (JL1) 5.90/2.45 107:()V||4: load ADDR this||this: o208|| -> 5.90/2.45 ()V||1: java.lang.Throwable.|| - || -> 5.90/2.45 ()V||1: java.lang.Exception.|| - || -> 5.90/2.45 ()V||1: java.lang.RuntimeException.|| - || -> 5.90/2.45 5.90/2.45 o208!: Throwable(Exception(RuntimeException(NullPointerException())), backtrace=#, cause=#, detailMessage=#, stackTrace=#) -->{java.lang.Object|} 5.90/2.45 YES: (JL1) 5.90/2.45 108:()V||5: load ADDR this||this: o208||o208> 5.90/2.45 ()V||1: java.lang.Throwable.|| - || -> 5.90/2.45 ()V||1: java.lang.Exception.|| - || -> 5.90/2.45 ()V||1: java.lang.RuntimeException.|| - || -> 5.90/2.45 5.90/2.45 o208!: Throwable(Exception(RuntimeException(NullPointerException())), backtrace=#, cause=#, detailMessage=#, stackTrace=#) -->{java.lang.Object|} 5.90/2.45 YES: (JL1) 5.90/2.45 109:()V||6: Write to cause||this: o208||o208, o208> 5.90/2.45 ()V||1: java.lang.Throwable.|| - || -> 5.90/2.45 ()V||1: java.lang.Exception.|| - || -> 5.90/2.45 ()V||1: java.lang.RuntimeException.|| - || -> 5.90/2.45 5.90/2.45 o208!: Throwable(Exception(RuntimeException(NullPointerException())), backtrace=#, cause=#, detailMessage=#, stackTrace=#) -->{java.lang.Object|} 5.90/2.45 YES: (JL1) 5.90/2.45 110:()V||9: load ADDR this||this: o208|| -> 5.90/2.45 ()V||1: java.lang.Throwable.|| - || -> 5.90/2.45 ()V||1: java.lang.Exception.|| - || -> 5.90/2.45 ()V||1: java.lang.RuntimeException.|| - || -> 5.90/2.45 5.90/2.45 o208!: Throwable(Exception(RuntimeException(NullPointerException())), backtrace=#, cause=o208, detailMessage=#, stackTrace=#) -->{{java.lang.NullPointerException|, java.lang.Object|}} 5.90/2.45 YES: (JL1) 5.90/2.45 111:()V||10: java.lang.Throwable.fillInStackTrace()Ljava/lang/Throwable;|| - ||o208> 5.90/2.45 ()V||1: java.lang.Throwable.|| - || -> 5.90/2.45 ()V||1: java.lang.Exception.|| - || -> 5.90/2.45 ()V||1: java.lang.RuntimeException.|| - || -> 5.90/2.45 5.90/2.45 o208!: Throwable(Exception(RuntimeException(NullPointerException())), backtrace=#, cause=o208, detailMessage=#, stackTrace=#) -->{{java.lang.NullPointerException|, java.lang.Object|}} 5.90/2.45 YES: (JL1) 5.90/2.45 112:()V||13: pop|| - ||o208> 5.90/2.45 ()V||1: java.lang.Throwable.|| - || -> 5.90/2.45 ()V||1: java.lang.Exception.|| - || -> 5.90/2.45 ()V||1: java.lang.RuntimeException.|| - || -> 5.90/2.45 5.90/2.45 o208!: Throwable(Exception(RuntimeException(NullPointerException())), backtrace=#, cause=o208, detailMessage=#, stackTrace=#) -->{{java.lang.NullPointerException|, java.lang.Object|}} 5.90/2.45 YES: (JL1) 5.90/2.45 113:()V||14: return|| - || -> 5.90/2.45 ()V||1: java.lang.Throwable.|| - || -> 5.90/2.45 ()V||1: java.lang.Exception.|| - || -> 5.90/2.45 ()V||1: java.lang.RuntimeException.|| - || -> 5.90/2.45 5.90/2.45 o208!: Throwable(Exception(RuntimeException(NullPointerException())), backtrace=#, cause=o208, detailMessage=#, stackTrace=#) -->{{java.lang.NullPointerException|, java.lang.Object|}} 5.90/2.45 YES: (JL1) 5.90/2.45 114:()V||4: return|| - || -> 5.90/2.45 ()V||1: java.lang.Exception.|| - || -> 5.90/2.45 ()V||1: java.lang.RuntimeException.|| - || -> 5.90/2.45 5.90/2.45 o208!: Throwable(Exception(RuntimeException(NullPointerException())), backtrace=#, cause=o208, detailMessage=#, stackTrace=#) -->{{java.lang.NullPointerException|, java.lang.Object|}} 5.90/2.45 YES: (JL1) 5.90/2.45 115:()V||4: return|| - || -> 5.90/2.45 ()V||1: java.lang.RuntimeException.|| - || -> 5.90/2.45 5.90/2.45 o208!: Throwable(Exception(RuntimeException(NullPointerException())), backtrace=#, cause=o208, detailMessage=#, stackTrace=#) -->{{java.lang.NullPointerException|, java.lang.Object|}} 5.90/2.45 YES: (JL1) 5.90/2.45 116:()V||4: return|| - || -> 5.90/2.45 5.90/2.45 o208!: Throwable(Exception(RuntimeException(NullPointerException())), backtrace=#, cause=o208, detailMessage=#, stackTrace=#) -->{{java.lang.NullPointerException|, java.lang.Object|}} 5.90/2.45 YES: (JL1) 5.90/2.45 117: 5.90/2.45 o208!: Throwable(Exception(RuntimeException(NullPointerException())), backtrace=#, cause=o208, detailMessage=#, stackTrace=#) -->{{java.lang.NullPointerException|, java.lang.Object|}} 5.90/2.45 YES: (JL1) 5.90/2.45 5.90/2.45 ---------------------------------------- 5.90/2.45 5.90/2.45 (4) 5.90/2.45 NO 6.07/2.50 EOF