5.14/2.21 NO 5.24/2.25 proof of /export/starexec/sandbox2/benchmark/theBenchmark.jar 5.24/2.25 # AProVE Commit ID: 48fb2092695e11cc9f56e44b17a92a5f88ffb256 marcel 20180622 unpublished dirty 5.24/2.25 5.24/2.25 5.24/2.25 termination of the given Bare JBC problem could be disproven: 5.24/2.25 5.24/2.25 (0) Bare JBC problem 5.24/2.25 (1) BareJBCToJBCProof [EQUIVALENT, 94 ms] 5.24/2.25 (2) JBC problem 5.24/2.25 (3) JBCNonTerm [COMPLETE, 370 ms] 5.24/2.25 (4) NO 5.24/2.25 5.24/2.25 5.24/2.25 ---------------------------------------- 5.24/2.25 5.24/2.25 (0) 5.24/2.25 Obligation: 5.24/2.25 need to prove termination of the following program: 5.24/2.25 package simple.ex06; 5.24/2.25 5.24/2.25 public class Ex06 { 5.24/2.25 5.24/2.25 public static void loop(int i) { 5.24/2.25 while (i >= -5 && i <= 5) { 5.24/2.25 if (i > 0) { 5.24/2.25 i--; 5.24/2.25 } 5.24/2.25 if (i < 0) { 5.24/2.25 i++; 5.24/2.25 } 5.24/2.25 } 5.24/2.25 } 5.24/2.25 } 5.24/2.25 5.24/2.25 5.24/2.25 package simple.ex06; 5.24/2.25 5.24/2.25 public class Main { 5.24/2.25 5.24/2.25 /** 5.24/2.25 * @param args 5.24/2.25 */ 5.24/2.25 public static void main(String[] args) { 5.24/2.25 int value = args[1].length(); 5.24/2.25 if (args[0].length() % 2 == 0) { 5.24/2.25 value = -value; 5.24/2.25 } 5.24/2.25 Ex06.loop(value); 5.24/2.25 5.24/2.25 } 5.24/2.25 5.24/2.25 } 5.24/2.25 5.24/2.25 5.24/2.25 5.24/2.25 ---------------------------------------- 5.24/2.25 5.24/2.25 (1) BareJBCToJBCProof (EQUIVALENT) 5.24/2.25 initialized classpath 5.24/2.25 ---------------------------------------- 5.24/2.25 5.24/2.25 (2) 5.24/2.25 Obligation: 5.24/2.25 need to prove termination of the following program: 5.24/2.25 package simple.ex06; 5.24/2.25 5.24/2.25 public class Ex06 { 5.24/2.25 5.24/2.25 public static void loop(int i) { 5.24/2.25 while (i >= -5 && i <= 5) { 5.24/2.25 if (i > 0) { 5.24/2.25 i--; 5.24/2.25 } 5.24/2.25 if (i < 0) { 5.24/2.25 i++; 5.24/2.25 } 5.24/2.25 } 5.24/2.25 } 5.24/2.25 } 5.24/2.25 5.24/2.25 5.24/2.25 package simple.ex06; 5.24/2.25 5.24/2.25 public class Main { 5.24/2.25 5.24/2.25 /** 5.24/2.25 * @param args 5.24/2.25 */ 5.24/2.25 public static void main(String[] args) { 5.24/2.25 int value = args[1].length(); 5.24/2.25 if (args[0].length() % 2 == 0) { 5.24/2.25 value = -value; 5.24/2.25 } 5.24/2.25 Ex06.loop(value); 5.24/2.25 5.24/2.25 } 5.24/2.25 5.24/2.25 } 5.24/2.25 5.24/2.25 5.24/2.25 5.24/2.25 ---------------------------------------- 5.24/2.25 5.24/2.25 (3) JBCNonTerm (COMPLETE) 5.24/2.25 Constructed a run with a repetition. States 20 and 30 are repetitions (when considering only the interesting positions [lv_0_0]). 5.24/2.25 5.24/2.25 0: 5.24/2.25 o33!: String(count=1, hash=#, offset=[0,+inf), value=o34?) -->{java.lang.Object...} 5.24/2.25 a2([java.lang.String...]): {o33, o13} -->{java.lang.Object...} 5.24/2.25 o13!: String(count=0, hash=#, offset=[0,+inf), value=o15?) -->{java.lang.Object...} 5.24/2.25 o34:: [CHAR] -->{java.lang.Object...} 5.24/2.25 o15:: [CHAR] -->{java.lang.Object...} 5.24/2.25 a2-><-o34 5.24/2.25 a2-><-o33 5.24/2.25 a2-><-o15 5.24/2.25 a2-><-o13 5.24/2.25 YES: (JL1) 5.24/2.25 1: 5.24/2.25 o33!: String(count=1, hash=#, offset=[0,+inf), value=o34?) -->{java.lang.Object...} 5.24/2.25 a2([java.lang.String...]): {o33, o13} -->{java.lang.Object...} 5.24/2.25 o13!: String(count=0, hash=#, offset=[0,+inf), value=o15?) -->{java.lang.Object...} 5.24/2.25 o34:: [CHAR] -->{java.lang.Object...} 5.24/2.25 o15:: [CHAR] -->{java.lang.Object...} 5.24/2.25 a2-><-o34 5.24/2.25 a2-><-o33 5.24/2.25 a2-><-o15 5.24/2.25 a2-><-o13 5.24/2.25 YES: (JL1) 5.24/2.25 2: 5.24/2.25 o33!: String(count=1, hash=#, offset=[0,+inf), value=o34?) -->{java.lang.Object...} 5.24/2.25 a2([java.lang.String...]): {o33, o13} -->{java.lang.Object...} 5.24/2.25 o13!: String(count=0, hash=#, offset=[0,+inf), value=o15?) -->{java.lang.Object...} 5.24/2.25 o34:: [CHAR] -->{java.lang.Object...} 5.24/2.25 o15:: [CHAR] -->{java.lang.Object...} 5.24/2.25 a2-><-o34 5.24/2.25 a2-><-o33 5.24/2.25 a2-><-o15 5.24/2.25 a2-><-o13 5.24/2.25 YES: (JL1) 5.24/2.25 3: 5.24/2.25 o33!: String(count=1, hash=#, offset=[0,+inf), value=o34?) -->{java.lang.Object...} 5.24/2.25 a2([java.lang.String...]): {o33, o13} -->{java.lang.Object...} 5.24/2.25 o13!: String(count=0, hash=#, offset=[0,+inf), value=o15?) -->{java.lang.Object...} 5.24/2.25 o34:: [CHAR] -->{java.lang.Object...} 5.24/2.25 o15:: [CHAR] -->{java.lang.Object...} 5.24/2.25 a2-><-o34 5.24/2.25 a2-><-o33 5.24/2.25 a2-><-o15 5.24/2.25 a2-><-o13 5.24/2.25 YES: (JL1) 5.24/2.25 4: 5.24/2.25 5.24/2.25 o33!: String(count=1, hash=#, offset=[0,+inf), value=o34?) -->{java.lang.Object...} 5.24/2.25 a2([java.lang.String...]): {o33, o13} -->{java.lang.Object...} 5.24/2.25 o13!: String(count=0, hash=#, offset=[0,+inf), value=o15?) -->{java.lang.Object...} 5.24/2.25 o34:: [CHAR] -->{java.lang.Object...} 5.24/2.25 o15:: [CHAR] -->{java.lang.Object...} 5.24/2.25 a2-><-o34 5.24/2.25 a2-><-o33 5.24/2.25 a2-><-o15 5.24/2.25 a2-><-o13 5.24/2.25 YES: (JL1) 5.24/2.25 5: 5.24/2.25 5.24/2.25 o33!: String(count=1, hash=#, offset=[0,+inf), value=o34?) -->{java.lang.Object...} 5.24/2.25 a2([java.lang.String...]): {o33, o13} -->{java.lang.Object...} 5.24/2.25 o13!: String(count=0, hash=#, offset=[0,+inf), value=o15?) -->{java.lang.Object...} 5.24/2.25 o34:: [CHAR] -->{java.lang.Object...} 5.24/2.25 o15:: [CHAR] -->{java.lang.Object...} 5.24/2.25 a2-><-o34 5.24/2.25 a2-><-o33 5.24/2.25 a2-><-o15 5.24/2.25 a2-><-o13 5.24/2.25 YES: (JL1) 5.24/2.25 6: 5.24/2.25 5.24/2.25 o33!: String(count=1, hash=#, offset=[0,+inf), value=o34?) -->{java.lang.Object...} 5.24/2.25 a2([java.lang.String...]): {o33, o13} -->{java.lang.Object...} 5.24/2.25 o13!: String(count=0, hash=#, offset=[0,+inf), value=o15?) -->{java.lang.Object...} 5.24/2.25 o34:: [CHAR] -->{java.lang.Object...} 5.24/2.25 o15:: [CHAR] -->{java.lang.Object...} 5.24/2.25 a2-><-o34 5.24/2.25 a2-><-o33 5.24/2.25 a2-><-o15 5.24/2.25 a2-><-o13 5.24/2.25 YES: (JL1) 5.24/2.25 7: 5.24/2.25 o33!: String(count=1, hash=#, offset=[0,+inf), value=o34?) -->{java.lang.Object...} 5.24/2.25 a2([java.lang.String...]): {o33, o13} -->{java.lang.Object...} 5.24/2.25 o13!: String(count=0, hash=#, offset=[0,+inf), value=o15?) -->{java.lang.Object...} 5.24/2.25 o34:: [CHAR] -->{java.lang.Object...} 5.24/2.25 o15:: [CHAR] -->{java.lang.Object...} 5.24/2.25 a2-><-o34 5.24/2.25 a2-><-o33 5.24/2.25 a2-><-o15 5.24/2.25 a2-><-o13 5.24/2.25 YES: (JL1) 5.24/2.25 8: 5.24/2.25 o33!: String(count=1, hash=#, offset=[0,+inf), value=o34?) -->{java.lang.Object...} 5.24/2.25 a2([java.lang.String...]): {o33, o13} -->{java.lang.Object...} 5.24/2.25 o13!: String(count=0, hash=#, offset=[0,+inf), value=o15?) -->{java.lang.Object...} 5.24/2.25 o34:: [CHAR] -->{java.lang.Object...} 5.24/2.25 o15:: [CHAR] -->{java.lang.Object...} 5.24/2.25 a2-><-o34 5.24/2.25 a2-><-o33 5.24/2.25 a2-><-o15 5.24/2.25 a2-><-o13 5.24/2.25 YES: (JL1) 5.24/2.25 9: 5.24/2.25 o33!: String(count=1, hash=#, offset=[0,+inf), value=o34?) -->{java.lang.Object...} 5.24/2.25 a2([java.lang.String...]): {o33, o13} -->{java.lang.Object...} 5.24/2.25 o13!: String(count=0, hash=#, offset=[0,+inf), value=o15?) -->{java.lang.Object...} 5.24/2.25 o34:: [CHAR] -->{java.lang.Object...} 5.24/2.25 o15:: [CHAR] -->{java.lang.Object...} 5.24/2.25 a2-><-o34 5.24/2.25 a2-><-o33 5.24/2.25 a2-><-o15 5.24/2.25 a2-><-o13 5.24/2.25 YES: (JL1) 5.24/2.25 10: 5.24/2.25 o33!: String(count=1, hash=#, offset=[0,+inf), value=o34?) -->{java.lang.Object...} 5.24/2.25 a2([java.lang.String...]): {o33, o13} -->{java.lang.Object...} 5.24/2.25 o13!: String(count=0, hash=#, offset=[0,+inf), value=o15?) -->{java.lang.Object...} 5.24/2.25 o34:: [CHAR] -->{java.lang.Object...} 5.24/2.25 o15:: [CHAR] -->{java.lang.Object...} 5.24/2.25 a2-><-o34 5.24/2.25 a2-><-o33 5.24/2.25 a2-><-o15 5.24/2.25 a2-><-o13 5.24/2.25 YES: (JL1) 5.24/2.25 11: 5.24/2.25 o33!: String(count=1, hash=#, offset=[0,+inf), value=o34?) -->{java.lang.Object...} 5.24/2.25 o34:: [CHAR] -->{java.lang.Object...} 5.24/2.25 YES: (JL1) 5.24/2.25 12: 5.24/2.25 5.24/2.25 o33!: String(count=1, hash=#, offset=[0,+inf), value=o34?) -->{java.lang.Object...} 5.24/2.25 o34:: [CHAR] -->{java.lang.Object...} 5.24/2.25 YES: (JL1) 5.24/2.25 13: 5.24/2.25 5.24/2.25 o33!: String(count=1, hash=#, offset=[0,+inf), value=o34?) -->{java.lang.Object...} 5.24/2.25 o34:: [CHAR] -->{java.lang.Object...} 5.24/2.25 YES: (JL1) 5.24/2.25 14: 5.24/2.25 5.24/2.25 YES: (JL1) 5.24/2.25 15: 5.24/2.25 YES: (JL1) 5.24/2.25 16: 5.24/2.25 YES: (JL1) 5.24/2.25 17: 5.24/2.25 YES: (JL1) 5.24/2.25 18: 5.24/2.25 YES: (JL1) 5.24/2.25 19: 5.24/2.25 YES: (JL1) 5.24/2.25 20: 5.24/2.25 5.24/2.25 YES: (JL1) 5.24/2.25 21: 5.24/2.25 5.24/2.25 YES: (JL1) 5.24/2.25 22: 5.24/2.25 5.24/2.25 YES: (JL1) 5.24/2.25 23: 5.24/2.25 5.24/2.25 YES: (JL1) 5.24/2.25 24: 5.24/2.25 5.24/2.25 YES: (JL1) 5.24/2.25 25: 5.24/2.25 5.24/2.25 YES: (JL1) 5.24/2.25 26: 5.24/2.25 5.24/2.25 YES: (JL1) 5.24/2.25 27: 5.24/2.25 5.24/2.25 YES: (JL1) 5.24/2.25 28: 5.24/2.25 5.24/2.25 YES: (JL1) 5.24/2.25 29: 5.24/2.25 5.24/2.25 YES: (JL1) 5.24/2.25 30: 5.24/2.25 5.24/2.25 YES: (JL1) 5.24/2.25 5.24/2.25 ---------------------------------------- 5.24/2.25 5.24/2.25 (4) 5.24/2.25 NO 5.24/2.26 EOF