5.34/2.32 YES 5.34/2.33 proof of /export/starexec/sandbox2/benchmark/theBenchmark.jar 5.34/2.33 # AProVE Commit ID: 48fb2092695e11cc9f56e44b17a92a5f88ffb256 marcel 20180622 unpublished dirty 5.34/2.33 5.34/2.33 5.34/2.33 termination of the given Bare JBC problem could be proven: 5.34/2.33 5.34/2.33 (0) Bare JBC problem 5.34/2.33 (1) BareJBCToJBCProof [EQUIVALENT, 97 ms] 5.34/2.33 (2) JBC problem 5.34/2.33 (3) JBCToGraph [EQUIVALENT, 233 ms] 5.34/2.33 (4) JBCTerminationGraph 5.34/2.33 (5) TerminationGraphToSCCProof [SOUND, 0 ms] 5.34/2.33 (6) JBCTerminationSCC 5.34/2.33 (7) SCCToIRSProof [SOUND, 31 ms] 5.34/2.33 (8) IRSwT 5.34/2.33 (9) IRSFormatTransformerProof [EQUIVALENT, 0 ms] 5.34/2.33 (10) IRSwT 5.34/2.33 (11) IRSwTTerminationDigraphProof [EQUIVALENT, 2 ms] 5.34/2.33 (12) IRSwT 5.34/2.33 (13) IntTRSCompressionProof [EQUIVALENT, 0 ms] 5.34/2.33 (14) IRSwT 5.34/2.33 (15) TempFilterProof [SOUND, 29 ms] 5.34/2.33 (16) IntTRS 5.34/2.33 (17) RankingReductionPairProof [EQUIVALENT, 0 ms] 5.34/2.33 (18) YES 5.34/2.33 5.34/2.33 5.34/2.33 ---------------------------------------- 5.34/2.33 5.34/2.33 (0) 5.34/2.33 Obligation: 5.34/2.33 need to prove termination of the following program: 5.34/2.33 /** 5.34/2.33 * A very simple loop over an array. 5.34/2.33 * 5.34/2.33 * All calls terminate. 5.34/2.33 * 5.34/2.33 * Julia + BinTerm prove that all calls terminate 5.34/2.33 * 5.34/2.33 * @author Fausto Spoto 5.34/2.33 */ 5.34/2.33 5.34/2.33 public class Loop1 { 5.34/2.33 public static void main(String[] args) { 5.34/2.33 for (int i = 0; i < args.length; i++) {} 5.34/2.33 } 5.34/2.33 } 5.34/2.33 5.34/2.33 5.34/2.33 ---------------------------------------- 5.34/2.33 5.34/2.33 (1) BareJBCToJBCProof (EQUIVALENT) 5.34/2.33 initialized classpath 5.34/2.33 ---------------------------------------- 5.34/2.33 5.34/2.33 (2) 5.34/2.33 Obligation: 5.34/2.33 need to prove termination of the following program: 5.34/2.33 /** 5.34/2.33 * A very simple loop over an array. 5.34/2.33 * 5.34/2.33 * All calls terminate. 5.34/2.33 * 5.34/2.33 * Julia + BinTerm prove that all calls terminate 5.34/2.33 * 5.34/2.33 * @author Fausto Spoto 5.34/2.33 */ 5.34/2.33 5.34/2.33 public class Loop1 { 5.34/2.33 public static void main(String[] args) { 5.34/2.33 for (int i = 0; i < args.length; i++) {} 5.34/2.33 } 5.34/2.33 } 5.34/2.33 5.34/2.33 5.34/2.33 ---------------------------------------- 5.34/2.33 5.34/2.33 (3) JBCToGraph (EQUIVALENT) 5.34/2.33 Constructed TerminationGraph. 5.34/2.33 ---------------------------------------- 5.34/2.33 5.34/2.33 (4) 5.34/2.33 Obligation: 5.34/2.33 Termination Graph based on JBC Program: 5.34/2.33 Loop1.main([Ljava/lang/String;)V: Graph of 17 nodes with 1 SCC. 5.34/2.33 5.34/2.33 5.34/2.33 5.34/2.33 5.34/2.33 5.34/2.33 ---------------------------------------- 5.34/2.33 5.34/2.33 (5) TerminationGraphToSCCProof (SOUND) 5.34/2.33 Splitted TerminationGraph to 1 SCCs. 5.34/2.33 ---------------------------------------- 5.34/2.33 5.34/2.33 (6) 5.34/2.33 Obligation: 5.34/2.33 SCC of termination graph based on JBC Program. 5.34/2.33 SCC contains nodes from the following methods: Loop1.main([Ljava/lang/String;)V 5.34/2.33 SCC calls the following helper methods: 5.34/2.33 Performed SCC analyses: 5.34/2.33 *Used field analysis yielded the following read fields: 5.34/2.33 5.34/2.33 *Marker field analysis yielded the following relations that could be markers: 5.34/2.33 5.34/2.33 ---------------------------------------- 5.34/2.33 5.34/2.33 (7) SCCToIRSProof (SOUND) 5.34/2.33 Transformed FIGraph SCCs to intTRSs. Log: 5.34/2.33 Generated rules. Obtained 9 IRulesP rules: 5.34/2.33 f129_0_main_Load(EOS(STATIC_129), java.lang.Object(o12sub), java.lang.Object(o12sub), i20, i20) -> f130_0_main_ArrayLength(EOS(STATIC_130), java.lang.Object(o12sub), java.lang.Object(o12sub), i20, i20, java.lang.Object(o12sub)) :|: TRUE 5.34/2.33 f130_0_main_ArrayLength(EOS(STATIC_130), java.lang.Object(ARRAY(i23)), java.lang.Object(ARRAY(i23)), i20, i20, java.lang.Object(ARRAY(i23))) -> f131_0_main_ArrayLength(EOS(STATIC_131), java.lang.Object(ARRAY(i23)), java.lang.Object(ARRAY(i23)), i20, i20, java.lang.Object(ARRAY(i23))) :|: i23 >= 0 5.34/2.33 f131_0_main_ArrayLength(EOS(STATIC_131), java.lang.Object(ARRAY(i23)), java.lang.Object(ARRAY(i23)), i20, i20, java.lang.Object(ARRAY(i23))) -> f133_0_main_GE(EOS(STATIC_133), java.lang.Object(ARRAY(i23)), java.lang.Object(ARRAY(i23)), i20, i20, i23) :|: i23 >= 0 5.34/2.33 f133_0_main_GE(EOS(STATIC_133), java.lang.Object(ARRAY(i23)), java.lang.Object(ARRAY(i23)), i20, i20, i23) -> f142_0_main_GE(EOS(STATIC_142), java.lang.Object(ARRAY(i23)), java.lang.Object(ARRAY(i23)), i20, i20, i23) :|: i20 < i23 5.34/2.33 f142_0_main_GE(EOS(STATIC_142), java.lang.Object(ARRAY(i23)), java.lang.Object(ARRAY(i23)), i20, i20, i23) -> f147_0_main_Inc(EOS(STATIC_147), java.lang.Object(ARRAY(i23)), java.lang.Object(ARRAY(i23)), i20) :|: i20 < i23 5.34/2.33 f147_0_main_Inc(EOS(STATIC_147), java.lang.Object(ARRAY(i23)), java.lang.Object(ARRAY(i23)), i20) -> f149_0_main_JMP(EOS(STATIC_149), java.lang.Object(ARRAY(i23)), java.lang.Object(ARRAY(i23)), i20 + 1) :|: TRUE 5.34/2.33 f149_0_main_JMP(EOS(STATIC_149), java.lang.Object(ARRAY(i23)), java.lang.Object(ARRAY(i23)), i25) -> f157_0_main_Load(EOS(STATIC_157), java.lang.Object(ARRAY(i23)), java.lang.Object(ARRAY(i23)), i25) :|: TRUE 5.34/2.33 f157_0_main_Load(EOS(STATIC_157), java.lang.Object(ARRAY(i23)), java.lang.Object(ARRAY(i23)), i25) -> f126_0_main_Load(EOS(STATIC_126), java.lang.Object(ARRAY(i23)), java.lang.Object(ARRAY(i23)), i25) :|: TRUE 5.34/2.33 f126_0_main_Load(EOS(STATIC_126), java.lang.Object(o12sub), java.lang.Object(o12sub), i20) -> f129_0_main_Load(EOS(STATIC_129), java.lang.Object(o12sub), java.lang.Object(o12sub), i20, i20) :|: TRUE 5.34/2.33 Combined rules. Obtained 1 IRulesP rules: 5.34/2.33 f129_0_main_Load(EOS(STATIC_129), java.lang.Object(ARRAY(i23:0)), java.lang.Object(ARRAY(i23:0)), i20:0, i20:0) -> f129_0_main_Load(EOS(STATIC_129), java.lang.Object(ARRAY(i23:0)), java.lang.Object(ARRAY(i23:0)), i20:0 + 1, i20:0 + 1) :|: i23:0 > -1 && i23:0 > i20:0 5.34/2.33 Filtered constant ground arguments: 5.34/2.33 f129_0_main_Load(x1, x2, x3, x4, x5) -> f129_0_main_Load(x2, x3, x4, x5) 5.34/2.33 EOS(x1) -> EOS 5.34/2.33 Filtered duplicate arguments: 5.34/2.33 f129_0_main_Load(x1, x2, x3, x4) -> f129_0_main_Load(x2, x4) 5.34/2.33 Finished conversion. Obtained 1 rules.P rules: 5.34/2.33 f129_0_main_Load(java.lang.Object(ARRAY(i23:0)), i20:0, i23:0) -> f129_0_main_Load(java.lang.Object(ARRAY(i23:0)), i20:0 + 1, i23:0) :|: i23:0 > -1 && i23:0 > i20:0 5.34/2.33 5.34/2.33 ---------------------------------------- 5.34/2.33 5.34/2.33 (8) 5.34/2.33 Obligation: 5.34/2.33 Rules: 5.34/2.33 f129_0_main_Load(java.lang.Object(ARRAY(i23:0)), i20:0, i23:0) -> f129_0_main_Load(java.lang.Object(ARRAY(i23:0)), i20:0 + 1, i23:0) :|: i23:0 > -1 && i23:0 > i20:0 5.34/2.33 5.34/2.33 ---------------------------------------- 5.34/2.33 5.34/2.33 (9) IRSFormatTransformerProof (EQUIVALENT) 5.34/2.33 Reformatted IRS to match normalized format (transformed away non-linear left-hand sides, !=, / and %). 5.34/2.33 ---------------------------------------- 5.34/2.33 5.34/2.33 (10) 5.34/2.33 Obligation: 5.34/2.33 Rules: 5.34/2.33 f129_0_main_Load(java.lang.Object(ARRAY(i23:0)), i20:0, i23:0) -> f129_0_main_Load(java.lang.Object(ARRAY(i23:0)), arith, i23:0) :|: i23:0 > -1 && i23:0 > i20:0 && arith = i20:0 + 1 5.34/2.33 5.34/2.33 ---------------------------------------- 5.34/2.33 5.34/2.33 (11) IRSwTTerminationDigraphProof (EQUIVALENT) 5.34/2.33 Constructed termination digraph! 5.34/2.33 Nodes: 5.34/2.33 (1) f129_0_main_Load(java.lang.Object(ARRAY(i23:0)), i20:0, i23:0) -> f129_0_main_Load(java.lang.Object(ARRAY(i23:0)), arith, i23:0) :|: i23:0 > -1 && i23:0 > i20:0 && arith = i20:0 + 1 5.34/2.33 5.34/2.33 Arcs: 5.34/2.33 (1) -> (1) 5.34/2.33 5.34/2.33 This digraph is fully evaluated! 5.34/2.33 ---------------------------------------- 5.34/2.33 5.34/2.33 (12) 5.34/2.33 Obligation: 5.34/2.33 5.34/2.33 Termination digraph: 5.34/2.33 Nodes: 5.34/2.33 (1) f129_0_main_Load(java.lang.Object(ARRAY(i23:0)), i20:0, i23:0) -> f129_0_main_Load(java.lang.Object(ARRAY(i23:0)), arith, i23:0) :|: i23:0 > -1 && i23:0 > i20:0 && arith = i20:0 + 1 5.34/2.33 5.34/2.33 Arcs: 5.34/2.33 (1) -> (1) 5.34/2.33 5.34/2.33 This digraph is fully evaluated! 5.34/2.33 5.34/2.33 ---------------------------------------- 5.34/2.33 5.34/2.33 (13) IntTRSCompressionProof (EQUIVALENT) 5.34/2.33 Compressed rules. 5.34/2.33 ---------------------------------------- 5.34/2.33 5.34/2.33 (14) 5.34/2.33 Obligation: 5.34/2.33 Rules: 5.34/2.33 f129_0_main_Load(java.lang.Object(ARRAY(i23:0:0)), i20:0:0, i23:0:0) -> f129_0_main_Load(java.lang.Object(ARRAY(i23:0:0)), i20:0:0 + 1, i23:0:0) :|: i23:0:0 > -1 && i23:0:0 > i20:0:0 5.34/2.33 5.34/2.33 ---------------------------------------- 5.34/2.33 5.34/2.33 (15) TempFilterProof (SOUND) 5.34/2.33 Used the following sort dictionary for filtering: 5.34/2.33 f129_0_main_Load(VARIABLE, INTEGER, INTEGER) 5.34/2.33 java.lang.Object(VARIABLE) 5.34/2.33 ARRAY(INTEGER) 5.34/2.33 Replaced non-predefined constructor symbols by 0. 5.34/2.33 ---------------------------------------- 5.34/2.33 5.34/2.33 (16) 5.34/2.33 Obligation: 5.34/2.33 Rules: 5.34/2.33 f129_0_main_Load(c, i20:0:0, i23:0:0) -> f129_0_main_Load(c1, c2, i23:0:0) :|: c2 = i20:0:0 + 1 && (c1 = 0 && c = 0) && (i23:0:0 > -1 && i23:0:0 > i20:0:0) 5.34/2.33 5.34/2.33 ---------------------------------------- 5.34/2.33 5.34/2.33 (17) RankingReductionPairProof (EQUIVALENT) 5.34/2.33 Interpretation: 5.34/2.33 [ f129_0_main_Load ] = f129_0_main_Load_3 + -1*f129_0_main_Load_2 5.34/2.33 5.34/2.33 The following rules are decreasing: 5.34/2.33 f129_0_main_Load(c, i20:0:0, i23:0:0) -> f129_0_main_Load(c1, c2, i23:0:0) :|: c2 = i20:0:0 + 1 && (c1 = 0 && c = 0) && (i23:0:0 > -1 && i23:0:0 > i20:0:0) 5.34/2.33 5.34/2.33 The following rules are bounded: 5.34/2.33 f129_0_main_Load(c, i20:0:0, i23:0:0) -> f129_0_main_Load(c1, c2, i23:0:0) :|: c2 = i20:0:0 + 1 && (c1 = 0 && c = 0) && (i23:0:0 > -1 && i23:0:0 > i20:0:0) 5.34/2.33 5.34/2.33 5.34/2.33 ---------------------------------------- 5.34/2.33 5.34/2.33 (18) 5.34/2.33 YES 5.69/2.35 EOF