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