(0) Obligation:

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

public static void main(String[] args) {
Random.args = args;
IntList l = IntList.createIntList();
int n = Random.random();
int m = l.nth(n);

while (m > 0) m--;
}

}

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 int nth(int n){

IntList l = this;

while (n > 1) {
n--;
l = l.next;
}

return l.value;
}
}



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 376 nodes with 3 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:
Load3670(i761) → Cond_Load3670(i761 > 0, i761)
Cond_Load3670(TRUE, i761) → Load3670(i761 + -1)
The set Q consists of the following terms:
Load3670(x0)
Cond_Load3670(TRUE, x0)

(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:
Load3670(i761) → Cond_Load3670(i761 > 0, i761)
Cond_Load3670(TRUE, i761) → Load3670(i761 + -1)

The integer pair graph contains the following rules and edges:
(0): LOAD3670(i761[0]) → COND_LOAD3670(i761[0] > 0, i761[0])
(1): COND_LOAD3670(TRUE, i761[1]) → LOAD3670(i761[1] + -1)

(0) -> (1), if ((i761[0]* i761[1])∧(i761[0] > 0* TRUE))


(1) -> (0), if ((i761[1] + -1* i761[0]))



The set Q consists of the following terms:
Load3670(x0)
Cond_Load3670(TRUE, x0)

(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): LOAD3670(i761[0]) → COND_LOAD3670(i761[0] > 0, i761[0])
(1): COND_LOAD3670(TRUE, i761[1]) → LOAD3670(i761[1] + -1)

(0) -> (1), if ((i761[0]* i761[1])∧(i761[0] > 0* TRUE))


(1) -> (0), if ((i761[1] + -1* i761[0]))



The set Q consists of the following terms:
Load3670(x0)
Cond_Load3670(TRUE, x0)

(10) 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 LOAD3670(i761) → COND_LOAD3670(>(i761, 0), i761) the following chains were created:
  • We consider the chain LOAD3670(i761[0]) → COND_LOAD3670(>(i761[0], 0), i761[0]), COND_LOAD3670(TRUE, i761[1]) → LOAD3670(+(i761[1], -1)) which results in the following constraint:

    (1)    (i761[0]=i761[1]>(i761[0], 0)=TRUELOAD3670(i761[0])≥NonInfC∧LOAD3670(i761[0])≥COND_LOAD3670(>(i761[0], 0), i761[0])∧(UIncreasing(COND_LOAD3670(>(i761[0], 0), i761[0])), ≥))



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

    (2)    (>(i761[0], 0)=TRUELOAD3670(i761[0])≥NonInfC∧LOAD3670(i761[0])≥COND_LOAD3670(>(i761[0], 0), i761[0])∧(UIncreasing(COND_LOAD3670(>(i761[0], 0), i761[0])), ≥))



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

    (3)    (i761[0] + [-1] ≥ 0 ⇒ (UIncreasing(COND_LOAD3670(>(i761[0], 0), i761[0])), ≥)∧[(-1)Bound*bni_9] + [(2)bni_9]i761[0] ≥ 0∧[1 + (-1)bso_10] ≥ 0)



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

    (4)    (i761[0] + [-1] ≥ 0 ⇒ (UIncreasing(COND_LOAD3670(>(i761[0], 0), i761[0])), ≥)∧[(-1)Bound*bni_9] + [(2)bni_9]i761[0] ≥ 0∧[1 + (-1)bso_10] ≥ 0)



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

    (5)    (i761[0] + [-1] ≥ 0 ⇒ (UIncreasing(COND_LOAD3670(>(i761[0], 0), i761[0])), ≥)∧[(-1)Bound*bni_9] + [(2)bni_9]i761[0] ≥ 0∧[1 + (-1)bso_10] ≥ 0)



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

    (6)    (i761[0] ≥ 0 ⇒ (UIncreasing(COND_LOAD3670(>(i761[0], 0), i761[0])), ≥)∧[(-1)Bound*bni_9 + (2)bni_9] + [(2)bni_9]i761[0] ≥ 0∧[1 + (-1)bso_10] ≥ 0)







For Pair COND_LOAD3670(TRUE, i761) → LOAD3670(+(i761, -1)) the following chains were created:
  • We consider the chain LOAD3670(i761[0]) → COND_LOAD3670(>(i761[0], 0), i761[0]), COND_LOAD3670(TRUE, i761[1]) → LOAD3670(+(i761[1], -1)), LOAD3670(i761[0]) → COND_LOAD3670(>(i761[0], 0), i761[0]) which results in the following constraint:

    (7)    (i761[0]=i761[1]>(i761[0], 0)=TRUE+(i761[1], -1)=i761[0]1COND_LOAD3670(TRUE, i761[1])≥NonInfC∧COND_LOAD3670(TRUE, i761[1])≥LOAD3670(+(i761[1], -1))∧(UIncreasing(LOAD3670(+(i761[1], -1))), ≥))



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

    (8)    (>(i761[0], 0)=TRUECOND_LOAD3670(TRUE, i761[0])≥NonInfC∧COND_LOAD3670(TRUE, i761[0])≥LOAD3670(+(i761[0], -1))∧(UIncreasing(LOAD3670(+(i761[1], -1))), ≥))



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

    (9)    (i761[0] + [-1] ≥ 0 ⇒ (UIncreasing(LOAD3670(+(i761[1], -1))), ≥)∧[(-1)bni_11 + (-1)Bound*bni_11] + [(2)bni_11]i761[0] ≥ 0∧[1 + (-1)bso_12] ≥ 0)



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

    (10)    (i761[0] + [-1] ≥ 0 ⇒ (UIncreasing(LOAD3670(+(i761[1], -1))), ≥)∧[(-1)bni_11 + (-1)Bound*bni_11] + [(2)bni_11]i761[0] ≥ 0∧[1 + (-1)bso_12] ≥ 0)



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

    (11)    (i761[0] + [-1] ≥ 0 ⇒ (UIncreasing(LOAD3670(+(i761[1], -1))), ≥)∧[(-1)bni_11 + (-1)Bound*bni_11] + [(2)bni_11]i761[0] ≥ 0∧[1 + (-1)bso_12] ≥ 0)



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

    (12)    (i761[0] ≥ 0 ⇒ (UIncreasing(LOAD3670(+(i761[1], -1))), ≥)∧[bni_11 + (-1)Bound*bni_11] + [(2)bni_11]i761[0] ≥ 0∧[1 + (-1)bso_12] ≥ 0)







To summarize, we get the following constraints P for the following pairs.
  • LOAD3670(i761) → COND_LOAD3670(>(i761, 0), i761)
    • (i761[0] ≥ 0 ⇒ (UIncreasing(COND_LOAD3670(>(i761[0], 0), i761[0])), ≥)∧[(-1)Bound*bni_9 + (2)bni_9] + [(2)bni_9]i761[0] ≥ 0∧[1 + (-1)bso_10] ≥ 0)

  • COND_LOAD3670(TRUE, i761) → LOAD3670(+(i761, -1))
    • (i761[0] ≥ 0 ⇒ (UIncreasing(LOAD3670(+(i761[1], -1))), ≥)∧[bni_11 + (-1)Bound*bni_11] + [(2)bni_11]i761[0] ≥ 0∧[1 + (-1)bso_12] ≥ 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(LOAD3670(x1)) = [2]x1   
POL(COND_LOAD3670(x1, x2)) = [-1] + [2]x2   
POL(>(x1, x2)) = [-1]   
POL(0) = 0   
POL(+(x1, x2)) = x1 + x2   
POL(-1) = [-1]   

The following pairs are in P>:

LOAD3670(i761[0]) → COND_LOAD3670(>(i761[0], 0), i761[0])
COND_LOAD3670(TRUE, i761[1]) → LOAD3670(+(i761[1], -1))

The following pairs are in Pbound:

LOAD3670(i761[0]) → COND_LOAD3670(>(i761[0], 0), i761[0])
COND_LOAD3670(TRUE, i761[1]) → LOAD3670(+(i761[1], -1))

The following pairs are in P:
none

There are no usable rules.

(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:
none


R is empty.

The integer pair graph is empty.

The set Q consists of the following terms:
Load3670(x0)
Cond_Load3670(TRUE, x0)

(12) IDependencyGraphProof (EQUIVALENT transformation)

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

(13) TRUE

(14) 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:
Load3339(java.lang.Object(IntList(o5734)), i674, java.lang.Object(IntList(o5734))) → Cond_Load3339(i674 > 1, java.lang.Object(IntList(o5734)), i674, java.lang.Object(IntList(o5734)))
Cond_Load3339(TRUE, java.lang.Object(IntList(o5734)), i674, java.lang.Object(IntList(o5734))) → JMP3739(java.lang.Object(IntList(o5734)), i674 + -1, o5734)
JMP3739(java.lang.Object(IntList(o5301Field0)), i689, o5723) → Load3339(java.lang.Object(IntList(o5301Field0)), i689, o5723)
Load3339(java.lang.Object(IntList(o5301Field0)), i674, java.lang.Object(IntList(o5723))) → Cond_Load33391(i674 > 1, java.lang.Object(IntList(o5301Field0)), i674, java.lang.Object(IntList(o5723)))
Cond_Load33391(TRUE, java.lang.Object(IntList(o5301Field0)), i674, java.lang.Object(IntList(o5723))) → Load3339(java.lang.Object(IntList(o5301Field0)), i674 + -1, o5723)
The set Q consists of the following terms:
Cond_Load3339(TRUE, java.lang.Object(IntList(x0)), x1, java.lang.Object(IntList(x0)))
JMP3739(java.lang.Object(IntList(x0)), x1, x2)
Load3339(java.lang.Object(IntList(x0)), x1, java.lang.Object(IntList(x2)))
Cond_Load33391(TRUE, java.lang.Object(IntList(x0)), x1, java.lang.Object(IntList(x2)))

(15) DuplicateArgsRemoverProof (EQUIVALENT transformation)

Some arguments are removed because they only appear as duplicates.
We removed arguments according to the following replacements:

Cond_Load3339(x1, x2, x3, x4) → Cond_Load3339(x1, x3, x4)

(16) 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:
Load3339(java.lang.Object(IntList(o5734)), i674, java.lang.Object(IntList(o5734))) → Cond_Load3339(i674 > 1, i674, java.lang.Object(IntList(o5734)))
Cond_Load3339(TRUE, i674, java.lang.Object(IntList(o5734))) → JMP3739(java.lang.Object(IntList(o5734)), i674 + -1, o5734)
JMP3739(java.lang.Object(IntList(o5301Field0)), i689, o5723) → Load3339(java.lang.Object(IntList(o5301Field0)), i689, o5723)
Load3339(java.lang.Object(IntList(o5301Field0)), i674, java.lang.Object(IntList(o5723))) → Cond_Load33391(i674 > 1, java.lang.Object(IntList(o5301Field0)), i674, java.lang.Object(IntList(o5723)))
Cond_Load33391(TRUE, java.lang.Object(IntList(o5301Field0)), i674, java.lang.Object(IntList(o5723))) → Load3339(java.lang.Object(IntList(o5301Field0)), i674 + -1, o5723)
The set Q consists of the following terms:
Cond_Load3339(TRUE, x0, java.lang.Object(IntList(x1)))
JMP3739(java.lang.Object(IntList(x0)), x1, x2)
Load3339(java.lang.Object(IntList(x0)), x1, java.lang.Object(IntList(x2)))
Cond_Load33391(TRUE, java.lang.Object(IntList(x0)), x1, java.lang.Object(IntList(x2)))

(17) ITRStoIDPProof (EQUIVALENT transformation)

Added dependency pairs

(18) 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:
Load3339(java.lang.Object(IntList(o5734)), i674, java.lang.Object(IntList(o5734))) → Cond_Load3339(i674 > 1, i674, java.lang.Object(IntList(o5734)))
Cond_Load3339(TRUE, i674, java.lang.Object(IntList(o5734))) → JMP3739(java.lang.Object(IntList(o5734)), i674 + -1, o5734)
JMP3739(java.lang.Object(IntList(o5301Field0)), i689, o5723) → Load3339(java.lang.Object(IntList(o5301Field0)), i689, o5723)
Load3339(java.lang.Object(IntList(o5301Field0)), i674, java.lang.Object(IntList(o5723))) → Cond_Load33391(i674 > 1, java.lang.Object(IntList(o5301Field0)), i674, java.lang.Object(IntList(o5723)))
Cond_Load33391(TRUE, java.lang.Object(IntList(o5301Field0)), i674, java.lang.Object(IntList(o5723))) → Load3339(java.lang.Object(IntList(o5301Field0)), i674 + -1, o5723)

The integer pair graph contains the following rules and edges:
(0): LOAD3339(java.lang.Object(IntList(o5734[0])), i674[0], java.lang.Object(IntList(o5734[0]))) → COND_LOAD3339(i674[0] > 1, i674[0], java.lang.Object(IntList(o5734[0])))
(1): COND_LOAD3339(TRUE, i674[1], java.lang.Object(IntList(o5734[1]))) → JMP3739'(java.lang.Object(IntList(o5734[1])), i674[1] + -1, o5734[1])
(2): JMP3739'(java.lang.Object(IntList(o5301Field0[2])), i689[2], o5723[2]) → LOAD3339(java.lang.Object(IntList(o5301Field0[2])), i689[2], o5723[2])
(3): LOAD3339(java.lang.Object(IntList(o5301Field0[3])), i674[3], java.lang.Object(IntList(o5723[3]))) → COND_LOAD33391(i674[3] > 1, java.lang.Object(IntList(o5301Field0[3])), i674[3], java.lang.Object(IntList(o5723[3])))
(4): COND_LOAD33391(TRUE, java.lang.Object(IntList(o5301Field0[4])), i674[4], java.lang.Object(IntList(o5723[4]))) → LOAD3339(java.lang.Object(IntList(o5301Field0[4])), i674[4] + -1, o5723[4])

(0) -> (1), if ((i674[0]* i674[1])∧(i674[0] > 1* TRUE)∧(java.lang.Object(IntList(o5734[0])) →* java.lang.Object(IntList(o5734[1]))))


(1) -> (2), if ((i674[1] + -1* i689[2])∧(java.lang.Object(IntList(o5734[1])) →* java.lang.Object(IntList(o5301Field0[2])))∧(o5734[1]* o5723[2]))


(2) -> (0), if ((i689[2]* i674[0])∧(o5723[2]* java.lang.Object(IntList(o5734[0])))∧(java.lang.Object(IntList(o5301Field0[2])) →* java.lang.Object(IntList(o5734[0]))))


(2) -> (3), if ((java.lang.Object(IntList(o5301Field0[2])) →* java.lang.Object(IntList(o5301Field0[3])))∧(o5723[2]* java.lang.Object(IntList(o5723[3])))∧(i689[2]* i674[3]))


(3) -> (4), if ((java.lang.Object(IntList(o5723[3])) →* java.lang.Object(IntList(o5723[4])))∧(java.lang.Object(IntList(o5301Field0[3])) →* java.lang.Object(IntList(o5301Field0[4])))∧(i674[3]* i674[4])∧(i674[3] > 1* TRUE))


(4) -> (0), if ((i674[4] + -1* i674[0])∧(java.lang.Object(IntList(o5301Field0[4])) →* java.lang.Object(IntList(o5734[0])))∧(o5723[4]* java.lang.Object(IntList(o5734[0]))))


(4) -> (3), if ((java.lang.Object(IntList(o5301Field0[4])) →* java.lang.Object(IntList(o5301Field0[3])))∧(i674[4] + -1* i674[3])∧(o5723[4]* java.lang.Object(IntList(o5723[3]))))



The set Q consists of the following terms:
Cond_Load3339(TRUE, x0, java.lang.Object(IntList(x1)))
JMP3739(java.lang.Object(IntList(x0)), x1, x2)
Load3339(java.lang.Object(IntList(x0)), x1, java.lang.Object(IntList(x2)))
Cond_Load33391(TRUE, java.lang.Object(IntList(x0)), x1, java.lang.Object(IntList(x2)))

(19) 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.

(20) 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): LOAD3339(java.lang.Object(IntList(o5734[0])), i674[0], java.lang.Object(IntList(o5734[0]))) → COND_LOAD3339(i674[0] > 1, i674[0], java.lang.Object(IntList(o5734[0])))
(1): COND_LOAD3339(TRUE, i674[1], java.lang.Object(IntList(o5734[1]))) → JMP3739'(java.lang.Object(IntList(o5734[1])), i674[1] + -1, o5734[1])
(2): JMP3739'(java.lang.Object(IntList(o5301Field0[2])), i689[2], o5723[2]) → LOAD3339(java.lang.Object(IntList(o5301Field0[2])), i689[2], o5723[2])
(3): LOAD3339(java.lang.Object(IntList(o5301Field0[3])), i674[3], java.lang.Object(IntList(o5723[3]))) → COND_LOAD33391(i674[3] > 1, java.lang.Object(IntList(o5301Field0[3])), i674[3], java.lang.Object(IntList(o5723[3])))
(4): COND_LOAD33391(TRUE, java.lang.Object(IntList(o5301Field0[4])), i674[4], java.lang.Object(IntList(o5723[4]))) → LOAD3339(java.lang.Object(IntList(o5301Field0[4])), i674[4] + -1, o5723[4])

(0) -> (1), if ((i674[0]* i674[1])∧(i674[0] > 1* TRUE)∧(java.lang.Object(IntList(o5734[0])) →* java.lang.Object(IntList(o5734[1]))))


(1) -> (2), if ((i674[1] + -1* i689[2])∧(java.lang.Object(IntList(o5734[1])) →* java.lang.Object(IntList(o5301Field0[2])))∧(o5734[1]* o5723[2]))


(2) -> (0), if ((i689[2]* i674[0])∧(o5723[2]* java.lang.Object(IntList(o5734[0])))∧(java.lang.Object(IntList(o5301Field0[2])) →* java.lang.Object(IntList(o5734[0]))))


(2) -> (3), if ((java.lang.Object(IntList(o5301Field0[2])) →* java.lang.Object(IntList(o5301Field0[3])))∧(o5723[2]* java.lang.Object(IntList(o5723[3])))∧(i689[2]* i674[3]))


(3) -> (4), if ((java.lang.Object(IntList(o5723[3])) →* java.lang.Object(IntList(o5723[4])))∧(java.lang.Object(IntList(o5301Field0[3])) →* java.lang.Object(IntList(o5301Field0[4])))∧(i674[3]* i674[4])∧(i674[3] > 1* TRUE))


(4) -> (0), if ((i674[4] + -1* i674[0])∧(java.lang.Object(IntList(o5301Field0[4])) →* java.lang.Object(IntList(o5734[0])))∧(o5723[4]* java.lang.Object(IntList(o5734[0]))))


(4) -> (3), if ((java.lang.Object(IntList(o5301Field0[4])) →* java.lang.Object(IntList(o5301Field0[3])))∧(i674[4] + -1* i674[3])∧(o5723[4]* java.lang.Object(IntList(o5723[3]))))



The set Q consists of the following terms:
Cond_Load3339(TRUE, x0, java.lang.Object(IntList(x1)))
JMP3739(java.lang.Object(IntList(x0)), x1, x2)
Load3339(java.lang.Object(IntList(x0)), x1, java.lang.Object(IntList(x2)))
Cond_Load33391(TRUE, java.lang.Object(IntList(x0)), x1, java.lang.Object(IntList(x2)))

(21) ItpfGraphProof (EQUIVALENT transformation)

Applied rule ItpfICap [ICap]

(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): LOAD3339(java.lang.Object(IntList(o5734[0])), i674[0], java.lang.Object(IntList(o5734[0]))) → COND_LOAD3339(i674[0] > 1, i674[0], java.lang.Object(IntList(o5734[0])))
(1): COND_LOAD3339(TRUE, i674[1], java.lang.Object(IntList(o5734[1]))) → JMP3739'(java.lang.Object(IntList(o5734[1])), i674[1] + -1, o5734[1])
(2): JMP3739'(java.lang.Object(IntList(o5301Field0[2])), i689[2], o5723[2]) → LOAD3339(java.lang.Object(IntList(o5301Field0[2])), i689[2], o5723[2])
(3): LOAD3339(java.lang.Object(IntList(o5301Field0[3])), i674[3], java.lang.Object(IntList(o5723[3]))) → COND_LOAD33391(i674[3] > 1, java.lang.Object(IntList(o5301Field0[3])), i674[3], java.lang.Object(IntList(o5723[3])))
(4): COND_LOAD33391(TRUE, java.lang.Object(IntList(o5301Field0[4])), i674[4], java.lang.Object(IntList(o5723[4]))) → LOAD3339(java.lang.Object(IntList(o5301Field0[4])), i674[4] + -1, o5723[4])

(0) -> (1), if ((i674[0]* i674[1])∧(i674[0] > 1* TRUE)∧((o5734[0]* o5734[1])))


(1) -> (2), if ((i674[1] + -1* i689[2])∧((o5734[1]* o5301Field0[2]))∧(o5734[1]* o5723[2]))


(2) -> (0), if ((i689[2]* i674[0])∧(o5723[2]* java.lang.Object(IntList(o5734[0])))∧((o5301Field0[2]* o5734[0])))


(2) -> (3), if (((o5301Field0[2]* o5301Field0[3]))∧(o5723[2]* java.lang.Object(IntList(o5723[3])))∧(i689[2]* i674[3]))


(3) -> (4), if (((o5723[3]* o5723[4]))∧((o5301Field0[3]* o5301Field0[4]))∧(i674[3]* i674[4])∧(i674[3] > 1* TRUE))


(4) -> (0), if ((i674[4] + -1* i674[0])∧((o5301Field0[4]* o5734[0]))∧(o5723[4]* java.lang.Object(IntList(o5734[0]))))


(4) -> (3), if (((o5301Field0[4]* o5301Field0[3]))∧(i674[4] + -1* i674[3])∧(o5723[4]* java.lang.Object(IntList(o5723[3]))))



The set Q consists of the following terms:
Cond_Load3339(TRUE, x0, java.lang.Object(IntList(x1)))
JMP3739(java.lang.Object(IntList(x0)), x1, x2)
Load3339(java.lang.Object(IntList(x0)), x1, java.lang.Object(IntList(x2)))
Cond_Load33391(TRUE, java.lang.Object(IntList(x0)), x1, java.lang.Object(IntList(x2)))

(23) 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 LOAD3339(java.lang.Object(IntList(o5734)), i674, java.lang.Object(IntList(o5734))) → COND_LOAD3339(>(i674, 1), i674, java.lang.Object(IntList(o5734))) the following chains were created:
  • We consider the chain LOAD3339(java.lang.Object(IntList(o5734[0])), i674[0], java.lang.Object(IntList(o5734[0]))) → COND_LOAD3339(>(i674[0], 1), i674[0], java.lang.Object(IntList(o5734[0]))), COND_LOAD3339(TRUE, i674[1], java.lang.Object(IntList(o5734[1]))) → JMP3739'(java.lang.Object(IntList(o5734[1])), +(i674[1], -1), o5734[1]) which results in the following constraint:

    (1)    (i674[0]=i674[1]>(i674[0], 1)=TRUEo5734[0]=o5734[1]LOAD3339(java.lang.Object(IntList(o5734[0])), i674[0], java.lang.Object(IntList(o5734[0])))≥COND_LOAD3339(>(i674[0], 1), i674[0], java.lang.Object(IntList(o5734[0])))∧(UIncreasing(COND_LOAD3339(>(i674[0], 1), i674[0], java.lang.Object(IntList(o5734[0])))), ≥))



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

    (2)    (>(i674[0], 1)=TRUELOAD3339(java.lang.Object(IntList(o5734[0])), i674[0], java.lang.Object(IntList(o5734[0])))≥COND_LOAD3339(>(i674[0], 1), i674[0], java.lang.Object(IntList(o5734[0])))∧(UIncreasing(COND_LOAD3339(>(i674[0], 1), i674[0], java.lang.Object(IntList(o5734[0])))), ≥))



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

    (3)    (0 ≥ 0 ⇒ (UIncreasing(COND_LOAD3339(>(i674[0], 1), i674[0], java.lang.Object(IntList(o5734[0])))), ≥)∧[(-1)bso_22] + i674[0] ≥ 0)



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

    (4)    (0 ≥ 0 ⇒ (UIncreasing(COND_LOAD3339(>(i674[0], 1), i674[0], java.lang.Object(IntList(o5734[0])))), ≥)∧[(-1)bso_22] + i674[0] ≥ 0)



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

    (5)    (0 ≥ 0 ⇒ (UIncreasing(COND_LOAD3339(>(i674[0], 1), i674[0], java.lang.Object(IntList(o5734[0])))), ≥)∧[(-1)bso_22] + i674[0] ≥ 0)



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

    (6)    (0 ≥ 0 ⇒ (UIncreasing(COND_LOAD3339(>(i674[0], 1), i674[0], java.lang.Object(IntList(o5734[0])))), ≥)∧0 ≥ 0∧[1] ≥ 0∧[(-1)bso_22] ≥ 0)







For Pair COND_LOAD3339(TRUE, i674, java.lang.Object(IntList(o5734))) → JMP3739'(java.lang.Object(IntList(o5734)), +(i674, -1), o5734) the following chains were created:
  • We consider the chain LOAD3339(java.lang.Object(IntList(o5734[0])), i674[0], java.lang.Object(IntList(o5734[0]))) → COND_LOAD3339(>(i674[0], 1), i674[0], java.lang.Object(IntList(o5734[0]))), COND_LOAD3339(TRUE, i674[1], java.lang.Object(IntList(o5734[1]))) → JMP3739'(java.lang.Object(IntList(o5734[1])), +(i674[1], -1), o5734[1]), JMP3739'(java.lang.Object(IntList(o5301Field0[2])), i689[2], o5723[2]) → LOAD3339(java.lang.Object(IntList(o5301Field0[2])), i689[2], o5723[2]) which results in the following constraint:

    (7)    (i674[0]=i674[1]>(i674[0], 1)=TRUEo5734[0]=o5734[1]+(i674[1], -1)=i689[2]o5734[1]=o5301Field0[2]o5734[1]=o5723[2]COND_LOAD3339(TRUE, i674[1], java.lang.Object(IntList(o5734[1])))≥JMP3739'(java.lang.Object(IntList(o5734[1])), +(i674[1], -1), o5734[1])∧(UIncreasing(JMP3739'(java.lang.Object(IntList(o5734[1])), +(i674[1], -1), o5734[1])), ≥))



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

    (8)    (>(i674[0], 1)=TRUECOND_LOAD3339(TRUE, i674[0], java.lang.Object(IntList(o5734[0])))≥JMP3739'(java.lang.Object(IntList(o5734[0])), +(i674[0], -1), o5734[0])∧(UIncreasing(JMP3739'(java.lang.Object(IntList(o5734[1])), +(i674[1], -1), o5734[1])), ≥))



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

    (9)    (0 ≥ 0 ⇒ (UIncreasing(JMP3739'(java.lang.Object(IntList(o5734[1])), +(i674[1], -1), o5734[1])), ≥)∧[2 + (-1)bso_23] + i674[0] ≥ 0)



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

    (10)    (0 ≥ 0 ⇒ (UIncreasing(JMP3739'(java.lang.Object(IntList(o5734[1])), +(i674[1], -1), o5734[1])), ≥)∧[2 + (-1)bso_23] + i674[0] ≥ 0)



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

    (11)    (0 ≥ 0 ⇒ (UIncreasing(JMP3739'(java.lang.Object(IntList(o5734[1])), +(i674[1], -1), o5734[1])), ≥)∧[2 + (-1)bso_23] + i674[0] ≥ 0)



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

    (12)    (0 ≥ 0 ⇒ (UIncreasing(JMP3739'(java.lang.Object(IntList(o5734[1])), +(i674[1], -1), o5734[1])), ≥)∧0 ≥ 0∧[1] ≥ 0∧[2 + (-1)bso_23] ≥ 0)







For Pair JMP3739'(java.lang.Object(IntList(o5301Field0)), i689, o5723) → LOAD3339(java.lang.Object(IntList(o5301Field0)), i689, o5723) the following chains were created:
  • We consider the chain JMP3739'(java.lang.Object(IntList(o5301Field0[2])), i689[2], o5723[2]) → LOAD3339(java.lang.Object(IntList(o5301Field0[2])), i689[2], o5723[2]), LOAD3339(java.lang.Object(IntList(o5734[0])), i674[0], java.lang.Object(IntList(o5734[0]))) → COND_LOAD3339(>(i674[0], 1), i674[0], java.lang.Object(IntList(o5734[0]))) which results in the following constraint:

    (13)    (i689[2]=i674[0]o5723[2]=java.lang.Object(IntList(o5734[0]))∧o5301Field0[2]=o5734[0]JMP3739'(java.lang.Object(IntList(o5301Field0[2])), i689[2], o5723[2])≥LOAD3339(java.lang.Object(IntList(o5301Field0[2])), i689[2], o5723[2])∧(UIncreasing(LOAD3339(java.lang.Object(IntList(o5301Field0[2])), i689[2], o5723[2])), ≥))



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

    (14)    (JMP3739'(java.lang.Object(IntList(o5301Field0[2])), i689[2], java.lang.Object(IntList(o5301Field0[2])))≥LOAD3339(java.lang.Object(IntList(o5301Field0[2])), i689[2], java.lang.Object(IntList(o5301Field0[2])))∧(UIncreasing(LOAD3339(java.lang.Object(IntList(o5301Field0[2])), i689[2], o5723[2])), ≥))



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

    (15)    ((UIncreasing(LOAD3339(java.lang.Object(IntList(o5301Field0[2])), i689[2], o5723[2])), ≥)∧[7 + (-1)bso_24] + [6]o5301Field0[2] + i689[2] ≥ 0)



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

    (16)    ((UIncreasing(LOAD3339(java.lang.Object(IntList(o5301Field0[2])), i689[2], o5723[2])), ≥)∧[7 + (-1)bso_24] + [6]o5301Field0[2] + i689[2] ≥ 0)



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

    (17)    ((UIncreasing(LOAD3339(java.lang.Object(IntList(o5301Field0[2])), i689[2], o5723[2])), ≥)∧[7 + (-1)bso_24] + [6]o5301Field0[2] + i689[2] ≥ 0)



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

    (18)    ((UIncreasing(LOAD3339(java.lang.Object(IntList(o5301Field0[2])), i689[2], o5723[2])), ≥)∧[1] ≥ 0∧[7 + (-1)bso_24] ≥ 0∧[1] ≥ 0)



  • We consider the chain JMP3739'(java.lang.Object(IntList(o5301Field0[2])), i689[2], o5723[2]) → LOAD3339(java.lang.Object(IntList(o5301Field0[2])), i689[2], o5723[2]), LOAD3339(java.lang.Object(IntList(o5301Field0[3])), i674[3], java.lang.Object(IntList(o5723[3]))) → COND_LOAD33391(>(i674[3], 1), java.lang.Object(IntList(o5301Field0[3])), i674[3], java.lang.Object(IntList(o5723[3]))) which results in the following constraint:

    (19)    (o5301Field0[2]=o5301Field0[3]o5723[2]=java.lang.Object(IntList(o5723[3]))∧i689[2]=i674[3]JMP3739'(java.lang.Object(IntList(o5301Field0[2])), i689[2], o5723[2])≥LOAD3339(java.lang.Object(IntList(o5301Field0[2])), i689[2], o5723[2])∧(UIncreasing(LOAD3339(java.lang.Object(IntList(o5301Field0[2])), i689[2], o5723[2])), ≥))



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

    (20)    (JMP3739'(java.lang.Object(IntList(o5301Field0[2])), i689[2], java.lang.Object(IntList(o5723[3])))≥LOAD3339(java.lang.Object(IntList(o5301Field0[2])), i689[2], java.lang.Object(IntList(o5723[3])))∧(UIncreasing(LOAD3339(java.lang.Object(IntList(o5301Field0[2])), i689[2], o5723[2])), ≥))



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

    (21)    ((UIncreasing(LOAD3339(java.lang.Object(IntList(o5301Field0[2])), i689[2], o5723[2])), ≥)∧[7 + (-1)bso_24] + i689[2] + [6]o5301Field0[2] ≥ 0)



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

    (22)    ((UIncreasing(LOAD3339(java.lang.Object(IntList(o5301Field0[2])), i689[2], o5723[2])), ≥)∧[7 + (-1)bso_24] + i689[2] + [6]o5301Field0[2] ≥ 0)



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

    (23)    ((UIncreasing(LOAD3339(java.lang.Object(IntList(o5301Field0[2])), i689[2], o5723[2])), ≥)∧[7 + (-1)bso_24] + i689[2] + [6]o5301Field0[2] ≥ 0)



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

    (24)    ((UIncreasing(LOAD3339(java.lang.Object(IntList(o5301Field0[2])), i689[2], o5723[2])), ≥)∧0 ≥ 0∧[1] ≥ 0∧[7 + (-1)bso_24] ≥ 0∧[1] ≥ 0)







For Pair LOAD3339(java.lang.Object(IntList(o5301Field0)), i674, java.lang.Object(IntList(o5723))) → COND_LOAD33391(>(i674, 1), java.lang.Object(IntList(o5301Field0)), i674, java.lang.Object(IntList(o5723))) the following chains were created:
  • We consider the chain LOAD3339(java.lang.Object(IntList(o5301Field0[3])), i674[3], java.lang.Object(IntList(o5723[3]))) → COND_LOAD33391(>(i674[3], 1), java.lang.Object(IntList(o5301Field0[3])), i674[3], java.lang.Object(IntList(o5723[3]))), COND_LOAD33391(TRUE, java.lang.Object(IntList(o5301Field0[4])), i674[4], java.lang.Object(IntList(o5723[4]))) → LOAD3339(java.lang.Object(IntList(o5301Field0[4])), +(i674[4], -1), o5723[4]) which results in the following constraint:

    (25)    (o5723[3]=o5723[4]o5301Field0[3]=o5301Field0[4]i674[3]=i674[4]>(i674[3], 1)=TRUELOAD3339(java.lang.Object(IntList(o5301Field0[3])), i674[3], java.lang.Object(IntList(o5723[3])))≥COND_LOAD33391(>(i674[3], 1), java.lang.Object(IntList(o5301Field0[3])), i674[3], java.lang.Object(IntList(o5723[3])))∧(UIncreasing(COND_LOAD33391(>(i674[3], 1), java.lang.Object(IntList(o5301Field0[3])), i674[3], java.lang.Object(IntList(o5723[3])))), ≥))



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

    (26)    (>(i674[3], 1)=TRUELOAD3339(java.lang.Object(IntList(o5301Field0[3])), i674[3], java.lang.Object(IntList(o5723[3])))≥COND_LOAD33391(>(i674[3], 1), java.lang.Object(IntList(o5301Field0[3])), i674[3], java.lang.Object(IntList(o5723[3])))∧(UIncreasing(COND_LOAD33391(>(i674[3], 1), java.lang.Object(IntList(o5301Field0[3])), i674[3], java.lang.Object(IntList(o5723[3])))), ≥))



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

    (27)    (0 ≥ 0 ⇒ (UIncreasing(COND_LOAD33391(>(i674[3], 1), java.lang.Object(IntList(o5301Field0[3])), i674[3], java.lang.Object(IntList(o5723[3])))), ≥)∧[2 + (-1)bso_25] + [3]o5723[3] + [2]i674[3] ≥ 0)



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

    (28)    (0 ≥ 0 ⇒ (UIncreasing(COND_LOAD33391(>(i674[3], 1), java.lang.Object(IntList(o5301Field0[3])), i674[3], java.lang.Object(IntList(o5723[3])))), ≥)∧[2 + (-1)bso_25] + [3]o5723[3] + [2]i674[3] ≥ 0)



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

    (29)    (0 ≥ 0 ⇒ (UIncreasing(COND_LOAD33391(>(i674[3], 1), java.lang.Object(IntList(o5301Field0[3])), i674[3], java.lang.Object(IntList(o5723[3])))), ≥)∧[2 + (-1)bso_25] + [3]o5723[3] + [2]i674[3] ≥ 0)



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

    (30)    (0 ≥ 0 ⇒ (UIncreasing(COND_LOAD33391(>(i674[3], 1), java.lang.Object(IntList(o5301Field0[3])), i674[3], java.lang.Object(IntList(o5723[3])))), ≥)∧0 ≥ 0∧[2 + (-1)bso_25] ≥ 0∧[1] ≥ 0∧[1] ≥ 0)







For Pair COND_LOAD33391(TRUE, java.lang.Object(IntList(o5301Field0)), i674, java.lang.Object(IntList(o5723))) → LOAD3339(java.lang.Object(IntList(o5301Field0)), +(i674, -1), o5723) the following chains were created:
  • We consider the chain LOAD3339(java.lang.Object(IntList(o5301Field0[3])), i674[3], java.lang.Object(IntList(o5723[3]))) → COND_LOAD33391(>(i674[3], 1), java.lang.Object(IntList(o5301Field0[3])), i674[3], java.lang.Object(IntList(o5723[3]))), COND_LOAD33391(TRUE, java.lang.Object(IntList(o5301Field0[4])), i674[4], java.lang.Object(IntList(o5723[4]))) → LOAD3339(java.lang.Object(IntList(o5301Field0[4])), +(i674[4], -1), o5723[4]), LOAD3339(java.lang.Object(IntList(o5734[0])), i674[0], java.lang.Object(IntList(o5734[0]))) → COND_LOAD3339(>(i674[0], 1), i674[0], java.lang.Object(IntList(o5734[0]))) which results in the following constraint:

    (31)    (o5723[3]=o5723[4]o5301Field0[3]=o5301Field0[4]i674[3]=i674[4]>(i674[3], 1)=TRUE+(i674[4], -1)=i674[0]o5301Field0[4]=o5734[0]o5723[4]=java.lang.Object(IntList(o5734[0])) ⇒ COND_LOAD33391(TRUE, java.lang.Object(IntList(o5301Field0[4])), i674[4], java.lang.Object(IntList(o5723[4])))≥LOAD3339(java.lang.Object(IntList(o5301Field0[4])), +(i674[4], -1), o5723[4])∧(UIncreasing(LOAD3339(java.lang.Object(IntList(o5301Field0[4])), +(i674[4], -1), o5723[4])), ≥))



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

    (32)    (>(i674[3], 1)=TRUECOND_LOAD33391(TRUE, java.lang.Object(IntList(o5301Field0[3])), i674[3], java.lang.Object(IntList(java.lang.Object(IntList(o5301Field0[3])))))≥LOAD3339(java.lang.Object(IntList(o5301Field0[3])), +(i674[3], -1), java.lang.Object(IntList(o5301Field0[3])))∧(UIncreasing(LOAD3339(java.lang.Object(IntList(o5301Field0[4])), +(i674[4], -1), o5723[4])), ≥))



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

    (33)    (0 ≥ 0 ⇒ (UIncreasing(LOAD3339(java.lang.Object(IntList(o5301Field0[4])), +(i674[4], -1), o5723[4])), ≥)∧[16 + (-1)bso_26] + [9]o5301Field0[3] ≥ 0)



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

    (34)    (0 ≥ 0 ⇒ (UIncreasing(LOAD3339(java.lang.Object(IntList(o5301Field0[4])), +(i674[4], -1), o5723[4])), ≥)∧[16 + (-1)bso_26] + [9]o5301Field0[3] ≥ 0)



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

    (35)    (0 ≥ 0 ⇒ (UIncreasing(LOAD3339(java.lang.Object(IntList(o5301Field0[4])), +(i674[4], -1), o5723[4])), ≥)∧[16 + (-1)bso_26] + [9]o5301Field0[3] ≥ 0)



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

    (36)    (0 ≥ 0 ⇒ (UIncreasing(LOAD3339(java.lang.Object(IntList(o5301Field0[4])), +(i674[4], -1), o5723[4])), ≥)∧0 ≥ 0∧[16 + (-1)bso_26] ≥ 0∧[1] ≥ 0)



  • We consider the chain LOAD3339(java.lang.Object(IntList(o5301Field0[3])), i674[3], java.lang.Object(IntList(o5723[3]))) → COND_LOAD33391(>(i674[3], 1), java.lang.Object(IntList(o5301Field0[3])), i674[3], java.lang.Object(IntList(o5723[3]))), COND_LOAD33391(TRUE, java.lang.Object(IntList(o5301Field0[4])), i674[4], java.lang.Object(IntList(o5723[4]))) → LOAD3339(java.lang.Object(IntList(o5301Field0[4])), +(i674[4], -1), o5723[4]), LOAD3339(java.lang.Object(IntList(o5301Field0[3])), i674[3], java.lang.Object(IntList(o5723[3]))) → COND_LOAD33391(>(i674[3], 1), java.lang.Object(IntList(o5301Field0[3])), i674[3], java.lang.Object(IntList(o5723[3]))) which results in the following constraint:

    (37)    (o5723[3]=o5723[4]o5301Field0[3]=o5301Field0[4]i674[3]=i674[4]>(i674[3], 1)=TRUEo5301Field0[4]=o5301Field0[3]1+(i674[4], -1)=i674[3]1o5723[4]=java.lang.Object(IntList(o5723[3]1)) ⇒ COND_LOAD33391(TRUE, java.lang.Object(IntList(o5301Field0[4])), i674[4], java.lang.Object(IntList(o5723[4])))≥LOAD3339(java.lang.Object(IntList(o5301Field0[4])), +(i674[4], -1), o5723[4])∧(UIncreasing(LOAD3339(java.lang.Object(IntList(o5301Field0[4])), +(i674[4], -1), o5723[4])), ≥))



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

    (38)    (>(i674[3], 1)=TRUECOND_LOAD33391(TRUE, java.lang.Object(IntList(o5301Field0[3])), i674[3], java.lang.Object(IntList(java.lang.Object(IntList(o5723[3]1)))))≥LOAD3339(java.lang.Object(IntList(o5301Field0[3])), +(i674[3], -1), java.lang.Object(IntList(o5723[3]1)))∧(UIncreasing(LOAD3339(java.lang.Object(IntList(o5301Field0[4])), +(i674[4], -1), o5723[4])), ≥))



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

    (39)    (0 ≥ 0 ⇒ (UIncreasing(LOAD3339(java.lang.Object(IntList(o5301Field0[4])), +(i674[4], -1), o5723[4])), ≥)∧[16 + (-1)bso_26] + [9]o5723[3]1 ≥ 0)



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

    (40)    (0 ≥ 0 ⇒ (UIncreasing(LOAD3339(java.lang.Object(IntList(o5301Field0[4])), +(i674[4], -1), o5723[4])), ≥)∧[16 + (-1)bso_26] + [9]o5723[3]1 ≥ 0)



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

    (41)    (0 ≥ 0 ⇒ (UIncreasing(LOAD3339(java.lang.Object(IntList(o5301Field0[4])), +(i674[4], -1), o5723[4])), ≥)∧[16 + (-1)bso_26] + [9]o5723[3]1 ≥ 0)



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

    (42)    (0 ≥ 0 ⇒ (UIncreasing(LOAD3339(java.lang.Object(IntList(o5301Field0[4])), +(i674[4], -1), o5723[4])), ≥)∧0 ≥ 0∧0 ≥ 0∧[16 + (-1)bso_26] ≥ 0∧[1] ≥ 0)







To summarize, we get the following constraints P for the following pairs.
  • LOAD3339(java.lang.Object(IntList(o5734)), i674, java.lang.Object(IntList(o5734))) → COND_LOAD3339(>(i674, 1), i674, java.lang.Object(IntList(o5734)))
    • (0 ≥ 0 ⇒ (UIncreasing(COND_LOAD3339(>(i674[0], 1), i674[0], java.lang.Object(IntList(o5734[0])))), ≥)∧0 ≥ 0∧[1] ≥ 0∧[(-1)bso_22] ≥ 0)

  • COND_LOAD3339(TRUE, i674, java.lang.Object(IntList(o5734))) → JMP3739'(java.lang.Object(IntList(o5734)), +(i674, -1), o5734)
    • (0 ≥ 0 ⇒ (UIncreasing(JMP3739'(java.lang.Object(IntList(o5734[1])), +(i674[1], -1), o5734[1])), ≥)∧0 ≥ 0∧[1] ≥ 0∧[2 + (-1)bso_23] ≥ 0)

  • JMP3739'(java.lang.Object(IntList(o5301Field0)), i689, o5723) → LOAD3339(java.lang.Object(IntList(o5301Field0)), i689, o5723)
    • ((UIncreasing(LOAD3339(java.lang.Object(IntList(o5301Field0[2])), i689[2], o5723[2])), ≥)∧[1] ≥ 0∧[7 + (-1)bso_24] ≥ 0∧[1] ≥ 0)
    • ((UIncreasing(LOAD3339(java.lang.Object(IntList(o5301Field0[2])), i689[2], o5723[2])), ≥)∧0 ≥ 0∧[1] ≥ 0∧[7 + (-1)bso_24] ≥ 0∧[1] ≥ 0)

  • LOAD3339(java.lang.Object(IntList(o5301Field0)), i674, java.lang.Object(IntList(o5723))) → COND_LOAD33391(>(i674, 1), java.lang.Object(IntList(o5301Field0)), i674, java.lang.Object(IntList(o5723)))
    • (0 ≥ 0 ⇒ (UIncreasing(COND_LOAD33391(>(i674[3], 1), java.lang.Object(IntList(o5301Field0[3])), i674[3], java.lang.Object(IntList(o5723[3])))), ≥)∧0 ≥ 0∧[2 + (-1)bso_25] ≥ 0∧[1] ≥ 0∧[1] ≥ 0)

  • COND_LOAD33391(TRUE, java.lang.Object(IntList(o5301Field0)), i674, java.lang.Object(IntList(o5723))) → LOAD3339(java.lang.Object(IntList(o5301Field0)), +(i674, -1), o5723)
    • (0 ≥ 0 ⇒ (UIncreasing(LOAD3339(java.lang.Object(IntList(o5301Field0[4])), +(i674[4], -1), o5723[4])), ≥)∧0 ≥ 0∧[16 + (-1)bso_26] ≥ 0∧[1] ≥ 0)
    • (0 ≥ 0 ⇒ (UIncreasing(LOAD3339(java.lang.Object(IntList(o5301Field0[4])), +(i674[4], -1), o5723[4])), ≥)∧0 ≥ 0∧0 ≥ 0∧[16 + (-1)bso_26] ≥ 0∧[1] ≥ 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(LOAD3339(x1, x2, x3)) = [1] + [3]x3 + [2]x2   
POL(java.lang.Object(x1)) = [3]x1   
POL(IntList(x1)) = [1] + x1   
POL(COND_LOAD3339(x1, x2, x3)) = [1] + [3]x3 + x2   
POL(>(x1, x2)) = 0   
POL(1) = 0   
POL(JMP3739'(x1, x2, x3)) = [2] + [3]x3 + [3]x2 + [2]x1   
POL(+(x1, x2)) = 0   
POL(-1) = 0   
POL(COND_LOAD33391(x1, x2, x3, x4)) = [2] + [2]x4   

The following pairs are in P>:

COND_LOAD3339(TRUE, i674[1], java.lang.Object(IntList(o5734[1]))) → JMP3739'(java.lang.Object(IntList(o5734[1])), +(i674[1], -1), o5734[1])
JMP3739'(java.lang.Object(IntList(o5301Field0[2])), i689[2], o5723[2]) → LOAD3339(java.lang.Object(IntList(o5301Field0[2])), i689[2], o5723[2])
LOAD3339(java.lang.Object(IntList(o5301Field0[3])), i674[3], java.lang.Object(IntList(o5723[3]))) → COND_LOAD33391(>(i674[3], 1), java.lang.Object(IntList(o5301Field0[3])), i674[3], java.lang.Object(IntList(o5723[3])))
COND_LOAD33391(TRUE, java.lang.Object(IntList(o5301Field0[4])), i674[4], java.lang.Object(IntList(o5723[4]))) → LOAD3339(java.lang.Object(IntList(o5301Field0[4])), +(i674[4], -1), o5723[4])

The following pairs are in Pbound:

LOAD3339(java.lang.Object(IntList(o5734[0])), i674[0], java.lang.Object(IntList(o5734[0]))) → COND_LOAD3339(>(i674[0], 1), i674[0], java.lang.Object(IntList(o5734[0])))
COND_LOAD3339(TRUE, i674[1], java.lang.Object(IntList(o5734[1]))) → JMP3739'(java.lang.Object(IntList(o5734[1])), +(i674[1], -1), o5734[1])
JMP3739'(java.lang.Object(IntList(o5301Field0[2])), i689[2], o5723[2]) → LOAD3339(java.lang.Object(IntList(o5301Field0[2])), i689[2], o5723[2])
LOAD3339(java.lang.Object(IntList(o5301Field0[3])), i674[3], java.lang.Object(IntList(o5723[3]))) → COND_LOAD33391(>(i674[3], 1), java.lang.Object(IntList(o5301Field0[3])), i674[3], java.lang.Object(IntList(o5723[3])))
COND_LOAD33391(TRUE, java.lang.Object(IntList(o5301Field0[4])), i674[4], java.lang.Object(IntList(o5723[4]))) → LOAD3339(java.lang.Object(IntList(o5301Field0[4])), +(i674[4], -1), o5723[4])

The following pairs are in P:

LOAD3339(java.lang.Object(IntList(o5734[0])), i674[0], java.lang.Object(IntList(o5734[0]))) → COND_LOAD3339(>(i674[0], 1), i674[0], java.lang.Object(IntList(o5734[0])))

There are no usable rules.

(24) Complex Obligation (AND)

(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:

Integer


R is empty.

The integer pair graph contains the following rules and edges:
(0): LOAD3339(java.lang.Object(IntList(o5734[0])), i674[0], java.lang.Object(IntList(o5734[0]))) → COND_LOAD3339(i674[0] > 1, i674[0], java.lang.Object(IntList(o5734[0])))


The set Q consists of the following terms:
Cond_Load3339(TRUE, x0, java.lang.Object(IntList(x1)))
JMP3739(java.lang.Object(IntList(x0)), x1, x2)
Load3339(java.lang.Object(IntList(x0)), x1, java.lang.Object(IntList(x2)))
Cond_Load33391(TRUE, java.lang.Object(IntList(x0)), x1, java.lang.Object(IntList(x2)))

(26) IDependencyGraphProof (EQUIVALENT transformation)

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

(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:
Cond_Load3339(TRUE, x0, java.lang.Object(IntList(x1)))
JMP3739(java.lang.Object(IntList(x0)), x1, x2)
Load3339(java.lang.Object(IntList(x0)), x1, java.lang.Object(IntList(x2)))
Cond_Load33391(TRUE, java.lang.Object(IntList(x0)), x1, java.lang.Object(IntList(x2)))

(29) IDependencyGraphProof (EQUIVALENT transformation)

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

(30) TRUE

(31) 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:
Load2033(java.lang.Object(ARRAY(i4, a4426data)), i127, i130) → Load2033ARR1(java.lang.Object(ARRAY(i4, a4426data)), i127, i130, java.lang.Object(java.lang.String(i227)))
Load2033ARR1(java.lang.Object(ARRAY(i4, a4426data)), i127, i130, java.lang.Object(java.lang.String(i227))) → Cond_Load2033ARR1(i127 > 0 && i127 < i4 && i130 > 0 && i127 + 1 > 0, java.lang.Object(ARRAY(i4, a4426data)), i127, i130, java.lang.Object(java.lang.String(i227)))
Cond_Load2033ARR1(TRUE, java.lang.Object(ARRAY(i4, a4426data)), i127, i130, java.lang.Object(java.lang.String(i227))) → Load2033(java.lang.Object(ARRAY(i4, a4426data)), i127 + 1, i130 + -1)
The set Q consists of the following terms:
Load2033(java.lang.Object(ARRAY(x0, x1)), x2, x3)
Load2033ARR1(java.lang.Object(ARRAY(x0, x1)), x2, x3, java.lang.Object(java.lang.String(x4)))
Cond_Load2033ARR1(TRUE, java.lang.Object(ARRAY(x0, x1)), x2, x3, java.lang.Object(java.lang.String(x4)))

(32) ITRSFilterProcessorProof (SOUND transformation)

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

Load2033ARR1(x1, x2, x3, x4) → Load2033ARR1(x1, x2, x3)
java.lang.String(x1) → java.lang.String
Cond_Load2033ARR1(x1, x2, x3, x4, x5) → Cond_Load2033ARR1(x1, x2, x3, x4)

(33) 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:
Load2033(java.lang.Object(ARRAY(i4, a4426data)), i127, i130) → Load2033ARR1(java.lang.Object(ARRAY(i4, a4426data)), i127, i130)
Load2033ARR1(java.lang.Object(ARRAY(i4, a4426data)), i127, i130) → Cond_Load2033ARR1(i127 > 0 && i127 < i4 && i130 > 0 && i127 + 1 > 0, java.lang.Object(ARRAY(i4, a4426data)), i127, i130)
Cond_Load2033ARR1(TRUE, java.lang.Object(ARRAY(i4, a4426data)), i127, i130) → Load2033(java.lang.Object(ARRAY(i4, a4426data)), i127 + 1, i130 + -1)
The set Q consists of the following terms:
Load2033(java.lang.Object(ARRAY(x0, x1)), x2, x3)
Load2033ARR1(java.lang.Object(ARRAY(x0, x1)), x2, x3)
Cond_Load2033ARR1(TRUE, java.lang.Object(ARRAY(x0, x1)), x2, x3)

(34) ITRStoIDPProof (EQUIVALENT transformation)

Added dependency pairs

(35) 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:
Load2033(java.lang.Object(ARRAY(i4, a4426data)), i127, i130) → Load2033ARR1(java.lang.Object(ARRAY(i4, a4426data)), i127, i130)
Load2033ARR1(java.lang.Object(ARRAY(i4, a4426data)), i127, i130) → Cond_Load2033ARR1(i127 > 0 && i127 < i4 && i130 > 0 && i127 + 1 > 0, java.lang.Object(ARRAY(i4, a4426data)), i127, i130)
Cond_Load2033ARR1(TRUE, java.lang.Object(ARRAY(i4, a4426data)), i127, i130) → Load2033(java.lang.Object(ARRAY(i4, a4426data)), i127 + 1, i130 + -1)

The integer pair graph contains the following rules and edges:
(0): LOAD2033(java.lang.Object(ARRAY(i4[0], a4426data[0])), i127[0], i130[0]) → LOAD2033ARR1(java.lang.Object(ARRAY(i4[0], a4426data[0])), i127[0], i130[0])
(1): LOAD2033ARR1(java.lang.Object(ARRAY(i4[1], a4426data[1])), i127[1], i130[1]) → COND_LOAD2033ARR1(i127[1] > 0 && i127[1] < i4[1] && i130[1] > 0 && i127[1] + 1 > 0, java.lang.Object(ARRAY(i4[1], a4426data[1])), i127[1], i130[1])
(2): COND_LOAD2033ARR1(TRUE, java.lang.Object(ARRAY(i4[2], a4426data[2])), i127[2], i130[2]) → LOAD2033(java.lang.Object(ARRAY(i4[2], a4426data[2])), i127[2] + 1, i130[2] + -1)

(0) -> (1), if ((i130[0]* i130[1])∧(i127[0]* i127[1])∧(java.lang.Object(ARRAY(i4[0], a4426data[0])) →* java.lang.Object(ARRAY(i4[1], a4426data[1]))))


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


(2) -> (0), if ((i130[2] + -1* i130[0])∧(java.lang.Object(ARRAY(i4[2], a4426data[2])) →* java.lang.Object(ARRAY(i4[0], a4426data[0])))∧(i127[2] + 1* i127[0]))



The set Q consists of the following terms:
Load2033(java.lang.Object(ARRAY(x0, x1)), x2, x3)
Load2033ARR1(java.lang.Object(ARRAY(x0, x1)), x2, x3)
Cond_Load2033ARR1(TRUE, java.lang.Object(ARRAY(x0, x1)), x2, x3)

(36) 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.

(37) 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): LOAD2033(java.lang.Object(ARRAY(i4[0], a4426data[0])), i127[0], i130[0]) → LOAD2033ARR1(java.lang.Object(ARRAY(i4[0], a4426data[0])), i127[0], i130[0])
(1): LOAD2033ARR1(java.lang.Object(ARRAY(i4[1], a4426data[1])), i127[1], i130[1]) → COND_LOAD2033ARR1(i127[1] > 0 && i127[1] < i4[1] && i130[1] > 0 && i127[1] + 1 > 0, java.lang.Object(ARRAY(i4[1], a4426data[1])), i127[1], i130[1])
(2): COND_LOAD2033ARR1(TRUE, java.lang.Object(ARRAY(i4[2], a4426data[2])), i127[2], i130[2]) → LOAD2033(java.lang.Object(ARRAY(i4[2], a4426data[2])), i127[2] + 1, i130[2] + -1)

(0) -> (1), if ((i130[0]* i130[1])∧(i127[0]* i127[1])∧(java.lang.Object(ARRAY(i4[0], a4426data[0])) →* java.lang.Object(ARRAY(i4[1], a4426data[1]))))


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


(2) -> (0), if ((i130[2] + -1* i130[0])∧(java.lang.Object(ARRAY(i4[2], a4426data[2])) →* java.lang.Object(ARRAY(i4[0], a4426data[0])))∧(i127[2] + 1* i127[0]))



The set Q consists of the following terms:
Load2033(java.lang.Object(ARRAY(x0, x1)), x2, x3)
Load2033ARR1(java.lang.Object(ARRAY(x0, x1)), x2, x3)
Cond_Load2033ARR1(TRUE, java.lang.Object(ARRAY(x0, x1)), x2, x3)

(38) ItpfGraphProof (EQUIVALENT transformation)

Applied rule ItpfICap [ICap]

(39) 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): LOAD2033(java.lang.Object(ARRAY(i4[0], a4426data[0])), i127[0], i130[0]) → LOAD2033ARR1(java.lang.Object(ARRAY(i4[0], a4426data[0])), i127[0], i130[0])
(1): LOAD2033ARR1(java.lang.Object(ARRAY(i4[1], a4426data[1])), i127[1], i130[1]) → COND_LOAD2033ARR1(i127[1] > 0 && i127[1] < i4[1] && i130[1] > 0 && i127[1] + 1 > 0, java.lang.Object(ARRAY(i4[1], a4426data[1])), i127[1], i130[1])
(2): COND_LOAD2033ARR1(TRUE, java.lang.Object(ARRAY(i4[2], a4426data[2])), i127[2], i130[2]) → LOAD2033(java.lang.Object(ARRAY(i4[2], a4426data[2])), i127[2] + 1, i130[2] + -1)

(0) -> (1), if ((i130[0]* i130[1])∧(i127[0]* i127[1])∧((i4[0]* i4[1])∧(a4426data[0]* a4426data[1])))


(1) -> (2), if ((i130[1]* i130[2])∧(i127[1]* i127[2])∧(i127[1] > 0 && i127[1] < i4[1] && i130[1] > 0 && i127[1] + 1 > 0* TRUE)∧((i4[1]* i4[2])∧(a4426data[1]* a4426data[2])))


(2) -> (0), if ((i130[2] + -1* i130[0])∧((i4[2]* i4[0])∧(a4426data[2]* a4426data[0]))∧(i127[2] + 1* i127[0]))



The set Q consists of the following terms:
Load2033(java.lang.Object(ARRAY(x0, x1)), x2, x3)
Load2033ARR1(java.lang.Object(ARRAY(x0, x1)), x2, x3)
Cond_Load2033ARR1(TRUE, java.lang.Object(ARRAY(x0, x1)), x2, x3)

(40) 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 LOAD2033(java.lang.Object(ARRAY(i4, a4426data)), i127, i130) → LOAD2033ARR1(java.lang.Object(ARRAY(i4, a4426data)), i127, i130) the following chains were created:
  • We consider the chain LOAD2033(java.lang.Object(ARRAY(i4[0], a4426data[0])), i127[0], i130[0]) → LOAD2033ARR1(java.lang.Object(ARRAY(i4[0], a4426data[0])), i127[0], i130[0]), LOAD2033ARR1(java.lang.Object(ARRAY(i4[1], a4426data[1])), i127[1], i130[1]) → COND_LOAD2033ARR1(&&(&&(&&(>(i127[1], 0), <(i127[1], i4[1])), >(i130[1], 0)), >(+(i127[1], 1), 0)), java.lang.Object(ARRAY(i4[1], a4426data[1])), i127[1], i130[1]) which results in the following constraint:

    (1)    (i130[0]=i130[1]i127[0]=i127[1]i4[0]=i4[1]a4426data[0]=a4426data[1]LOAD2033(java.lang.Object(ARRAY(i4[0], a4426data[0])), i127[0], i130[0])≥NonInfC∧LOAD2033(java.lang.Object(ARRAY(i4[0], a4426data[0])), i127[0], i130[0])≥LOAD2033ARR1(java.lang.Object(ARRAY(i4[0], a4426data[0])), i127[0], i130[0])∧(UIncreasing(LOAD2033ARR1(java.lang.Object(ARRAY(i4[0], a4426data[0])), i127[0], i130[0])), ≥))



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

    (2)    (LOAD2033(java.lang.Object(ARRAY(i4[0], a4426data[0])), i127[0], i130[0])≥NonInfC∧LOAD2033(java.lang.Object(ARRAY(i4[0], a4426data[0])), i127[0], i130[0])≥LOAD2033ARR1(java.lang.Object(ARRAY(i4[0], a4426data[0])), i127[0], i130[0])∧(UIncreasing(LOAD2033ARR1(java.lang.Object(ARRAY(i4[0], a4426data[0])), i127[0], i130[0])), ≥))



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

    (3)    ((UIncreasing(LOAD2033ARR1(java.lang.Object(ARRAY(i4[0], a4426data[0])), i127[0], i130[0])), ≥)∧[(-1)bso_16] ≥ 0)



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

    (4)    ((UIncreasing(LOAD2033ARR1(java.lang.Object(ARRAY(i4[0], a4426data[0])), i127[0], i130[0])), ≥)∧[(-1)bso_16] ≥ 0)



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

    (5)    ((UIncreasing(LOAD2033ARR1(java.lang.Object(ARRAY(i4[0], a4426data[0])), i127[0], i130[0])), ≥)∧[(-1)bso_16] ≥ 0)



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

    (6)    ((UIncreasing(LOAD2033ARR1(java.lang.Object(ARRAY(i4[0], a4426data[0])), i127[0], i130[0])), ≥)∧0 = 0∧0 = 0∧0 = 0∧0 = 0∧[(-1)bso_16] ≥ 0)







For Pair LOAD2033ARR1(java.lang.Object(ARRAY(i4, a4426data)), i127, i130) → COND_LOAD2033ARR1(&&(&&(&&(>(i127, 0), <(i127, i4)), >(i130, 0)), >(+(i127, 1), 0)), java.lang.Object(ARRAY(i4, a4426data)), i127, i130) the following chains were created:
  • We consider the chain LOAD2033ARR1(java.lang.Object(ARRAY(i4[1], a4426data[1])), i127[1], i130[1]) → COND_LOAD2033ARR1(&&(&&(&&(>(i127[1], 0), <(i127[1], i4[1])), >(i130[1], 0)), >(+(i127[1], 1), 0)), java.lang.Object(ARRAY(i4[1], a4426data[1])), i127[1], i130[1]), COND_LOAD2033ARR1(TRUE, java.lang.Object(ARRAY(i4[2], a4426data[2])), i127[2], i130[2]) → LOAD2033(java.lang.Object(ARRAY(i4[2], a4426data[2])), +(i127[2], 1), +(i130[2], -1)) which results in the following constraint:

    (7)    (i130[1]=i130[2]i127[1]=i127[2]&&(&&(&&(>(i127[1], 0), <(i127[1], i4[1])), >(i130[1], 0)), >(+(i127[1], 1), 0))=TRUEi4[1]=i4[2]a4426data[1]=a4426data[2]LOAD2033ARR1(java.lang.Object(ARRAY(i4[1], a4426data[1])), i127[1], i130[1])≥NonInfC∧LOAD2033ARR1(java.lang.Object(ARRAY(i4[1], a4426data[1])), i127[1], i130[1])≥COND_LOAD2033ARR1(&&(&&(&&(>(i127[1], 0), <(i127[1], i4[1])), >(i130[1], 0)), >(+(i127[1], 1), 0)), java.lang.Object(ARRAY(i4[1], a4426data[1])), i127[1], i130[1])∧(UIncreasing(COND_LOAD2033ARR1(&&(&&(&&(>(i127[1], 0), <(i127[1], i4[1])), >(i130[1], 0)), >(+(i127[1], 1), 0)), java.lang.Object(ARRAY(i4[1], a4426data[1])), i127[1], i130[1])), ≥))



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

    (8)    (>(+(i127[1], 1), 0)=TRUE>(i130[1], 0)=TRUE>(i127[1], 0)=TRUE<(i127[1], i4[1])=TRUELOAD2033ARR1(java.lang.Object(ARRAY(i4[1], a4426data[1])), i127[1], i130[1])≥NonInfC∧LOAD2033ARR1(java.lang.Object(ARRAY(i4[1], a4426data[1])), i127[1], i130[1])≥COND_LOAD2033ARR1(&&(&&(&&(>(i127[1], 0), <(i127[1], i4[1])), >(i130[1], 0)), >(+(i127[1], 1), 0)), java.lang.Object(ARRAY(i4[1], a4426data[1])), i127[1], i130[1])∧(UIncreasing(COND_LOAD2033ARR1(&&(&&(&&(>(i127[1], 0), <(i127[1], i4[1])), >(i130[1], 0)), >(+(i127[1], 1), 0)), java.lang.Object(ARRAY(i4[1], a4426data[1])), i127[1], i130[1])), ≥))



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

    (9)    (i127[1] ≥ 0∧i130[1] + [-1] ≥ 0∧i127[1] + [-1] ≥ 0∧i4[1] + [-1] + [-1]i127[1] ≥ 0 ⇒ (UIncreasing(COND_LOAD2033ARR1(&&(&&(&&(>(i127[1], 0), <(i127[1], i4[1])), >(i130[1], 0)), >(+(i127[1], 1), 0)), java.lang.Object(ARRAY(i4[1], a4426data[1])), i127[1], i130[1])), ≥)∧[(2)bni_17 + (-1)Bound*bni_17] + [bni_17]i130[1] + [(-1)bni_17]i127[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)    (i127[1] ≥ 0∧i130[1] + [-1] ≥ 0∧i127[1] + [-1] ≥ 0∧i4[1] + [-1] + [-1]i127[1] ≥ 0 ⇒ (UIncreasing(COND_LOAD2033ARR1(&&(&&(&&(>(i127[1], 0), <(i127[1], i4[1])), >(i130[1], 0)), >(+(i127[1], 1), 0)), java.lang.Object(ARRAY(i4[1], a4426data[1])), i127[1], i130[1])), ≥)∧[(2)bni_17 + (-1)Bound*bni_17] + [bni_17]i130[1] + [(-1)bni_17]i127[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)    (i127[1] ≥ 0∧i130[1] + [-1] ≥ 0∧i127[1] + [-1] ≥ 0∧i4[1] + [-1] + [-1]i127[1] ≥ 0 ⇒ (UIncreasing(COND_LOAD2033ARR1(&&(&&(&&(>(i127[1], 0), <(i127[1], i4[1])), >(i130[1], 0)), >(+(i127[1], 1), 0)), java.lang.Object(ARRAY(i4[1], a4426data[1])), i127[1], i130[1])), ≥)∧[(2)bni_17 + (-1)Bound*bni_17] + [bni_17]i130[1] + [(-1)bni_17]i127[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)    (i127[1] ≥ 0∧i130[1] + [-1] ≥ 0∧i127[1] + [-1] ≥ 0∧i4[1] + [-1] + [-1]i127[1] ≥ 0 ⇒ (UIncreasing(COND_LOAD2033ARR1(&&(&&(&&(>(i127[1], 0), <(i127[1], i4[1])), >(i130[1], 0)), >(+(i127[1], 1), 0)), java.lang.Object(ARRAY(i4[1], a4426data[1])), i127[1], i130[1])), ≥)∧0 = 0∧[(2)bni_17 + (-1)Bound*bni_17] + [bni_17]i130[1] + [(-1)bni_17]i127[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] + i127[1] ≥ 0∧i130[1] + [-1] ≥ 0∧i127[1] ≥ 0∧i4[1] + [-2] + [-1]i127[1] ≥ 0 ⇒ (UIncreasing(COND_LOAD2033ARR1(&&(&&(&&(>(i127[1], 0), <(i127[1], i4[1])), >(i130[1], 0)), >(+(i127[1], 1), 0)), java.lang.Object(ARRAY(i4[1], a4426data[1])), i127[1], i130[1])), ≥)∧0 = 0∧[bni_17 + (-1)Bound*bni_17] + [bni_17]i130[1] + [(-1)bni_17]i127[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] + i127[1] ≥ 0∧i130[1] ≥ 0∧i127[1] ≥ 0∧i4[1] + [-2] + [-1]i127[1] ≥ 0 ⇒ (UIncreasing(COND_LOAD2033ARR1(&&(&&(&&(>(i127[1], 0), <(i127[1], i4[1])), >(i130[1], 0)), >(+(i127[1], 1), 0)), java.lang.Object(ARRAY(i4[1], a4426data[1])), i127[1], i130[1])), ≥)∧0 = 0∧[(2)bni_17 + (-1)Bound*bni_17] + [bni_17]i130[1] + [(-1)bni_17]i127[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] + i127[1] ≥ 0∧i130[1] ≥ 0∧i127[1] ≥ 0∧i4[1] ≥ 0 ⇒ (UIncreasing(COND_LOAD2033ARR1(&&(&&(&&(>(i127[1], 0), <(i127[1], i4[1])), >(i130[1], 0)), >(+(i127[1], 1), 0)), java.lang.Object(ARRAY(i4[1], a4426data[1])), i127[1], i130[1])), ≥)∧0 = 0∧[(4)bni_17 + (-1)Bound*bni_17] + [bni_17]i130[1] + [bni_17]i4[1] ≥ 0∧0 = 0∧[(-1)bso_18] ≥ 0)







For Pair COND_LOAD2033ARR1(TRUE, java.lang.Object(ARRAY(i4, a4426data)), i127, i130) → LOAD2033(java.lang.Object(ARRAY(i4, a4426data)), +(i127, 1), +(i130, -1)) the following chains were created:
  • We consider the chain COND_LOAD2033ARR1(TRUE, java.lang.Object(ARRAY(i4[2], a4426data[2])), i127[2], i130[2]) → LOAD2033(java.lang.Object(ARRAY(i4[2], a4426data[2])), +(i127[2], 1), +(i130[2], -1)) which results in the following constraint:

    (16)    (COND_LOAD2033ARR1(TRUE, java.lang.Object(ARRAY(i4[2], a4426data[2])), i127[2], i130[2])≥NonInfC∧COND_LOAD2033ARR1(TRUE, java.lang.Object(ARRAY(i4[2], a4426data[2])), i127[2], i130[2])≥LOAD2033(java.lang.Object(ARRAY(i4[2], a4426data[2])), +(i127[2], 1), +(i130[2], -1))∧(UIncreasing(LOAD2033(java.lang.Object(ARRAY(i4[2], a4426data[2])), +(i127[2], 1), +(i130[2], -1))), ≥))



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

    (17)    ((UIncreasing(LOAD2033(java.lang.Object(ARRAY(i4[2], a4426data[2])), +(i127[2], 1), +(i130[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(LOAD2033(java.lang.Object(ARRAY(i4[2], a4426data[2])), +(i127[2], 1), +(i130[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(LOAD2033(java.lang.Object(ARRAY(i4[2], a4426data[2])), +(i127[2], 1), +(i130[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(LOAD2033(java.lang.Object(ARRAY(i4[2], a4426data[2])), +(i127[2], 1), +(i130[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.
  • LOAD2033(java.lang.Object(ARRAY(i4, a4426data)), i127, i130) → LOAD2033ARR1(java.lang.Object(ARRAY(i4, a4426data)), i127, i130)
    • ((UIncreasing(LOAD2033ARR1(java.lang.Object(ARRAY(i4[0], a4426data[0])), i127[0], i130[0])), ≥)∧0 = 0∧0 = 0∧0 = 0∧0 = 0∧[(-1)bso_16] ≥ 0)

  • LOAD2033ARR1(java.lang.Object(ARRAY(i4, a4426data)), i127, i130) → COND_LOAD2033ARR1(&&(&&(&&(>(i127, 0), <(i127, i4)), >(i130, 0)), >(+(i127, 1), 0)), java.lang.Object(ARRAY(i4, a4426data)), i127, i130)
    • ([1] + i127[1] ≥ 0∧i130[1] ≥ 0∧i127[1] ≥ 0∧i4[1] ≥ 0 ⇒ (UIncreasing(COND_LOAD2033ARR1(&&(&&(&&(>(i127[1], 0), <(i127[1], i4[1])), >(i130[1], 0)), >(+(i127[1], 1), 0)), java.lang.Object(ARRAY(i4[1], a4426data[1])), i127[1], i130[1])), ≥)∧0 = 0∧[(4)bni_17 + (-1)Bound*bni_17] + [bni_17]i130[1] + [bni_17]i4[1] ≥ 0∧0 = 0∧[(-1)bso_18] ≥ 0)

  • COND_LOAD2033ARR1(TRUE, java.lang.Object(ARRAY(i4, a4426data)), i127, i130) → LOAD2033(java.lang.Object(ARRAY(i4, a4426data)), +(i127, 1), +(i130, -1))
    • ((UIncreasing(LOAD2033(java.lang.Object(ARRAY(i4[2], a4426data[2])), +(i127[2], 1), +(i130[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(LOAD2033(x1, x2, x3)) = [1] + x3 + [-1]x2 + [-1]x1   
POL(java.lang.Object(x1)) = x1   
POL(ARRAY(x1, x2)) = [-1] + [-1]x1   
POL(LOAD2033ARR1(x1, x2, x3)) = [1] + x3 + [-1]x2 + [-1]x1   
POL(COND_LOAD2033ARR1(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_LOAD2033ARR1(TRUE, java.lang.Object(ARRAY(i4[2], a4426data[2])), i127[2], i130[2]) → LOAD2033(java.lang.Object(ARRAY(i4[2], a4426data[2])), +(i127[2], 1), +(i130[2], -1))

The following pairs are in Pbound:

LOAD2033ARR1(java.lang.Object(ARRAY(i4[1], a4426data[1])), i127[1], i130[1]) → COND_LOAD2033ARR1(&&(&&(&&(>(i127[1], 0), <(i127[1], i4[1])), >(i130[1], 0)), >(+(i127[1], 1), 0)), java.lang.Object(ARRAY(i4[1], a4426data[1])), i127[1], i130[1])

The following pairs are in P:

LOAD2033(java.lang.Object(ARRAY(i4[0], a4426data[0])), i127[0], i130[0]) → LOAD2033ARR1(java.lang.Object(ARRAY(i4[0], a4426data[0])), i127[0], i130[0])
LOAD2033ARR1(java.lang.Object(ARRAY(i4[1], a4426data[1])), i127[1], i130[1]) → COND_LOAD2033ARR1(&&(&&(&&(>(i127[1], 0), <(i127[1], i4[1])), >(i130[1], 0)), >(+(i127[1], 1), 0)), java.lang.Object(ARRAY(i4[1], a4426data[1])), i127[1], i130[1])

There are no usable rules.

(41) Complex Obligation (AND)

(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): LOAD2033(java.lang.Object(ARRAY(i4[0], a4426data[0])), i127[0], i130[0]) → LOAD2033ARR1(java.lang.Object(ARRAY(i4[0], a4426data[0])), i127[0], i130[0])
(1): LOAD2033ARR1(java.lang.Object(ARRAY(i4[1], a4426data[1])), i127[1], i130[1]) → COND_LOAD2033ARR1(i127[1] > 0 && i127[1] < i4[1] && i130[1] > 0 && i127[1] + 1 > 0, java.lang.Object(ARRAY(i4[1], a4426data[1])), i127[1], i130[1])

(0) -> (1), if ((i130[0]* i130[1])∧(i127[0]* i127[1])∧((i4[0]* i4[1])∧(a4426data[0]* a4426data[1])))



The set Q consists of the following terms:
Load2033(java.lang.Object(ARRAY(x0, x1)), x2, x3)
Load2033ARR1(java.lang.Object(ARRAY(x0, x1)), x2, x3)
Cond_Load2033ARR1(TRUE, java.lang.Object(ARRAY(x0, x1)), x2, x3)

(43) IDependencyGraphProof (EQUIVALENT transformation)

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

(44) TRUE

(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:

Integer


R is empty.

The integer pair graph contains the following rules and edges:
(0): LOAD2033(java.lang.Object(ARRAY(i4[0], a4426data[0])), i127[0], i130[0]) → LOAD2033ARR1(java.lang.Object(ARRAY(i4[0], a4426data[0])), i127[0], i130[0])
(2): COND_LOAD2033ARR1(TRUE, java.lang.Object(ARRAY(i4[2], a4426data[2])), i127[2], i130[2]) → LOAD2033(java.lang.Object(ARRAY(i4[2], a4426data[2])), i127[2] + 1, i130[2] + -1)

(2) -> (0), if ((i130[2] + -1* i130[0])∧((i4[2]* i4[0])∧(a4426data[2]* a4426data[0]))∧(i127[2] + 1* i127[0]))



The set Q consists of the following terms:
Load2033(java.lang.Object(ARRAY(x0, x1)), x2, x3)
Load2033ARR1(java.lang.Object(ARRAY(x0, x1)), x2, x3)
Cond_Load2033ARR1(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