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