4.67/2.12 NO 4.77/2.16 proof of /export/starexec/sandbox/benchmark/theBenchmark.jar 4.77/2.16 # AProVE Commit ID: 48fb2092695e11cc9f56e44b17a92a5f88ffb256 marcel 20180622 unpublished dirty 4.77/2.16 4.77/2.16 4.77/2.16 termination of the given Bare JBC problem could be disproven: 4.77/2.16 4.77/2.16 (0) Bare JBC problem 4.77/2.16 (1) BareJBCToJBCProof [EQUIVALENT, 96 ms] 4.77/2.16 (2) JBC problem 4.77/2.16 (3) JBCNonTerm [COMPLETE, 272 ms] 4.77/2.16 (4) NO 4.77/2.16 4.77/2.16 4.77/2.16 ---------------------------------------- 4.77/2.16 4.77/2.16 (0) 4.77/2.16 Obligation: 4.77/2.16 need to prove termination of the following program: 4.77/2.16 public class LoopingNonterm { 4.77/2.16 public static void main(String[] a) { 4.77/2.16 int i = 0; 4.77/2.16 int j = a.length; 4.77/2.16 while (i < j) { 4.77/2.16 i += a[i].length(); 4.77/2.16 } 4.77/2.16 } 4.77/2.16 } 4.77/2.16 4.77/2.16 4.77/2.16 4.77/2.16 ---------------------------------------- 4.77/2.16 4.77/2.16 (1) BareJBCToJBCProof (EQUIVALENT) 4.77/2.16 initialized classpath 4.77/2.16 ---------------------------------------- 4.77/2.16 4.77/2.16 (2) 4.77/2.16 Obligation: 4.77/2.16 need to prove termination of the following program: 4.77/2.16 public class LoopingNonterm { 4.77/2.16 public static void main(String[] a) { 4.77/2.16 int i = 0; 4.77/2.16 int j = a.length; 4.77/2.16 while (i < j) { 4.77/2.16 i += a[i].length(); 4.77/2.16 } 4.77/2.16 } 4.77/2.16 } 4.77/2.16 4.77/2.16 4.77/2.16 4.77/2.16 ---------------------------------------- 4.77/2.16 4.77/2.16 (3) JBCNonTerm (COMPLETE) 4.77/2.16 Constructed a run with a repetition. States 5 and 19 are repetitions (when considering only the interesting positions []). 4.77/2.16 4.77/2.16 0: 4.77/2.16 a28([java.lang.String...]): {o27} -->{java.lang.Object...} 4.77/2.16 o27!: String(count=0, hash=#, offset=[0,+inf), value=o28?) -->{java.lang.Object...} 4.77/2.16 o28:: [CHAR] -->{java.lang.Object...} 4.77/2.16 a28-><-o28 4.77/2.16 a28-><-o27 4.77/2.16 YES: (JL1) 4.77/2.16 1: 4.77/2.16 a28([java.lang.String...]): {o27} -->{java.lang.Object...} 4.77/2.16 o27!: String(count=0, hash=#, offset=[0,+inf), value=o28?) -->{java.lang.Object...} 4.77/2.16 o28:: [CHAR] -->{java.lang.Object...} 4.77/2.16 a28-><-o28 4.77/2.16 a28-><-o27 4.77/2.16 YES: (JL1) 4.77/2.16 2: 4.77/2.16 a28([java.lang.String...]): {o27} -->{java.lang.Object...} 4.77/2.16 o27!: String(count=0, hash=#, offset=[0,+inf), value=o28?) -->{java.lang.Object...} 4.77/2.16 o28:: [CHAR] -->{java.lang.Object...} 4.77/2.16 a28-><-o28 4.77/2.16 a28-><-o27 4.77/2.16 YES: (JL1) 4.77/2.16 3: 4.77/2.16 a28([java.lang.String...]): {o27} -->{java.lang.Object...} 4.77/2.16 o27!: String(count=0, hash=#, offset=[0,+inf), value=o28?) -->{java.lang.Object...} 4.77/2.16 o28:: [CHAR] -->{java.lang.Object...} 4.77/2.16 a28-><-o28 4.77/2.16 a28-><-o27 4.77/2.16 YES: (JL1) 4.77/2.16 4: 4.77/2.16 a28([java.lang.String...]): {o27} -->{java.lang.Object...} 4.77/2.16 o27!: String(count=0, hash=#, offset=[0,+inf), value=o28?) -->{java.lang.Object...} 4.77/2.16 o28:: [CHAR] -->{java.lang.Object...} 4.77/2.16 a28-><-o28 4.77/2.16 a28-><-o27 4.77/2.16 YES: (JL1) 4.77/2.16 5: 4.77/2.16 a28([java.lang.String...]): {o27} -->{java.lang.Object...} 4.77/2.16 o27!: String(count=0, hash=#, offset=[0,+inf), value=o28?) -->{java.lang.Object...} 4.77/2.16 o28:: [CHAR] -->{java.lang.Object...} 4.77/2.16 a28-><-o28 4.77/2.16 a28-><-o27 4.77/2.16 YES: (JL1) 4.77/2.16 6: 4.77/2.16 a28([java.lang.String...]): {o27} -->{java.lang.Object...} 4.77/2.16 o27!: String(count=0, hash=#, offset=[0,+inf), value=o28?) -->{java.lang.Object...} 4.77/2.16 o28:: [CHAR] -->{java.lang.Object...} 4.77/2.16 a28-><-o28 4.77/2.16 a28-><-o27 4.77/2.16 YES: (JL1) 4.77/2.16 7: 4.77/2.16 a28([java.lang.String...]): {o27} -->{java.lang.Object...} 4.77/2.16 o27!: String(count=0, hash=#, offset=[0,+inf), value=o28?) -->{java.lang.Object...} 4.77/2.16 o28:: [CHAR] -->{java.lang.Object...} 4.77/2.16 a28-><-o28 4.77/2.16 a28-><-o27 4.77/2.16 YES: (JL1) 4.77/2.16 8: 4.77/2.16 a28([java.lang.String...]): {o27} -->{java.lang.Object...} 4.77/2.16 o27!: String(count=0, hash=#, offset=[0,+inf), value=o28?) -->{java.lang.Object...} 4.77/2.16 o28:: [CHAR] -->{java.lang.Object...} 4.77/2.16 a28-><-o28 4.77/2.16 a28-><-o27 4.77/2.16 YES: (JL1) 4.77/2.16 9: 4.77/2.16 a28([java.lang.String...]): {o27} -->{java.lang.Object...} 4.77/2.16 o27!: String(count=0, hash=#, offset=[0,+inf), value=o28?) -->{java.lang.Object...} 4.77/2.16 o28:: [CHAR] -->{java.lang.Object...} 4.77/2.16 a28-><-o28 4.77/2.16 a28-><-o27 4.77/2.16 YES: (JL1) 4.77/2.16 10: 4.77/2.16 a28([java.lang.String...]): {o27} -->{java.lang.Object...} 4.77/2.16 o27!: String(count=0, hash=#, offset=[0,+inf), value=o28?) -->{java.lang.Object...} 4.77/2.16 o28:: [CHAR] -->{java.lang.Object...} 4.77/2.16 a28-><-o28 4.77/2.16 a28-><-o27 4.77/2.16 YES: (JL1) 4.77/2.16 11: 4.77/2.16 a28([java.lang.String...]): {o27} -->{java.lang.Object...} 4.77/2.16 o27!: String(count=0, hash=#, offset=[0,+inf), value=o28?) -->{java.lang.Object...} 4.77/2.16 o28:: [CHAR] -->{java.lang.Object...} 4.77/2.16 a28-><-o28 4.77/2.16 a28-><-o27 4.77/2.16 YES: (JL1) 4.77/2.16 12: 4.77/2.16 a28([java.lang.String...]): {o27} -->{java.lang.Object...} 4.77/2.16 o27!: String(count=0, hash=#, offset=[0,+inf), value=o28?) -->{java.lang.Object...} 4.77/2.16 o28:: [CHAR] -->{java.lang.Object...} 4.77/2.16 a28-><-o28 4.77/2.16 a28-><-o27 4.77/2.16 YES: (JL1) 4.77/2.16 13: 4.77/2.16 4.77/2.16 a28([java.lang.String...]): {o27} -->{java.lang.Object...} 4.77/2.16 o27!: String(count=0, hash=#, offset=[0,+inf), value=o28?) -->{java.lang.Object...} 4.77/2.16 o28:: [CHAR] -->{java.lang.Object...} 4.77/2.16 a28-><-o28 4.77/2.16 a28-><-o27 4.77/2.16 YES: (JL1) 4.77/2.16 14: 4.77/2.16 4.77/2.16 a28([java.lang.String...]): {o27} -->{java.lang.Object...} 4.77/2.16 o27!: String(count=0, hash=#, offset=[0,+inf), value=o28?) -->{java.lang.Object...} 4.77/2.16 o28:: [CHAR] -->{java.lang.Object...} 4.77/2.16 a28-><-o28 4.77/2.16 a28-><-o27 4.77/2.16 YES: (JL1) 4.77/2.16 15: 4.77/2.16 4.77/2.16 a28([java.lang.String...]): {o27} -->{java.lang.Object...} 4.77/2.16 o27!: String(count=0, hash=#, offset=[0,+inf), value=o28?) -->{java.lang.Object...} 4.77/2.16 o28:: [CHAR] -->{java.lang.Object...} 4.77/2.16 a28-><-o28 4.77/2.16 a28-><-o27 4.77/2.16 YES: (JL1) 4.77/2.16 16: 4.77/2.16 a28([java.lang.String...]): {o27} -->{java.lang.Object...} 4.77/2.16 o27!: String(count=0, hash=#, offset=[0,+inf), value=o28?) -->{java.lang.Object...} 4.77/2.16 o28:: [CHAR] -->{java.lang.Object...} 4.77/2.16 a28-><-o28 4.77/2.16 a28-><-o27 4.77/2.16 YES: (JL1) 4.77/2.16 17: 4.77/2.16 a28([java.lang.String...]): {o27} -->{java.lang.Object...} 4.77/2.16 o27!: String(count=0, hash=#, offset=[0,+inf), value=o28?) -->{java.lang.Object...} 4.77/2.16 o28:: [CHAR] -->{java.lang.Object...} 4.77/2.16 a28-><-o28 4.77/2.16 a28-><-o27 4.77/2.16 YES: (JL1) 4.77/2.16 18: 4.77/2.16 a28([java.lang.String...]): {o27} -->{java.lang.Object...} 4.77/2.16 o27!: String(count=0, hash=#, offset=[0,+inf), value=o28?) -->{java.lang.Object...} 4.77/2.16 o28:: [CHAR] -->{java.lang.Object...} 4.77/2.16 a28-><-o28 4.77/2.16 a28-><-o27 4.77/2.16 YES: (JL1) 4.77/2.16 19: 4.77/2.16 a28([java.lang.String...]): {o27} -->{java.lang.Object...} 4.77/2.16 o27!: String(count=0, hash=#, offset=[0,+inf), value=o28?) -->{java.lang.Object...} 4.77/2.16 o28:: [CHAR] -->{java.lang.Object...} 4.77/2.16 a28-><-o28 4.77/2.16 a28-><-o27 4.77/2.16 YES: (JL1) 4.77/2.16 4.77/2.16 ---------------------------------------- 4.77/2.16 4.77/2.16 (4) 4.77/2.16 NO 4.77/2.18 EOF