10.32/3.92 YES 10.32/3.93 proof of /export/starexec/sandbox/benchmark/theBenchmark.jar 10.32/3.93 # AProVE Commit ID: 48fb2092695e11cc9f56e44b17a92a5f88ffb256 marcel 20180622 unpublished dirty 10.32/3.93 10.32/3.93 10.32/3.93 termination of the given Bare JBC problem could be proven: 10.32/3.93 10.32/3.93 (0) Bare JBC problem 10.32/3.93 (1) BareJBCToJBCProof [EQUIVALENT, 96 ms] 10.32/3.93 (2) JBC problem 10.32/3.93 (3) JBCToGraph [EQUIVALENT, 404 ms] 10.32/3.93 (4) JBCTerminationGraph 10.32/3.93 (5) TerminationGraphToSCCProof [SOUND, 0 ms] 10.32/3.93 (6) JBCTerminationSCC 10.32/3.93 (7) SCCToIRSProof [SOUND, 21 ms] 10.32/3.93 (8) IRSwT 10.32/3.93 (9) IRSFormatTransformerProof [EQUIVALENT, 0 ms] 10.32/3.93 (10) IRSwT 10.32/3.93 (11) IRSwTTerminationDigraphProof [EQUIVALENT, 33 ms] 10.32/3.93 (12) IRSwT 10.32/3.93 (13) IntTRSCompressionProof [EQUIVALENT, 0 ms] 10.32/3.93 (14) IRSwT 10.32/3.93 (15) IRSwTChainingProof [EQUIVALENT, 0 ms] 10.32/3.93 (16) IRSwT 10.32/3.93 (17) IRSwTTerminationDigraphProof [EQUIVALENT, 0 ms] 10.32/3.93 (18) IRSwT 10.32/3.93 (19) IntTRSCompressionProof [EQUIVALENT, 0 ms] 10.32/3.93 (20) IRSwT 10.32/3.93 (21) TempFilterProof [SOUND, 36 ms] 10.32/3.93 (22) IntTRS 10.32/3.93 (23) PolynomialOrderProcessor [EQUIVALENT, 8 ms] 10.32/3.93 (24) YES 10.32/3.93 10.32/3.93 10.32/3.93 ---------------------------------------- 10.32/3.93 10.32/3.93 (0) 10.32/3.93 Obligation: 10.32/3.93 need to prove termination of the following program: 10.32/3.93 public class Et1 { 10.32/3.93 public static void main(String[] args) { 10.32/3.93 Random.args = args; 10.32/3.93 int a = - Random.random(); 10.32/3.93 int b = - Random.random(); 10.32/3.93 while (a > b) { 10.32/3.93 b = b + a; 10.32/3.93 a = a + 1; 10.32/3.93 } 10.32/3.93 } 10.32/3.93 } 10.32/3.93 10.32/3.93 10.32/3.93 public class Random { 10.32/3.93 static String[] args; 10.32/3.93 static int index = 0; 10.32/3.93 10.32/3.93 public static int random() { 10.32/3.93 if (index >= args.length) 10.32/3.93 return 0; 10.32/3.93 10.32/3.93 String string = args[index]; 10.32/3.93 index++; 10.32/3.93 return string.length(); 10.32/3.93 } 10.32/3.93 } 10.32/3.93 10.32/3.93 10.32/3.93 10.32/3.93 ---------------------------------------- 10.32/3.93 10.32/3.93 (1) BareJBCToJBCProof (EQUIVALENT) 10.32/3.93 initialized classpath 10.32/3.93 ---------------------------------------- 10.32/3.93 10.32/3.93 (2) 10.32/3.93 Obligation: 10.32/3.93 need to prove termination of the following program: 10.32/3.93 public class Et1 { 10.32/3.93 public static void main(String[] args) { 10.32/3.93 Random.args = args; 10.32/3.93 int a = - Random.random(); 10.32/3.93 int b = - Random.random(); 10.32/3.93 while (a > b) { 10.32/3.93 b = b + a; 10.32/3.93 a = a + 1; 10.32/3.93 } 10.32/3.93 } 10.32/3.93 } 10.32/3.93 10.32/3.93 10.32/3.93 public class Random { 10.32/3.93 static String[] args; 10.32/3.93 static int index = 0; 10.32/3.93 10.32/3.93 public static int random() { 10.32/3.93 if (index >= args.length) 10.32/3.93 return 0; 10.32/3.93 10.32/3.93 String string = args[index]; 10.32/3.93 index++; 10.32/3.93 return string.length(); 10.32/3.93 } 10.32/3.93 } 10.32/3.93 10.32/3.93 10.32/3.93 10.32/3.93 ---------------------------------------- 10.32/3.93 10.32/3.93 (3) JBCToGraph (EQUIVALENT) 10.32/3.93 Constructed TerminationGraph. 10.32/3.93 ---------------------------------------- 10.32/3.93 10.32/3.93 (4) 10.32/3.93 Obligation: 10.32/3.93 Termination Graph based on JBC Program: 10.32/3.93 Et1.main([Ljava/lang/String;)V: Graph of 226 nodes with 1 SCC. 10.32/3.93 10.32/3.93 10.32/3.93 10.32/3.93 10.32/3.93 10.32/3.93 ---------------------------------------- 10.32/3.93 10.32/3.93 (5) TerminationGraphToSCCProof (SOUND) 10.32/3.93 Splitted TerminationGraph to 1 SCCs. 10.32/3.93 ---------------------------------------- 10.32/3.93 10.32/3.93 (6) 10.32/3.93 Obligation: 10.32/3.93 SCC of termination graph based on JBC Program. 10.32/3.93 SCC contains nodes from the following methods: Et1.main([Ljava/lang/String;)V 10.32/3.93 SCC calls the following helper methods: 10.32/3.93 Performed SCC analyses: 10.32/3.93 *Used field analysis yielded the following read fields: 10.32/3.93 10.32/3.93 *Marker field analysis yielded the following relations that could be markers: 10.32/3.93 10.32/3.93 ---------------------------------------- 10.32/3.93 10.32/3.93 (7) SCCToIRSProof (SOUND) 10.32/3.93 Transformed FIGraph SCCs to intTRSs. Log: 10.32/3.93 Generated rules. Obtained 14 IRulesP rules: 10.32/3.93 f868_0_main_Load(EOS(STATIC_868), i167, i168, i167) -> f888_0_main_LE(EOS(STATIC_888), i167, i168, i167, i168) :|: TRUE 10.32/3.93 f888_0_main_LE(EOS(STATIC_888), i167, i168, i167, i168) -> f903_0_main_LE(EOS(STATIC_903), i167, i168, i167, i168) :|: i167 > i168 10.32/3.93 f903_0_main_LE(EOS(STATIC_903), i167, i168, i167, i168) -> f905_0_main_Load(EOS(STATIC_905), i167, i168) :|: i167 > i168 10.32/3.93 f905_0_main_Load(EOS(STATIC_905), i167, i168) -> f909_0_main_Load(EOS(STATIC_909), i167, i168) :|: TRUE 10.32/3.93 f909_0_main_Load(EOS(STATIC_909), i167, i168) -> f910_0_main_IntArithmetic(EOS(STATIC_910), i167, i168, i167) :|: TRUE 10.32/3.93 f910_0_main_IntArithmetic(EOS(STATIC_910), i167, i168, i167) -> f911_0_main_Store(EOS(STATIC_911), i167, i168 + i167) :|: TRUE 10.32/3.93 f911_0_main_Store(EOS(STATIC_911), i167, i204) -> f912_0_main_Load(EOS(STATIC_912), i167, i204) :|: TRUE 10.32/3.93 f912_0_main_Load(EOS(STATIC_912), i167, i204) -> f913_0_main_ConstantStackPush(EOS(STATIC_913), i204, i167) :|: TRUE 10.32/3.93 f913_0_main_ConstantStackPush(EOS(STATIC_913), i204, i167) -> f914_0_main_IntArithmetic(EOS(STATIC_914), i204, i167, 1) :|: TRUE 10.32/3.93 f914_0_main_IntArithmetic(EOS(STATIC_914), i204, i167, matching1) -> f915_0_main_Store(EOS(STATIC_915), i204, i167 + 1) :|: TRUE && matching1 = 1 10.32/3.93 f915_0_main_Store(EOS(STATIC_915), i204, i205) -> f916_0_main_JMP(EOS(STATIC_916), i205, i204) :|: TRUE 10.32/3.93 f916_0_main_JMP(EOS(STATIC_916), i205, i204) -> f926_0_main_Load(EOS(STATIC_926), i205, i204) :|: TRUE 10.32/3.93 f926_0_main_Load(EOS(STATIC_926), i205, i204) -> f867_0_main_Load(EOS(STATIC_867), i205, i204) :|: TRUE 10.32/3.93 f867_0_main_Load(EOS(STATIC_867), i167, i168) -> f868_0_main_Load(EOS(STATIC_868), i167, i168, i167) :|: TRUE 10.32/3.93 Combined rules. Obtained 1 IRulesP rules: 10.32/3.93 f868_0_main_Load(EOS(STATIC_868), i167:0, i168:0, i167:0) -> f868_0_main_Load(EOS(STATIC_868), i167:0 + 1, i168:0 + i167:0, i167:0 + 1) :|: i168:0 < i167:0 10.32/3.93 Filtered constant ground arguments: 10.32/3.93 f868_0_main_Load(x1, x2, x3, x4) -> f868_0_main_Load(x2, x3, x4) 10.32/3.93 EOS(x1) -> EOS 10.32/3.93 Filtered duplicate arguments: 10.32/3.93 f868_0_main_Load(x1, x2, x3) -> f868_0_main_Load(x2, x3) 10.32/3.93 Finished conversion. Obtained 1 rules.P rules: 10.32/3.93 f868_0_main_Load(i168:0, i167:0) -> f868_0_main_Load(i168:0 + i167:0, i167:0 + 1) :|: i168:0 < i167:0 10.32/3.93 10.32/3.93 ---------------------------------------- 10.32/3.93 10.32/3.93 (8) 10.32/3.93 Obligation: 10.32/3.93 Rules: 10.32/3.93 f868_0_main_Load(i168:0, i167:0) -> f868_0_main_Load(i168:0 + i167:0, i167:0 + 1) :|: i168:0 < i167:0 10.32/3.93 10.32/3.93 ---------------------------------------- 10.32/3.93 10.32/3.93 (9) IRSFormatTransformerProof (EQUIVALENT) 10.32/3.93 Reformatted IRS to match normalized format (transformed away non-linear left-hand sides, !=, / and %). 10.32/3.93 ---------------------------------------- 10.32/3.93 10.32/3.93 (10) 10.32/3.93 Obligation: 10.32/3.93 Rules: 10.32/3.93 f868_0_main_Load(i168:0, i167:0) -> f868_0_main_Load(arith, arith1) :|: i168:0 < i167:0 && arith = i168:0 + i167:0 && arith1 = i167:0 + 1 10.32/3.93 10.32/3.93 ---------------------------------------- 10.32/3.93 10.32/3.93 (11) IRSwTTerminationDigraphProof (EQUIVALENT) 10.32/3.93 Constructed termination digraph! 10.32/3.93 Nodes: 10.32/3.93 (1) f868_0_main_Load(i168:0, i167:0) -> f868_0_main_Load(arith, arith1) :|: i168:0 < i167:0 && arith = i168:0 + i167:0 && arith1 = i167:0 + 1 10.32/3.93 10.32/3.93 Arcs: 10.32/3.93 (1) -> (1) 10.32/3.93 10.32/3.93 This digraph is fully evaluated! 10.32/3.93 ---------------------------------------- 10.32/3.93 10.32/3.93 (12) 10.32/3.93 Obligation: 10.32/3.93 10.32/3.93 Termination digraph: 10.32/3.93 Nodes: 10.32/3.93 (1) f868_0_main_Load(i168:0, i167:0) -> f868_0_main_Load(arith, arith1) :|: i168:0 < i167:0 && arith = i168:0 + i167:0 && arith1 = i167:0 + 1 10.32/3.93 10.32/3.93 Arcs: 10.32/3.93 (1) -> (1) 10.32/3.93 10.32/3.93 This digraph is fully evaluated! 10.32/3.93 10.32/3.93 ---------------------------------------- 10.32/3.93 10.32/3.93 (13) IntTRSCompressionProof (EQUIVALENT) 10.32/3.93 Compressed rules. 10.32/3.93 ---------------------------------------- 10.32/3.93 10.32/3.93 (14) 10.32/3.93 Obligation: 10.32/3.93 Rules: 10.32/3.93 f868_0_main_Load(i168:0:0, i167:0:0) -> f868_0_main_Load(i168:0:0 + i167:0:0, i167:0:0 + 1) :|: i168:0:0 < i167:0:0 10.32/3.93 10.32/3.93 ---------------------------------------- 10.32/3.93 10.32/3.93 (15) IRSwTChainingProof (EQUIVALENT) 10.32/3.93 Chaining! 10.32/3.93 ---------------------------------------- 10.32/3.93 10.32/3.93 (16) 10.32/3.93 Obligation: 10.32/3.93 Rules: 10.32/3.93 f868_0_main_Load(x, x1) -> f868_0_main_Load(x + 2 * x1 + 1, x1 + 2) :|: TRUE && x + -1 * x1 <= -1 && x <= 0 10.32/3.93 10.32/3.93 ---------------------------------------- 10.32/3.93 10.32/3.93 (17) IRSwTTerminationDigraphProof (EQUIVALENT) 10.32/3.93 Constructed termination digraph! 10.32/3.93 Nodes: 10.32/3.93 (1) f868_0_main_Load(x, x1) -> f868_0_main_Load(x + 2 * x1 + 1, x1 + 2) :|: TRUE && x + -1 * x1 <= -1 && x <= 0 10.32/3.93 10.32/3.93 Arcs: 10.32/3.93 (1) -> (1) 10.32/3.93 10.32/3.93 This digraph is fully evaluated! 10.32/3.93 ---------------------------------------- 10.32/3.93 10.32/3.93 (18) 10.32/3.93 Obligation: 10.32/3.93 10.32/3.93 Termination digraph: 10.32/3.93 Nodes: 10.32/3.93 (1) f868_0_main_Load(x, x1) -> f868_0_main_Load(x + 2 * x1 + 1, x1 + 2) :|: TRUE && x + -1 * x1 <= -1 && x <= 0 10.32/3.93 10.32/3.93 Arcs: 10.32/3.93 (1) -> (1) 10.32/3.93 10.32/3.93 This digraph is fully evaluated! 10.32/3.93 10.32/3.93 ---------------------------------------- 10.32/3.93 10.32/3.93 (19) IntTRSCompressionProof (EQUIVALENT) 10.32/3.93 Compressed rules. 10.32/3.93 ---------------------------------------- 10.32/3.93 10.32/3.93 (20) 10.32/3.93 Obligation: 10.32/3.93 Rules: 10.32/3.93 f868_0_main_Load(x:0, x1:0) -> f868_0_main_Load(x:0 + 2 * x1:0 + 1, x1:0 + 2) :|: x:0 < 1 && x:0 + -1 * x1:0 <= -1 10.32/3.93 10.32/3.93 ---------------------------------------- 10.32/3.93 10.32/3.93 (21) TempFilterProof (SOUND) 10.32/3.93 Used the following sort dictionary for filtering: 10.32/3.93 f868_0_main_Load(INTEGER, INTEGER) 10.32/3.93 Replaced non-predefined constructor symbols by 0. 10.32/3.93 ---------------------------------------- 10.32/3.93 10.32/3.93 (22) 10.32/3.93 Obligation: 10.32/3.93 Rules: 10.32/3.93 f868_0_main_Load(x:0, x1:0) -> f868_0_main_Load(c, c1) :|: c1 = x1:0 + 2 && c = x:0 + 2 * x1:0 + 1 && (x:0 < 1 && x:0 + -1 * x1:0 <= -1) 10.32/3.93 10.32/3.93 ---------------------------------------- 10.32/3.93 10.32/3.93 (23) PolynomialOrderProcessor (EQUIVALENT) 10.32/3.93 Found the following polynomial interpretation: 10.32/3.93 [f868_0_main_Load(x, x1)] = 1 - 2*x - 2*x1 + x1^2 10.32/3.93 10.32/3.93 The following rules are decreasing: 10.32/3.93 f868_0_main_Load(x:0, x1:0) -> f868_0_main_Load(c, c1) :|: c1 = x1:0 + 2 && c = x:0 + 2 * x1:0 + 1 && (x:0 < 1 && x:0 + -1 * x1:0 <= -1) 10.32/3.93 The following rules are bounded: 10.32/3.93 f868_0_main_Load(x:0, x1:0) -> f868_0_main_Load(c, c1) :|: c1 = x1:0 + 2 && c = x:0 + 2 * x1:0 + 1 && (x:0 < 1 && x:0 + -1 * x1:0 <= -1) 10.32/3.93 10.32/3.93 ---------------------------------------- 10.32/3.93 10.32/3.93 (24) 10.32/3.93 YES 10.64/4.00 EOF