0 JBC
↳1 JBCToGraph (⇒, 159 ms)
↳2 JBCTerminationGraph
↳3 TerminationGraphToSCCProof (⇒, 0 ms)
↳4 JBCTerminationSCC
↳5 SCCToIntTRSProof (⇒, 7 ms)
↳6 intTRS
↳7 PolynomialOrderProcessor (⇔, 12 ms)
↳8 YES
/**
* A very simple loop over an array.
*
* All calls terminate.
*
* Julia + BinTerm prove that all calls terminate
*
* @author <A HREF="mailto:fausto.spoto@univr.it">Fausto Spoto</A>
*/
public class Loop1 {
public static void main(String[] args) {
for (int i = 0; i < args.length; i++) {}
}
}
Generated rules. Obtained 8 IRules
P rules:
f215_0_main_Load(EOS, java.lang.Object(ARRAY(i6)), java.lang.Object(ARRAY(i6)), i27, i27) → f217_0_main_ArrayLength(EOS, java.lang.Object(ARRAY(i6)), java.lang.Object(ARRAY(i6)), i27, i27, java.lang.Object(ARRAY(i6)))
f217_0_main_ArrayLength(EOS, java.lang.Object(ARRAY(i6)), java.lang.Object(ARRAY(i6)), i27, i27, java.lang.Object(ARRAY(i6))) → f219_0_main_GE(EOS, java.lang.Object(ARRAY(i6)), java.lang.Object(ARRAY(i6)), i27, i27, i6) | >=(i6, 0)
f219_0_main_GE(EOS, java.lang.Object(ARRAY(i6)), java.lang.Object(ARRAY(i6)), i27, i27, i6) → f222_0_main_GE(EOS, java.lang.Object(ARRAY(i6)), java.lang.Object(ARRAY(i6)), i27, i27, i6)
f222_0_main_GE(EOS, java.lang.Object(ARRAY(i6)), java.lang.Object(ARRAY(i6)), i27, i27, i6) → f225_0_main_Inc(EOS, java.lang.Object(ARRAY(i6)), java.lang.Object(ARRAY(i6)), i27) | <(i27, i6)
f225_0_main_Inc(EOS, java.lang.Object(ARRAY(i6)), java.lang.Object(ARRAY(i6)), i27) → f228_0_main_JMP(EOS, java.lang.Object(ARRAY(i6)), java.lang.Object(ARRAY(i6)), +(i27, 1)) | >=(i27, 0)
f228_0_main_JMP(EOS, java.lang.Object(ARRAY(i6)), java.lang.Object(ARRAY(i6)), i30) → f248_0_main_Load(EOS, java.lang.Object(ARRAY(i6)), java.lang.Object(ARRAY(i6)), i30)
f248_0_main_Load(EOS, java.lang.Object(ARRAY(i6)), java.lang.Object(ARRAY(i6)), i30) → f212_0_main_Load(EOS, java.lang.Object(ARRAY(i6)), java.lang.Object(ARRAY(i6)), i30)
f212_0_main_Load(EOS, java.lang.Object(ARRAY(i6)), java.lang.Object(ARRAY(i6)), i27) → f215_0_main_Load(EOS, java.lang.Object(ARRAY(i6)), java.lang.Object(ARRAY(i6)), i27, i27)
Combined rules. Obtained 1 IRules
P rules:
f215_0_main_Load(EOS, java.lang.Object(ARRAY(x0)), java.lang.Object(ARRAY(x0)), x1, x1) → f215_0_main_Load(EOS, java.lang.Object(ARRAY(x0)), java.lang.Object(ARRAY(x0)), +(x1, 1), +(x1, 1)) | &&(&&(>(+(x1, 1), 0), >(+(x0, 1), 0)), <(x1, x0))
Filtered ground terms:
f215_0_main_Load(x1, x2, x3, x4, x5) → f215_0_main_Load(x2, x3, x4, x5)
Cond_f215_0_main_Load(x1, x2, x3, x4, x5, x6) → Cond_f215_0_main_Load(x1, x3, x4, x5, x6)
Filtered duplicate terms:
f215_0_main_Load(x1, x2, x3, x4) → f215_0_main_Load(x2, x4)
Cond_f215_0_main_Load(x1, x2, x3, x4, x5) → Cond_f215_0_main_Load(x1, x3, x5)
Prepared 1 rules for path length conversion:
P rules:
f215_0_main_Load(java.lang.Object(ARRAY(x0)), x1, x0) → f215_0_main_Load(java.lang.Object(ARRAY(x0)), +(x1, 1), x0) | &&(&&(>(+(x1, 1), 0), >(+(x0, 1), 0)), <(x1, x0))
Finished conversion. Obtained 1 rules.
P rules:
f215_0_main_Load(v5, x1, x0) → f215_0_main_Load(v6, +(x1, 1), x0) | &&(&&(&&(&&(&&(>(x1, -1), <(x1, x0)), >(x0, -1)), >(+(v6, 1), 1)), <=(v6, v5)), >(+(v5, 1), 1))
Found the following polynomial interpretation:
Therefore the following rule(s) have been dropped: