(0) Obligation:

JBC Problem based on JBC Program:
Manifest-Version: 1.0 Created-By: 1.6.0_16 (Sun Microsystems Inc.) Main-Class: Convert
public class Convert{

// adapted from [Giesl, 95]
// converts a number to decimal notation

public static void main(String[] args) {
Random.args = args;
IntList l = IntList.createIntList();

int b = Random.random();
int res = 0;

while (l != null) {

if (l.value <= 0) {
l = l.next;
if (l != null) res = res * b;
}
else {
l.value--;
res++;
}
}
}
}

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();
}
}


(1) JBC2FIG (SOUND transformation)

Constructed FIGraph.

(2) Obligation:

FIGraph based on JBC Program:
Graph of 307 nodes with 2 SCCs.

(3) FIGtoITRSProof (SOUND transformation)

Transformed FIGraph to ITRS rules

(4) Complex Obligation (AND)

(5) Obligation:

ITRS problem:

The following function symbols are pre-defined:
!=~Neq: (Integer, Integer) -> Boolean
*~Mul: (Integer, Integer) -> Integer
>=~Ge: (Integer, Integer) -> Boolean
-1~UnaryMinus: (Integer) -> Integer
|~Bwor: (Integer, Integer) -> Integer
/~Div: (Integer, Integer) -> Integer
=~Eq: (Integer, Integer) -> Boolean
~Bwxor: (Integer, Integer) -> Integer
||~Lor: (Boolean, Boolean) -> Boolean
!~Lnot: (Boolean) -> Boolean
<~Lt: (Integer, Integer) -> Boolean
-~Sub: (Integer, Integer) -> Integer
<=~Le: (Integer, Integer) -> Boolean
>~Gt: (Integer, Integer) -> Boolean
~~Bwnot: (Integer) -> Integer
%~Mod: (Integer, Integer) -> Integer
&~Bwand: (Integer, Integer) -> Integer
+~Add: (Integer, Integer) -> Integer
&&~Land: (Boolean, Boolean) -> Boolean

The TRS R consists of the following rules:
Load2958(java.lang.Object(IntList(i466, o4023)), i164, i463) → Cond_Load2958(i466 > 0, java.lang.Object(IntList(i466, o4023)), i164, i463)
Cond_Load2958(TRUE, java.lang.Object(IntList(i466, o4023)), i164, i463) → Load2958(java.lang.Object(IntList(i466 - 1, o4023)), i164, i463 + 1)
Load2958(java.lang.Object(IntList(i467, java.lang.Object(IntList(o4048Field0, o4048Field1)))), i164, i463) → Cond_Load29581(i467 <= 0, java.lang.Object(IntList(i467, java.lang.Object(IntList(o4048Field0, o4048Field1)))), i164, i463)
Cond_Load29581(TRUE, java.lang.Object(IntList(i467, java.lang.Object(IntList(o4048Field0, o4048Field1)))), i164, i463) → Load2958(java.lang.Object(IntList(o4048Field0, o4048Field1)), i164, i463 * i164)
Load2958(java.lang.Object(IntList(i467, NULL)), i164, i463) → Cond_Load29582(i467 <= 0, java.lang.Object(IntList(i467, NULL)), i164, i463)
Cond_Load29582(TRUE, java.lang.Object(IntList(i467, NULL)), i164, i463) → Load2958(NULL, i164, i463)
The set Q consists of the following terms:
Load2958(java.lang.Object(IntList(x0, x1)), x2, x3)
Cond_Load2958(TRUE, java.lang.Object(IntList(x0, x1)), x2, x3)
Cond_Load29581(TRUE, java.lang.Object(IntList(x0, java.lang.Object(IntList(x1, x2)))), x3, x4)
Cond_Load29582(TRUE, java.lang.Object(IntList(x0, NULL)), x1, x2)

(6) ITRStoIDPProof (EQUIVALENT transformation)

Added dependency pairs

(7) Obligation:

IDP problem:
The following function symbols are pre-defined:
!=~Neq: (Integer, Integer) -> Boolean
*~Mul: (Integer, Integer) -> Integer
>=~Ge: (Integer, Integer) -> Boolean
-1~UnaryMinus: (Integer) -> Integer
|~Bwor: (Integer, Integer) -> Integer
/~Div: (Integer, Integer) -> Integer
=~Eq: (Integer, Integer) -> Boolean
~Bwxor: (Integer, Integer) -> Integer
||~Lor: (Boolean, Boolean) -> Boolean
!~Lnot: (Boolean) -> Boolean
<~Lt: (Integer, Integer) -> Boolean
-~Sub: (Integer, Integer) -> Integer
<=~Le: (Integer, Integer) -> Boolean
>~Gt: (Integer, Integer) -> Boolean
~~Bwnot: (Integer) -> Integer
%~Mod: (Integer, Integer) -> Integer
&~Bwand: (Integer, Integer) -> Integer
+~Add: (Integer, Integer) -> Integer
&&~Land: (Boolean, Boolean) -> Boolean


The following domains are used:

Integer


The ITRS R consists of the following rules:
Load2958(java.lang.Object(IntList(i466, o4023)), i164, i463) → Cond_Load2958(i466 > 0, java.lang.Object(IntList(i466, o4023)), i164, i463)
Cond_Load2958(TRUE, java.lang.Object(IntList(i466, o4023)), i164, i463) → Load2958(java.lang.Object(IntList(i466 - 1, o4023)), i164, i463 + 1)
Load2958(java.lang.Object(IntList(i467, java.lang.Object(IntList(o4048Field0, o4048Field1)))), i164, i463) → Cond_Load29581(i467 <= 0, java.lang.Object(IntList(i467, java.lang.Object(IntList(o4048Field0, o4048Field1)))), i164, i463)
Cond_Load29581(TRUE, java.lang.Object(IntList(i467, java.lang.Object(IntList(o4048Field0, o4048Field1)))), i164, i463) → Load2958(java.lang.Object(IntList(o4048Field0, o4048Field1)), i164, i463 * i164)
Load2958(java.lang.Object(IntList(i467, NULL)), i164, i463) → Cond_Load29582(i467 <= 0, java.lang.Object(IntList(i467, NULL)), i164, i463)
Cond_Load29582(TRUE, java.lang.Object(IntList(i467, NULL)), i164, i463) → Load2958(NULL, i164, i463)

The integer pair graph contains the following rules and edges:
(0): LOAD2958(java.lang.Object(IntList(i466[0], o4023[0])), i164[0], i463[0]) → COND_LOAD2958(i466[0] > 0, java.lang.Object(IntList(i466[0], o4023[0])), i164[0], i463[0])
(1): COND_LOAD2958(TRUE, java.lang.Object(IntList(i466[1], o4023[1])), i164[1], i463[1]) → LOAD2958(java.lang.Object(IntList(i466[1] - 1, o4023[1])), i164[1], i463[1] + 1)
(2): LOAD2958(java.lang.Object(IntList(i467[2], java.lang.Object(IntList(o4048Field0[2], o4048Field1[2])))), i164[2], i463[2]) → COND_LOAD29581(i467[2] <= 0, java.lang.Object(IntList(i467[2], java.lang.Object(IntList(o4048Field0[2], o4048Field1[2])))), i164[2], i463[2])
(3): COND_LOAD29581(TRUE, java.lang.Object(IntList(i467[3], java.lang.Object(IntList(o4048Field0[3], o4048Field1[3])))), i164[3], i463[3]) → LOAD2958(java.lang.Object(IntList(o4048Field0[3], o4048Field1[3])), i164[3], i463[3] * i164[3])
(4): LOAD2958(java.lang.Object(IntList(i467[4], NULL)), i164[4], i463[4]) → COND_LOAD29582(i467[4] <= 0, java.lang.Object(IntList(i467[4], NULL)), i164[4], i463[4])
(5): COND_LOAD29582(TRUE, java.lang.Object(IntList(i467[5], NULL)), i164[5], i463[5]) → LOAD2958(NULL, i164[5], i463[5])

(0) -> (1), if ((i466[0] > 0* TRUE)∧(i463[0]* i463[1])∧(i164[0]* i164[1])∧(java.lang.Object(IntList(i466[0], o4023[0])) →* java.lang.Object(IntList(i466[1], o4023[1]))))


(1) -> (0), if ((i463[1] + 1* i463[0])∧(java.lang.Object(IntList(i466[1] - 1, o4023[1])) →* java.lang.Object(IntList(i466[0], o4023[0])))∧(i164[1]* i164[0]))


(1) -> (2), if ((i463[1] + 1* i463[2])∧(i164[1]* i164[2])∧(java.lang.Object(IntList(i466[1] - 1, o4023[1])) →* java.lang.Object(IntList(i467[2], java.lang.Object(IntList(o4048Field0[2], o4048Field1[2]))))))


(1) -> (4), if ((i463[1] + 1* i463[4])∧(java.lang.Object(IntList(i466[1] - 1, o4023[1])) →* java.lang.Object(IntList(i467[4], NULL)))∧(i164[1]* i164[4]))


(2) -> (3), if ((i164[2]* i164[3])∧(i467[2] <= 0* TRUE)∧(java.lang.Object(IntList(i467[2], java.lang.Object(IntList(o4048Field0[2], o4048Field1[2])))) →* java.lang.Object(IntList(i467[3], java.lang.Object(IntList(o4048Field0[3], o4048Field1[3])))))∧(i463[2]* i463[3]))


(3) -> (0), if ((i463[3] * i164[3]* i463[0])∧(i164[3]* i164[0])∧(java.lang.Object(IntList(o4048Field0[3], o4048Field1[3])) →* java.lang.Object(IntList(i466[0], o4023[0]))))


(3) -> (2), if ((i463[3] * i164[3]* i463[2])∧(java.lang.Object(IntList(o4048Field0[3], o4048Field1[3])) →* java.lang.Object(IntList(i467[2], java.lang.Object(IntList(o4048Field0[2], o4048Field1[2])))))∧(i164[3]* i164[2]))


(3) -> (4), if ((i463[3] * i164[3]* i463[4])∧(java.lang.Object(IntList(o4048Field0[3], o4048Field1[3])) →* java.lang.Object(IntList(i467[4], NULL)))∧(i164[3]* i164[4]))


(4) -> (5), if ((java.lang.Object(IntList(i467[4], NULL)) →* java.lang.Object(IntList(i467[5], NULL)))∧(i467[4] <= 0* TRUE)∧(i164[4]* i164[5])∧(i463[4]* i463[5]))


(5) -> (0), if ((i164[5]* i164[0])∧(i463[5]* i463[0])∧(NULL* java.lang.Object(IntList(i466[0], o4023[0]))))


(5) -> (2), if ((NULL* java.lang.Object(IntList(i467[2], java.lang.Object(IntList(o4048Field0[2], o4048Field1[2])))))∧(i463[5]* i463[2])∧(i164[5]* i164[2]))


(5) -> (4), if ((i463[5]* i463[4])∧(NULL* java.lang.Object(IntList(i467[4], NULL)))∧(i164[5]* i164[4]))



The set Q consists of the following terms:
Load2958(java.lang.Object(IntList(x0, x1)), x2, x3)
Cond_Load2958(TRUE, java.lang.Object(IntList(x0, x1)), x2, x3)
Cond_Load29581(TRUE, java.lang.Object(IntList(x0, java.lang.Object(IntList(x1, x2)))), x3, x4)
Cond_Load29582(TRUE, java.lang.Object(IntList(x0, NULL)), x1, x2)

(8) UsableRulesProof (EQUIVALENT transformation)

As all Q-normal forms are R-normal forms we are in the innermost case. Hence, by the usable rules processor [LPAR04] we can delete all non-usable rules [FROCOS05] from R.

(9) Obligation:

IDP problem:
The following function symbols are pre-defined:
!=~Neq: (Integer, Integer) -> Boolean
*~Mul: (Integer, Integer) -> Integer
>=~Ge: (Integer, Integer) -> Boolean
-1~UnaryMinus: (Integer) -> Integer
|~Bwor: (Integer, Integer) -> Integer
/~Div: (Integer, Integer) -> Integer
=~Eq: (Integer, Integer) -> Boolean
~Bwxor: (Integer, Integer) -> Integer
||~Lor: (Boolean, Boolean) -> Boolean
!~Lnot: (Boolean) -> Boolean
<~Lt: (Integer, Integer) -> Boolean
-~Sub: (Integer, Integer) -> Integer
<=~Le: (Integer, Integer) -> Boolean
>~Gt: (Integer, Integer) -> Boolean
~~Bwnot: (Integer) -> Integer
%~Mod: (Integer, Integer) -> Integer
&~Bwand: (Integer, Integer) -> Integer
+~Add: (Integer, Integer) -> Integer
&&~Land: (Boolean, Boolean) -> Boolean


The following domains are used:

Integer


R is empty.

The integer pair graph contains the following rules and edges:
(0): LOAD2958(java.lang.Object(IntList(i466[0], o4023[0])), i164[0], i463[0]) → COND_LOAD2958(i466[0] > 0, java.lang.Object(IntList(i466[0], o4023[0])), i164[0], i463[0])
(1): COND_LOAD2958(TRUE, java.lang.Object(IntList(i466[1], o4023[1])), i164[1], i463[1]) → LOAD2958(java.lang.Object(IntList(i466[1] - 1, o4023[1])), i164[1], i463[1] + 1)
(2): LOAD2958(java.lang.Object(IntList(i467[2], java.lang.Object(IntList(o4048Field0[2], o4048Field1[2])))), i164[2], i463[2]) → COND_LOAD29581(i467[2] <= 0, java.lang.Object(IntList(i467[2], java.lang.Object(IntList(o4048Field0[2], o4048Field1[2])))), i164[2], i463[2])
(3): COND_LOAD29581(TRUE, java.lang.Object(IntList(i467[3], java.lang.Object(IntList(o4048Field0[3], o4048Field1[3])))), i164[3], i463[3]) → LOAD2958(java.lang.Object(IntList(o4048Field0[3], o4048Field1[3])), i164[3], i463[3] * i164[3])
(4): LOAD2958(java.lang.Object(IntList(i467[4], NULL)), i164[4], i463[4]) → COND_LOAD29582(i467[4] <= 0, java.lang.Object(IntList(i467[4], NULL)), i164[4], i463[4])
(5): COND_LOAD29582(TRUE, java.lang.Object(IntList(i467[5], NULL)), i164[5], i463[5]) → LOAD2958(NULL, i164[5], i463[5])

(0) -> (1), if ((i466[0] > 0* TRUE)∧(i463[0]* i463[1])∧(i164[0]* i164[1])∧(java.lang.Object(IntList(i466[0], o4023[0])) →* java.lang.Object(IntList(i466[1], o4023[1]))))


(1) -> (0), if ((i463[1] + 1* i463[0])∧(java.lang.Object(IntList(i466[1] - 1, o4023[1])) →* java.lang.Object(IntList(i466[0], o4023[0])))∧(i164[1]* i164[0]))


(1) -> (2), if ((i463[1] + 1* i463[2])∧(i164[1]* i164[2])∧(java.lang.Object(IntList(i466[1] - 1, o4023[1])) →* java.lang.Object(IntList(i467[2], java.lang.Object(IntList(o4048Field0[2], o4048Field1[2]))))))


(1) -> (4), if ((i463[1] + 1* i463[4])∧(java.lang.Object(IntList(i466[1] - 1, o4023[1])) →* java.lang.Object(IntList(i467[4], NULL)))∧(i164[1]* i164[4]))


(2) -> (3), if ((i164[2]* i164[3])∧(i467[2] <= 0* TRUE)∧(java.lang.Object(IntList(i467[2], java.lang.Object(IntList(o4048Field0[2], o4048Field1[2])))) →* java.lang.Object(IntList(i467[3], java.lang.Object(IntList(o4048Field0[3], o4048Field1[3])))))∧(i463[2]* i463[3]))


(3) -> (0), if ((i463[3] * i164[3]* i463[0])∧(i164[3]* i164[0])∧(java.lang.Object(IntList(o4048Field0[3], o4048Field1[3])) →* java.lang.Object(IntList(i466[0], o4023[0]))))


(3) -> (2), if ((i463[3] * i164[3]* i463[2])∧(java.lang.Object(IntList(o4048Field0[3], o4048Field1[3])) →* java.lang.Object(IntList(i467[2], java.lang.Object(IntList(o4048Field0[2], o4048Field1[2])))))∧(i164[3]* i164[2]))


(3) -> (4), if ((i463[3] * i164[3]* i463[4])∧(java.lang.Object(IntList(o4048Field0[3], o4048Field1[3])) →* java.lang.Object(IntList(i467[4], NULL)))∧(i164[3]* i164[4]))


(4) -> (5), if ((java.lang.Object(IntList(i467[4], NULL)) →* java.lang.Object(IntList(i467[5], NULL)))∧(i467[4] <= 0* TRUE)∧(i164[4]* i164[5])∧(i463[4]* i463[5]))


(5) -> (0), if ((i164[5]* i164[0])∧(i463[5]* i463[0])∧(NULL* java.lang.Object(IntList(i466[0], o4023[0]))))


(5) -> (2), if ((NULL* java.lang.Object(IntList(i467[2], java.lang.Object(IntList(o4048Field0[2], o4048Field1[2])))))∧(i463[5]* i463[2])∧(i164[5]* i164[2]))


(5) -> (4), if ((i463[5]* i463[4])∧(NULL* java.lang.Object(IntList(i467[4], NULL)))∧(i164[5]* i164[4]))



The set Q consists of the following terms:
Load2958(java.lang.Object(IntList(x0, x1)), x2, x3)
Cond_Load2958(TRUE, java.lang.Object(IntList(x0, x1)), x2, x3)
Cond_Load29581(TRUE, java.lang.Object(IntList(x0, java.lang.Object(IntList(x1, x2)))), x3, x4)
Cond_Load29582(TRUE, java.lang.Object(IntList(x0, NULL)), x1, x2)

(10) ItpfGraphProof (EQUIVALENT transformation)

Applied rule ItpfICap [ICap]

(11) Obligation:

IDP problem:
The following function symbols are pre-defined:
!=~Neq: (Integer, Integer) -> Boolean
*~Mul: (Integer, Integer) -> Integer
>=~Ge: (Integer, Integer) -> Boolean
-1~UnaryMinus: (Integer) -> Integer
|~Bwor: (Integer, Integer) -> Integer
/~Div: (Integer, Integer) -> Integer
=~Eq: (Integer, Integer) -> Boolean
~Bwxor: (Integer, Integer) -> Integer
||~Lor: (Boolean, Boolean) -> Boolean
!~Lnot: (Boolean) -> Boolean
<~Lt: (Integer, Integer) -> Boolean
-~Sub: (Integer, Integer) -> Integer
<=~Le: (Integer, Integer) -> Boolean
>~Gt: (Integer, Integer) -> Boolean
~~Bwnot: (Integer) -> Integer
%~Mod: (Integer, Integer) -> Integer
&~Bwand: (Integer, Integer) -> Integer
+~Add: (Integer, Integer) -> Integer
&&~Land: (Boolean, Boolean) -> Boolean


The following domains are used:

Integer


R is empty.

The integer pair graph contains the following rules and edges:
(0): LOAD2958(java.lang.Object(IntList(i466[0], o4023[0])), i164[0], i463[0]) → COND_LOAD2958(i466[0] > 0, java.lang.Object(IntList(i466[0], o4023[0])), i164[0], i463[0])
(1): COND_LOAD2958(TRUE, java.lang.Object(IntList(i466[1], o4023[1])), i164[1], i463[1]) → LOAD2958(java.lang.Object(IntList(i466[1] - 1, o4023[1])), i164[1], i463[1] + 1)
(2): LOAD2958(java.lang.Object(IntList(i467[2], java.lang.Object(IntList(o4048Field0[2], o4048Field1[2])))), i164[2], i463[2]) → COND_LOAD29581(i467[2] <= 0, java.lang.Object(IntList(i467[2], java.lang.Object(IntList(o4048Field0[2], o4048Field1[2])))), i164[2], i463[2])
(3): COND_LOAD29581(TRUE, java.lang.Object(IntList(i467[3], java.lang.Object(IntList(o4048Field0[3], o4048Field1[3])))), i164[3], i463[3]) → LOAD2958(java.lang.Object(IntList(o4048Field0[3], o4048Field1[3])), i164[3], i463[3] * i164[3])
(4): LOAD2958(java.lang.Object(IntList(i467[4], NULL)), i164[4], i463[4]) → COND_LOAD29582(i467[4] <= 0, java.lang.Object(IntList(i467[4], NULL)), i164[4], i463[4])
(5): COND_LOAD29582(TRUE, java.lang.Object(IntList(i467[5], NULL)), i164[5], i463[5]) → LOAD2958(NULL, i164[5], i463[5])

(0) -> (1), if ((i466[0] > 0* TRUE)∧(i463[0]* i463[1])∧(i164[0]* i164[1])∧((i466[0]* i466[1])∧(o4023[0]* o4023[1])))


(1) -> (0), if ((i463[1] + 1* i463[0])∧((i466[1] - 1* i466[0])∧(o4023[1]* o4023[0]))∧(i164[1]* i164[0]))


(1) -> (2), if ((i463[1] + 1* i463[2])∧(i164[1]* i164[2])∧((i466[1] - 1* i467[2])∧(o4023[1]* java.lang.Object(IntList(o4048Field0[2], o4048Field1[2])))))


(1) -> (4), if ((i463[1] + 1* i463[4])∧((i466[1] - 1* i467[4])∧(o4023[1]* NULL))∧(i164[1]* i164[4]))


(2) -> (3), if ((i164[2]* i164[3])∧(i467[2] <= 0* TRUE)∧((i467[2]* i467[3])∧(o4048Field0[2]* o4048Field0[3])∧(o4048Field1[2]* o4048Field1[3]))∧(i463[2]* i463[3]))


(3) -> (0), if ((i463[3] * i164[3]* i463[0])∧(i164[3]* i164[0])∧((o4048Field0[3]* i466[0])∧(o4048Field1[3]* o4023[0])))


(3) -> (2), if ((i463[3] * i164[3]* i463[2])∧((o4048Field0[3]* i467[2])∧(o4048Field1[3]* java.lang.Object(IntList(o4048Field0[2], o4048Field1[2]))))∧(i164[3]* i164[2]))


(3) -> (4), if ((i463[3] * i164[3]* i463[4])∧((o4048Field0[3]* i467[4])∧(o4048Field1[3]* NULL))∧(i164[3]* i164[4]))


(4) -> (5), if (((i467[4]* i467[5]))∧(i467[4] <= 0* TRUE)∧(i164[4]* i164[5])∧(i463[4]* i463[5]))


(5) -> (0), if ((i164[5]* i164[0])∧(i463[5]* i463[0])∧false)


(5) -> (2), if (false∧(i463[5]* i463[2])∧(i164[5]* i164[2]))


(5) -> (4), if ((i463[5]* i463[4])∧false∧(i164[5]* i164[4]))



The set Q consists of the following terms:
Load2958(java.lang.Object(IntList(x0, x1)), x2, x3)
Cond_Load2958(TRUE, java.lang.Object(IntList(x0, x1)), x2, x3)
Cond_Load29581(TRUE, java.lang.Object(IntList(x0, java.lang.Object(IntList(x1, x2)))), x3, x4)
Cond_Load29582(TRUE, java.lang.Object(IntList(x0, NULL)), x1, x2)

(12) IDPNonInfProof (SOUND transformation)

The constraints were generated the following way:
The DP Problem is simplified using the Induction Calculus [NONINF] with the following steps:
Note that final constraints are written in bold face.


For Pair LOAD2958(java.lang.Object(IntList(i466, o4023)), i164, i463) → COND_LOAD2958(>(i466, 0), java.lang.Object(IntList(i466, o4023)), i164, i463) the following chains were created:
  • We consider the chain LOAD2958(java.lang.Object(IntList(i466[0], o4023[0])), i164[0], i463[0]) → COND_LOAD2958(>(i466[0], 0), java.lang.Object(IntList(i466[0], o4023[0])), i164[0], i463[0]), COND_LOAD2958(TRUE, java.lang.Object(IntList(i466[1], o4023[1])), i164[1], i463[1]) → LOAD2958(java.lang.Object(IntList(-(i466[1], 1), o4023[1])), i164[1], +(i463[1], 1)) which results in the following constraint:

    (1)    (>(i466[0], 0)=TRUEi463[0]=i463[1]i164[0]=i164[1]i466[0]=i466[1]o4023[0]=o4023[1]LOAD2958(java.lang.Object(IntList(i466[0], o4023[0])), i164[0], i463[0])≥COND_LOAD2958(>(i466[0], 0), java.lang.Object(IntList(i466[0], o4023[0])), i164[0], i463[0])∧(UIncreasing(COND_LOAD2958(>(i466[0], 0), java.lang.Object(IntList(i466[0], o4023[0])), i164[0], i463[0])), ≥))



    We simplified constraint (1) using rule (IV) which results in the following new constraint:

    (2)    (>(i466[0], 0)=TRUELOAD2958(java.lang.Object(IntList(i466[0], o4023[0])), i164[0], i463[0])≥COND_LOAD2958(>(i466[0], 0), java.lang.Object(IntList(i466[0], o4023[0])), i164[0], i463[0])∧(UIncreasing(COND_LOAD2958(>(i466[0], 0), java.lang.Object(IntList(i466[0], o4023[0])), i164[0], i463[0])), ≥))



    We simplified constraint (2) using rule (POLY_CONSTRAINTS) which results in the following new constraint:

    (3)    (0 ≥ 0 ⇒ (UIncreasing(COND_LOAD2958(>(i466[0], 0), java.lang.Object(IntList(i466[0], o4023[0])), i164[0], i463[0])), ≥)∧[(-1)bso_26] ≥ 0)



    We simplified constraint (3) using rule (IDP_POLY_SIMPLIFY) which results in the following new constraint:

    (4)    (0 ≥ 0 ⇒ (UIncreasing(COND_LOAD2958(>(i466[0], 0), java.lang.Object(IntList(i466[0], o4023[0])), i164[0], i463[0])), ≥)∧[(-1)bso_26] ≥ 0)



    We simplified constraint (4) using rule (POLY_REMOVE_MIN_MAX) which results in the following new constraint:

    (5)    (0 ≥ 0 ⇒ (UIncreasing(COND_LOAD2958(>(i466[0], 0), java.lang.Object(IntList(i466[0], o4023[0])), i164[0], i463[0])), ≥)∧[(-1)bso_26] ≥ 0)



    We simplified constraint (5) using rule (IDP_UNRESTRICTED_VARS) which results in the following new constraint:

    (6)    (0 ≥ 0 ⇒ (UIncreasing(COND_LOAD2958(>(i466[0], 0), java.lang.Object(IntList(i466[0], o4023[0])), i164[0], i463[0])), ≥)∧0 ≥ 0∧0 ≥ 0∧0 ≥ 0∧0 ≥ 0∧[(-1)bso_26] ≥ 0)







For Pair COND_LOAD2958(TRUE, java.lang.Object(IntList(i466, o4023)), i164, i463) → LOAD2958(java.lang.Object(IntList(-(i466, 1), o4023)), i164, +(i463, 1)) the following chains were created:
  • We consider the chain LOAD2958(java.lang.Object(IntList(i466[0], o4023[0])), i164[0], i463[0]) → COND_LOAD2958(>(i466[0], 0), java.lang.Object(IntList(i466[0], o4023[0])), i164[0], i463[0]), COND_LOAD2958(TRUE, java.lang.Object(IntList(i466[1], o4023[1])), i164[1], i463[1]) → LOAD2958(java.lang.Object(IntList(-(i466[1], 1), o4023[1])), i164[1], +(i463[1], 1)), LOAD2958(java.lang.Object(IntList(i466[0], o4023[0])), i164[0], i463[0]) → COND_LOAD2958(>(i466[0], 0), java.lang.Object(IntList(i466[0], o4023[0])), i164[0], i463[0]) which results in the following constraint:

    (7)    (>(i466[0], 0)=TRUEi463[0]=i463[1]i164[0]=i164[1]i466[0]=i466[1]o4023[0]=o4023[1]+(i463[1], 1)=i463[0]1-(i466[1], 1)=i466[0]1o4023[1]=o4023[0]1i164[1]=i164[0]1COND_LOAD2958(TRUE, java.lang.Object(IntList(i466[1], o4023[1])), i164[1], i463[1])≥LOAD2958(java.lang.Object(IntList(-(i466[1], 1), o4023[1])), i164[1], +(i463[1], 1))∧(UIncreasing(LOAD2958(java.lang.Object(IntList(-(i466[1], 1), o4023[1])), i164[1], +(i463[1], 1))), ≥))



    We simplified constraint (7) using rules (III), (IV) which results in the following new constraint:

    (8)    (>(i466[0], 0)=TRUECOND_LOAD2958(TRUE, java.lang.Object(IntList(i466[0], o4023[0])), i164[0], i463[0])≥LOAD2958(java.lang.Object(IntList(-(i466[0], 1), o4023[0])), i164[0], +(i463[0], 1))∧(UIncreasing(LOAD2958(java.lang.Object(IntList(-(i466[1], 1), o4023[1])), i164[1], +(i463[1], 1))), ≥))



    We simplified constraint (8) using rule (POLY_CONSTRAINTS) which results in the following new constraint:

    (9)    (0 ≥ 0 ⇒ (UIncreasing(LOAD2958(java.lang.Object(IntList(-(i466[1], 1), o4023[1])), i164[1], +(i463[1], 1))), ≥)∧[(-1)bso_27] ≥ 0)



    We simplified constraint (9) using rule (IDP_POLY_SIMPLIFY) which results in the following new constraint:

    (10)    (0 ≥ 0 ⇒ (UIncreasing(LOAD2958(java.lang.Object(IntList(-(i466[1], 1), o4023[1])), i164[1], +(i463[1], 1))), ≥)∧[(-1)bso_27] ≥ 0)



    We simplified constraint (10) using rule (POLY_REMOVE_MIN_MAX) which results in the following new constraint:

    (11)    (0 ≥ 0 ⇒ (UIncreasing(LOAD2958(java.lang.Object(IntList(-(i466[1], 1), o4023[1])), i164[1], +(i463[1], 1))), ≥)∧[(-1)bso_27] ≥ 0)



    We simplified constraint (11) using rule (IDP_UNRESTRICTED_VARS) which results in the following new constraint:

    (12)    (0 ≥ 0 ⇒ (UIncreasing(LOAD2958(java.lang.Object(IntList(-(i466[1], 1), o4023[1])), i164[1], +(i463[1], 1))), ≥)∧0 ≥ 0∧0 ≥ 0∧0 ≥ 0∧0 ≥ 0∧[(-1)bso_27] ≥ 0)



  • We consider the chain LOAD2958(java.lang.Object(IntList(i466[0], o4023[0])), i164[0], i463[0]) → COND_LOAD2958(>(i466[0], 0), java.lang.Object(IntList(i466[0], o4023[0])), i164[0], i463[0]), COND_LOAD2958(TRUE, java.lang.Object(IntList(i466[1], o4023[1])), i164[1], i463[1]) → LOAD2958(java.lang.Object(IntList(-(i466[1], 1), o4023[1])), i164[1], +(i463[1], 1)), LOAD2958(java.lang.Object(IntList(i467[2], java.lang.Object(IntList(o4048Field0[2], o4048Field1[2])))), i164[2], i463[2]) → COND_LOAD29581(<=(i467[2], 0), java.lang.Object(IntList(i467[2], java.lang.Object(IntList(o4048Field0[2], o4048Field1[2])))), i164[2], i463[2]) which results in the following constraint:

    (13)    (>(i466[0], 0)=TRUEi463[0]=i463[1]i164[0]=i164[1]i466[0]=i466[1]o4023[0]=o4023[1]+(i463[1], 1)=i463[2]i164[1]=i164[2]-(i466[1], 1)=i467[2]o4023[1]=java.lang.Object(IntList(o4048Field0[2], o4048Field1[2])) ⇒ COND_LOAD2958(TRUE, java.lang.Object(IntList(i466[1], o4023[1])), i164[1], i463[1])≥LOAD2958(java.lang.Object(IntList(-(i466[1], 1), o4023[1])), i164[1], +(i463[1], 1))∧(UIncreasing(LOAD2958(java.lang.Object(IntList(-(i466[1], 1), o4023[1])), i164[1], +(i463[1], 1))), ≥))



    We simplified constraint (13) using rules (III), (IV) which results in the following new constraint:

    (14)    (>(i466[0], 0)=TRUECOND_LOAD2958(TRUE, java.lang.Object(IntList(i466[0], java.lang.Object(IntList(o4048Field0[2], o4048Field1[2])))), i164[0], i463[0])≥LOAD2958(java.lang.Object(IntList(-(i466[0], 1), java.lang.Object(IntList(o4048Field0[2], o4048Field1[2])))), i164[0], +(i463[0], 1))∧(UIncreasing(LOAD2958(java.lang.Object(IntList(-(i466[1], 1), o4023[1])), i164[1], +(i463[1], 1))), ≥))



    We simplified constraint (14) using rule (POLY_CONSTRAINTS) which results in the following new constraint:

    (15)    (0 ≥ 0 ⇒ (UIncreasing(LOAD2958(java.lang.Object(IntList(-(i466[1], 1), o4023[1])), i164[1], +(i463[1], 1))), ≥)∧[(-1)bso_27] ≥ 0)



    We simplified constraint (15) using rule (IDP_POLY_SIMPLIFY) which results in the following new constraint:

    (16)    (0 ≥ 0 ⇒ (UIncreasing(LOAD2958(java.lang.Object(IntList(-(i466[1], 1), o4023[1])), i164[1], +(i463[1], 1))), ≥)∧[(-1)bso_27] ≥ 0)



    We simplified constraint (16) using rule (POLY_REMOVE_MIN_MAX) which results in the following new constraint:

    (17)    (0 ≥ 0 ⇒ (UIncreasing(LOAD2958(java.lang.Object(IntList(-(i466[1], 1), o4023[1])), i164[1], +(i463[1], 1))), ≥)∧[(-1)bso_27] ≥ 0)



    We simplified constraint (17) using rule (IDP_UNRESTRICTED_VARS) which results in the following new constraint:

    (18)    (0 ≥ 0 ⇒ (UIncreasing(LOAD2958(java.lang.Object(IntList(-(i466[1], 1), o4023[1])), i164[1], +(i463[1], 1))), ≥)∧0 ≥ 0∧0 ≥ 0∧0 ≥ 0∧0 ≥ 0∧0 ≥ 0∧[(-1)bso_27] ≥ 0)



  • We consider the chain LOAD2958(java.lang.Object(IntList(i466[0], o4023[0])), i164[0], i463[0]) → COND_LOAD2958(>(i466[0], 0), java.lang.Object(IntList(i466[0], o4023[0])), i164[0], i463[0]), COND_LOAD2958(TRUE, java.lang.Object(IntList(i466[1], o4023[1])), i164[1], i463[1]) → LOAD2958(java.lang.Object(IntList(-(i466[1], 1), o4023[1])), i164[1], +(i463[1], 1)), LOAD2958(java.lang.Object(IntList(i467[4], NULL)), i164[4], i463[4]) → COND_LOAD29582(<=(i467[4], 0), java.lang.Object(IntList(i467[4], NULL)), i164[4], i463[4]) which results in the following constraint:

    (19)    (>(i466[0], 0)=TRUEi463[0]=i463[1]i164[0]=i164[1]i466[0]=i466[1]o4023[0]=o4023[1]+(i463[1], 1)=i463[4]-(i466[1], 1)=i467[4]o4023[1]=NULLi164[1]=i164[4]COND_LOAD2958(TRUE, java.lang.Object(IntList(i466[1], o4023[1])), i164[1], i463[1])≥LOAD2958(java.lang.Object(IntList(-(i466[1], 1), o4023[1])), i164[1], +(i463[1], 1))∧(UIncreasing(LOAD2958(java.lang.Object(IntList(-(i466[1], 1), o4023[1])), i164[1], +(i463[1], 1))), ≥))



    We simplified constraint (19) using rules (III), (IV) which results in the following new constraint:

    (20)    (>(i466[0], 0)=TRUECOND_LOAD2958(TRUE, java.lang.Object(IntList(i466[0], NULL)), i164[0], i463[0])≥LOAD2958(java.lang.Object(IntList(-(i466[0], 1), NULL)), i164[0], +(i463[0], 1))∧(UIncreasing(LOAD2958(java.lang.Object(IntList(-(i466[1], 1), o4023[1])), i164[1], +(i463[1], 1))), ≥))



    We simplified constraint (20) using rule (POLY_CONSTRAINTS) which results in the following new constraint:

    (21)    (0 ≥ 0 ⇒ (UIncreasing(LOAD2958(java.lang.Object(IntList(-(i466[1], 1), o4023[1])), i164[1], +(i463[1], 1))), ≥)∧[(-1)bso_27] ≥ 0)



    We simplified constraint (21) using rule (IDP_POLY_SIMPLIFY) which results in the following new constraint:

    (22)    (0 ≥ 0 ⇒ (UIncreasing(LOAD2958(java.lang.Object(IntList(-(i466[1], 1), o4023[1])), i164[1], +(i463[1], 1))), ≥)∧[(-1)bso_27] ≥ 0)



    We simplified constraint (22) using rule (POLY_REMOVE_MIN_MAX) which results in the following new constraint:

    (23)    (0 ≥ 0 ⇒ (UIncreasing(LOAD2958(java.lang.Object(IntList(-(i466[1], 1), o4023[1])), i164[1], +(i463[1], 1))), ≥)∧[(-1)bso_27] ≥ 0)



    We simplified constraint (23) using rule (IDP_UNRESTRICTED_VARS) which results in the following new constraint:

    (24)    (0 ≥ 0 ⇒ (UIncreasing(LOAD2958(java.lang.Object(IntList(-(i466[1], 1), o4023[1])), i164[1], +(i463[1], 1))), ≥)∧0 ≥ 0∧0 ≥ 0∧0 ≥ 0∧[(-1)bso_27] ≥ 0)







For Pair LOAD2958(java.lang.Object(IntList(i467, java.lang.Object(IntList(o4048Field0, o4048Field1)))), i164, i463) → COND_LOAD29581(<=(i467, 0), java.lang.Object(IntList(i467, java.lang.Object(IntList(o4048Field0, o4048Field1)))), i164, i463) the following chains were created:
  • We consider the chain LOAD2958(java.lang.Object(IntList(i467[2], java.lang.Object(IntList(o4048Field0[2], o4048Field1[2])))), i164[2], i463[2]) → COND_LOAD29581(<=(i467[2], 0), java.lang.Object(IntList(i467[2], java.lang.Object(IntList(o4048Field0[2], o4048Field1[2])))), i164[2], i463[2]), COND_LOAD29581(TRUE, java.lang.Object(IntList(i467[3], java.lang.Object(IntList(o4048Field0[3], o4048Field1[3])))), i164[3], i463[3]) → LOAD2958(java.lang.Object(IntList(o4048Field0[3], o4048Field1[3])), i164[3], *(i463[3], i164[3])) which results in the following constraint:

    (25)    (i164[2]=i164[3]<=(i467[2], 0)=TRUEi467[2]=i467[3]o4048Field0[2]=o4048Field0[3]o4048Field1[2]=o4048Field1[3]i463[2]=i463[3]LOAD2958(java.lang.Object(IntList(i467[2], java.lang.Object(IntList(o4048Field0[2], o4048Field1[2])))), i164[2], i463[2])≥COND_LOAD29581(<=(i467[2], 0), java.lang.Object(IntList(i467[2], java.lang.Object(IntList(o4048Field0[2], o4048Field1[2])))), i164[2], i463[2])∧(UIncreasing(COND_LOAD29581(<=(i467[2], 0), java.lang.Object(IntList(i467[2], java.lang.Object(IntList(o4048Field0[2], o4048Field1[2])))), i164[2], i463[2])), ≥))



    We simplified constraint (25) using rule (IV) which results in the following new constraint:

    (26)    (<=(i467[2], 0)=TRUELOAD2958(java.lang.Object(IntList(i467[2], java.lang.Object(IntList(o4048Field0[2], o4048Field1[2])))), i164[2], i463[2])≥COND_LOAD29581(<=(i467[2], 0), java.lang.Object(IntList(i467[2], java.lang.Object(IntList(o4048Field0[2], o4048Field1[2])))), i164[2], i463[2])∧(UIncreasing(COND_LOAD29581(<=(i467[2], 0), java.lang.Object(IntList(i467[2], java.lang.Object(IntList(o4048Field0[2], o4048Field1[2])))), i164[2], i463[2])), ≥))



    We simplified constraint (26) using rule (POLY_CONSTRAINTS) which results in the following new constraint:

    (27)    (0 ≥ 0 ⇒ (UIncreasing(COND_LOAD29581(<=(i467[2], 0), java.lang.Object(IntList(i467[2], java.lang.Object(IntList(o4048Field0[2], o4048Field1[2])))), i164[2], i463[2])), ≥)∧[(-1)bso_28] ≥ 0)



    We simplified constraint (27) using rule (IDP_POLY_SIMPLIFY) which results in the following new constraint:

    (28)    (0 ≥ 0 ⇒ (UIncreasing(COND_LOAD29581(<=(i467[2], 0), java.lang.Object(IntList(i467[2], java.lang.Object(IntList(o4048Field0[2], o4048Field1[2])))), i164[2], i463[2])), ≥)∧[(-1)bso_28] ≥ 0)



    We simplified constraint (28) using rule (POLY_REMOVE_MIN_MAX) which results in the following new constraint:

    (29)    (0 ≥ 0 ⇒ (UIncreasing(COND_LOAD29581(<=(i467[2], 0), java.lang.Object(IntList(i467[2], java.lang.Object(IntList(o4048Field0[2], o4048Field1[2])))), i164[2], i463[2])), ≥)∧[(-1)bso_28] ≥ 0)



    We simplified constraint (29) using rule (IDP_UNRESTRICTED_VARS) which results in the following new constraint:

    (30)    (0 ≥ 0 ⇒ (UIncreasing(COND_LOAD29581(<=(i467[2], 0), java.lang.Object(IntList(i467[2], java.lang.Object(IntList(o4048Field0[2], o4048Field1[2])))), i164[2], i463[2])), ≥)∧0 ≥ 0∧0 ≥ 0∧0 ≥ 0∧0 ≥ 0∧0 ≥ 0∧[(-1)bso_28] ≥ 0)







For Pair COND_LOAD29581(TRUE, java.lang.Object(IntList(i467, java.lang.Object(IntList(o4048Field0, o4048Field1)))), i164, i463) → LOAD2958(java.lang.Object(IntList(o4048Field0, o4048Field1)), i164, *(i463, i164)) the following chains were created:
  • We consider the chain LOAD2958(java.lang.Object(IntList(i467[2], java.lang.Object(IntList(o4048Field0[2], o4048Field1[2])))), i164[2], i463[2]) → COND_LOAD29581(<=(i467[2], 0), java.lang.Object(IntList(i467[2], java.lang.Object(IntList(o4048Field0[2], o4048Field1[2])))), i164[2], i463[2]), COND_LOAD29581(TRUE, java.lang.Object(IntList(i467[3], java.lang.Object(IntList(o4048Field0[3], o4048Field1[3])))), i164[3], i463[3]) → LOAD2958(java.lang.Object(IntList(o4048Field0[3], o4048Field1[3])), i164[3], *(i463[3], i164[3])), LOAD2958(java.lang.Object(IntList(i466[0], o4023[0])), i164[0], i463[0]) → COND_LOAD2958(>(i466[0], 0), java.lang.Object(IntList(i466[0], o4023[0])), i164[0], i463[0]) which results in the following constraint:

    (31)    (i164[2]=i164[3]<=(i467[2], 0)=TRUEi467[2]=i467[3]o4048Field0[2]=o4048Field0[3]o4048Field1[2]=o4048Field1[3]i463[2]=i463[3]*(i463[3], i164[3])=i463[0]i164[3]=i164[0]o4048Field0[3]=i466[0]o4048Field1[3]=o4023[0]COND_LOAD29581(TRUE, java.lang.Object(IntList(i467[3], java.lang.Object(IntList(o4048Field0[3], o4048Field1[3])))), i164[3], i463[3])≥LOAD2958(java.lang.Object(IntList(o4048Field0[3], o4048Field1[3])), i164[3], *(i463[3], i164[3]))∧(UIncreasing(LOAD2958(java.lang.Object(IntList(o4048Field0[3], o4048Field1[3])), i164[3], *(i463[3], i164[3]))), ≥))



    We simplified constraint (31) using rules (III), (IV) which results in the following new constraint:

    (32)    (<=(i467[2], 0)=TRUECOND_LOAD29581(TRUE, java.lang.Object(IntList(i467[2], java.lang.Object(IntList(o4048Field0[2], o4048Field1[2])))), i164[2], i463[2])≥LOAD2958(java.lang.Object(IntList(o4048Field0[2], o4048Field1[2])), i164[2], *(i463[2], i164[2]))∧(UIncreasing(LOAD2958(java.lang.Object(IntList(o4048Field0[3], o4048Field1[3])), i164[3], *(i463[3], i164[3]))), ≥))



    We simplified constraint (32) using rule (POLY_CONSTRAINTS) which results in the following new constraint:

    (33)    (0 ≥ 0 ⇒ (UIncreasing(LOAD2958(java.lang.Object(IntList(o4048Field0[3], o4048Field1[3])), i164[3], *(i463[3], i164[3]))), ≥)∧[(-1)bso_29] ≥ 0)



    We simplified constraint (33) using rule (IDP_POLY_SIMPLIFY) which results in the following new constraint:

    (34)    (0 ≥ 0 ⇒ (UIncreasing(LOAD2958(java.lang.Object(IntList(o4048Field0[3], o4048Field1[3])), i164[3], *(i463[3], i164[3]))), ≥)∧[(-1)bso_29] ≥ 0)



    We simplified constraint (34) using rule (POLY_REMOVE_MIN_MAX) which results in the following new constraint:

    (35)    (0 ≥ 0 ⇒ (UIncreasing(LOAD2958(java.lang.Object(IntList(o4048Field0[3], o4048Field1[3])), i164[3], *(i463[3], i164[3]))), ≥)∧[(-1)bso_29] ≥ 0)



    We simplified constraint (35) using rule (IDP_UNRESTRICTED_VARS) which results in the following new constraint:

    (36)    (0 ≥ 0 ⇒ (UIncreasing(LOAD2958(java.lang.Object(IntList(o4048Field0[3], o4048Field1[3])), i164[3], *(i463[3], i164[3]))), ≥)∧0 ≥ 0∧0 ≥ 0∧0 ≥ 0∧0 ≥ 0∧0 ≥ 0∧[(-1)bso_29] ≥ 0)



  • We consider the chain LOAD2958(java.lang.Object(IntList(i467[2], java.lang.Object(IntList(o4048Field0[2], o4048Field1[2])))), i164[2], i463[2]) → COND_LOAD29581(<=(i467[2], 0), java.lang.Object(IntList(i467[2], java.lang.Object(IntList(o4048Field0[2], o4048Field1[2])))), i164[2], i463[2]), COND_LOAD29581(TRUE, java.lang.Object(IntList(i467[3], java.lang.Object(IntList(o4048Field0[3], o4048Field1[3])))), i164[3], i463[3]) → LOAD2958(java.lang.Object(IntList(o4048Field0[3], o4048Field1[3])), i164[3], *(i463[3], i164[3])), LOAD2958(java.lang.Object(IntList(i467[2], java.lang.Object(IntList(o4048Field0[2], o4048Field1[2])))), i164[2], i463[2]) → COND_LOAD29581(<=(i467[2], 0), java.lang.Object(IntList(i467[2], java.lang.Object(IntList(o4048Field0[2], o4048Field1[2])))), i164[2], i463[2]) which results in the following constraint:

    (37)    (i164[2]=i164[3]<=(i467[2], 0)=TRUEi467[2]=i467[3]o4048Field0[2]=o4048Field0[3]o4048Field1[2]=o4048Field1[3]i463[2]=i463[3]*(i463[3], i164[3])=i463[2]1o4048Field0[3]=i467[2]1o4048Field1[3]=java.lang.Object(IntList(o4048Field0[2]1, o4048Field1[2]1))∧i164[3]=i164[2]1COND_LOAD29581(TRUE, java.lang.Object(IntList(i467[3], java.lang.Object(IntList(o4048Field0[3], o4048Field1[3])))), i164[3], i463[3])≥LOAD2958(java.lang.Object(IntList(o4048Field0[3], o4048Field1[3])), i164[3], *(i463[3], i164[3]))∧(UIncreasing(LOAD2958(java.lang.Object(IntList(o4048Field0[3], o4048Field1[3])), i164[3], *(i463[3], i164[3]))), ≥))



    We simplified constraint (37) using rules (III), (IV) which results in the following new constraint:

    (38)    (<=(i467[2], 0)=TRUECOND_LOAD29581(TRUE, java.lang.Object(IntList(i467[2], java.lang.Object(IntList(o4048Field0[2], java.lang.Object(IntList(o4048Field0[2]1, o4048Field1[2]1)))))), i164[2], i463[2])≥LOAD2958(java.lang.Object(IntList(o4048Field0[2], java.lang.Object(IntList(o4048Field0[2]1, o4048Field1[2]1)))), i164[2], *(i463[2], i164[2]))∧(UIncreasing(LOAD2958(java.lang.Object(IntList(o4048Field0[3], o4048Field1[3])), i164[3], *(i463[3], i164[3]))), ≥))



    We simplified constraint (38) using rule (POLY_CONSTRAINTS) which results in the following new constraint:

    (39)    (0 ≥ 0 ⇒ (UIncreasing(LOAD2958(java.lang.Object(IntList(o4048Field0[3], o4048Field1[3])), i164[3], *(i463[3], i164[3]))), ≥)∧[(-1)bso_29] ≥ 0)



    We simplified constraint (39) using rule (IDP_POLY_SIMPLIFY) which results in the following new constraint:

    (40)    (0 ≥ 0 ⇒ (UIncreasing(LOAD2958(java.lang.Object(IntList(o4048Field0[3], o4048Field1[3])), i164[3], *(i463[3], i164[3]))), ≥)∧[(-1)bso_29] ≥ 0)



    We simplified constraint (40) using rule (POLY_REMOVE_MIN_MAX) which results in the following new constraint:

    (41)    (0 ≥ 0 ⇒ (UIncreasing(LOAD2958(java.lang.Object(IntList(o4048Field0[3], o4048Field1[3])), i164[3], *(i463[3], i164[3]))), ≥)∧[(-1)bso_29] ≥ 0)



    We simplified constraint (41) using rule (IDP_UNRESTRICTED_VARS) which results in the following new constraint:

    (42)    (0 ≥ 0 ⇒ (UIncreasing(LOAD2958(java.lang.Object(IntList(o4048Field0[3], o4048Field1[3])), i164[3], *(i463[3], i164[3]))), ≥)∧0 ≥ 0∧0 ≥ 0∧0 ≥ 0∧0 ≥ 0∧0 ≥ 0∧0 ≥ 0∧[(-1)bso_29] ≥ 0)



  • We consider the chain LOAD2958(java.lang.Object(IntList(i467[2], java.lang.Object(IntList(o4048Field0[2], o4048Field1[2])))), i164[2], i463[2]) → COND_LOAD29581(<=(i467[2], 0), java.lang.Object(IntList(i467[2], java.lang.Object(IntList(o4048Field0[2], o4048Field1[2])))), i164[2], i463[2]), COND_LOAD29581(TRUE, java.lang.Object(IntList(i467[3], java.lang.Object(IntList(o4048Field0[3], o4048Field1[3])))), i164[3], i463[3]) → LOAD2958(java.lang.Object(IntList(o4048Field0[3], o4048Field1[3])), i164[3], *(i463[3], i164[3])), LOAD2958(java.lang.Object(IntList(i467[4], NULL)), i164[4], i463[4]) → COND_LOAD29582(<=(i467[4], 0), java.lang.Object(IntList(i467[4], NULL)), i164[4], i463[4]) which results in the following constraint:

    (43)    (i164[2]=i164[3]<=(i467[2], 0)=TRUEi467[2]=i467[3]o4048Field0[2]=o4048Field0[3]o4048Field1[2]=o4048Field1[3]i463[2]=i463[3]*(i463[3], i164[3])=i463[4]o4048Field0[3]=i467[4]o4048Field1[3]=NULLi164[3]=i164[4]COND_LOAD29581(TRUE, java.lang.Object(IntList(i467[3], java.lang.Object(IntList(o4048Field0[3], o4048Field1[3])))), i164[3], i463[3])≥LOAD2958(java.lang.Object(IntList(o4048Field0[3], o4048Field1[3])), i164[3], *(i463[3], i164[3]))∧(UIncreasing(LOAD2958(java.lang.Object(IntList(o4048Field0[3], o4048Field1[3])), i164[3], *(i463[3], i164[3]))), ≥))



    We simplified constraint (43) using rules (III), (IV) which results in the following new constraint:

    (44)    (<=(i467[2], 0)=TRUECOND_LOAD29581(TRUE, java.lang.Object(IntList(i467[2], java.lang.Object(IntList(o4048Field0[2], NULL)))), i164[2], i463[2])≥LOAD2958(java.lang.Object(IntList(o4048Field0[2], NULL)), i164[2], *(i463[2], i164[2]))∧(UIncreasing(LOAD2958(java.lang.Object(IntList(o4048Field0[3], o4048Field1[3])), i164[3], *(i463[3], i164[3]))), ≥))



    We simplified constraint (44) using rule (POLY_CONSTRAINTS) which results in the following new constraint:

    (45)    (0 ≥ 0 ⇒ (UIncreasing(LOAD2958(java.lang.Object(IntList(o4048Field0[3], o4048Field1[3])), i164[3], *(i463[3], i164[3]))), ≥)∧[(-1)bso_29] ≥ 0)



    We simplified constraint (45) using rule (IDP_POLY_SIMPLIFY) which results in the following new constraint:

    (46)    (0 ≥ 0 ⇒ (UIncreasing(LOAD2958(java.lang.Object(IntList(o4048Field0[3], o4048Field1[3])), i164[3], *(i463[3], i164[3]))), ≥)∧[(-1)bso_29] ≥ 0)



    We simplified constraint (46) using rule (POLY_REMOVE_MIN_MAX) which results in the following new constraint:

    (47)    (0 ≥ 0 ⇒ (UIncreasing(LOAD2958(java.lang.Object(IntList(o4048Field0[3], o4048Field1[3])), i164[3], *(i463[3], i164[3]))), ≥)∧[(-1)bso_29] ≥ 0)



    We simplified constraint (47) using rule (IDP_UNRESTRICTED_VARS) which results in the following new constraint:

    (48)    (0 ≥ 0 ⇒ (UIncreasing(LOAD2958(java.lang.Object(IntList(o4048Field0[3], o4048Field1[3])), i164[3], *(i463[3], i164[3]))), ≥)∧0 ≥ 0∧0 ≥ 0∧0 ≥ 0∧0 ≥ 0∧[(-1)bso_29] ≥ 0)







For Pair LOAD2958(java.lang.Object(IntList(i467, NULL)), i164, i463) → COND_LOAD29582(<=(i467, 0), java.lang.Object(IntList(i467, NULL)), i164, i463) the following chains were created:
  • We consider the chain LOAD2958(java.lang.Object(IntList(i467[4], NULL)), i164[4], i463[4]) → COND_LOAD29582(<=(i467[4], 0), java.lang.Object(IntList(i467[4], NULL)), i164[4], i463[4]), COND_LOAD29582(TRUE, java.lang.Object(IntList(i467[5], NULL)), i164[5], i463[5]) → LOAD2958(NULL, i164[5], i463[5]) which results in the following constraint:

    (49)    (i467[4]=i467[5]<=(i467[4], 0)=TRUEi164[4]=i164[5]i463[4]=i463[5]LOAD2958(java.lang.Object(IntList(i467[4], NULL)), i164[4], i463[4])≥COND_LOAD29582(<=(i467[4], 0), java.lang.Object(IntList(i467[4], NULL)), i164[4], i463[4])∧(UIncreasing(COND_LOAD29582(<=(i467[4], 0), java.lang.Object(IntList(i467[4], NULL)), i164[4], i463[4])), ≥))



    We simplified constraint (49) using rule (IV) which results in the following new constraint:

    (50)    (<=(i467[4], 0)=TRUELOAD2958(java.lang.Object(IntList(i467[4], NULL)), i164[4], i463[4])≥COND_LOAD29582(<=(i467[4], 0), java.lang.Object(IntList(i467[4], NULL)), i164[4], i463[4])∧(UIncreasing(COND_LOAD29582(<=(i467[4], 0), java.lang.Object(IntList(i467[4], NULL)), i164[4], i463[4])), ≥))



    We simplified constraint (50) using rule (POLY_CONSTRAINTS) which results in the following new constraint:

    (51)    (0 ≥ 0 ⇒ (UIncreasing(COND_LOAD29582(<=(i467[4], 0), java.lang.Object(IntList(i467[4], NULL)), i164[4], i463[4])), ≥)∧[1 + (-1)bso_30] ≥ 0)



    We simplified constraint (51) using rule (IDP_POLY_SIMPLIFY) which results in the following new constraint:

    (52)    (0 ≥ 0 ⇒ (UIncreasing(COND_LOAD29582(<=(i467[4], 0), java.lang.Object(IntList(i467[4], NULL)), i164[4], i463[4])), ≥)∧[1 + (-1)bso_30] ≥ 0)



    We simplified constraint (52) using rule (POLY_REMOVE_MIN_MAX) which results in the following new constraint:

    (53)    (0 ≥ 0 ⇒ (UIncreasing(COND_LOAD29582(<=(i467[4], 0), java.lang.Object(IntList(i467[4], NULL)), i164[4], i463[4])), ≥)∧[1 + (-1)bso_30] ≥ 0)



    We simplified constraint (53) using rule (IDP_UNRESTRICTED_VARS) which results in the following new constraint:

    (54)    (0 ≥ 0 ⇒ (UIncreasing(COND_LOAD29582(<=(i467[4], 0), java.lang.Object(IntList(i467[4], NULL)), i164[4], i463[4])), ≥)∧0 ≥ 0∧0 ≥ 0∧0 ≥ 0∧[1 + (-1)bso_30] ≥ 0)







For Pair COND_LOAD29582(TRUE, java.lang.Object(IntList(i467, NULL)), i164, i463) → LOAD2958(NULL, i164, i463) the following chains were created:
  • We consider the chain LOAD2958(java.lang.Object(IntList(i467[4], NULL)), i164[4], i463[4]) → COND_LOAD29582(<=(i467[4], 0), java.lang.Object(IntList(i467[4], NULL)), i164[4], i463[4]), COND_LOAD29582(TRUE, java.lang.Object(IntList(i467[5], NULL)), i164[5], i463[5]) → LOAD2958(NULL, i164[5], i463[5]), LOAD2958(java.lang.Object(IntList(i466[0], o4023[0])), i164[0], i463[0]) → COND_LOAD2958(>(i466[0], 0), java.lang.Object(IntList(i466[0], o4023[0])), i164[0], i463[0]) which results in the following constraint:

    (55)    (COND_LOAD29582(TRUE, java.lang.Object(IntList(i467[5], NULL)), i164[5], i463[5])≥LOAD2958(NULL, i164[5], i463[5])∧(UIncreasing(LOAD2958(NULL, i164[5], i463[5])), ≥))



    We simplified constraint (55) using rule (POLY_CONSTRAINTS) which results in the following new constraint:

    (56)    ((UIncreasing(LOAD2958(NULL, i164[5], i463[5])), ≥)∧[(-1)bso_31] ≥ 0)



    We simplified constraint (56) using rule (IDP_POLY_SIMPLIFY) which results in the following new constraint:

    (57)    ((UIncreasing(LOAD2958(NULL, i164[5], i463[5])), ≥)∧[(-1)bso_31] ≥ 0)



    We simplified constraint (57) using rule (POLY_REMOVE_MIN_MAX) which results in the following new constraint:

    (58)    ((UIncreasing(LOAD2958(NULL, i164[5], i463[5])), ≥)∧[(-1)bso_31] ≥ 0)



    We simplified constraint (58) using rule (IDP_UNRESTRICTED_VARS) which results in the following new constraint:

    (59)    ((UIncreasing(LOAD2958(NULL, i164[5], i463[5])), ≥)∧0 ≥ 0∧0 ≥ 0∧0 ≥ 0∧[(-1)bso_31] ≥ 0)



  • We consider the chain LOAD2958(java.lang.Object(IntList(i467[4], NULL)), i164[4], i463[4]) → COND_LOAD29582(<=(i467[4], 0), java.lang.Object(IntList(i467[4], NULL)), i164[4], i463[4]), COND_LOAD29582(TRUE, java.lang.Object(IntList(i467[5], NULL)), i164[5], i463[5]) → LOAD2958(NULL, i164[5], i463[5]), LOAD2958(java.lang.Object(IntList(i467[2], java.lang.Object(IntList(o4048Field0[2], o4048Field1[2])))), i164[2], i463[2]) → COND_LOAD29581(<=(i467[2], 0), java.lang.Object(IntList(i467[2], java.lang.Object(IntList(o4048Field0[2], o4048Field1[2])))), i164[2], i463[2]) which results in the following constraint:

    (60)    (COND_LOAD29582(TRUE, java.lang.Object(IntList(i467[5], NULL)), i164[5], i463[5])≥LOAD2958(NULL, i164[5], i463[5])∧(UIncreasing(LOAD2958(NULL, i164[5], i463[5])), ≥))



    We simplified constraint (60) using rule (POLY_CONSTRAINTS) which results in the following new constraint:

    (61)    ((UIncreasing(LOAD2958(NULL, i164[5], i463[5])), ≥)∧[(-1)bso_31] ≥ 0)



    We simplified constraint (61) using rule (IDP_POLY_SIMPLIFY) which results in the following new constraint:

    (62)    ((UIncreasing(LOAD2958(NULL, i164[5], i463[5])), ≥)∧[(-1)bso_31] ≥ 0)



    We simplified constraint (62) using rule (POLY_REMOVE_MIN_MAX) which results in the following new constraint:

    (63)    ((UIncreasing(LOAD2958(NULL, i164[5], i463[5])), ≥)∧[(-1)bso_31] ≥ 0)



    We simplified constraint (63) using rule (IDP_UNRESTRICTED_VARS) which results in the following new constraint:

    (64)    ((UIncreasing(LOAD2958(NULL, i164[5], i463[5])), ≥)∧0 ≥ 0∧0 ≥ 0∧0 ≥ 0∧[(-1)bso_31] ≥ 0)



  • We consider the chain LOAD2958(java.lang.Object(IntList(i467[4], NULL)), i164[4], i463[4]) → COND_LOAD29582(<=(i467[4], 0), java.lang.Object(IntList(i467[4], NULL)), i164[4], i463[4]), COND_LOAD29582(TRUE, java.lang.Object(IntList(i467[5], NULL)), i164[5], i463[5]) → LOAD2958(NULL, i164[5], i463[5]), LOAD2958(java.lang.Object(IntList(i467[4], NULL)), i164[4], i463[4]) → COND_LOAD29582(<=(i467[4], 0), java.lang.Object(IntList(i467[4], NULL)), i164[4], i463[4]) which results in the following constraint:

    (65)    (COND_LOAD29582(TRUE, java.lang.Object(IntList(i467[5], NULL)), i164[5], i463[5])≥LOAD2958(NULL, i164[5], i463[5])∧(UIncreasing(LOAD2958(NULL, i164[5], i463[5])), ≥))



    We simplified constraint (65) using rule (POLY_CONSTRAINTS) which results in the following new constraint:

    (66)    ((UIncreasing(LOAD2958(NULL, i164[5], i463[5])), ≥)∧[(-1)bso_31] ≥ 0)



    We simplified constraint (66) using rule (IDP_POLY_SIMPLIFY) which results in the following new constraint:

    (67)    ((UIncreasing(LOAD2958(NULL, i164[5], i463[5])), ≥)∧[(-1)bso_31] ≥ 0)



    We simplified constraint (67) using rule (POLY_REMOVE_MIN_MAX) which results in the following new constraint:

    (68)    ((UIncreasing(LOAD2958(NULL, i164[5], i463[5])), ≥)∧[(-1)bso_31] ≥ 0)



    We simplified constraint (68) using rule (IDP_UNRESTRICTED_VARS) which results in the following new constraint:

    (69)    ((UIncreasing(LOAD2958(NULL, i164[5], i463[5])), ≥)∧0 ≥ 0∧0 ≥ 0∧0 ≥ 0∧[(-1)bso_31] ≥ 0)







To summarize, we get the following constraints P for the following pairs.
  • LOAD2958(java.lang.Object(IntList(i466, o4023)), i164, i463) → COND_LOAD2958(>(i466, 0), java.lang.Object(IntList(i466, o4023)), i164, i463)
    • (0 ≥ 0 ⇒ (UIncreasing(COND_LOAD2958(>(i466[0], 0), java.lang.Object(IntList(i466[0], o4023[0])), i164[0], i463[0])), ≥)∧0 ≥ 0∧0 ≥ 0∧0 ≥ 0∧0 ≥ 0∧[(-1)bso_26] ≥ 0)

  • COND_LOAD2958(TRUE, java.lang.Object(IntList(i466, o4023)), i164, i463) → LOAD2958(java.lang.Object(IntList(-(i466, 1), o4023)), i164, +(i463, 1))
    • (0 ≥ 0 ⇒ (UIncreasing(LOAD2958(java.lang.Object(IntList(-(i466[1], 1), o4023[1])), i164[1], +(i463[1], 1))), ≥)∧0 ≥ 0∧0 ≥ 0∧0 ≥ 0∧0 ≥ 0∧[(-1)bso_27] ≥ 0)
    • (0 ≥ 0 ⇒ (UIncreasing(LOAD2958(java.lang.Object(IntList(-(i466[1], 1), o4023[1])), i164[1], +(i463[1], 1))), ≥)∧0 ≥ 0∧0 ≥ 0∧0 ≥ 0∧0 ≥ 0∧0 ≥ 0∧[(-1)bso_27] ≥ 0)
    • (0 ≥ 0 ⇒ (UIncreasing(LOAD2958(java.lang.Object(IntList(-(i466[1], 1), o4023[1])), i164[1], +(i463[1], 1))), ≥)∧0 ≥ 0∧0 ≥ 0∧0 ≥ 0∧[(-1)bso_27] ≥ 0)

  • LOAD2958(java.lang.Object(IntList(i467, java.lang.Object(IntList(o4048Field0, o4048Field1)))), i164, i463) → COND_LOAD29581(<=(i467, 0), java.lang.Object(IntList(i467, java.lang.Object(IntList(o4048Field0, o4048Field1)))), i164, i463)
    • (0 ≥ 0 ⇒ (UIncreasing(COND_LOAD29581(<=(i467[2], 0), java.lang.Object(IntList(i467[2], java.lang.Object(IntList(o4048Field0[2], o4048Field1[2])))), i164[2], i463[2])), ≥)∧0 ≥ 0∧0 ≥ 0∧0 ≥ 0∧0 ≥ 0∧0 ≥ 0∧[(-1)bso_28] ≥ 0)

  • COND_LOAD29581(TRUE, java.lang.Object(IntList(i467, java.lang.Object(IntList(o4048Field0, o4048Field1)))), i164, i463) → LOAD2958(java.lang.Object(IntList(o4048Field0, o4048Field1)), i164, *(i463, i164))
    • (0 ≥ 0 ⇒ (UIncreasing(LOAD2958(java.lang.Object(IntList(o4048Field0[3], o4048Field1[3])), i164[3], *(i463[3], i164[3]))), ≥)∧0 ≥ 0∧0 ≥ 0∧0 ≥ 0∧0 ≥ 0∧0 ≥ 0∧[(-1)bso_29] ≥ 0)
    • (0 ≥ 0 ⇒ (UIncreasing(LOAD2958(java.lang.Object(IntList(o4048Field0[3], o4048Field1[3])), i164[3], *(i463[3], i164[3]))), ≥)∧0 ≥ 0∧0 ≥ 0∧0 ≥ 0∧0 ≥ 0∧0 ≥ 0∧0 ≥ 0∧[(-1)bso_29] ≥ 0)
    • (0 ≥ 0 ⇒ (UIncreasing(LOAD2958(java.lang.Object(IntList(o4048Field0[3], o4048Field1[3])), i164[3], *(i463[3], i164[3]))), ≥)∧0 ≥ 0∧0 ≥ 0∧0 ≥ 0∧0 ≥ 0∧[(-1)bso_29] ≥ 0)

  • LOAD2958(java.lang.Object(IntList(i467, NULL)), i164, i463) → COND_LOAD29582(<=(i467, 0), java.lang.Object(IntList(i467, NULL)), i164, i463)
    • (0 ≥ 0 ⇒ (UIncreasing(COND_LOAD29582(<=(i467[4], 0), java.lang.Object(IntList(i467[4], NULL)), i164[4], i463[4])), ≥)∧0 ≥ 0∧0 ≥ 0∧0 ≥ 0∧[1 + (-1)bso_30] ≥ 0)

  • COND_LOAD29582(TRUE, java.lang.Object(IntList(i467, NULL)), i164, i463) → LOAD2958(NULL, i164, i463)
    • ((UIncreasing(LOAD2958(NULL, i164[5], i463[5])), ≥)∧0 ≥ 0∧0 ≥ 0∧0 ≥ 0∧[(-1)bso_31] ≥ 0)
    • ((UIncreasing(LOAD2958(NULL, i164[5], i463[5])), ≥)∧0 ≥ 0∧0 ≥ 0∧0 ≥ 0∧[(-1)bso_31] ≥ 0)
    • ((UIncreasing(LOAD2958(NULL, i164[5], i463[5])), ≥)∧0 ≥ 0∧0 ≥ 0∧0 ≥ 0∧[(-1)bso_31] ≥ 0)




The constraints for P> respective Pbound are constructed from P where we just replace every occurence of "t ≥ s" in P by "t > s" respective "t ≥ c". Here c stands for the fresh constant used for Pbound.
Using the following integer polynomial ordering the resulting constraints can be solved
Polynomial interpretation over integers with natural coefficients for all symbols [NONINF][POLO]:

POL(TRUE) = 0   
POL(FALSE) = 0   
POL(LOAD2958(x1, x2, x3)) = [3]x2 + x1   
POL(java.lang.Object(x1)) = [1]   
POL(IntList(x1, x2)) = 0   
POL(COND_LOAD2958(x1, x2, x3, x4)) = [1] + [3]x3   
POL(>(x1, x2)) = 0   
POL(0) = 0   
POL(-(x1, x2)) = 0   
POL(1) = 0   
POL(+(x1, x2)) = 0   
POL(COND_LOAD29581(x1, x2, x3, x4)) = [1] + [3]x3   
POL(<=(x1, x2)) = 0   
POL(*(x1, x2)) = 0   
POL(NULL) = 0   
POL(COND_LOAD29582(x1, x2, x3, x4)) = [3]x3   

The following pairs are in P>:

LOAD2958(java.lang.Object(IntList(i467[4], NULL)), i164[4], i463[4]) → COND_LOAD29582(<=(i467[4], 0), java.lang.Object(IntList(i467[4], NULL)), i164[4], i463[4])

The following pairs are in Pbound:

LOAD2958(java.lang.Object(IntList(i466[0], o4023[0])), i164[0], i463[0]) → COND_LOAD2958(>(i466[0], 0), java.lang.Object(IntList(i466[0], o4023[0])), i164[0], i463[0])
COND_LOAD2958(TRUE, java.lang.Object(IntList(i466[1], o4023[1])), i164[1], i463[1]) → LOAD2958(java.lang.Object(IntList(-(i466[1], 1), o4023[1])), i164[1], +(i463[1], 1))
LOAD2958(java.lang.Object(IntList(i467[2], java.lang.Object(IntList(o4048Field0[2], o4048Field1[2])))), i164[2], i463[2]) → COND_LOAD29581(<=(i467[2], 0), java.lang.Object(IntList(i467[2], java.lang.Object(IntList(o4048Field0[2], o4048Field1[2])))), i164[2], i463[2])
COND_LOAD29581(TRUE, java.lang.Object(IntList(i467[3], java.lang.Object(IntList(o4048Field0[3], o4048Field1[3])))), i164[3], i463[3]) → LOAD2958(java.lang.Object(IntList(o4048Field0[3], o4048Field1[3])), i164[3], *(i463[3], i164[3]))
LOAD2958(java.lang.Object(IntList(i467[4], NULL)), i164[4], i463[4]) → COND_LOAD29582(<=(i467[4], 0), java.lang.Object(IntList(i467[4], NULL)), i164[4], i463[4])
COND_LOAD29582(TRUE, java.lang.Object(IntList(i467[5], NULL)), i164[5], i463[5]) → LOAD2958(NULL, i164[5], i463[5])

The following pairs are in P:

LOAD2958(java.lang.Object(IntList(i466[0], o4023[0])), i164[0], i463[0]) → COND_LOAD2958(>(i466[0], 0), java.lang.Object(IntList(i466[0], o4023[0])), i164[0], i463[0])
COND_LOAD2958(TRUE, java.lang.Object(IntList(i466[1], o4023[1])), i164[1], i463[1]) → LOAD2958(java.lang.Object(IntList(-(i466[1], 1), o4023[1])), i164[1], +(i463[1], 1))
LOAD2958(java.lang.Object(IntList(i467[2], java.lang.Object(IntList(o4048Field0[2], o4048Field1[2])))), i164[2], i463[2]) → COND_LOAD29581(<=(i467[2], 0), java.lang.Object(IntList(i467[2], java.lang.Object(IntList(o4048Field0[2], o4048Field1[2])))), i164[2], i463[2])
COND_LOAD29581(TRUE, java.lang.Object(IntList(i467[3], java.lang.Object(IntList(o4048Field0[3], o4048Field1[3])))), i164[3], i463[3]) → LOAD2958(java.lang.Object(IntList(o4048Field0[3], o4048Field1[3])), i164[3], *(i463[3], i164[3]))
COND_LOAD29582(TRUE, java.lang.Object(IntList(i467[5], NULL)), i164[5], i463[5]) → LOAD2958(NULL, i164[5], i463[5])

There are no usable rules.

(13) Complex Obligation (AND)

(14) Obligation:

IDP problem:
The following function symbols are pre-defined:
!=~Neq: (Integer, Integer) -> Boolean
*~Mul: (Integer, Integer) -> Integer
>=~Ge: (Integer, Integer) -> Boolean
-1~UnaryMinus: (Integer) -> Integer
|~Bwor: (Integer, Integer) -> Integer
/~Div: (Integer, Integer) -> Integer
=~Eq: (Integer, Integer) -> Boolean
~Bwxor: (Integer, Integer) -> Integer
||~Lor: (Boolean, Boolean) -> Boolean
!~Lnot: (Boolean) -> Boolean
<~Lt: (Integer, Integer) -> Boolean
-~Sub: (Integer, Integer) -> Integer
<=~Le: (Integer, Integer) -> Boolean
>~Gt: (Integer, Integer) -> Boolean
~~Bwnot: (Integer) -> Integer
%~Mod: (Integer, Integer) -> Integer
&~Bwand: (Integer, Integer) -> Integer
+~Add: (Integer, Integer) -> Integer
&&~Land: (Boolean, Boolean) -> Boolean


The following domains are used:

Integer


R is empty.

The integer pair graph contains the following rules and edges:
(0): LOAD2958(java.lang.Object(IntList(i466[0], o4023[0])), i164[0], i463[0]) → COND_LOAD2958(i466[0] > 0, java.lang.Object(IntList(i466[0], o4023[0])), i164[0], i463[0])
(1): COND_LOAD2958(TRUE, java.lang.Object(IntList(i466[1], o4023[1])), i164[1], i463[1]) → LOAD2958(java.lang.Object(IntList(i466[1] - 1, o4023[1])), i164[1], i463[1] + 1)
(2): LOAD2958(java.lang.Object(IntList(i467[2], java.lang.Object(IntList(o4048Field0[2], o4048Field1[2])))), i164[2], i463[2]) → COND_LOAD29581(i467[2] <= 0, java.lang.Object(IntList(i467[2], java.lang.Object(IntList(o4048Field0[2], o4048Field1[2])))), i164[2], i463[2])
(3): COND_LOAD29581(TRUE, java.lang.Object(IntList(i467[3], java.lang.Object(IntList(o4048Field0[3], o4048Field1[3])))), i164[3], i463[3]) → LOAD2958(java.lang.Object(IntList(o4048Field0[3], o4048Field1[3])), i164[3], i463[3] * i164[3])
(5): COND_LOAD29582(TRUE, java.lang.Object(IntList(i467[5], NULL)), i164[5], i463[5]) → LOAD2958(NULL, i164[5], i463[5])

(1) -> (0), if ((i463[1] + 1* i463[0])∧((i466[1] - 1* i466[0])∧(o4023[1]* o4023[0]))∧(i164[1]* i164[0]))


(3) -> (0), if ((i463[3] * i164[3]* i463[0])∧(i164[3]* i164[0])∧((o4048Field0[3]* i466[0])∧(o4048Field1[3]* o4023[0])))


(5) -> (0), if ((i164[5]* i164[0])∧(i463[5]* i463[0])∧false)


(0) -> (1), if ((i466[0] > 0* TRUE)∧(i463[0]* i463[1])∧(i164[0]* i164[1])∧((i466[0]* i466[1])∧(o4023[0]* o4023[1])))


(1) -> (2), if ((i463[1] + 1* i463[2])∧(i164[1]* i164[2])∧((i466[1] - 1* i467[2])∧(o4023[1]* java.lang.Object(IntList(o4048Field0[2], o4048Field1[2])))))


(3) -> (2), if ((i463[3] * i164[3]* i463[2])∧((o4048Field0[3]* i467[2])∧(o4048Field1[3]* java.lang.Object(IntList(o4048Field0[2], o4048Field1[2]))))∧(i164[3]* i164[2]))


(5) -> (2), if (false∧(i463[5]* i463[2])∧(i164[5]* i164[2]))


(2) -> (3), if ((i164[2]* i164[3])∧(i467[2] <= 0* TRUE)∧((i467[2]* i467[3])∧(o4048Field0[2]* o4048Field0[3])∧(o4048Field1[2]* o4048Field1[3]))∧(i463[2]* i463[3]))



The set Q consists of the following terms:
Load2958(java.lang.Object(IntList(x0, x1)), x2, x3)
Cond_Load2958(TRUE, java.lang.Object(IntList(x0, x1)), x2, x3)
Cond_Load29581(TRUE, java.lang.Object(IntList(x0, java.lang.Object(IntList(x1, x2)))), x3, x4)
Cond_Load29582(TRUE, java.lang.Object(IntList(x0, NULL)), x1, x2)

(15) IDependencyGraphProof (EQUIVALENT transformation)

The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 1 SCC with 1 less node.

(16) Obligation:

IDP problem:
The following function symbols are pre-defined:
!=~Neq: (Integer, Integer) -> Boolean
*~Mul: (Integer, Integer) -> Integer
>=~Ge: (Integer, Integer) -> Boolean
-1~UnaryMinus: (Integer) -> Integer
|~Bwor: (Integer, Integer) -> Integer
/~Div: (Integer, Integer) -> Integer
=~Eq: (Integer, Integer) -> Boolean
~Bwxor: (Integer, Integer) -> Integer
||~Lor: (Boolean, Boolean) -> Boolean
!~Lnot: (Boolean) -> Boolean
<~Lt: (Integer, Integer) -> Boolean
-~Sub: (Integer, Integer) -> Integer
<=~Le: (Integer, Integer) -> Boolean
>~Gt: (Integer, Integer) -> Boolean
~~Bwnot: (Integer) -> Integer
%~Mod: (Integer, Integer) -> Integer
&~Bwand: (Integer, Integer) -> Integer
+~Add: (Integer, Integer) -> Integer
&&~Land: (Boolean, Boolean) -> Boolean


The following domains are used:

Integer


R is empty.

The integer pair graph contains the following rules and edges:
(3): COND_LOAD29581(TRUE, java.lang.Object(IntList(i467[3], java.lang.Object(IntList(o4048Field0[3], o4048Field1[3])))), i164[3], i463[3]) → LOAD2958(java.lang.Object(IntList(o4048Field0[3], o4048Field1[3])), i164[3], i463[3] * i164[3])
(2): LOAD2958(java.lang.Object(IntList(i467[2], java.lang.Object(IntList(o4048Field0[2], o4048Field1[2])))), i164[2], i463[2]) → COND_LOAD29581(i467[2] <= 0, java.lang.Object(IntList(i467[2], java.lang.Object(IntList(o4048Field0[2], o4048Field1[2])))), i164[2], i463[2])
(1): COND_LOAD2958(TRUE, java.lang.Object(IntList(i466[1], o4023[1])), i164[1], i463[1]) → LOAD2958(java.lang.Object(IntList(i466[1] - 1, o4023[1])), i164[1], i463[1] + 1)
(0): LOAD2958(java.lang.Object(IntList(i466[0], o4023[0])), i164[0], i463[0]) → COND_LOAD2958(i466[0] > 0, java.lang.Object(IntList(i466[0], o4023[0])), i164[0], i463[0])

(1) -> (0), if ((i463[1] + 1* i463[0])∧((i466[1] - 1* i466[0])∧(o4023[1]* o4023[0]))∧(i164[1]* i164[0]))


(3) -> (0), if ((i463[3] * i164[3]* i463[0])∧(i164[3]* i164[0])∧((o4048Field0[3]* i466[0])∧(o4048Field1[3]* o4023[0])))


(0) -> (1), if ((i466[0] > 0* TRUE)∧(i463[0]* i463[1])∧(i164[0]* i164[1])∧((i466[0]* i466[1])∧(o4023[0]* o4023[1])))


(1) -> (2), if ((i463[1] + 1* i463[2])∧(i164[1]* i164[2])∧((i466[1] - 1* i467[2])∧(o4023[1]* java.lang.Object(IntList(o4048Field0[2], o4048Field1[2])))))


(3) -> (2), if ((i463[3] * i164[3]* i463[2])∧((o4048Field0[3]* i467[2])∧(o4048Field1[3]* java.lang.Object(IntList(o4048Field0[2], o4048Field1[2]))))∧(i164[3]* i164[2]))


(2) -> (3), if ((i164[2]* i164[3])∧(i467[2] <= 0* TRUE)∧((i467[2]* i467[3])∧(o4048Field0[2]* o4048Field0[3])∧(o4048Field1[2]* o4048Field1[3]))∧(i463[2]* i463[3]))



The set Q consists of the following terms:
Load2958(java.lang.Object(IntList(x0, x1)), x2, x3)
Cond_Load2958(TRUE, java.lang.Object(IntList(x0, x1)), x2, x3)
Cond_Load29581(TRUE, java.lang.Object(IntList(x0, java.lang.Object(IntList(x1, x2)))), x3, x4)
Cond_Load29582(TRUE, java.lang.Object(IntList(x0, NULL)), x1, x2)

(17) IDPNonInfProof (SOUND transformation)

The constraints were generated the following way:
The DP Problem is simplified using the Induction Calculus [NONINF] with the following steps:
Note that final constraints are written in bold face.


For Pair COND_LOAD29581(TRUE, java.lang.Object(IntList(i467[3], java.lang.Object(IntList(o4048Field0[3], o4048Field1[3])))), i164[3], i463[3]) → LOAD2958(java.lang.Object(IntList(o4048Field0[3], o4048Field1[3])), i164[3], *(i463[3], i164[3])) the following chains were created:
  • We consider the chain LOAD2958(java.lang.Object(IntList(i467[2], java.lang.Object(IntList(o4048Field0[2], o4048Field1[2])))), i164[2], i463[2]) → COND_LOAD29581(<=(i467[2], 0), java.lang.Object(IntList(i467[2], java.lang.Object(IntList(o4048Field0[2], o4048Field1[2])))), i164[2], i463[2]), COND_LOAD29581(TRUE, java.lang.Object(IntList(i467[3], java.lang.Object(IntList(o4048Field0[3], o4048Field1[3])))), i164[3], i463[3]) → LOAD2958(java.lang.Object(IntList(o4048Field0[3], o4048Field1[3])), i164[3], *(i463[3], i164[3])), LOAD2958(java.lang.Object(IntList(i466[0], o4023[0])), i164[0], i463[0]) → COND_LOAD2958(>(i466[0], 0), java.lang.Object(IntList(i466[0], o4023[0])), i164[0], i463[0]) which results in the following constraint:

    (1)    (i164[2]=i164[3]<=(i467[2], 0)=TRUEi467[2]=i467[3]o4048Field0[2]=o4048Field0[3]o4048Field1[2]=o4048Field1[3]i463[2]=i463[3]*(i463[3], i164[3])=i463[0]i164[3]=i164[0]o4048Field0[3]=i466[0]o4048Field1[3]=o4023[0]COND_LOAD29581(TRUE, java.lang.Object(IntList(i467[3], java.lang.Object(IntList(o4048Field0[3], o4048Field1[3])))), i164[3], i463[3])≥LOAD2958(java.lang.Object(IntList(o4048Field0[3], o4048Field1[3])), i164[3], *(i463[3], i164[3]))∧(UIncreasing(LOAD2958(java.lang.Object(IntList(o4048Field0[3], o4048Field1[3])), i164[3], *(i463[3], i164[3]))), ≥))



    We simplified constraint (1) using rules (III), (IV) which results in the following new constraint:

    (2)    (<=(i467[2], 0)=TRUECOND_LOAD29581(TRUE, java.lang.Object(IntList(i467[2], java.lang.Object(IntList(o4048Field0[2], o4048Field1[2])))), i164[2], i463[2])≥LOAD2958(java.lang.Object(IntList(o4048Field0[2], o4048Field1[2])), i164[2], *(i463[2], i164[2]))∧(UIncreasing(LOAD2958(java.lang.Object(IntList(o4048Field0[3], o4048Field1[3])), i164[3], *(i463[3], i164[3]))), ≥))



    We simplified constraint (2) using rule (POLY_CONSTRAINTS) which results in the following new constraint:

    (3)    (0 ≥ 0 ⇒ (UIncreasing(LOAD2958(java.lang.Object(IntList(o4048Field0[3], o4048Field1[3])), i164[3], *(i463[3], i164[3]))), ≥)∧[5 + (-1)bso_20] + i463[2] + [8]o4048Field1[2] ≥ 0)



    We simplified constraint (3) using rule (IDP_POLY_SIMPLIFY) which results in the following new constraint:

    (4)    (0 ≥ 0 ⇒ (UIncreasing(LOAD2958(java.lang.Object(IntList(o4048Field0[3], o4048Field1[3])), i164[3], *(i463[3], i164[3]))), ≥)∧[5 + (-1)bso_20] + i463[2] + [8]o4048Field1[2] ≥ 0)



    We simplified constraint (4) using rule (POLY_REMOVE_MIN_MAX) which results in the following new constraint:

    (5)    (0 ≥ 0 ⇒ (UIncreasing(LOAD2958(java.lang.Object(IntList(o4048Field0[3], o4048Field1[3])), i164[3], *(i463[3], i164[3]))), ≥)∧[5 + (-1)bso_20] + i463[2] + [8]o4048Field1[2] ≥ 0)



    We simplified constraint (5) using rules (IDP_UNRESTRICTED_VARS), (IDP_POLY_GCD) which results in the following new constraint:

    (6)    (0 ≥ 0 ⇒ (UIncreasing(LOAD2958(java.lang.Object(IntList(o4048Field0[3], o4048Field1[3])), i164[3], *(i463[3], i164[3]))), ≥)∧[1] ≥ 0∧0 ≥ 0∧0 ≥ 0∧0 ≥ 0∧[5 + (-1)bso_20] ≥ 0∧[1] ≥ 0)



  • We consider the chain LOAD2958(java.lang.Object(IntList(i467[2], java.lang.Object(IntList(o4048Field0[2], o4048Field1[2])))), i164[2], i463[2]) → COND_LOAD29581(<=(i467[2], 0), java.lang.Object(IntList(i467[2], java.lang.Object(IntList(o4048Field0[2], o4048Field1[2])))), i164[2], i463[2]), COND_LOAD29581(TRUE, java.lang.Object(IntList(i467[3], java.lang.Object(IntList(o4048Field0[3], o4048Field1[3])))), i164[3], i463[3]) → LOAD2958(java.lang.Object(IntList(o4048Field0[3], o4048Field1[3])), i164[3], *(i463[3], i164[3])), LOAD2958(java.lang.Object(IntList(i467[2], java.lang.Object(IntList(o4048Field0[2], o4048Field1[2])))), i164[2], i463[2]) → COND_LOAD29581(<=(i467[2], 0), java.lang.Object(IntList(i467[2], java.lang.Object(IntList(o4048Field0[2], o4048Field1[2])))), i164[2], i463[2]) which results in the following constraint:

    (7)    (i164[2]=i164[3]<=(i467[2], 0)=TRUEi467[2]=i467[3]o4048Field0[2]=o4048Field0[3]o4048Field1[2]=o4048Field1[3]i463[2]=i463[3]*(i463[3], i164[3])=i463[2]1o4048Field0[3]=i467[2]1o4048Field1[3]=java.lang.Object(IntList(o4048Field0[2]1, o4048Field1[2]1))∧i164[3]=i164[2]1COND_LOAD29581(TRUE, java.lang.Object(IntList(i467[3], java.lang.Object(IntList(o4048Field0[3], o4048Field1[3])))), i164[3], i463[3])≥LOAD2958(java.lang.Object(IntList(o4048Field0[3], o4048Field1[3])), i164[3], *(i463[3], i164[3]))∧(UIncreasing(LOAD2958(java.lang.Object(IntList(o4048Field0[3], o4048Field1[3])), i164[3], *(i463[3], i164[3]))), ≥))



    We simplified constraint (7) using rules (III), (IV) which results in the following new constraint:

    (8)    (<=(i467[2], 0)=TRUECOND_LOAD29581(TRUE, java.lang.Object(IntList(i467[2], java.lang.Object(IntList(o4048Field0[2], java.lang.Object(IntList(o4048Field0[2]1, o4048Field1[2]1)))))), i164[2], i463[2])≥LOAD2958(java.lang.Object(IntList(o4048Field0[2], java.lang.Object(IntList(o4048Field0[2]1, o4048Field1[2]1)))), i164[2], *(i463[2], i164[2]))∧(UIncreasing(LOAD2958(java.lang.Object(IntList(o4048Field0[3], o4048Field1[3])), i164[3], *(i463[3], i164[3]))), ≥))



    We simplified constraint (8) using rule (POLY_CONSTRAINTS) which results in the following new constraint:

    (9)    (0 ≥ 0 ⇒ (UIncreasing(LOAD2958(java.lang.Object(IntList(o4048Field0[3], o4048Field1[3])), i164[3], *(i463[3], i164[3]))), ≥)∧[13 + (-1)bso_20] + i463[2] + [32]o4048Field1[2]1 ≥ 0)



    We simplified constraint (9) using rule (IDP_POLY_SIMPLIFY) which results in the following new constraint:

    (10)    (0 ≥ 0 ⇒ (UIncreasing(LOAD2958(java.lang.Object(IntList(o4048Field0[3], o4048Field1[3])), i164[3], *(i463[3], i164[3]))), ≥)∧[13 + (-1)bso_20] + i463[2] + [32]o4048Field1[2]1 ≥ 0)



    We simplified constraint (10) using rule (POLY_REMOVE_MIN_MAX) which results in the following new constraint:

    (11)    (0 ≥ 0 ⇒ (UIncreasing(LOAD2958(java.lang.Object(IntList(o4048Field0[3], o4048Field1[3])), i164[3], *(i463[3], i164[3]))), ≥)∧[13 + (-1)bso_20] + i463[2] + [32]o4048Field1[2]1 ≥ 0)



    We simplified constraint (11) using rules (IDP_UNRESTRICTED_VARS), (IDP_POLY_GCD) which results in the following new constraint:

    (12)    (0 ≥ 0 ⇒ (UIncreasing(LOAD2958(java.lang.Object(IntList(o4048Field0[3], o4048Field1[3])), i164[3], *(i463[3], i164[3]))), ≥)∧[1] ≥ 0∧0 ≥ 0∧0 ≥ 0∧0 ≥ 0∧0 ≥ 0∧[13 + (-1)bso_20] ≥ 0∧[1] ≥ 0)







For Pair LOAD2958(java.lang.Object(IntList(i467[2], java.lang.Object(IntList(o4048Field0[2], o4048Field1[2])))), i164[2], i463[2]) → COND_LOAD29581(<=(i467[2], 0), java.lang.Object(IntList(i467[2], java.lang.Object(IntList(o4048Field0[2], o4048Field1[2])))), i164[2], i463[2]) the following chains were created:
  • We consider the chain LOAD2958(java.lang.Object(IntList(i467[2], java.lang.Object(IntList(o4048Field0[2], o4048Field1[2])))), i164[2], i463[2]) → COND_LOAD29581(<=(i467[2], 0), java.lang.Object(IntList(i467[2], java.lang.Object(IntList(o4048Field0[2], o4048Field1[2])))), i164[2], i463[2]), COND_LOAD29581(TRUE, java.lang.Object(IntList(i467[3], java.lang.Object(IntList(o4048Field0[3], o4048Field1[3])))), i164[3], i463[3]) → LOAD2958(java.lang.Object(IntList(o4048Field0[3], o4048Field1[3])), i164[3], *(i463[3], i164[3])) which results in the following constraint:

    (13)    (i164[2]=i164[3]<=(i467[2], 0)=TRUEi467[2]=i467[3]o4048Field0[2]=o4048Field0[3]o4048Field1[2]=o4048Field1[3]i463[2]=i463[3]LOAD2958(java.lang.Object(IntList(i467[2], java.lang.Object(IntList(o4048Field0[2], o4048Field1[2])))), i164[2], i463[2])≥COND_LOAD29581(<=(i467[2], 0), java.lang.Object(IntList(i467[2], java.lang.Object(IntList(o4048Field0[2], o4048Field1[2])))), i164[2], i463[2])∧(UIncreasing(COND_LOAD29581(<=(i467[2], 0), java.lang.Object(IntList(i467[2], java.lang.Object(IntList(o4048Field0[2], o4048Field1[2])))), i164[2], i463[2])), ≥))



    We simplified constraint (13) using rule (IV) which results in the following new constraint:

    (14)    (<=(i467[2], 0)=TRUELOAD2958(java.lang.Object(IntList(i467[2], java.lang.Object(IntList(o4048Field0[2], o4048Field1[2])))), i164[2], i463[2])≥COND_LOAD29581(<=(i467[2], 0), java.lang.Object(IntList(i467[2], java.lang.Object(IntList(o4048Field0[2], o4048Field1[2])))), i164[2], i463[2])∧(UIncreasing(COND_LOAD29581(<=(i467[2], 0), java.lang.Object(IntList(i467[2], java.lang.Object(IntList(o4048Field0[2], o4048Field1[2])))), i164[2], i463[2])), ≥))



    We simplified constraint (14) using rule (POLY_CONSTRAINTS) which results in the following new constraint:

    (15)    (0 ≥ 0 ⇒ (UIncreasing(COND_LOAD29581(<=(i467[2], 0), java.lang.Object(IntList(i467[2], java.lang.Object(IntList(o4048Field0[2], o4048Field1[2])))), i164[2], i463[2])), ≥)∧[3 + (-1)bso_21] + [16]o4048Field1[2] ≥ 0)



    We simplified constraint (15) using rule (IDP_POLY_SIMPLIFY) which results in the following new constraint:

    (16)    (0 ≥ 0 ⇒ (UIncreasing(COND_LOAD29581(<=(i467[2], 0), java.lang.Object(IntList(i467[2], java.lang.Object(IntList(o4048Field0[2], o4048Field1[2])))), i164[2], i463[2])), ≥)∧[3 + (-1)bso_21] + [16]o4048Field1[2] ≥ 0)



    We simplified constraint (16) using rule (POLY_REMOVE_MIN_MAX) which results in the following new constraint:

    (17)    (0 ≥ 0 ⇒ (UIncreasing(COND_LOAD29581(<=(i467[2], 0), java.lang.Object(IntList(i467[2], java.lang.Object(IntList(o4048Field0[2], o4048Field1[2])))), i164[2], i463[2])), ≥)∧[3 + (-1)bso_21] + [16]o4048Field1[2] ≥ 0)



    We simplified constraint (17) using rules (IDP_UNRESTRICTED_VARS), (IDP_POLY_GCD) which results in the following new constraint:

    (18)    (0 ≥ 0 ⇒ (UIncreasing(COND_LOAD29581(<=(i467[2], 0), java.lang.Object(IntList(i467[2], java.lang.Object(IntList(o4048Field0[2], o4048Field1[2])))), i164[2], i463[2])), ≥)∧0 ≥ 0∧0 ≥ 0∧0 ≥ 0∧0 ≥ 0∧[3 + (-1)bso_21] ≥ 0∧[1] ≥ 0)







For Pair COND_LOAD2958(TRUE, java.lang.Object(IntList(i466[1], o4023[1])), i164[1], i463[1]) → LOAD2958(java.lang.Object(IntList(-(i466[1], 1), o4023[1])), i164[1], +(i463[1], 1)) the following chains were created:
  • We consider the chain LOAD2958(java.lang.Object(IntList(i466[0], o4023[0])), i164[0], i463[0]) → COND_LOAD2958(>(i466[0], 0), java.lang.Object(IntList(i466[0], o4023[0])), i164[0], i463[0]), COND_LOAD2958(TRUE, java.lang.Object(IntList(i466[1], o4023[1])), i164[1], i463[1]) → LOAD2958(java.lang.Object(IntList(-(i466[1], 1), o4023[1])), i164[1], +(i463[1], 1)), LOAD2958(java.lang.Object(IntList(i466[0], o4023[0])), i164[0], i463[0]) → COND_LOAD2958(>(i466[0], 0), java.lang.Object(IntList(i466[0], o4023[0])), i164[0], i463[0]) which results in the following constraint:

    (19)    (>(i466[0], 0)=TRUEi463[0]=i463[1]i164[0]=i164[1]i466[0]=i466[1]o4023[0]=o4023[1]+(i463[1], 1)=i463[0]1-(i466[1], 1)=i466[0]1o4023[1]=o4023[0]1i164[1]=i164[0]1COND_LOAD2958(TRUE, java.lang.Object(IntList(i466[1], o4023[1])), i164[1], i463[1])≥LOAD2958(java.lang.Object(IntList(-(i466[1], 1), o4023[1])), i164[1], +(i463[1], 1))∧(UIncreasing(LOAD2958(java.lang.Object(IntList(-(i466[1], 1), o4023[1])), i164[1], +(i463[1], 1))), ≥))



    We simplified constraint (19) using rules (III), (IV) which results in the following new constraint:

    (20)    (>(i466[0], 0)=TRUECOND_LOAD2958(TRUE, java.lang.Object(IntList(i466[0], o4023[0])), i164[0], i463[0])≥LOAD2958(java.lang.Object(IntList(-(i466[0], 1), o4023[0])), i164[0], +(i463[0], 1))∧(UIncreasing(LOAD2958(java.lang.Object(IntList(-(i466[1], 1), o4023[1])), i164[1], +(i463[1], 1))), ≥))



    We simplified constraint (20) using rule (POLY_CONSTRAINTS) which results in the following new constraint:

    (21)    (0 ≥ 0 ⇒ (UIncreasing(LOAD2958(java.lang.Object(IntList(-(i466[1], 1), o4023[1])), i164[1], +(i463[1], 1))), ≥)∧[(-1)bso_22] + i463[0] ≥ 0)



    We simplified constraint (21) using rule (IDP_POLY_SIMPLIFY) which results in the following new constraint:

    (22)    (0 ≥ 0 ⇒ (UIncreasing(LOAD2958(java.lang.Object(IntList(-(i466[1], 1), o4023[1])), i164[1], +(i463[1], 1))), ≥)∧[(-1)bso_22] + i463[0] ≥ 0)



    We simplified constraint (22) using rule (POLY_REMOVE_MIN_MAX) which results in the following new constraint:

    (23)    (0 ≥ 0 ⇒ (UIncreasing(LOAD2958(java.lang.Object(IntList(-(i466[1], 1), o4023[1])), i164[1], +(i463[1], 1))), ≥)∧[(-1)bso_22] + i463[0] ≥ 0)



    We simplified constraint (23) using rule (IDP_UNRESTRICTED_VARS) which results in the following new constraint:

    (24)    (0 ≥ 0 ⇒ (UIncreasing(LOAD2958(java.lang.Object(IntList(-(i466[1], 1), o4023[1])), i164[1], +(i463[1], 1))), ≥)∧[1] ≥ 0∧0 ≥ 0∧0 ≥ 0∧0 ≥ 0∧[(-1)bso_22] ≥ 0)



  • We consider the chain LOAD2958(java.lang.Object(IntList(i466[0], o4023[0])), i164[0], i463[0]) → COND_LOAD2958(>(i466[0], 0), java.lang.Object(IntList(i466[0], o4023[0])), i164[0], i463[0]), COND_LOAD2958(TRUE, java.lang.Object(IntList(i466[1], o4023[1])), i164[1], i463[1]) → LOAD2958(java.lang.Object(IntList(-(i466[1], 1), o4023[1])), i164[1], +(i463[1], 1)), LOAD2958(java.lang.Object(IntList(i467[2], java.lang.Object(IntList(o4048Field0[2], o4048Field1[2])))), i164[2], i463[2]) → COND_LOAD29581(<=(i467[2], 0), java.lang.Object(IntList(i467[2], java.lang.Object(IntList(o4048Field0[2], o4048Field1[2])))), i164[2], i463[2]) which results in the following constraint:

    (25)    (>(i466[0], 0)=TRUEi463[0]=i463[1]i164[0]=i164[1]i466[0]=i466[1]o4023[0]=o4023[1]+(i463[1], 1)=i463[2]i164[1]=i164[2]-(i466[1], 1)=i467[2]o4023[1]=java.lang.Object(IntList(o4048Field0[2], o4048Field1[2])) ⇒ COND_LOAD2958(TRUE, java.lang.Object(IntList(i466[1], o4023[1])), i164[1], i463[1])≥LOAD2958(java.lang.Object(IntList(-(i466[1], 1), o4023[1])), i164[1], +(i463[1], 1))∧(UIncreasing(LOAD2958(java.lang.Object(IntList(-(i466[1], 1), o4023[1])), i164[1], +(i463[1], 1))), ≥))



    We simplified constraint (25) using rules (III), (IV) which results in the following new constraint:

    (26)    (>(i466[0], 0)=TRUECOND_LOAD2958(TRUE, java.lang.Object(IntList(i466[0], java.lang.Object(IntList(o4048Field0[2], o4048Field1[2])))), i164[0], i463[0])≥LOAD2958(java.lang.Object(IntList(-(i466[0], 1), java.lang.Object(IntList(o4048Field0[2], o4048Field1[2])))), i164[0], +(i463[0], 1))∧(UIncreasing(LOAD2958(java.lang.Object(IntList(-(i466[1], 1), o4023[1])), i164[1], +(i463[1], 1))), ≥))



    We simplified constraint (26) using rule (POLY_CONSTRAINTS) which results in the following new constraint:

    (27)    (0 ≥ 0 ⇒ (UIncreasing(LOAD2958(java.lang.Object(IntList(-(i466[1], 1), o4023[1])), i164[1], +(i463[1], 1))), ≥)∧[(-1)bso_22] + i463[0] ≥ 0)



    We simplified constraint (27) using rule (IDP_POLY_SIMPLIFY) which results in the following new constraint:

    (28)    (0 ≥ 0 ⇒ (UIncreasing(LOAD2958(java.lang.Object(IntList(-(i466[1], 1), o4023[1])), i164[1], +(i463[1], 1))), ≥)∧[(-1)bso_22] + i463[0] ≥ 0)



    We simplified constraint (28) using rule (POLY_REMOVE_MIN_MAX) which results in the following new constraint:

    (29)    (0 ≥ 0 ⇒ (UIncreasing(LOAD2958(java.lang.Object(IntList(-(i466[1], 1), o4023[1])), i164[1], +(i463[1], 1))), ≥)∧[(-1)bso_22] + i463[0] ≥ 0)



    We simplified constraint (29) using rule (IDP_UNRESTRICTED_VARS) which results in the following new constraint:

    (30)    (0 ≥ 0 ⇒ (UIncreasing(LOAD2958(java.lang.Object(IntList(-(i466[1], 1), o4023[1])), i164[1], +(i463[1], 1))), ≥)∧[1] ≥ 0∧0 ≥ 0∧0 ≥ 0∧0 ≥ 0∧0 ≥ 0∧[(-1)bso_22] ≥ 0)







For Pair LOAD2958(java.lang.Object(IntList(i466[0], o4023[0])), i164[0], i463[0]) → COND_LOAD2958(>(i466[0], 0), java.lang.Object(IntList(i466[0], o4023[0])), i164[0], i463[0]) the following chains were created:
  • We consider the chain LOAD2958(java.lang.Object(IntList(i466[0], o4023[0])), i164[0], i463[0]) → COND_LOAD2958(>(i466[0], 0), java.lang.Object(IntList(i466[0], o4023[0])), i164[0], i463[0]), COND_LOAD2958(TRUE, java.lang.Object(IntList(i466[1], o4023[1])), i164[1], i463[1]) → LOAD2958(java.lang.Object(IntList(-(i466[1], 1), o4023[1])), i164[1], +(i463[1], 1)) which results in the following constraint:

    (31)    (>(i466[0], 0)=TRUEi463[0]=i463[1]i164[0]=i164[1]i466[0]=i466[1]o4023[0]=o4023[1]LOAD2958(java.lang.Object(IntList(i466[0], o4023[0])), i164[0], i463[0])≥COND_LOAD2958(>(i466[0], 0), java.lang.Object(IntList(i466[0], o4023[0])), i164[0], i463[0])∧(UIncreasing(COND_LOAD2958(>(i466[0], 0), java.lang.Object(IntList(i466[0], o4023[0])), i164[0], i463[0])), ≥))



    We simplified constraint (31) using rule (IV) which results in the following new constraint:

    (32)    (>(i466[0], 0)=TRUELOAD2958(java.lang.Object(IntList(i466[0], o4023[0])), i164[0], i463[0])≥COND_LOAD2958(>(i466[0], 0), java.lang.Object(IntList(i466[0], o4023[0])), i164[0], i463[0])∧(UIncreasing(COND_LOAD2958(>(i466[0], 0), java.lang.Object(IntList(i466[0], o4023[0])), i164[0], i463[0])), ≥))



    We simplified constraint (32) using rule (POLY_CONSTRAINTS) which results in the following new constraint:

    (33)    (0 ≥ 0 ⇒ (UIncreasing(COND_LOAD2958(>(i466[0], 0), java.lang.Object(IntList(i466[0], o4023[0])), i164[0], i463[0])), ≥)∧[(-1)bso_23] ≥ 0)



    We simplified constraint (33) using rule (IDP_POLY_SIMPLIFY) which results in the following new constraint:

    (34)    (0 ≥ 0 ⇒ (UIncreasing(COND_LOAD2958(>(i466[0], 0), java.lang.Object(IntList(i466[0], o4023[0])), i164[0], i463[0])), ≥)∧[(-1)bso_23] ≥ 0)



    We simplified constraint (34) using rule (POLY_REMOVE_MIN_MAX) which results in the following new constraint:

    (35)    (0 ≥ 0 ⇒ (UIncreasing(COND_LOAD2958(>(i466[0], 0), java.lang.Object(IntList(i466[0], o4023[0])), i164[0], i463[0])), ≥)∧[(-1)bso_23] ≥ 0)



    We simplified constraint (35) using rule (IDP_UNRESTRICTED_VARS) which results in the following new constraint:

    (36)    (0 ≥ 0 ⇒ (UIncreasing(COND_LOAD2958(>(i466[0], 0), java.lang.Object(IntList(i466[0], o4023[0])), i164[0], i463[0])), ≥)∧0 ≥ 0∧0 ≥ 0∧0 ≥ 0∧0 ≥ 0∧[(-1)bso_23] ≥ 0)







To summarize, we get the following constraints P for the following pairs.
  • COND_LOAD29581(TRUE, java.lang.Object(IntList(i467[3], java.lang.Object(IntList(o4048Field0[3], o4048Field1[3])))), i164[3], i463[3]) → LOAD2958(java.lang.Object(IntList(o4048Field0[3], o4048Field1[3])), i164[3], *(i463[3], i164[3]))
    • (0 ≥ 0 ⇒ (UIncreasing(LOAD2958(java.lang.Object(IntList(o4048Field0[3], o4048Field1[3])), i164[3], *(i463[3], i164[3]))), ≥)∧[1] ≥ 0∧0 ≥ 0∧0 ≥ 0∧0 ≥ 0∧[5 + (-1)bso_20] ≥ 0∧[1] ≥ 0)
    • (0 ≥ 0 ⇒ (UIncreasing(LOAD2958(java.lang.Object(IntList(o4048Field0[3], o4048Field1[3])), i164[3], *(i463[3], i164[3]))), ≥)∧[1] ≥ 0∧0 ≥ 0∧0 ≥ 0∧0 ≥ 0∧0 ≥ 0∧[13 + (-1)bso_20] ≥ 0∧[1] ≥ 0)

  • LOAD2958(java.lang.Object(IntList(i467[2], java.lang.Object(IntList(o4048Field0[2], o4048Field1[2])))), i164[2], i463[2]) → COND_LOAD29581(<=(i467[2], 0), java.lang.Object(IntList(i467[2], java.lang.Object(IntList(o4048Field0[2], o4048Field1[2])))), i164[2], i463[2])
    • (0 ≥ 0 ⇒ (UIncreasing(COND_LOAD29581(<=(i467[2], 0), java.lang.Object(IntList(i467[2], java.lang.Object(IntList(o4048Field0[2], o4048Field1[2])))), i164[2], i463[2])), ≥)∧0 ≥ 0∧0 ≥ 0∧0 ≥ 0∧0 ≥ 0∧[3 + (-1)bso_21] ≥ 0∧[1] ≥ 0)

  • COND_LOAD2958(TRUE, java.lang.Object(IntList(i466[1], o4023[1])), i164[1], i463[1]) → LOAD2958(java.lang.Object(IntList(-(i466[1], 1), o4023[1])), i164[1], +(i463[1], 1))
    • (0 ≥ 0 ⇒ (UIncreasing(LOAD2958(java.lang.Object(IntList(-(i466[1], 1), o4023[1])), i164[1], +(i463[1], 1))), ≥)∧[1] ≥ 0∧0 ≥ 0∧0 ≥ 0∧0 ≥ 0∧[(-1)bso_22] ≥ 0)
    • (0 ≥ 0 ⇒ (UIncreasing(LOAD2958(java.lang.Object(IntList(-(i466[1], 1), o4023[1])), i164[1], +(i463[1], 1))), ≥)∧[1] ≥ 0∧0 ≥ 0∧0 ≥ 0∧0 ≥ 0∧0 ≥ 0∧[(-1)bso_22] ≥ 0)

  • LOAD2958(java.lang.Object(IntList(i466[0], o4023[0])), i164[0], i463[0]) → COND_LOAD2958(>(i466[0], 0), java.lang.Object(IntList(i466[0], o4023[0])), i164[0], i463[0])
    • (0 ≥ 0 ⇒ (UIncreasing(COND_LOAD2958(>(i466[0], 0), java.lang.Object(IntList(i466[0], o4023[0])), i164[0], i463[0])), ≥)∧0 ≥ 0∧0 ≥ 0∧0 ≥ 0∧0 ≥ 0∧[(-1)bso_23] ≥ 0)




The constraints for P> respective Pbound are constructed from P where we just replace every occurence of "t ≥ s" in P by "t > s" respective "t ≥ c". Here c stands for the fresh constant used for Pbound.
Using the following integer polynomial ordering the resulting constraints can be solved
Polynomial interpretation over integers with natural coefficients for all symbols [NONINF][POLO]:

POL(TRUE) = 0   
POL(FALSE) = 0   
POL(COND_LOAD29581(x1, x2, x3, x4)) = [2] + x4 + [2]x3 + x2   
POL(java.lang.Object(x1)) = [1] + [2]x1   
POL(IntList(x1, x2)) = [2]x2   
POL(LOAD2958(x1, x2, x3)) = x3 + [2]x2 + [2]x1   
POL(*(x1, x2)) = 0   
POL(<=(x1, x2)) = 0   
POL(0) = 0   
POL(COND_LOAD2958(x1, x2, x3, x4)) = x4 + [2]x3 + [2]x2   
POL(-(x1, x2)) = 0   
POL(1) = 0   
POL(+(x1, x2)) = 0   
POL(>(x1, x2)) = 0   

The following pairs are in P>:

COND_LOAD29581(TRUE, java.lang.Object(IntList(i467[3], java.lang.Object(IntList(o4048Field0[3], o4048Field1[3])))), i164[3], i463[3]) → LOAD2958(java.lang.Object(IntList(o4048Field0[3], o4048Field1[3])), i164[3], *(i463[3], i164[3]))
LOAD2958(java.lang.Object(IntList(i467[2], java.lang.Object(IntList(o4048Field0[2], o4048Field1[2])))), i164[2], i463[2]) → COND_LOAD29581(<=(i467[2], 0), java.lang.Object(IntList(i467[2], java.lang.Object(IntList(o4048Field0[2], o4048Field1[2])))), i164[2], i463[2])

The following pairs are in Pbound:

COND_LOAD29581(TRUE, java.lang.Object(IntList(i467[3], java.lang.Object(IntList(o4048Field0[3], o4048Field1[3])))), i164[3], i463[3]) → LOAD2958(java.lang.Object(IntList(o4048Field0[3], o4048Field1[3])), i164[3], *(i463[3], i164[3]))
LOAD2958(java.lang.Object(IntList(i467[2], java.lang.Object(IntList(o4048Field0[2], o4048Field1[2])))), i164[2], i463[2]) → COND_LOAD29581(<=(i467[2], 0), java.lang.Object(IntList(i467[2], java.lang.Object(IntList(o4048Field0[2], o4048Field1[2])))), i164[2], i463[2])
COND_LOAD2958(TRUE, java.lang.Object(IntList(i466[1], o4023[1])), i164[1], i463[1]) → LOAD2958(java.lang.Object(IntList(-(i466[1], 1), o4023[1])), i164[1], +(i463[1], 1))
LOAD2958(java.lang.Object(IntList(i466[0], o4023[0])), i164[0], i463[0]) → COND_LOAD2958(>(i466[0], 0), java.lang.Object(IntList(i466[0], o4023[0])), i164[0], i463[0])

The following pairs are in P:

COND_LOAD2958(TRUE, java.lang.Object(IntList(i466[1], o4023[1])), i164[1], i463[1]) → LOAD2958(java.lang.Object(IntList(-(i466[1], 1), o4023[1])), i164[1], +(i463[1], 1))
LOAD2958(java.lang.Object(IntList(i466[0], o4023[0])), i164[0], i463[0]) → COND_LOAD2958(>(i466[0], 0), java.lang.Object(IntList(i466[0], o4023[0])), i164[0], i463[0])

There are no usable rules.

(18) Complex Obligation (AND)

(19) Obligation:

IDP problem:
The following function symbols are pre-defined:
!=~Neq: (Integer, Integer) -> Boolean
*~Mul: (Integer, Integer) -> Integer
>=~Ge: (Integer, Integer) -> Boolean
-1~UnaryMinus: (Integer) -> Integer
|~Bwor: (Integer, Integer) -> Integer
/~Div: (Integer, Integer) -> Integer
=~Eq: (Integer, Integer) -> Boolean
~Bwxor: (Integer, Integer) -> Integer
||~Lor: (Boolean, Boolean) -> Boolean
!~Lnot: (Boolean) -> Boolean
<~Lt: (Integer, Integer) -> Boolean
-~Sub: (Integer, Integer) -> Integer
<=~Le: (Integer, Integer) -> Boolean
>~Gt: (Integer, Integer) -> Boolean
~~Bwnot: (Integer) -> Integer
%~Mod: (Integer, Integer) -> Integer
&~Bwand: (Integer, Integer) -> Integer
+~Add: (Integer, Integer) -> Integer
&&~Land: (Boolean, Boolean) -> Boolean


The following domains are used:

Integer


R is empty.

The integer pair graph contains the following rules and edges:
(1): COND_LOAD2958(TRUE, java.lang.Object(IntList(i466[1], o4023[1])), i164[1], i463[1]) → LOAD2958(java.lang.Object(IntList(i466[1] - 1, o4023[1])), i164[1], i463[1] + 1)
(0): LOAD2958(java.lang.Object(IntList(i466[0], o4023[0])), i164[0], i463[0]) → COND_LOAD2958(i466[0] > 0, java.lang.Object(IntList(i466[0], o4023[0])), i164[0], i463[0])

(1) -> (0), if ((i463[1] + 1* i463[0])∧((i466[1] - 1* i466[0])∧(o4023[1]* o4023[0]))∧(i164[1]* i164[0]))


(0) -> (1), if ((i466[0] > 0* TRUE)∧(i463[0]* i463[1])∧(i164[0]* i164[1])∧((i466[0]* i466[1])∧(o4023[0]* o4023[1])))



The set Q consists of the following terms:
Load2958(java.lang.Object(IntList(x0, x1)), x2, x3)
Cond_Load2958(TRUE, java.lang.Object(IntList(x0, x1)), x2, x3)
Cond_Load29581(TRUE, java.lang.Object(IntList(x0, java.lang.Object(IntList(x1, x2)))), x3, x4)
Cond_Load29582(TRUE, java.lang.Object(IntList(x0, NULL)), x1, x2)

(20) IDPNonInfProof (SOUND transformation)

The constraints were generated the following way:
The DP Problem is simplified using the Induction Calculus [NONINF] with the following steps:
Note that final constraints are written in bold face.


For Pair COND_LOAD2958(TRUE, java.lang.Object(IntList(i466[1], o4023[1])), i164[1], i463[1]) → LOAD2958(java.lang.Object(IntList(-(i466[1], 1), o4023[1])), i164[1], +(i463[1], 1)) the following chains were created:
  • We consider the chain LOAD2958(java.lang.Object(IntList(i466[0], o4023[0])), i164[0], i463[0]) → COND_LOAD2958(>(i466[0], 0), java.lang.Object(IntList(i466[0], o4023[0])), i164[0], i463[0]), COND_LOAD2958(TRUE, java.lang.Object(IntList(i466[1], o4023[1])), i164[1], i463[1]) → LOAD2958(java.lang.Object(IntList(-(i466[1], 1), o4023[1])), i164[1], +(i463[1], 1)), LOAD2958(java.lang.Object(IntList(i466[0], o4023[0])), i164[0], i463[0]) → COND_LOAD2958(>(i466[0], 0), java.lang.Object(IntList(i466[0], o4023[0])), i164[0], i463[0]) which results in the following constraint:

    (1)    (>(i466[0], 0)=TRUEi463[0]=i463[1]i164[0]=i164[1]i466[0]=i466[1]o4023[0]=o4023[1]+(i463[1], 1)=i463[0]1-(i466[1], 1)=i466[0]1o4023[1]=o4023[0]1i164[1]=i164[0]1COND_LOAD2958(TRUE, java.lang.Object(IntList(i466[1], o4023[1])), i164[1], i463[1])≥NonInfC∧COND_LOAD2958(TRUE, java.lang.Object(IntList(i466[1], o4023[1])), i164[1], i463[1])≥LOAD2958(java.lang.Object(IntList(-(i466[1], 1), o4023[1])), i164[1], +(i463[1], 1))∧(UIncreasing(LOAD2958(java.lang.Object(IntList(-(i466[1], 1), o4023[1])), i164[1], +(i463[1], 1))), ≥))



    We simplified constraint (1) using rules (III), (IV) which results in the following new constraint:

    (2)    (>(i466[0], 0)=TRUECOND_LOAD2958(TRUE, java.lang.Object(IntList(i466[0], o4023[0])), i164[0], i463[0])≥NonInfC∧COND_LOAD2958(TRUE, java.lang.Object(IntList(i466[0], o4023[0])), i164[0], i463[0])≥LOAD2958(java.lang.Object(IntList(-(i466[0], 1), o4023[0])), i164[0], +(i463[0], 1))∧(UIncreasing(LOAD2958(java.lang.Object(IntList(-(i466[1], 1), o4023[1])), i164[1], +(i463[1], 1))), ≥))



    We simplified constraint (2) using rule (POLY_CONSTRAINTS) which results in the following new constraint:

    (3)    (i466[0] + [-1] ≥ 0 ⇒ (UIncreasing(LOAD2958(java.lang.Object(IntList(-(i466[1], 1), o4023[1])), i164[1], +(i463[1], 1))), ≥)∧[(-1)bni_18 + (-1)Bound*bni_18] + [bni_18]i466[0] ≥ 0∧[1 + (-1)bso_19] ≥ 0)



    We simplified constraint (3) using rule (IDP_POLY_SIMPLIFY) which results in the following new constraint:

    (4)    (i466[0] + [-1] ≥ 0 ⇒ (UIncreasing(LOAD2958(java.lang.Object(IntList(-(i466[1], 1), o4023[1])), i164[1], +(i463[1], 1))), ≥)∧[(-1)bni_18 + (-1)Bound*bni_18] + [bni_18]i466[0] ≥ 0∧[1 + (-1)bso_19] ≥ 0)



    We simplified constraint (4) using rule (POLY_REMOVE_MIN_MAX) which results in the following new constraint:

    (5)    (i466[0] + [-1] ≥ 0 ⇒ (UIncreasing(LOAD2958(java.lang.Object(IntList(-(i466[1], 1), o4023[1])), i164[1], +(i463[1], 1))), ≥)∧[(-1)bni_18 + (-1)Bound*bni_18] + [bni_18]i466[0] ≥ 0∧[1 + (-1)bso_19] ≥ 0)



    We simplified constraint (5) using rule (IDP_UNRESTRICTED_VARS) which results in the following new constraint:

    (6)    (i466[0] + [-1] ≥ 0 ⇒ (UIncreasing(LOAD2958(java.lang.Object(IntList(-(i466[1], 1), o4023[1])), i164[1], +(i463[1], 1))), ≥)∧0 = 0∧0 = 0∧0 = 0∧[(-1)bni_18 + (-1)Bound*bni_18] + [bni_18]i466[0] ≥ 0∧0 = 0∧0 = 0∧0 = 0∧[1 + (-1)bso_19] ≥ 0)



    We simplified constraint (6) using rule (IDP_SMT_SPLIT) which results in the following new constraint:

    (7)    (i466[0] ≥ 0 ⇒ (UIncreasing(LOAD2958(java.lang.Object(IntList(-(i466[1], 1), o4023[1])), i164[1], +(i463[1], 1))), ≥)∧0 = 0∧0 = 0∧0 = 0∧[(-1)Bound*bni_18] + [bni_18]i466[0] ≥ 0∧0 = 0∧0 = 0∧0 = 0∧[1 + (-1)bso_19] ≥ 0)







For Pair LOAD2958(java.lang.Object(IntList(i466[0], o4023[0])), i164[0], i463[0]) → COND_LOAD2958(>(i466[0], 0), java.lang.Object(IntList(i466[0], o4023[0])), i164[0], i463[0]) the following chains were created:
  • We consider the chain LOAD2958(java.lang.Object(IntList(i466[0], o4023[0])), i164[0], i463[0]) → COND_LOAD2958(>(i466[0], 0), java.lang.Object(IntList(i466[0], o4023[0])), i164[0], i463[0]), COND_LOAD2958(TRUE, java.lang.Object(IntList(i466[1], o4023[1])), i164[1], i463[1]) → LOAD2958(java.lang.Object(IntList(-(i466[1], 1), o4023[1])), i164[1], +(i463[1], 1)) which results in the following constraint:

    (8)    (>(i466[0], 0)=TRUEi463[0]=i463[1]i164[0]=i164[1]i466[0]=i466[1]o4023[0]=o4023[1]LOAD2958(java.lang.Object(IntList(i466[0], o4023[0])), i164[0], i463[0])≥NonInfC∧LOAD2958(java.lang.Object(IntList(i466[0], o4023[0])), i164[0], i463[0])≥COND_LOAD2958(>(i466[0], 0), java.lang.Object(IntList(i466[0], o4023[0])), i164[0], i463[0])∧(UIncreasing(COND_LOAD2958(>(i466[0], 0), java.lang.Object(IntList(i466[0], o4023[0])), i164[0], i463[0])), ≥))



    We simplified constraint (8) using rule (IV) which results in the following new constraint:

    (9)    (>(i466[0], 0)=TRUELOAD2958(java.lang.Object(IntList(i466[0], o4023[0])), i164[0], i463[0])≥NonInfC∧LOAD2958(java.lang.Object(IntList(i466[0], o4023[0])), i164[0], i463[0])≥COND_LOAD2958(>(i466[0], 0), java.lang.Object(IntList(i466[0], o4023[0])), i164[0], i463[0])∧(UIncreasing(COND_LOAD2958(>(i466[0], 0), java.lang.Object(IntList(i466[0], o4023[0])), i164[0], i463[0])), ≥))



    We simplified constraint (9) using rule (POLY_CONSTRAINTS) which results in the following new constraint:

    (10)    (i466[0] + [-1] ≥ 0 ⇒ (UIncreasing(COND_LOAD2958(>(i466[0], 0), java.lang.Object(IntList(i466[0], o4023[0])), i164[0], i463[0])), ≥)∧[(-1)bni_20 + (-1)Bound*bni_20] + [bni_20]i466[0] ≥ 0∧[(-1)bso_21] ≥ 0)



    We simplified constraint (10) using rule (IDP_POLY_SIMPLIFY) which results in the following new constraint:

    (11)    (i466[0] + [-1] ≥ 0 ⇒ (UIncreasing(COND_LOAD2958(>(i466[0], 0), java.lang.Object(IntList(i466[0], o4023[0])), i164[0], i463[0])), ≥)∧[(-1)bni_20 + (-1)Bound*bni_20] + [bni_20]i466[0] ≥ 0∧[(-1)bso_21] ≥ 0)



    We simplified constraint (11) using rule (POLY_REMOVE_MIN_MAX) which results in the following new constraint:

    (12)    (i466[0] + [-1] ≥ 0 ⇒ (UIncreasing(COND_LOAD2958(>(i466[0], 0), java.lang.Object(IntList(i466[0], o4023[0])), i164[0], i463[0])), ≥)∧[(-1)bni_20 + (-1)Bound*bni_20] + [bni_20]i466[0] ≥ 0∧[(-1)bso_21] ≥ 0)



    We simplified constraint (12) using rule (IDP_UNRESTRICTED_VARS) which results in the following new constraint:

    (13)    (i466[0] + [-1] ≥ 0 ⇒ (UIncreasing(COND_LOAD2958(>(i466[0], 0), java.lang.Object(IntList(i466[0], o4023[0])), i164[0], i463[0])), ≥)∧0 = 0∧0 = 0∧0 = 0∧[(-1)bni_20 + (-1)Bound*bni_20] + [bni_20]i466[0] ≥ 0∧0 = 0∧0 = 0∧0 = 0∧[(-1)bso_21] ≥ 0)



    We simplified constraint (13) using rule (IDP_SMT_SPLIT) which results in the following new constraint:

    (14)    (i466[0] ≥ 0 ⇒ (UIncreasing(COND_LOAD2958(>(i466[0], 0), java.lang.Object(IntList(i466[0], o4023[0])), i164[0], i463[0])), ≥)∧0 = 0∧0 = 0∧0 = 0∧[(-1)Bound*bni_20] + [bni_20]i466[0] ≥ 0∧0 = 0∧0 = 0∧0 = 0∧[(-1)bso_21] ≥ 0)







To summarize, we get the following constraints P for the following pairs.
  • COND_LOAD2958(TRUE, java.lang.Object(IntList(i466[1], o4023[1])), i164[1], i463[1]) → LOAD2958(java.lang.Object(IntList(-(i466[1], 1), o4023[1])), i164[1], +(i463[1], 1))
    • (i466[0] ≥ 0 ⇒ (UIncreasing(LOAD2958(java.lang.Object(IntList(-(i466[1], 1), o4023[1])), i164[1], +(i463[1], 1))), ≥)∧0 = 0∧0 = 0∧0 = 0∧[(-1)Bound*bni_18] + [bni_18]i466[0] ≥ 0∧0 = 0∧0 = 0∧0 = 0∧[1 + (-1)bso_19] ≥ 0)

  • LOAD2958(java.lang.Object(IntList(i466[0], o4023[0])), i164[0], i463[0]) → COND_LOAD2958(>(i466[0], 0), java.lang.Object(IntList(i466[0], o4023[0])), i164[0], i463[0])
    • (i466[0] ≥ 0 ⇒ (UIncreasing(COND_LOAD2958(>(i466[0], 0), java.lang.Object(IntList(i466[0], o4023[0])), i164[0], i463[0])), ≥)∧0 = 0∧0 = 0∧0 = 0∧[(-1)Bound*bni_20] + [bni_20]i466[0] ≥ 0∧0 = 0∧0 = 0∧0 = 0∧[(-1)bso_21] ≥ 0)




The constraints for P> respective Pbound are constructed from P where we just replace every occurence of "t ≥ s" in P by "t > s" respective "t ≥ c". Here c stands for the fresh constant used for Pbound.
Using the following integer polynomial ordering the resulting constraints can be solved
Polynomial interpretation over integers[POLO]:

POL(TRUE) = 0   
POL(FALSE) = 0   
POL(COND_LOAD2958(x1, x2, x3, x4)) = [-1] + [-1]x2   
POL(java.lang.Object(x1)) = [-1] + [-1]x1   
POL(IntList(x1, x2)) = [-1] + x1   
POL(LOAD2958(x1, x2, x3)) = [-1] + [-1]x1   
POL(-(x1, x2)) = x1 + [-1]x2   
POL(1) = [1]   
POL(+(x1, x2)) = x1 + x2   
POL(>(x1, x2)) = 0   
POL(0) = 0   

The following pairs are in P>:

COND_LOAD2958(TRUE, java.lang.Object(IntList(i466[1], o4023[1])), i164[1], i463[1]) → LOAD2958(java.lang.Object(IntList(-(i466[1], 1), o4023[1])), i164[1], +(i463[1], 1))

The following pairs are in Pbound:

COND_LOAD2958(TRUE, java.lang.Object(IntList(i466[1], o4023[1])), i164[1], i463[1]) → LOAD2958(java.lang.Object(IntList(-(i466[1], 1), o4023[1])), i164[1], +(i463[1], 1))
LOAD2958(java.lang.Object(IntList(i466[0], o4023[0])), i164[0], i463[0]) → COND_LOAD2958(>(i466[0], 0), java.lang.Object(IntList(i466[0], o4023[0])), i164[0], i463[0])

The following pairs are in P:

LOAD2958(java.lang.Object(IntList(i466[0], o4023[0])), i164[0], i463[0]) → COND_LOAD2958(>(i466[0], 0), java.lang.Object(IntList(i466[0], o4023[0])), i164[0], i463[0])

There are no usable rules.

(21) Complex Obligation (AND)

(22) Obligation:

IDP problem:
The following function symbols are pre-defined:
!=~Neq: (Integer, Integer) -> Boolean
*~Mul: (Integer, Integer) -> Integer
>=~Ge: (Integer, Integer) -> Boolean
-1~UnaryMinus: (Integer) -> Integer
|~Bwor: (Integer, Integer) -> Integer
/~Div: (Integer, Integer) -> Integer
=~Eq: (Integer, Integer) -> Boolean
~Bwxor: (Integer, Integer) -> Integer
||~Lor: (Boolean, Boolean) -> Boolean
!~Lnot: (Boolean) -> Boolean
<~Lt: (Integer, Integer) -> Boolean
-~Sub: (Integer, Integer) -> Integer
<=~Le: (Integer, Integer) -> Boolean
>~Gt: (Integer, Integer) -> Boolean
~~Bwnot: (Integer) -> Integer
%~Mod: (Integer, Integer) -> Integer
&~Bwand: (Integer, Integer) -> Integer
+~Add: (Integer, Integer) -> Integer
&&~Land: (Boolean, Boolean) -> Boolean


The following domains are used:

Integer


R is empty.

The integer pair graph contains the following rules and edges:
(0): LOAD2958(java.lang.Object(IntList(i466[0], o4023[0])), i164[0], i463[0]) → COND_LOAD2958(i466[0] > 0, java.lang.Object(IntList(i466[0], o4023[0])), i164[0], i463[0])


The set Q consists of the following terms:
Load2958(java.lang.Object(IntList(x0, x1)), x2, x3)
Cond_Load2958(TRUE, java.lang.Object(IntList(x0, x1)), x2, x3)
Cond_Load29581(TRUE, java.lang.Object(IntList(x0, java.lang.Object(IntList(x1, x2)))), x3, x4)
Cond_Load29582(TRUE, java.lang.Object(IntList(x0, NULL)), x1, x2)

(23) IDependencyGraphProof (EQUIVALENT transformation)

The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 0 SCCs with 1 less node.

(24) TRUE

(25) Obligation:

IDP problem:
The following function symbols are pre-defined:
!=~Neq: (Integer, Integer) -> Boolean
*~Mul: (Integer, Integer) -> Integer
>=~Ge: (Integer, Integer) -> Boolean
-1~UnaryMinus: (Integer) -> Integer
|~Bwor: (Integer, Integer) -> Integer
/~Div: (Integer, Integer) -> Integer
=~Eq: (Integer, Integer) -> Boolean
~Bwxor: (Integer, Integer) -> Integer
||~Lor: (Boolean, Boolean) -> Boolean
!~Lnot: (Boolean) -> Boolean
<~Lt: (Integer, Integer) -> Boolean
-~Sub: (Integer, Integer) -> Integer
<=~Le: (Integer, Integer) -> Boolean
>~Gt: (Integer, Integer) -> Boolean
~~Bwnot: (Integer) -> Integer
%~Mod: (Integer, Integer) -> Integer
&~Bwand: (Integer, Integer) -> Integer
+~Add: (Integer, Integer) -> Integer
&&~Land: (Boolean, Boolean) -> Boolean


The following domains are used:
none


R is empty.

The integer pair graph is empty.

The set Q consists of the following terms:
Load2958(java.lang.Object(IntList(x0, x1)), x2, x3)
Cond_Load2958(TRUE, java.lang.Object(IntList(x0, x1)), x2, x3)
Cond_Load29581(TRUE, java.lang.Object(IntList(x0, java.lang.Object(IntList(x1, x2)))), x3, x4)
Cond_Load29582(TRUE, java.lang.Object(IntList(x0, NULL)), x1, x2)

(26) IDependencyGraphProof (EQUIVALENT transformation)

The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 0 SCCs.

(27) TRUE

(28) Obligation:

IDP problem:
The following function symbols are pre-defined:
!=~Neq: (Integer, Integer) -> Boolean
*~Mul: (Integer, Integer) -> Integer
>=~Ge: (Integer, Integer) -> Boolean
-1~UnaryMinus: (Integer) -> Integer
|~Bwor: (Integer, Integer) -> Integer
/~Div: (Integer, Integer) -> Integer
=~Eq: (Integer, Integer) -> Boolean
~Bwxor: (Integer, Integer) -> Integer
||~Lor: (Boolean, Boolean) -> Boolean
!~Lnot: (Boolean) -> Boolean
<~Lt: (Integer, Integer) -> Boolean
-~Sub: (Integer, Integer) -> Integer
<=~Le: (Integer, Integer) -> Boolean
>~Gt: (Integer, Integer) -> Boolean
~~Bwnot: (Integer) -> Integer
%~Mod: (Integer, Integer) -> Integer
&~Bwand: (Integer, Integer) -> Integer
+~Add: (Integer, Integer) -> Integer
&&~Land: (Boolean, Boolean) -> Boolean


The following domains are used:
none


R is empty.

The integer pair graph is empty.

The set Q consists of the following terms:
Load2958(java.lang.Object(IntList(x0, x1)), x2, x3)
Cond_Load2958(TRUE, java.lang.Object(IntList(x0, x1)), x2, x3)
Cond_Load29581(TRUE, java.lang.Object(IntList(x0, java.lang.Object(IntList(x1, x2)))), x3, x4)
Cond_Load29582(TRUE, java.lang.Object(IntList(x0, NULL)), x1, x2)

(29) IDependencyGraphProof (EQUIVALENT transformation)

The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 0 SCCs.

(30) TRUE

(31) Obligation:

IDP problem:
The following function symbols are pre-defined:
!=~Neq: (Integer, Integer) -> Boolean
*~Mul: (Integer, Integer) -> Integer
>=~Ge: (Integer, Integer) -> Boolean
-1~UnaryMinus: (Integer) -> Integer
|~Bwor: (Integer, Integer) -> Integer
/~Div: (Integer, Integer) -> Integer
=~Eq: (Integer, Integer) -> Boolean
~Bwxor: (Integer, Integer) -> Integer
||~Lor: (Boolean, Boolean) -> Boolean
!~Lnot: (Boolean) -> Boolean
<~Lt: (Integer, Integer) -> Boolean
-~Sub: (Integer, Integer) -> Integer
<=~Le: (Integer, Integer) -> Boolean
>~Gt: (Integer, Integer) -> Boolean
~~Bwnot: (Integer) -> Integer
%~Mod: (Integer, Integer) -> Integer
&~Bwand: (Integer, Integer) -> Integer
+~Add: (Integer, Integer) -> Integer
&&~Land: (Boolean, Boolean) -> Boolean


The following domains are used:
none


R is empty.

The integer pair graph is empty.

The set Q consists of the following terms:
Load2958(java.lang.Object(IntList(x0, x1)), x2, x3)
Cond_Load2958(TRUE, java.lang.Object(IntList(x0, x1)), x2, x3)
Cond_Load29581(TRUE, java.lang.Object(IntList(x0, java.lang.Object(IntList(x1, x2)))), x3, x4)
Cond_Load29582(TRUE, java.lang.Object(IntList(x0, NULL)), x1, x2)

(32) IDependencyGraphProof (EQUIVALENT transformation)

The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 0 SCCs.

(33) TRUE

(34) Obligation:

ITRS problem:

The following function symbols are pre-defined:
!=~Neq: (Integer, Integer) -> Boolean
*~Mul: (Integer, Integer) -> Integer
>=~Ge: (Integer, Integer) -> Boolean
-1~UnaryMinus: (Integer) -> Integer
|~Bwor: (Integer, Integer) -> Integer
/~Div: (Integer, Integer) -> Integer
=~Eq: (Integer, Integer) -> Boolean
~Bwxor: (Integer, Integer) -> Integer
||~Lor: (Boolean, Boolean) -> Boolean
!~Lnot: (Boolean) -> Boolean
<~Lt: (Integer, Integer) -> Boolean
-~Sub: (Integer, Integer) -> Integer
<=~Le: (Integer, Integer) -> Boolean
>~Gt: (Integer, Integer) -> Boolean
~~Bwnot: (Integer) -> Integer
%~Mod: (Integer, Integer) -> Integer
&~Bwand: (Integer, Integer) -> Integer
+~Add: (Integer, Integer) -> Integer
&&~Land: (Boolean, Boolean) -> Boolean

The TRS R consists of the following rules:
Load1720(java.lang.Object(ARRAY(i4, a3200data)), i78, i83) → Load1720ARR1(java.lang.Object(ARRAY(i4, a3200data)), i78, i83, java.lang.Object(java.lang.String(i141)))
Load1720ARR1(java.lang.Object(ARRAY(i4, a3200data)), i78, i83, java.lang.Object(java.lang.String(i141))) → Cond_Load1720ARR1(i78 > 0 && i78 < i4 && i83 > 0 && i78 + 1 > 0, java.lang.Object(ARRAY(i4, a3200data)), i78, i83, java.lang.Object(java.lang.String(i141)))
Cond_Load1720ARR1(TRUE, java.lang.Object(ARRAY(i4, a3200data)), i78, i83, java.lang.Object(java.lang.String(i141))) → Load1720(java.lang.Object(ARRAY(i4, a3200data)), i78 + 1, i83 + -1)
The set Q consists of the following terms:
Load1720(java.lang.Object(ARRAY(x0, x1)), x2, x3)
Load1720ARR1(java.lang.Object(ARRAY(x0, x1)), x2, x3, java.lang.Object(java.lang.String(x4)))
Cond_Load1720ARR1(TRUE, java.lang.Object(ARRAY(x0, x1)), x2, x3, java.lang.Object(java.lang.String(x4)))

(35) ITRSFilterProcessorProof (SOUND transformation)

We filter according the heuristic IdpCand1ShapeHeuristic
We removed arguments according to the following replacements:

Load1720ARR1(x1, x2, x3, x4) → Load1720ARR1(x1, x2, x3)
java.lang.String(x1) → java.lang.String
Cond_Load1720ARR1(x1, x2, x3, x4, x5) → Cond_Load1720ARR1(x1, x2, x3, x4)

(36) Obligation:

ITRS problem:

The following function symbols are pre-defined:
!=~Neq: (Integer, Integer) -> Boolean
*~Mul: (Integer, Integer) -> Integer
>=~Ge: (Integer, Integer) -> Boolean
-1~UnaryMinus: (Integer) -> Integer
|~Bwor: (Integer, Integer) -> Integer
/~Div: (Integer, Integer) -> Integer
=~Eq: (Integer, Integer) -> Boolean
~Bwxor: (Integer, Integer) -> Integer
||~Lor: (Boolean, Boolean) -> Boolean
!~Lnot: (Boolean) -> Boolean
<~Lt: (Integer, Integer) -> Boolean
-~Sub: (Integer, Integer) -> Integer
<=~Le: (Integer, Integer) -> Boolean
>~Gt: (Integer, Integer) -> Boolean
~~Bwnot: (Integer) -> Integer
%~Mod: (Integer, Integer) -> Integer
&~Bwand: (Integer, Integer) -> Integer
+~Add: (Integer, Integer) -> Integer
&&~Land: (Boolean, Boolean) -> Boolean

The TRS R consists of the following rules:
Load1720(java.lang.Object(ARRAY(i4, a3200data)), i78, i83) → Load1720ARR1(java.lang.Object(ARRAY(i4, a3200data)), i78, i83)
Load1720ARR1(java.lang.Object(ARRAY(i4, a3200data)), i78, i83) → Cond_Load1720ARR1(i78 > 0 && i78 < i4 && i83 > 0 && i78 + 1 > 0, java.lang.Object(ARRAY(i4, a3200data)), i78, i83)
Cond_Load1720ARR1(TRUE, java.lang.Object(ARRAY(i4, a3200data)), i78, i83) → Load1720(java.lang.Object(ARRAY(i4, a3200data)), i78 + 1, i83 + -1)
The set Q consists of the following terms:
Load1720(java.lang.Object(ARRAY(x0, x1)), x2, x3)
Load1720ARR1(java.lang.Object(ARRAY(x0, x1)), x2, x3)
Cond_Load1720ARR1(TRUE, java.lang.Object(ARRAY(x0, x1)), x2, x3)

(37) ITRStoIDPProof (EQUIVALENT transformation)

Added dependency pairs

(38) Obligation:

IDP problem:
The following function symbols are pre-defined:
!=~Neq: (Integer, Integer) -> Boolean
*~Mul: (Integer, Integer) -> Integer
>=~Ge: (Integer, Integer) -> Boolean
-1~UnaryMinus: (Integer) -> Integer
|~Bwor: (Integer, Integer) -> Integer
/~Div: (Integer, Integer) -> Integer
=~Eq: (Integer, Integer) -> Boolean
~Bwxor: (Integer, Integer) -> Integer
||~Lor: (Boolean, Boolean) -> Boolean
!~Lnot: (Boolean) -> Boolean
<~Lt: (Integer, Integer) -> Boolean
-~Sub: (Integer, Integer) -> Integer
<=~Le: (Integer, Integer) -> Boolean
>~Gt: (Integer, Integer) -> Boolean
~~Bwnot: (Integer) -> Integer
%~Mod: (Integer, Integer) -> Integer
&~Bwand: (Integer, Integer) -> Integer
+~Add: (Integer, Integer) -> Integer
&&~Land: (Boolean, Boolean) -> Boolean


The following domains are used:

Boolean, Integer


The ITRS R consists of the following rules:
Load1720(java.lang.Object(ARRAY(i4, a3200data)), i78, i83) → Load1720ARR1(java.lang.Object(ARRAY(i4, a3200data)), i78, i83)
Load1720ARR1(java.lang.Object(ARRAY(i4, a3200data)), i78, i83) → Cond_Load1720ARR1(i78 > 0 && i78 < i4 && i83 > 0 && i78 + 1 > 0, java.lang.Object(ARRAY(i4, a3200data)), i78, i83)
Cond_Load1720ARR1(TRUE, java.lang.Object(ARRAY(i4, a3200data)), i78, i83) → Load1720(java.lang.Object(ARRAY(i4, a3200data)), i78 + 1, i83 + -1)

The integer pair graph contains the following rules and edges:
(0): LOAD1720(java.lang.Object(ARRAY(i4[0], a3200data[0])), i78[0], i83[0]) → LOAD1720ARR1(java.lang.Object(ARRAY(i4[0], a3200data[0])), i78[0], i83[0])
(1): LOAD1720ARR1(java.lang.Object(ARRAY(i4[1], a3200data[1])), i78[1], i83[1]) → COND_LOAD1720ARR1(i78[1] > 0 && i78[1] < i4[1] && i83[1] > 0 && i78[1] + 1 > 0, java.lang.Object(ARRAY(i4[1], a3200data[1])), i78[1], i83[1])
(2): COND_LOAD1720ARR1(TRUE, java.lang.Object(ARRAY(i4[2], a3200data[2])), i78[2], i83[2]) → LOAD1720(java.lang.Object(ARRAY(i4[2], a3200data[2])), i78[2] + 1, i83[2] + -1)

(0) -> (1), if ((i83[0]* i83[1])∧(java.lang.Object(ARRAY(i4[0], a3200data[0])) →* java.lang.Object(ARRAY(i4[1], a3200data[1])))∧(i78[0]* i78[1]))


(1) -> (2), if ((i78[1]* i78[2])∧(java.lang.Object(ARRAY(i4[1], a3200data[1])) →* java.lang.Object(ARRAY(i4[2], a3200data[2])))∧(i83[1]* i83[2])∧(i78[1] > 0 && i78[1] < i4[1] && i83[1] > 0 && i78[1] + 1 > 0* TRUE))


(2) -> (0), if ((i83[2] + -1* i83[0])∧(i78[2] + 1* i78[0])∧(java.lang.Object(ARRAY(i4[2], a3200data[2])) →* java.lang.Object(ARRAY(i4[0], a3200data[0]))))



The set Q consists of the following terms:
Load1720(java.lang.Object(ARRAY(x0, x1)), x2, x3)
Load1720ARR1(java.lang.Object(ARRAY(x0, x1)), x2, x3)
Cond_Load1720ARR1(TRUE, java.lang.Object(ARRAY(x0, x1)), x2, x3)

(39) UsableRulesProof (EQUIVALENT transformation)

As all Q-normal forms are R-normal forms we are in the innermost case. Hence, by the usable rules processor [LPAR04] we can delete all non-usable rules [FROCOS05] from R.

(40) Obligation:

IDP problem:
The following function symbols are pre-defined:
!=~Neq: (Integer, Integer) -> Boolean
*~Mul: (Integer, Integer) -> Integer
>=~Ge: (Integer, Integer) -> Boolean
-1~UnaryMinus: (Integer) -> Integer
|~Bwor: (Integer, Integer) -> Integer
/~Div: (Integer, Integer) -> Integer
=~Eq: (Integer, Integer) -> Boolean
~Bwxor: (Integer, Integer) -> Integer
||~Lor: (Boolean, Boolean) -> Boolean
!~Lnot: (Boolean) -> Boolean
<~Lt: (Integer, Integer) -> Boolean
-~Sub: (Integer, Integer) -> Integer
<=~Le: (Integer, Integer) -> Boolean
>~Gt: (Integer, Integer) -> Boolean
~~Bwnot: (Integer) -> Integer
%~Mod: (Integer, Integer) -> Integer
&~Bwand: (Integer, Integer) -> Integer
+~Add: (Integer, Integer) -> Integer
&&~Land: (Boolean, Boolean) -> Boolean


The following domains are used:

Boolean, Integer


R is empty.

The integer pair graph contains the following rules and edges:
(0): LOAD1720(java.lang.Object(ARRAY(i4[0], a3200data[0])), i78[0], i83[0]) → LOAD1720ARR1(java.lang.Object(ARRAY(i4[0], a3200data[0])), i78[0], i83[0])
(1): LOAD1720ARR1(java.lang.Object(ARRAY(i4[1], a3200data[1])), i78[1], i83[1]) → COND_LOAD1720ARR1(i78[1] > 0 && i78[1] < i4[1] && i83[1] > 0 && i78[1] + 1 > 0, java.lang.Object(ARRAY(i4[1], a3200data[1])), i78[1], i83[1])
(2): COND_LOAD1720ARR1(TRUE, java.lang.Object(ARRAY(i4[2], a3200data[2])), i78[2], i83[2]) → LOAD1720(java.lang.Object(ARRAY(i4[2], a3200data[2])), i78[2] + 1, i83[2] + -1)

(0) -> (1), if ((i83[0]* i83[1])∧(java.lang.Object(ARRAY(i4[0], a3200data[0])) →* java.lang.Object(ARRAY(i4[1], a3200data[1])))∧(i78[0]* i78[1]))


(1) -> (2), if ((i78[1]* i78[2])∧(java.lang.Object(ARRAY(i4[1], a3200data[1])) →* java.lang.Object(ARRAY(i4[2], a3200data[2])))∧(i83[1]* i83[2])∧(i78[1] > 0 && i78[1] < i4[1] && i83[1] > 0 && i78[1] + 1 > 0* TRUE))


(2) -> (0), if ((i83[2] + -1* i83[0])∧(i78[2] + 1* i78[0])∧(java.lang.Object(ARRAY(i4[2], a3200data[2])) →* java.lang.Object(ARRAY(i4[0], a3200data[0]))))



The set Q consists of the following terms:
Load1720(java.lang.Object(ARRAY(x0, x1)), x2, x3)
Load1720ARR1(java.lang.Object(ARRAY(x0, x1)), x2, x3)
Cond_Load1720ARR1(TRUE, java.lang.Object(ARRAY(x0, x1)), x2, x3)

(41) ItpfGraphProof (EQUIVALENT transformation)

Applied rule ItpfICap [ICap]

(42) Obligation:

IDP problem:
The following function symbols are pre-defined:
!=~Neq: (Integer, Integer) -> Boolean
*~Mul: (Integer, Integer) -> Integer
>=~Ge: (Integer, Integer) -> Boolean
-1~UnaryMinus: (Integer) -> Integer
|~Bwor: (Integer, Integer) -> Integer
/~Div: (Integer, Integer) -> Integer
=~Eq: (Integer, Integer) -> Boolean
~Bwxor: (Integer, Integer) -> Integer
||~Lor: (Boolean, Boolean) -> Boolean
!~Lnot: (Boolean) -> Boolean
<~Lt: (Integer, Integer) -> Boolean
-~Sub: (Integer, Integer) -> Integer
<=~Le: (Integer, Integer) -> Boolean
>~Gt: (Integer, Integer) -> Boolean
~~Bwnot: (Integer) -> Integer
%~Mod: (Integer, Integer) -> Integer
&~Bwand: (Integer, Integer) -> Integer
+~Add: (Integer, Integer) -> Integer
&&~Land: (Boolean, Boolean) -> Boolean


The following domains are used:

Boolean, Integer


R is empty.

The integer pair graph contains the following rules and edges:
(0): LOAD1720(java.lang.Object(ARRAY(i4[0], a3200data[0])), i78[0], i83[0]) → LOAD1720ARR1(java.lang.Object(ARRAY(i4[0], a3200data[0])), i78[0], i83[0])
(1): LOAD1720ARR1(java.lang.Object(ARRAY(i4[1], a3200data[1])), i78[1], i83[1]) → COND_LOAD1720ARR1(i78[1] > 0 && i78[1] < i4[1] && i83[1] > 0 && i78[1] + 1 > 0, java.lang.Object(ARRAY(i4[1], a3200data[1])), i78[1], i83[1])
(2): COND_LOAD1720ARR1(TRUE, java.lang.Object(ARRAY(i4[2], a3200data[2])), i78[2], i83[2]) → LOAD1720(java.lang.Object(ARRAY(i4[2], a3200data[2])), i78[2] + 1, i83[2] + -1)

(0) -> (1), if ((i83[0]* i83[1])∧((i4[0]* i4[1])∧(a3200data[0]* a3200data[1]))∧(i78[0]* i78[1]))


(1) -> (2), if ((i78[1]* i78[2])∧((i4[1]* i4[2])∧(a3200data[1]* a3200data[2]))∧(i83[1]* i83[2])∧(i78[1] > 0 && i78[1] < i4[1] && i83[1] > 0 && i78[1] + 1 > 0* TRUE))


(2) -> (0), if ((i83[2] + -1* i83[0])∧(i78[2] + 1* i78[0])∧((i4[2]* i4[0])∧(a3200data[2]* a3200data[0])))



The set Q consists of the following terms:
Load1720(java.lang.Object(ARRAY(x0, x1)), x2, x3)
Load1720ARR1(java.lang.Object(ARRAY(x0, x1)), x2, x3)
Cond_Load1720ARR1(TRUE, java.lang.Object(ARRAY(x0, x1)), x2, x3)

(43) IDPNonInfProof (SOUND transformation)

The constraints were generated the following way:
The DP Problem is simplified using the Induction Calculus [NONINF] with the following steps:
Note that final constraints are written in bold face.


For Pair LOAD1720(java.lang.Object(ARRAY(i4, a3200data)), i78, i83) → LOAD1720ARR1(java.lang.Object(ARRAY(i4, a3200data)), i78, i83) the following chains were created:
  • We consider the chain LOAD1720(java.lang.Object(ARRAY(i4[0], a3200data[0])), i78[0], i83[0]) → LOAD1720ARR1(java.lang.Object(ARRAY(i4[0], a3200data[0])), i78[0], i83[0]), LOAD1720ARR1(java.lang.Object(ARRAY(i4[1], a3200data[1])), i78[1], i83[1]) → COND_LOAD1720ARR1(&&(&&(&&(>(i78[1], 0), <(i78[1], i4[1])), >(i83[1], 0)), >(+(i78[1], 1), 0)), java.lang.Object(ARRAY(i4[1], a3200data[1])), i78[1], i83[1]) which results in the following constraint:

    (1)    (i83[0]=i83[1]i4[0]=i4[1]a3200data[0]=a3200data[1]i78[0]=i78[1]LOAD1720(java.lang.Object(ARRAY(i4[0], a3200data[0])), i78[0], i83[0])≥NonInfC∧LOAD1720(java.lang.Object(ARRAY(i4[0], a3200data[0])), i78[0], i83[0])≥LOAD1720ARR1(java.lang.Object(ARRAY(i4[0], a3200data[0])), i78[0], i83[0])∧(UIncreasing(LOAD1720ARR1(java.lang.Object(ARRAY(i4[0], a3200data[0])), i78[0], i83[0])), ≥))



    We simplified constraint (1) using rule (IV) which results in the following new constraint:

    (2)    (LOAD1720(java.lang.Object(ARRAY(i4[0], a3200data[0])), i78[0], i83[0])≥NonInfC∧LOAD1720(java.lang.Object(ARRAY(i4[0], a3200data[0])), i78[0], i83[0])≥LOAD1720ARR1(java.lang.Object(ARRAY(i4[0], a3200data[0])), i78[0], i83[0])∧(UIncreasing(LOAD1720ARR1(java.lang.Object(ARRAY(i4[0], a3200data[0])), i78[0], i83[0])), ≥))



    We simplified constraint (2) using rule (POLY_CONSTRAINTS) which results in the following new constraint:

    (3)    ((UIncreasing(LOAD1720ARR1(java.lang.Object(ARRAY(i4[0], a3200data[0])), i78[0], i83[0])), ≥)∧[(-1)bso_16] ≥ 0)



    We simplified constraint (3) using rule (IDP_POLY_SIMPLIFY) which results in the following new constraint:

    (4)    ((UIncreasing(LOAD1720ARR1(java.lang.Object(ARRAY(i4[0], a3200data[0])), i78[0], i83[0])), ≥)∧[(-1)bso_16] ≥ 0)



    We simplified constraint (4) using rule (POLY_REMOVE_MIN_MAX) which results in the following new constraint:

    (5)    ((UIncreasing(LOAD1720ARR1(java.lang.Object(ARRAY(i4[0], a3200data[0])), i78[0], i83[0])), ≥)∧[(-1)bso_16] ≥ 0)



    We simplified constraint (5) using rule (IDP_UNRESTRICTED_VARS) which results in the following new constraint:

    (6)    ((UIncreasing(LOAD1720ARR1(java.lang.Object(ARRAY(i4[0], a3200data[0])), i78[0], i83[0])), ≥)∧0 = 0∧0 = 0∧0 = 0∧0 = 0∧[(-1)bso_16] ≥ 0)







For Pair LOAD1720ARR1(java.lang.Object(ARRAY(i4, a3200data)), i78, i83) → COND_LOAD1720ARR1(&&(&&(&&(>(i78, 0), <(i78, i4)), >(i83, 0)), >(+(i78, 1), 0)), java.lang.Object(ARRAY(i4, a3200data)), i78, i83) the following chains were created:
  • We consider the chain LOAD1720ARR1(java.lang.Object(ARRAY(i4[1], a3200data[1])), i78[1], i83[1]) → COND_LOAD1720ARR1(&&(&&(&&(>(i78[1], 0), <(i78[1], i4[1])), >(i83[1], 0)), >(+(i78[1], 1), 0)), java.lang.Object(ARRAY(i4[1], a3200data[1])), i78[1], i83[1]), COND_LOAD1720ARR1(TRUE, java.lang.Object(ARRAY(i4[2], a3200data[2])), i78[2], i83[2]) → LOAD1720(java.lang.Object(ARRAY(i4[2], a3200data[2])), +(i78[2], 1), +(i83[2], -1)) which results in the following constraint:

    (7)    (i78[1]=i78[2]i4[1]=i4[2]a3200data[1]=a3200data[2]i83[1]=i83[2]&&(&&(&&(>(i78[1], 0), <(i78[1], i4[1])), >(i83[1], 0)), >(+(i78[1], 1), 0))=TRUELOAD1720ARR1(java.lang.Object(ARRAY(i4[1], a3200data[1])), i78[1], i83[1])≥NonInfC∧LOAD1720ARR1(java.lang.Object(ARRAY(i4[1], a3200data[1])), i78[1], i83[1])≥COND_LOAD1720ARR1(&&(&&(&&(>(i78[1], 0), <(i78[1], i4[1])), >(i83[1], 0)), >(+(i78[1], 1), 0)), java.lang.Object(ARRAY(i4[1], a3200data[1])), i78[1], i83[1])∧(UIncreasing(COND_LOAD1720ARR1(&&(&&(&&(>(i78[1], 0), <(i78[1], i4[1])), >(i83[1], 0)), >(+(i78[1], 1), 0)), java.lang.Object(ARRAY(i4[1], a3200data[1])), i78[1], i83[1])), ≥))



    We simplified constraint (7) using rules (IV), (IDP_BOOLEAN) which results in the following new constraint:

    (8)    (>(+(i78[1], 1), 0)=TRUE>(i83[1], 0)=TRUE>(i78[1], 0)=TRUE<(i78[1], i4[1])=TRUELOAD1720ARR1(java.lang.Object(ARRAY(i4[1], a3200data[1])), i78[1], i83[1])≥NonInfC∧LOAD1720ARR1(java.lang.Object(ARRAY(i4[1], a3200data[1])), i78[1], i83[1])≥COND_LOAD1720ARR1(&&(&&(&&(>(i78[1], 0), <(i78[1], i4[1])), >(i83[1], 0)), >(+(i78[1], 1), 0)), java.lang.Object(ARRAY(i4[1], a3200data[1])), i78[1], i83[1])∧(UIncreasing(COND_LOAD1720ARR1(&&(&&(&&(>(i78[1], 0), <(i78[1], i4[1])), >(i83[1], 0)), >(+(i78[1], 1), 0)), java.lang.Object(ARRAY(i4[1], a3200data[1])), i78[1], i83[1])), ≥))



    We simplified constraint (8) using rule (POLY_CONSTRAINTS) which results in the following new constraint:

    (9)    (i78[1] ≥ 0∧i83[1] + [-1] ≥ 0∧i78[1] + [-1] ≥ 0∧i4[1] + [-1] + [-1]i78[1] ≥ 0 ⇒ (UIncreasing(COND_LOAD1720ARR1(&&(&&(&&(>(i78[1], 0), <(i78[1], i4[1])), >(i83[1], 0)), >(+(i78[1], 1), 0)), java.lang.Object(ARRAY(i4[1], a3200data[1])), i78[1], i83[1])), ≥)∧[(2)bni_17 + (-1)Bound*bni_17] + [bni_17]i83[1] + [(-1)bni_17]i78[1] + [bni_17]i4[1] ≥ 0∧[(-1)bso_18] ≥ 0)



    We simplified constraint (9) using rule (IDP_POLY_SIMPLIFY) which results in the following new constraint:

    (10)    (i78[1] ≥ 0∧i83[1] + [-1] ≥ 0∧i78[1] + [-1] ≥ 0∧i4[1] + [-1] + [-1]i78[1] ≥ 0 ⇒ (UIncreasing(COND_LOAD1720ARR1(&&(&&(&&(>(i78[1], 0), <(i78[1], i4[1])), >(i83[1], 0)), >(+(i78[1], 1), 0)), java.lang.Object(ARRAY(i4[1], a3200data[1])), i78[1], i83[1])), ≥)∧[(2)bni_17 + (-1)Bound*bni_17] + [bni_17]i83[1] + [(-1)bni_17]i78[1] + [bni_17]i4[1] ≥ 0∧[(-1)bso_18] ≥ 0)



    We simplified constraint (10) using rule (POLY_REMOVE_MIN_MAX) which results in the following new constraint:

    (11)    (i78[1] ≥ 0∧i83[1] + [-1] ≥ 0∧i78[1] + [-1] ≥ 0∧i4[1] + [-1] + [-1]i78[1] ≥ 0 ⇒ (UIncreasing(COND_LOAD1720ARR1(&&(&&(&&(>(i78[1], 0), <(i78[1], i4[1])), >(i83[1], 0)), >(+(i78[1], 1), 0)), java.lang.Object(ARRAY(i4[1], a3200data[1])), i78[1], i83[1])), ≥)∧[(2)bni_17 + (-1)Bound*bni_17] + [bni_17]i83[1] + [(-1)bni_17]i78[1] + [bni_17]i4[1] ≥ 0∧[(-1)bso_18] ≥ 0)



    We simplified constraint (11) using rule (IDP_UNRESTRICTED_VARS) which results in the following new constraint:

    (12)    (i78[1] ≥ 0∧i83[1] + [-1] ≥ 0∧i78[1] + [-1] ≥ 0∧i4[1] + [-1] + [-1]i78[1] ≥ 0 ⇒ (UIncreasing(COND_LOAD1720ARR1(&&(&&(&&(>(i78[1], 0), <(i78[1], i4[1])), >(i83[1], 0)), >(+(i78[1], 1), 0)), java.lang.Object(ARRAY(i4[1], a3200data[1])), i78[1], i83[1])), ≥)∧0 = 0∧[(2)bni_17 + (-1)Bound*bni_17] + [bni_17]i83[1] + [(-1)bni_17]i78[1] + [bni_17]i4[1] ≥ 0∧0 = 0∧[(-1)bso_18] ≥ 0)



    We simplified constraint (12) using rule (IDP_SMT_SPLIT) which results in the following new constraint:

    (13)    ([1] + i78[1] ≥ 0∧i83[1] + [-1] ≥ 0∧i78[1] ≥ 0∧i4[1] + [-2] + [-1]i78[1] ≥ 0 ⇒ (UIncreasing(COND_LOAD1720ARR1(&&(&&(&&(>(i78[1], 0), <(i78[1], i4[1])), >(i83[1], 0)), >(+(i78[1], 1), 0)), java.lang.Object(ARRAY(i4[1], a3200data[1])), i78[1], i83[1])), ≥)∧0 = 0∧[bni_17 + (-1)Bound*bni_17] + [bni_17]i83[1] + [(-1)bni_17]i78[1] + [bni_17]i4[1] ≥ 0∧0 = 0∧[(-1)bso_18] ≥ 0)



    We simplified constraint (13) using rule (IDP_SMT_SPLIT) which results in the following new constraint:

    (14)    ([1] + i78[1] ≥ 0∧i83[1] ≥ 0∧i78[1] ≥ 0∧i4[1] + [-2] + [-1]i78[1] ≥ 0 ⇒ (UIncreasing(COND_LOAD1720ARR1(&&(&&(&&(>(i78[1], 0), <(i78[1], i4[1])), >(i83[1], 0)), >(+(i78[1], 1), 0)), java.lang.Object(ARRAY(i4[1], a3200data[1])), i78[1], i83[1])), ≥)∧0 = 0∧[(2)bni_17 + (-1)Bound*bni_17] + [bni_17]i83[1] + [(-1)bni_17]i78[1] + [bni_17]i4[1] ≥ 0∧0 = 0∧[(-1)bso_18] ≥ 0)



    We simplified constraint (14) using rule (IDP_SMT_SPLIT) which results in the following new constraint:

    (15)    ([1] + i78[1] ≥ 0∧i83[1] ≥ 0∧i78[1] ≥ 0∧i4[1] ≥ 0 ⇒ (UIncreasing(COND_LOAD1720ARR1(&&(&&(&&(>(i78[1], 0), <(i78[1], i4[1])), >(i83[1], 0)), >(+(i78[1], 1), 0)), java.lang.Object(ARRAY(i4[1], a3200data[1])), i78[1], i83[1])), ≥)∧0 = 0∧[(4)bni_17 + (-1)Bound*bni_17] + [bni_17]i83[1] + [bni_17]i4[1] ≥ 0∧0 = 0∧[(-1)bso_18] ≥ 0)







For Pair COND_LOAD1720ARR1(TRUE, java.lang.Object(ARRAY(i4, a3200data)), i78, i83) → LOAD1720(java.lang.Object(ARRAY(i4, a3200data)), +(i78, 1), +(i83, -1)) the following chains were created:
  • We consider the chain COND_LOAD1720ARR1(TRUE, java.lang.Object(ARRAY(i4[2], a3200data[2])), i78[2], i83[2]) → LOAD1720(java.lang.Object(ARRAY(i4[2], a3200data[2])), +(i78[2], 1), +(i83[2], -1)) which results in the following constraint:

    (16)    (COND_LOAD1720ARR1(TRUE, java.lang.Object(ARRAY(i4[2], a3200data[2])), i78[2], i83[2])≥NonInfC∧COND_LOAD1720ARR1(TRUE, java.lang.Object(ARRAY(i4[2], a3200data[2])), i78[2], i83[2])≥LOAD1720(java.lang.Object(ARRAY(i4[2], a3200data[2])), +(i78[2], 1), +(i83[2], -1))∧(UIncreasing(LOAD1720(java.lang.Object(ARRAY(i4[2], a3200data[2])), +(i78[2], 1), +(i83[2], -1))), ≥))



    We simplified constraint (16) using rule (POLY_CONSTRAINTS) which results in the following new constraint:

    (17)    ((UIncreasing(LOAD1720(java.lang.Object(ARRAY(i4[2], a3200data[2])), +(i78[2], 1), +(i83[2], -1))), ≥)∧[2 + (-1)bso_20] ≥ 0)



    We simplified constraint (17) using rule (IDP_POLY_SIMPLIFY) which results in the following new constraint:

    (18)    ((UIncreasing(LOAD1720(java.lang.Object(ARRAY(i4[2], a3200data[2])), +(i78[2], 1), +(i83[2], -1))), ≥)∧[2 + (-1)bso_20] ≥ 0)



    We simplified constraint (18) using rule (POLY_REMOVE_MIN_MAX) which results in the following new constraint:

    (19)    ((UIncreasing(LOAD1720(java.lang.Object(ARRAY(i4[2], a3200data[2])), +(i78[2], 1), +(i83[2], -1))), ≥)∧[2 + (-1)bso_20] ≥ 0)



    We simplified constraint (19) using rule (IDP_UNRESTRICTED_VARS) which results in the following new constraint:

    (20)    ((UIncreasing(LOAD1720(java.lang.Object(ARRAY(i4[2], a3200data[2])), +(i78[2], 1), +(i83[2], -1))), ≥)∧0 = 0∧0 = 0∧0 = 0∧0 = 0∧[2 + (-1)bso_20] ≥ 0)







To summarize, we get the following constraints P for the following pairs.
  • LOAD1720(java.lang.Object(ARRAY(i4, a3200data)), i78, i83) → LOAD1720ARR1(java.lang.Object(ARRAY(i4, a3200data)), i78, i83)
    • ((UIncreasing(LOAD1720ARR1(java.lang.Object(ARRAY(i4[0], a3200data[0])), i78[0], i83[0])), ≥)∧0 = 0∧0 = 0∧0 = 0∧0 = 0∧[(-1)bso_16] ≥ 0)

  • LOAD1720ARR1(java.lang.Object(ARRAY(i4, a3200data)), i78, i83) → COND_LOAD1720ARR1(&&(&&(&&(>(i78, 0), <(i78, i4)), >(i83, 0)), >(+(i78, 1), 0)), java.lang.Object(ARRAY(i4, a3200data)), i78, i83)
    • ([1] + i78[1] ≥ 0∧i83[1] ≥ 0∧i78[1] ≥ 0∧i4[1] ≥ 0 ⇒ (UIncreasing(COND_LOAD1720ARR1(&&(&&(&&(>(i78[1], 0), <(i78[1], i4[1])), >(i83[1], 0)), >(+(i78[1], 1), 0)), java.lang.Object(ARRAY(i4[1], a3200data[1])), i78[1], i83[1])), ≥)∧0 = 0∧[(4)bni_17 + (-1)Bound*bni_17] + [bni_17]i83[1] + [bni_17]i4[1] ≥ 0∧0 = 0∧[(-1)bso_18] ≥ 0)

  • COND_LOAD1720ARR1(TRUE, java.lang.Object(ARRAY(i4, a3200data)), i78, i83) → LOAD1720(java.lang.Object(ARRAY(i4, a3200data)), +(i78, 1), +(i83, -1))
    • ((UIncreasing(LOAD1720(java.lang.Object(ARRAY(i4[2], a3200data[2])), +(i78[2], 1), +(i83[2], -1))), ≥)∧0 = 0∧0 = 0∧0 = 0∧0 = 0∧[2 + (-1)bso_20] ≥ 0)




The constraints for P> respective Pbound are constructed from P where we just replace every occurence of "t ≥ s" in P by "t > s" respective "t ≥ c". Here c stands for the fresh constant used for Pbound.
Using the following integer polynomial ordering the resulting constraints can be solved
Polynomial interpretation over integers[POLO]:

POL(TRUE) = 0   
POL(FALSE) = 0   
POL(LOAD1720(x1, x2, x3)) = [1] + x3 + [-1]x2 + [-1]x1   
POL(java.lang.Object(x1)) = x1   
POL(ARRAY(x1, x2)) = [-1] + [-1]x1   
POL(LOAD1720ARR1(x1, x2, x3)) = [1] + x3 + [-1]x2 + [-1]x1   
POL(COND_LOAD1720ARR1(x1, x2, x3, x4)) = [1] + x4 + [-1]x3 + [-1]x2   
POL(&&(x1, x2)) = [-1]   
POL(>(x1, x2)) = [-1]   
POL(0) = 0   
POL(<(x1, x2)) = [-1]   
POL(+(x1, x2)) = x1 + x2   
POL(1) = [1]   
POL(-1) = [-1]   

The following pairs are in P>:

COND_LOAD1720ARR1(TRUE, java.lang.Object(ARRAY(i4[2], a3200data[2])), i78[2], i83[2]) → LOAD1720(java.lang.Object(ARRAY(i4[2], a3200data[2])), +(i78[2], 1), +(i83[2], -1))

The following pairs are in Pbound:

LOAD1720ARR1(java.lang.Object(ARRAY(i4[1], a3200data[1])), i78[1], i83[1]) → COND_LOAD1720ARR1(&&(&&(&&(>(i78[1], 0), <(i78[1], i4[1])), >(i83[1], 0)), >(+(i78[1], 1), 0)), java.lang.Object(ARRAY(i4[1], a3200data[1])), i78[1], i83[1])

The following pairs are in P:

LOAD1720(java.lang.Object(ARRAY(i4[0], a3200data[0])), i78[0], i83[0]) → LOAD1720ARR1(java.lang.Object(ARRAY(i4[0], a3200data[0])), i78[0], i83[0])
LOAD1720ARR1(java.lang.Object(ARRAY(i4[1], a3200data[1])), i78[1], i83[1]) → COND_LOAD1720ARR1(&&(&&(&&(>(i78[1], 0), <(i78[1], i4[1])), >(i83[1], 0)), >(+(i78[1], 1), 0)), java.lang.Object(ARRAY(i4[1], a3200data[1])), i78[1], i83[1])

There are no usable rules.

(44) Complex Obligation (AND)

(45) Obligation:

IDP problem:
The following function symbols are pre-defined:
!=~Neq: (Integer, Integer) -> Boolean
*~Mul: (Integer, Integer) -> Integer
>=~Ge: (Integer, Integer) -> Boolean
-1~UnaryMinus: (Integer) -> Integer
|~Bwor: (Integer, Integer) -> Integer
/~Div: (Integer, Integer) -> Integer
=~Eq: (Integer, Integer) -> Boolean
~Bwxor: (Integer, Integer) -> Integer
||~Lor: (Boolean, Boolean) -> Boolean
!~Lnot: (Boolean) -> Boolean
<~Lt: (Integer, Integer) -> Boolean
-~Sub: (Integer, Integer) -> Integer
<=~Le: (Integer, Integer) -> Boolean
>~Gt: (Integer, Integer) -> Boolean
~~Bwnot: (Integer) -> Integer
%~Mod: (Integer, Integer) -> Integer
&~Bwand: (Integer, Integer) -> Integer
+~Add: (Integer, Integer) -> Integer
&&~Land: (Boolean, Boolean) -> Boolean


The following domains are used:

Boolean, Integer


R is empty.

The integer pair graph contains the following rules and edges:
(0): LOAD1720(java.lang.Object(ARRAY(i4[0], a3200data[0])), i78[0], i83[0]) → LOAD1720ARR1(java.lang.Object(ARRAY(i4[0], a3200data[0])), i78[0], i83[0])
(1): LOAD1720ARR1(java.lang.Object(ARRAY(i4[1], a3200data[1])), i78[1], i83[1]) → COND_LOAD1720ARR1(i78[1] > 0 && i78[1] < i4[1] && i83[1] > 0 && i78[1] + 1 > 0, java.lang.Object(ARRAY(i4[1], a3200data[1])), i78[1], i83[1])

(0) -> (1), if ((i83[0]* i83[1])∧((i4[0]* i4[1])∧(a3200data[0]* a3200data[1]))∧(i78[0]* i78[1]))



The set Q consists of the following terms:
Load1720(java.lang.Object(ARRAY(x0, x1)), x2, x3)
Load1720ARR1(java.lang.Object(ARRAY(x0, x1)), x2, x3)
Cond_Load1720ARR1(TRUE, java.lang.Object(ARRAY(x0, x1)), x2, x3)

(46) IDependencyGraphProof (EQUIVALENT transformation)

The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 0 SCCs with 2 less nodes.

(47) TRUE

(48) Obligation:

IDP problem:
The following function symbols are pre-defined:
!=~Neq: (Integer, Integer) -> Boolean
*~Mul: (Integer, Integer) -> Integer
>=~Ge: (Integer, Integer) -> Boolean
-1~UnaryMinus: (Integer) -> Integer
|~Bwor: (Integer, Integer) -> Integer
/~Div: (Integer, Integer) -> Integer
=~Eq: (Integer, Integer) -> Boolean
~Bwxor: (Integer, Integer) -> Integer
||~Lor: (Boolean, Boolean) -> Boolean
!~Lnot: (Boolean) -> Boolean
<~Lt: (Integer, Integer) -> Boolean
-~Sub: (Integer, Integer) -> Integer
<=~Le: (Integer, Integer) -> Boolean
>~Gt: (Integer, Integer) -> Boolean
~~Bwnot: (Integer) -> Integer
%~Mod: (Integer, Integer) -> Integer
&~Bwand: (Integer, Integer) -> Integer
+~Add: (Integer, Integer) -> Integer
&&~Land: (Boolean, Boolean) -> Boolean


The following domains are used:

Integer


R is empty.

The integer pair graph contains the following rules and edges:
(0): LOAD1720(java.lang.Object(ARRAY(i4[0], a3200data[0])), i78[0], i83[0]) → LOAD1720ARR1(java.lang.Object(ARRAY(i4[0], a3200data[0])), i78[0], i83[0])
(2): COND_LOAD1720ARR1(TRUE, java.lang.Object(ARRAY(i4[2], a3200data[2])), i78[2], i83[2]) → LOAD1720(java.lang.Object(ARRAY(i4[2], a3200data[2])), i78[2] + 1, i83[2] + -1)

(2) -> (0), if ((i83[2] + -1* i83[0])∧(i78[2] + 1* i78[0])∧((i4[2]* i4[0])∧(a3200data[2]* a3200data[0])))



The set Q consists of the following terms:
Load1720(java.lang.Object(ARRAY(x0, x1)), x2, x3)
Load1720ARR1(java.lang.Object(ARRAY(x0, x1)), x2, x3)
Cond_Load1720ARR1(TRUE, java.lang.Object(ARRAY(x0, x1)), x2, x3)

(49) IDependencyGraphProof (EQUIVALENT transformation)

The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 0 SCCs with 2 less nodes.

(50) TRUE