0 JBC
↳1 JBCToGraph (⇒, 485 ms)
↳2 JBCTerminationGraph
↳3 TerminationGraphToSCCProof (⇒, 0 ms)
↳4 AND
↳5 JBCTerminationSCC
↳6 SCCToIntTRSProof (⇒, 52 ms)
↳7 intTRS
↳8 PolynomialOrderProcessor (⇔, 0 ms)
↳9 YES
↳10 JBCTerminationSCC
↳11 SCCToIntTRSProof (⇒, 81 ms)
↳12 intTRS
↳13 LinearRankingProcessor (⇔, 0 ms)
↳14 YES
public class ListContent{
public static void main(String[] args) {
Random.args = args;
IntList l = IntList.createIntList();
while (l.value > 0) l.value--;
}
}
class IntList {
int value;
IntList next;
public IntList(int value, IntList next) {
this.value = value;
this.next = next;
}
public static IntList createIntList() {
int i = Random.random();
IntList l = null;
while (i > 0) {
l = new IntList(Random.random(), l);
i--;
}
return l;
}
}
public class Random {
static String[] args;
static int index = 0;
public static int random() {
String string = args[index];
index++;
return string.length();
}
}
Generated rules. Obtained 38 IRules
P rules:
f1641_0_createIntList_LE(EOS, i426, i426) → f1644_0_createIntList_LE(EOS, i426, i426)
f1644_0_createIntList_LE(EOS, i426, i426) → f1647_0_createIntList_New(EOS, i426) | >(i426, 0)
f1647_0_createIntList_New(EOS, i426) → f1650_0_createIntList_Duplicate(EOS, i426)
f1650_0_createIntList_Duplicate(EOS, i426) → f1653_0_createIntList_InvokeMethod(EOS, i426)
f1653_0_createIntList_InvokeMethod(EOS, i426) → f1660_0_random_FieldAccess(EOS, i426)
f1660_0_random_FieldAccess(EOS, i426) → f1667_0_random_FieldAccess(EOS, i426)
f1667_0_random_FieldAccess(EOS, i426) → f1670_0_random_ArrayAccess(EOS, i426)
f1670_0_random_ArrayAccess(EOS, i426) → f1672_0_random_ArrayAccess(EOS, i426)
f1672_0_random_ArrayAccess(EOS, i426) → f1676_0_random_Store(EOS, i426, o533)
f1676_0_random_Store(EOS, i426, o533) → f1679_0_random_FieldAccess(EOS, i426, o533)
f1679_0_random_FieldAccess(EOS, i426, o533) → f1682_0_random_ConstantStackPush(EOS, i426, o533)
f1682_0_random_ConstantStackPush(EOS, i426, o533) → f1687_0_random_IntArithmetic(EOS, i426, o533)
f1687_0_random_IntArithmetic(EOS, i426, o533) → f1691_0_random_FieldAccess(EOS, i426, o533)
f1691_0_random_FieldAccess(EOS, i426, o533) → f1693_0_random_Load(EOS, i426, o533)
f1693_0_random_Load(EOS, i426, o533) → f1700_0_random_InvokeMethod(EOS, i426, o533)
f1700_0_random_InvokeMethod(EOS, i426, java.lang.Object(o548sub)) → f1703_0_random_InvokeMethod(EOS, i426, java.lang.Object(o548sub))
f1703_0_random_InvokeMethod(EOS, i426, java.lang.Object(o548sub)) → f1707_0_length_Load(EOS, i426, java.lang.Object(o548sub), java.lang.Object(o548sub))
f1707_0_length_Load(EOS, i426, java.lang.Object(o548sub), java.lang.Object(o548sub)) → f1721_0_length_FieldAccess(EOS, i426, java.lang.Object(o548sub), java.lang.Object(o548sub))
f1721_0_length_FieldAccess(EOS, i426, java.lang.Object(java.lang.String(o556sub, i464)), java.lang.Object(java.lang.String(o556sub, i464))) → f1723_0_length_FieldAccess(EOS, i426, java.lang.Object(java.lang.String(o556sub, i464)), java.lang.Object(java.lang.String(o556sub, i464)))
f1723_0_length_FieldAccess(EOS, i426, java.lang.Object(java.lang.String(o556sub, i464)), java.lang.Object(java.lang.String(o556sub, i464))) → f1731_0_length_Return(EOS, i426, java.lang.Object(java.lang.String(o556sub, i464)))
f1731_0_length_Return(EOS, i426, java.lang.Object(java.lang.String(o556sub, i464))) → f1737_0_random_Return(EOS, i426)
f1737_0_random_Return(EOS, i426) → f1739_0_createIntList_Load(EOS, i426)
f1739_0_createIntList_Load(EOS, i426) → f1748_0_createIntList_InvokeMethod(EOS, i426)
f1748_0_createIntList_InvokeMethod(EOS, i426) → f1755_0__init__Load(EOS, i426)
f1755_0__init__Load(EOS, i426) → f1767_0__init__InvokeMethod(EOS, i426)
f1767_0__init__InvokeMethod(EOS, i426) → f1775_0__init__Load(EOS, i426)
f1775_0__init__Load(EOS, i426) → f1781_0__init__Load(EOS, i426)
f1781_0__init__Load(EOS, i426) → f1789_0__init__FieldAccess(EOS, i426)
f1789_0__init__FieldAccess(EOS, i426) → f1798_0__init__Load(EOS, i426)
f1798_0__init__Load(EOS, i426) → f1806_0__init__Load(EOS, i426)
f1806_0__init__Load(EOS, i426) → f1814_0__init__FieldAccess(EOS, i426)
f1814_0__init__FieldAccess(EOS, i426) → f1825_0__init__Return(EOS, i426)
f1825_0__init__Return(EOS, i426) → f1833_0_createIntList_Store(EOS, i426)
f1833_0_createIntList_Store(EOS, i426) → f1842_0_createIntList_Inc(EOS, i426)
f1842_0_createIntList_Inc(EOS, i426) → f1851_0_createIntList_JMP(EOS, +(i426, -1)) | >(i426, 0)
f1851_0_createIntList_JMP(EOS, i512) → f1859_0_createIntList_Load(EOS, i512)
f1859_0_createIntList_Load(EOS, i512) → f1635_0_createIntList_Load(EOS, i512)
f1635_0_createIntList_Load(EOS, i421) → f1641_0_createIntList_LE(EOS, i421, i421)
Combined rules. Obtained 1 IRules
P rules:
f1641_0_createIntList_LE(EOS, x0, x0) → f1641_0_createIntList_LE(EOS, -(x0, 1), -(x0, 1)) | >(x0, 0)
Filtered ground terms:
f1641_0_createIntList_LE(x1, x2, x3) → f1641_0_createIntList_LE(x2, x3)
Cond_f1641_0_createIntList_LE(x1, x2, x3, x4) → Cond_f1641_0_createIntList_LE(x1, x3, x4)
Filtered duplicate terms:
f1641_0_createIntList_LE(x1, x2) → f1641_0_createIntList_LE(x2)
Cond_f1641_0_createIntList_LE(x1, x2, x3) → Cond_f1641_0_createIntList_LE(x1, x3)
Prepared 1 rules for path length conversion:
P rules:
f1641_0_createIntList_LE(x0) → f1641_0_createIntList_LE(-(x0, 1)) | >(x0, 0)
Finished conversion. Obtained 1 rules.
P rules:
f1641_0_createIntList_LE(x0) → f1641_0_createIntList_LE(-(x0, 1)) | >(x0, 0)
Found the following polynomial interpretation:
Therefore the following rule(s) have been dropped:
Generated rules. Obtained 14 IRules
P rules:
f1381_0_main_FieldAccess(EOS, java.lang.Object(o422sub), java.lang.Object(o422sub), i552) → f1386_0_main_FieldAccess(EOS, java.lang.Object(o422sub), java.lang.Object(o422sub), i552)
f1386_0_main_FieldAccess(EOS, java.lang.Object(IntList(EOC, i334)), java.lang.Object(IntList(EOC, i334)), i552) → f1390_0_main_FieldAccess(EOS, java.lang.Object(IntList(EOC, i334)), java.lang.Object(IntList(EOC, i334)), i552)
f1390_0_main_FieldAccess(EOS, java.lang.Object(IntList(EOC, i334)), java.lang.Object(IntList(EOC, i334)), i552) → f1400_0_main_LE(EOS, java.lang.Object(IntList(EOC, i334)), i334, i552)
f1400_0_main_LE(EOS, java.lang.Object(IntList(EOC, i341)), i341, i552) → f1406_0_main_LE(EOS, java.lang.Object(IntList(EOC, i341)), i341, i552)
f1406_0_main_LE(EOS, java.lang.Object(IntList(EOC, i341)), i341, i552) → f1416_0_main_Load(EOS, java.lang.Object(IntList(EOC, i341)), i552) | >(i341, 0)
f1416_0_main_Load(EOS, java.lang.Object(IntList(EOC, i341)), i552) → f1427_0_main_Duplicate(EOS, java.lang.Object(IntList(EOC, i341)), java.lang.Object(IntList(EOC, i341)), i552)
f1427_0_main_Duplicate(EOS, java.lang.Object(IntList(EOC, i341)), java.lang.Object(IntList(EOC, i341)), i552) → f1438_0_main_FieldAccess(EOS, java.lang.Object(IntList(EOC, i341)), java.lang.Object(IntList(EOC, i341)), java.lang.Object(IntList(EOC, i341)), i552)
f1438_0_main_FieldAccess(EOS, java.lang.Object(IntList(EOC, i341)), java.lang.Object(IntList(EOC, i341)), java.lang.Object(IntList(EOC, i341)), i552) → f1445_0_main_ConstantStackPush(EOS, java.lang.Object(IntList(EOC, i341)), java.lang.Object(IntList(EOC, i341)), i341, i552)
f1445_0_main_ConstantStackPush(EOS, java.lang.Object(IntList(EOC, i341)), java.lang.Object(IntList(EOC, i341)), i341, i552) → f1450_0_main_IntArithmetic(EOS, java.lang.Object(IntList(EOC, i341)), java.lang.Object(IntList(EOC, i341)), i341, 1, i552)
f1450_0_main_IntArithmetic(EOS, java.lang.Object(IntList(EOC, i341)), java.lang.Object(IntList(EOC, i341)), i341, matching1, i552) → f1459_0_main_FieldAccess(EOS, java.lang.Object(IntList(EOC, i341)), java.lang.Object(IntList(EOC, i341)), -(i341, 1), i552) | &&(>(i341, 0), =(matching1, 1))
f1459_0_main_FieldAccess(EOS, java.lang.Object(IntList(EOC, i341)), java.lang.Object(IntList(EOC, i341)), i360, i552) → f1462_0_main_JMP(EOS, java.lang.Object(IntList(EOC, i360)), +(i552, 0)) | >=(i552, 0)
f1462_0_main_JMP(EOS, java.lang.Object(IntList(EOC, i360)), i552) → f1475_0_main_Load(EOS, java.lang.Object(IntList(EOC, i360)), i552)
f1475_0_main_Load(EOS, java.lang.Object(IntList(EOC, i360)), i552) → f1375_0_main_Load(EOS, java.lang.Object(IntList(EOC, i360)), i552)
f1375_0_main_Load(EOS, o414, i552) → f1381_0_main_FieldAccess(EOS, o414, o414, i552)
Combined rules. Obtained 1 IRules
P rules:
f1381_0_main_FieldAccess(EOS, java.lang.Object(IntList(EOC, x0)), java.lang.Object(IntList(EOC, x0)), arith) → f1381_0_main_FieldAccess(EOS, java.lang.Object(IntList(EOC, -(x0, 1))), java.lang.Object(IntList(EOC, -(x0, 1))), arith) | &&(>(x0, 0), >(+(arith, 1), 0))
Filtered ground terms:
f1381_0_main_FieldAccess(x1, x2, x3, x4) → f1381_0_main_FieldAccess(x2, x3, x4)
Cond_f1381_0_main_FieldAccess(x1, x2, x3, x4, x5) → Cond_f1381_0_main_FieldAccess(x1, x3, x4, x5)
IntList(x1, x2) → IntList(x2)
Filtered duplicate terms:
f1381_0_main_FieldAccess(x1, x2, x3) → f1381_0_main_FieldAccess(x2, x3)
Cond_f1381_0_main_FieldAccess(x1, x2, x3, x4) → Cond_f1381_0_main_FieldAccess(x1, x3, x4)
Prepared 1 rules for path length conversion:
P rules:
f1381_0_main_FieldAccess(java.lang.Object(IntList(x0)), arith, x0) → f1381_0_main_FieldAccess(java.lang.Object(IntList(-(x0, 1))), arith, -(x0, 1)) | &&(>(x0, 0), >(+(arith, 1), 0))
Finished conversion. Obtained 1 rules.
P rules:
f1381_0_main_FieldAccess(v5, x1, x0) → f1381_0_main_FieldAccess(v6, x1, -(x0, 1)) | &&(&&(&&(&&(&&(>(x1, -1), >(x0, 0)), <=(+(x0, 2), v5)), >(+(v6, 1), 1)), <=(v6, v5)), >(+(v5, 1), 1))
Linear ranking:
where x = (x1, ... ,xn).
Therefore the following rule(s) have been dropped: