(0) Obligation:

JBC Problem based on JBC Program:
Manifest-Version: 1.0 Created-By: 1.6.0_20 (Apple Inc.) Main-Class: Test9
public class Test9 {
public static void main(String[] args) {
long l = args.length;

while (l > 0) {
for (int i = (int) l ; i < 100; i++)
test(i);
l--;
}
}

private static void test(int i) {
int j, k, l, m;

for (j = i; j > 0; j--);
for (k = i; k > 0; k--);
for (l = i; l > 0; l--);
for (m = i; m > 0; m--);
for (j = i; j > 0; j--);
for (k = i; k > 0; k--);
for (l = i; l > 0; l--);
for (m = i; m > 0; m--);
for (j = i; j > 0; j--);
for (k = i; k > 0; k--);
for (l = i; l > 0; l--);
for (m = i; m > 0; m--);
}
}

(1) JBCToGraph (SOUND transformation)

Constructed TerminationGraph.

(2) Obligation:

Termination Graph based on JBC Program:
Test9.main([Ljava/lang/String;)V: Graph of 58 nodes with 1 SCC.

Test9.test(I)V: Graph of 122 nodes with 12 SCCs.


(3) TerminationGraphToSCCProof (SOUND transformation)

Splitted TerminationGraph to 13 SCCss.

(4) Complex Obligation (AND)

(5) Obligation:

SCC of termination graph based on JBC Program.
SCC contains nodes from the following methods: Test9.test(I)V
SCC calls the following helper methods:
Performed SCC analyses: UsedFieldsAnalysis

(6) SCCToIDPv1Proof (SOUND transformation)

Transformed FIGraph SCCs to IDPs. Log:

Generated 6 rules for P and 0 rules for R.


P rules:
549_0_test_LE(EOS(STATIC_549), i161, i161) → 553_0_test_LE(EOS(STATIC_553), i161, i161)
553_0_test_LE(EOS(STATIC_553), i161, i161) → 557_0_test_Inc(EOS(STATIC_557), i161) | >(i161, 0)
557_0_test_Inc(EOS(STATIC_557), i161) → 563_0_test_JMP(EOS(STATIC_563), +(i161, -1)) | >(i161, 0)
563_0_test_JMP(EOS(STATIC_563), i163) → 574_0_test_Load(EOS(STATIC_574), i163)
574_0_test_Load(EOS(STATIC_574), i163) → 546_0_test_Load(EOS(STATIC_546), i163)
546_0_test_Load(EOS(STATIC_546), i158) → 549_0_test_LE(EOS(STATIC_549), i158, i158)
R rules:

Combined rules. Obtained 1 conditional rules for P and 0 conditional rules for R.


P rules:
549_0_test_LE(EOS(STATIC_549), x0, x0) → 549_0_test_LE(EOS(STATIC_549), +(x0, -1), +(x0, -1)) | >(x0, 0)
R rules:

Filtered ground terms:



549_0_test_LE(x1, x2, x3) → 549_0_test_LE(x2, x3)
EOS(x1) → EOS
Cond_549_0_test_LE(x1, x2, x3, x4) → Cond_549_0_test_LE(x1, x3, x4)

Filtered duplicate args:



549_0_test_LE(x1, x2) → 549_0_test_LE(x2)
Cond_549_0_test_LE(x1, x2, x3) → Cond_549_0_test_LE(x1, x3)

Combined rules. Obtained 1 conditional rules for P and 0 conditional rules for R.


P rules:
549_0_test_LE(x0) → 549_0_test_LE(+(x0, -1)) | >(x0, 0)
R rules:

Finished conversion. Obtained 2 rules for P and 0 rules for R. System has predefined symbols.


P rules:
549_0_TEST_LE(x0) → COND_549_0_TEST_LE(>(x0, 0), x0)
COND_549_0_TEST_LE(TRUE, x0) → 549_0_TEST_LE(+(x0, -1))
R rules:

(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


R is empty.

The integer pair graph contains the following rules and edges:
(0): 549_0_TEST_LE(x0[0]) → COND_549_0_TEST_LE(x0[0] > 0, x0[0])
(1): COND_549_0_TEST_LE(TRUE, x0[1]) → 549_0_TEST_LE(x0[1] + -1)

(0) -> (1), if (x0[0] > 0x0[0]* x0[1])


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



The set Q is empty.

(8) IDPNonInfProof (SOUND transformation)

Used the following options for this NonInfProof:
IDPGPoloSolver: Range: [(-1,2)] IsNat: false Interpretation Shape Heuristic: aprove.DPFramework.IDPProblem.Processors.nonInf.poly.IdpCand1ShapeHeuristic@172675af Constraint Generator: NonInfConstraintGenerator: PathGenerator: MetricPathGenerator: Max Left Steps: 0 Max Right Steps: 0

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

    (1)    (>(x0[0], 0)=TRUEx0[0]=x0[1]549_0_TEST_LE(x0[0])≥NonInfC∧549_0_TEST_LE(x0[0])≥COND_549_0_TEST_LE(>(x0[0], 0), x0[0])∧(UIncreasing(COND_549_0_TEST_LE(>(x0[0], 0), x0[0])), ≥))



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

    (2)    (>(x0[0], 0)=TRUE549_0_TEST_LE(x0[0])≥NonInfC∧549_0_TEST_LE(x0[0])≥COND_549_0_TEST_LE(>(x0[0], 0), x0[0])∧(UIncreasing(COND_549_0_TEST_LE(>(x0[0], 0), x0[0])), ≥))



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

    (3)    (x0[0] + [-1] ≥ 0 ⇒ (UIncreasing(COND_549_0_TEST_LE(>(x0[0], 0), x0[0])), ≥)∧[(-1)Bound*bni_8] + [(2)bni_8]x0[0] ≥ 0∧[(-1)bso_9] ≥ 0)



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

    (4)    (x0[0] + [-1] ≥ 0 ⇒ (UIncreasing(COND_549_0_TEST_LE(>(x0[0], 0), x0[0])), ≥)∧[(-1)Bound*bni_8] + [(2)bni_8]x0[0] ≥ 0∧[(-1)bso_9] ≥ 0)



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

    (5)    (x0[0] + [-1] ≥ 0 ⇒ (UIncreasing(COND_549_0_TEST_LE(>(x0[0], 0), x0[0])), ≥)∧[(-1)Bound*bni_8] + [(2)bni_8]x0[0] ≥ 0∧[(-1)bso_9] ≥ 0)



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

    (6)    (x0[0] ≥ 0 ⇒ (UIncreasing(COND_549_0_TEST_LE(>(x0[0], 0), x0[0])), ≥)∧[(-1)Bound*bni_8 + (2)bni_8] + [(2)bni_8]x0[0] ≥ 0∧[(-1)bso_9] ≥ 0)







For Pair COND_549_0_TEST_LE(TRUE, x0) → 549_0_TEST_LE(+(x0, -1)) the following chains were created:
  • We consider the chain COND_549_0_TEST_LE(TRUE, x0[1]) → 549_0_TEST_LE(+(x0[1], -1)) which results in the following constraint:

    (7)    (COND_549_0_TEST_LE(TRUE, x0[1])≥NonInfC∧COND_549_0_TEST_LE(TRUE, x0[1])≥549_0_TEST_LE(+(x0[1], -1))∧(UIncreasing(549_0_TEST_LE(+(x0[1], -1))), ≥))



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

    (8)    ((UIncreasing(549_0_TEST_LE(+(x0[1], -1))), ≥)∧[bni_10] = 0∧[2 + (-1)bso_11] ≥ 0)



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

    (9)    ((UIncreasing(549_0_TEST_LE(+(x0[1], -1))), ≥)∧[bni_10] = 0∧[2 + (-1)bso_11] ≥ 0)



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

    (10)    ((UIncreasing(549_0_TEST_LE(+(x0[1], -1))), ≥)∧[bni_10] = 0∧[2 + (-1)bso_11] ≥ 0)



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

    (11)    ((UIncreasing(549_0_TEST_LE(+(x0[1], -1))), ≥)∧[bni_10] = 0∧0 = 0∧[2 + (-1)bso_11] ≥ 0)







To summarize, we get the following constraints P for the following pairs.
  • 549_0_TEST_LE(x0) → COND_549_0_TEST_LE(>(x0, 0), x0)
    • (x0[0] ≥ 0 ⇒ (UIncreasing(COND_549_0_TEST_LE(>(x0[0], 0), x0[0])), ≥)∧[(-1)Bound*bni_8 + (2)bni_8] + [(2)bni_8]x0[0] ≥ 0∧[(-1)bso_9] ≥ 0)

  • COND_549_0_TEST_LE(TRUE, x0) → 549_0_TEST_LE(+(x0, -1))
    • ((UIncreasing(549_0_TEST_LE(+(x0[1], -1))), ≥)∧[bni_10] = 0∧0 = 0∧[2 + (-1)bso_11] ≥ 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(549_0_TEST_LE(x1)) = [2]x1   
POL(COND_549_0_TEST_LE(x1, x2)) = [2]x2   
POL(>(x1, x2)) = [-1]   
POL(0) = 0   
POL(+(x1, x2)) = x1 + x2   
POL(-1) = [-1]   

The following pairs are in P>:

COND_549_0_TEST_LE(TRUE, x0[1]) → 549_0_TEST_LE(+(x0[1], -1))

The following pairs are in Pbound:

549_0_TEST_LE(x0[0]) → COND_549_0_TEST_LE(>(x0[0], 0), x0[0])

The following pairs are in P:

549_0_TEST_LE(x0[0]) → COND_549_0_TEST_LE(>(x0[0], 0), x0[0])

There are no usable rules.

(9) Complex Obligation (AND)

(10) 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): 549_0_TEST_LE(x0[0]) → COND_549_0_TEST_LE(x0[0] > 0, x0[0])


The set Q is empty.

(11) IDependencyGraphProof (EQUIVALENT transformation)

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

(12) TRUE

(13) 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_549_0_TEST_LE(TRUE, x0[1]) → 549_0_TEST_LE(x0[1] + -1)


The set Q is empty.

(14) IDependencyGraphProof (EQUIVALENT transformation)

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

(15) TRUE

(16) Obligation:

SCC of termination graph based on JBC Program.
SCC contains nodes from the following methods: Test9.test(I)V
SCC calls the following helper methods:
Performed SCC analyses: UsedFieldsAnalysis

(17) SCCToIDPv1Proof (SOUND transformation)

Transformed FIGraph SCCs to IDPs. Log:

Generated 6 rules for P and 0 rules for R.


P rules:
515_0_test_LE(EOS(STATIC_515), i150, i150) → 518_0_test_LE(EOS(STATIC_518), i150, i150)
518_0_test_LE(EOS(STATIC_518), i150, i150) → 522_0_test_Inc(EOS(STATIC_522), i150) | >(i150, 0)
522_0_test_Inc(EOS(STATIC_522), i150) → 526_0_test_JMP(EOS(STATIC_526), +(i150, -1)) | >(i150, 0)
526_0_test_JMP(EOS(STATIC_526), i153) → 533_0_test_Load(EOS(STATIC_533), i153)
533_0_test_Load(EOS(STATIC_533), i153) → 512_0_test_Load(EOS(STATIC_512), i153)
512_0_test_Load(EOS(STATIC_512), i144) → 515_0_test_LE(EOS(STATIC_515), i144, i144)
R rules:

Combined rules. Obtained 1 conditional rules for P and 0 conditional rules for R.


P rules:
515_0_test_LE(EOS(STATIC_515), x0, x0) → 515_0_test_LE(EOS(STATIC_515), +(x0, -1), +(x0, -1)) | >(x0, 0)
R rules:

Filtered ground terms:



515_0_test_LE(x1, x2, x3) → 515_0_test_LE(x2, x3)
EOS(x1) → EOS
Cond_515_0_test_LE(x1, x2, x3, x4) → Cond_515_0_test_LE(x1, x3, x4)

Filtered duplicate args:



515_0_test_LE(x1, x2) → 515_0_test_LE(x2)
Cond_515_0_test_LE(x1, x2, x3) → Cond_515_0_test_LE(x1, x3)

Combined rules. Obtained 1 conditional rules for P and 0 conditional rules for R.


P rules:
515_0_test_LE(x0) → 515_0_test_LE(+(x0, -1)) | >(x0, 0)
R rules:

Finished conversion. Obtained 2 rules for P and 0 rules for R. System has predefined symbols.


P rules:
515_0_TEST_LE(x0) → COND_515_0_TEST_LE(>(x0, 0), x0)
COND_515_0_TEST_LE(TRUE, x0) → 515_0_TEST_LE(+(x0, -1))
R rules:

(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


R is empty.

The integer pair graph contains the following rules and edges:
(0): 515_0_TEST_LE(x0[0]) → COND_515_0_TEST_LE(x0[0] > 0, x0[0])
(1): COND_515_0_TEST_LE(TRUE, x0[1]) → 515_0_TEST_LE(x0[1] + -1)

(0) -> (1), if (x0[0] > 0x0[0]* x0[1])


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



The set Q is empty.

(19) IDPNonInfProof (SOUND transformation)

Used the following options for this NonInfProof:
IDPGPoloSolver: Range: [(-1,2)] IsNat: false Interpretation Shape Heuristic: aprove.DPFramework.IDPProblem.Processors.nonInf.poly.IdpCand1ShapeHeuristic@172675af Constraint Generator: NonInfConstraintGenerator: PathGenerator: MetricPathGenerator: Max Left Steps: 0 Max Right Steps: 0

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

    (1)    (>(x0[0], 0)=TRUEx0[0]=x0[1]515_0_TEST_LE(x0[0])≥NonInfC∧515_0_TEST_LE(x0[0])≥COND_515_0_TEST_LE(>(x0[0], 0), x0[0])∧(UIncreasing(COND_515_0_TEST_LE(>(x0[0], 0), x0[0])), ≥))



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

    (2)    (>(x0[0], 0)=TRUE515_0_TEST_LE(x0[0])≥NonInfC∧515_0_TEST_LE(x0[0])≥COND_515_0_TEST_LE(>(x0[0], 0), x0[0])∧(UIncreasing(COND_515_0_TEST_LE(>(x0[0], 0), x0[0])), ≥))



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

    (3)    (x0[0] + [-1] ≥ 0 ⇒ (UIncreasing(COND_515_0_TEST_LE(>(x0[0], 0), x0[0])), ≥)∧[(-1)Bound*bni_8] + [(2)bni_8]x0[0] ≥ 0∧[(-1)bso_9] ≥ 0)



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

    (4)    (x0[0] + [-1] ≥ 0 ⇒ (UIncreasing(COND_515_0_TEST_LE(>(x0[0], 0), x0[0])), ≥)∧[(-1)Bound*bni_8] + [(2)bni_8]x0[0] ≥ 0∧[(-1)bso_9] ≥ 0)



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

    (5)    (x0[0] + [-1] ≥ 0 ⇒ (UIncreasing(COND_515_0_TEST_LE(>(x0[0], 0), x0[0])), ≥)∧[(-1)Bound*bni_8] + [(2)bni_8]x0[0] ≥ 0∧[(-1)bso_9] ≥ 0)



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

    (6)    (x0[0] ≥ 0 ⇒ (UIncreasing(COND_515_0_TEST_LE(>(x0[0], 0), x0[0])), ≥)∧[(-1)Bound*bni_8 + (2)bni_8] + [(2)bni_8]x0[0] ≥ 0∧[(-1)bso_9] ≥ 0)







For Pair COND_515_0_TEST_LE(TRUE, x0) → 515_0_TEST_LE(+(x0, -1)) the following chains were created:
  • We consider the chain COND_515_0_TEST_LE(TRUE, x0[1]) → 515_0_TEST_LE(+(x0[1], -1)) which results in the following constraint:

    (7)    (COND_515_0_TEST_LE(TRUE, x0[1])≥NonInfC∧COND_515_0_TEST_LE(TRUE, x0[1])≥515_0_TEST_LE(+(x0[1], -1))∧(UIncreasing(515_0_TEST_LE(+(x0[1], -1))), ≥))



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

    (8)    ((UIncreasing(515_0_TEST_LE(+(x0[1], -1))), ≥)∧[bni_10] = 0∧[2 + (-1)bso_11] ≥ 0)



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

    (9)    ((UIncreasing(515_0_TEST_LE(+(x0[1], -1))), ≥)∧[bni_10] = 0∧[2 + (-1)bso_11] ≥ 0)



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

    (10)    ((UIncreasing(515_0_TEST_LE(+(x0[1], -1))), ≥)∧[bni_10] = 0∧[2 + (-1)bso_11] ≥ 0)



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

    (11)    ((UIncreasing(515_0_TEST_LE(+(x0[1], -1))), ≥)∧[bni_10] = 0∧0 = 0∧[2 + (-1)bso_11] ≥ 0)







To summarize, we get the following constraints P for the following pairs.
  • 515_0_TEST_LE(x0) → COND_515_0_TEST_LE(>(x0, 0), x0)
    • (x0[0] ≥ 0 ⇒ (UIncreasing(COND_515_0_TEST_LE(>(x0[0], 0), x0[0])), ≥)∧[(-1)Bound*bni_8 + (2)bni_8] + [(2)bni_8]x0[0] ≥ 0∧[(-1)bso_9] ≥ 0)

  • COND_515_0_TEST_LE(TRUE, x0) → 515_0_TEST_LE(+(x0, -1))
    • ((UIncreasing(515_0_TEST_LE(+(x0[1], -1))), ≥)∧[bni_10] = 0∧0 = 0∧[2 + (-1)bso_11] ≥ 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(515_0_TEST_LE(x1)) = [2]x1   
POL(COND_515_0_TEST_LE(x1, x2)) = [2]x2   
POL(>(x1, x2)) = [-1]   
POL(0) = 0   
POL(+(x1, x2)) = x1 + x2   
POL(-1) = [-1]   

The following pairs are in P>:

COND_515_0_TEST_LE(TRUE, x0[1]) → 515_0_TEST_LE(+(x0[1], -1))

The following pairs are in Pbound:

515_0_TEST_LE(x0[0]) → COND_515_0_TEST_LE(>(x0[0], 0), x0[0])

The following pairs are in P:

515_0_TEST_LE(x0[0]) → COND_515_0_TEST_LE(>(x0[0], 0), x0[0])

There are no usable rules.

(20) Complex Obligation (AND)

(21) 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): 515_0_TEST_LE(x0[0]) → COND_515_0_TEST_LE(x0[0] > 0, x0[0])


The set Q is empty.

(22) IDependencyGraphProof (EQUIVALENT transformation)

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

(23) TRUE

(24) 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_515_0_TEST_LE(TRUE, x0[1]) → 515_0_TEST_LE(x0[1] + -1)


The set Q is empty.

(25) IDependencyGraphProof (EQUIVALENT transformation)

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

(26) TRUE

(27) Obligation:

SCC of termination graph based on JBC Program.
SCC contains nodes from the following methods: Test9.test(I)V
SCC calls the following helper methods:
Performed SCC analyses: UsedFieldsAnalysis

(28) SCCToIDPv1Proof (SOUND transformation)

Transformed FIGraph SCCs to IDPs. Log:

Generated 6 rules for P and 0 rules for R.


P rules:
479_0_test_LE(EOS(STATIC_479), i137, i137) → 484_0_test_LE(EOS(STATIC_484), i137, i137)
484_0_test_LE(EOS(STATIC_484), i137, i137) → 488_0_test_Inc(EOS(STATIC_488), i137) | >(i137, 0)
488_0_test_Inc(EOS(STATIC_488), i137) → 493_0_test_JMP(EOS(STATIC_493), +(i137, -1)) | >(i137, 0)
493_0_test_JMP(EOS(STATIC_493), i140) → 498_0_test_Load(EOS(STATIC_498), i140)
498_0_test_Load(EOS(STATIC_498), i140) → 477_0_test_Load(EOS(STATIC_477), i140)
477_0_test_Load(EOS(STATIC_477), i132) → 479_0_test_LE(EOS(STATIC_479), i132, i132)
R rules:

Combined rules. Obtained 1 conditional rules for P and 0 conditional rules for R.


P rules:
479_0_test_LE(EOS(STATIC_479), x0, x0) → 479_0_test_LE(EOS(STATIC_479), +(x0, -1), +(x0, -1)) | >(x0, 0)
R rules:

Filtered ground terms:



479_0_test_LE(x1, x2, x3) → 479_0_test_LE(x2, x3)
EOS(x1) → EOS
Cond_479_0_test_LE(x1, x2, x3, x4) → Cond_479_0_test_LE(x1, x3, x4)

Filtered duplicate args:



479_0_test_LE(x1, x2) → 479_0_test_LE(x2)
Cond_479_0_test_LE(x1, x2, x3) → Cond_479_0_test_LE(x1, x3)

Combined rules. Obtained 1 conditional rules for P and 0 conditional rules for R.


P rules:
479_0_test_LE(x0) → 479_0_test_LE(+(x0, -1)) | >(x0, 0)
R rules:

Finished conversion. Obtained 2 rules for P and 0 rules for R. System has predefined symbols.


P rules:
479_0_TEST_LE(x0) → COND_479_0_TEST_LE(>(x0, 0), x0)
COND_479_0_TEST_LE(TRUE, x0) → 479_0_TEST_LE(+(x0, -1))
R rules:

(29) 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): 479_0_TEST_LE(x0[0]) → COND_479_0_TEST_LE(x0[0] > 0, x0[0])
(1): COND_479_0_TEST_LE(TRUE, x0[1]) → 479_0_TEST_LE(x0[1] + -1)

(0) -> (1), if (x0[0] > 0x0[0]* x0[1])


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



The set Q is empty.

(30) IDPNonInfProof (SOUND transformation)

Used the following options for this NonInfProof:
IDPGPoloSolver: Range: [(-1,2)] IsNat: false Interpretation Shape Heuristic: aprove.DPFramework.IDPProblem.Processors.nonInf.poly.IdpCand1ShapeHeuristic@172675af Constraint Generator: NonInfConstraintGenerator: PathGenerator: MetricPathGenerator: Max Left Steps: 0 Max Right Steps: 0

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

    (1)    (>(x0[0], 0)=TRUEx0[0]=x0[1]479_0_TEST_LE(x0[0])≥NonInfC∧479_0_TEST_LE(x0[0])≥COND_479_0_TEST_LE(>(x0[0], 0), x0[0])∧(UIncreasing(COND_479_0_TEST_LE(>(x0[0], 0), x0[0])), ≥))



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

    (2)    (>(x0[0], 0)=TRUE479_0_TEST_LE(x0[0])≥NonInfC∧479_0_TEST_LE(x0[0])≥COND_479_0_TEST_LE(>(x0[0], 0), x0[0])∧(UIncreasing(COND_479_0_TEST_LE(>(x0[0], 0), x0[0])), ≥))



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

    (3)    (x0[0] + [-1] ≥ 0 ⇒ (UIncreasing(COND_479_0_TEST_LE(>(x0[0], 0), x0[0])), ≥)∧[(-1)Bound*bni_8] + [(2)bni_8]x0[0] ≥ 0∧[(-1)bso_9] ≥ 0)



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

    (4)    (x0[0] + [-1] ≥ 0 ⇒ (UIncreasing(COND_479_0_TEST_LE(>(x0[0], 0), x0[0])), ≥)∧[(-1)Bound*bni_8] + [(2)bni_8]x0[0] ≥ 0∧[(-1)bso_9] ≥ 0)



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

    (5)    (x0[0] + [-1] ≥ 0 ⇒ (UIncreasing(COND_479_0_TEST_LE(>(x0[0], 0), x0[0])), ≥)∧[(-1)Bound*bni_8] + [(2)bni_8]x0[0] ≥ 0∧[(-1)bso_9] ≥ 0)



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

    (6)    (x0[0] ≥ 0 ⇒ (UIncreasing(COND_479_0_TEST_LE(>(x0[0], 0), x0[0])), ≥)∧[(-1)Bound*bni_8 + (2)bni_8] + [(2)bni_8]x0[0] ≥ 0∧[(-1)bso_9] ≥ 0)







For Pair COND_479_0_TEST_LE(TRUE, x0) → 479_0_TEST_LE(+(x0, -1)) the following chains were created:
  • We consider the chain COND_479_0_TEST_LE(TRUE, x0[1]) → 479_0_TEST_LE(+(x0[1], -1)) which results in the following constraint:

    (7)    (COND_479_0_TEST_LE(TRUE, x0[1])≥NonInfC∧COND_479_0_TEST_LE(TRUE, x0[1])≥479_0_TEST_LE(+(x0[1], -1))∧(UIncreasing(479_0_TEST_LE(+(x0[1], -1))), ≥))



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

    (8)    ((UIncreasing(479_0_TEST_LE(+(x0[1], -1))), ≥)∧[bni_10] = 0∧[2 + (-1)bso_11] ≥ 0)



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

    (9)    ((UIncreasing(479_0_TEST_LE(+(x0[1], -1))), ≥)∧[bni_10] = 0∧[2 + (-1)bso_11] ≥ 0)



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

    (10)    ((UIncreasing(479_0_TEST_LE(+(x0[1], -1))), ≥)∧[bni_10] = 0∧[2 + (-1)bso_11] ≥ 0)



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

    (11)    ((UIncreasing(479_0_TEST_LE(+(x0[1], -1))), ≥)∧[bni_10] = 0∧0 = 0∧[2 + (-1)bso_11] ≥ 0)







To summarize, we get the following constraints P for the following pairs.
  • 479_0_TEST_LE(x0) → COND_479_0_TEST_LE(>(x0, 0), x0)
    • (x0[0] ≥ 0 ⇒ (UIncreasing(COND_479_0_TEST_LE(>(x0[0], 0), x0[0])), ≥)∧[(-1)Bound*bni_8 + (2)bni_8] + [(2)bni_8]x0[0] ≥ 0∧[(-1)bso_9] ≥ 0)

  • COND_479_0_TEST_LE(TRUE, x0) → 479_0_TEST_LE(+(x0, -1))
    • ((UIncreasing(479_0_TEST_LE(+(x0[1], -1))), ≥)∧[bni_10] = 0∧0 = 0∧[2 + (-1)bso_11] ≥ 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(479_0_TEST_LE(x1)) = [2]x1   
POL(COND_479_0_TEST_LE(x1, x2)) = [2]x2   
POL(>(x1, x2)) = [-1]   
POL(0) = 0   
POL(+(x1, x2)) = x1 + x2   
POL(-1) = [-1]   

The following pairs are in P>:

COND_479_0_TEST_LE(TRUE, x0[1]) → 479_0_TEST_LE(+(x0[1], -1))

The following pairs are in Pbound:

479_0_TEST_LE(x0[0]) → COND_479_0_TEST_LE(>(x0[0], 0), x0[0])

The following pairs are in P:

479_0_TEST_LE(x0[0]) → COND_479_0_TEST_LE(>(x0[0], 0), x0[0])

There are no usable rules.

(31) Complex Obligation (AND)

(32) 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): 479_0_TEST_LE(x0[0]) → COND_479_0_TEST_LE(x0[0] > 0, x0[0])


The set Q is empty.

(33) IDependencyGraphProof (EQUIVALENT transformation)

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

(34) TRUE

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

Integer


R is empty.

The integer pair graph contains the following rules and edges:
(1): COND_479_0_TEST_LE(TRUE, x0[1]) → 479_0_TEST_LE(x0[1] + -1)


The set Q is empty.

(36) IDependencyGraphProof (EQUIVALENT transformation)

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

(37) TRUE

(38) Obligation:

SCC of termination graph based on JBC Program.
SCC contains nodes from the following methods: Test9.test(I)V
SCC calls the following helper methods:
Performed SCC analyses: UsedFieldsAnalysis

(39) SCCToIDPv1Proof (SOUND transformation)

Transformed FIGraph SCCs to IDPs. Log:

Generated 6 rules for P and 0 rules for R.


P rules:
446_0_test_LE(EOS(STATIC_446), i126, i126) → 449_0_test_LE(EOS(STATIC_449), i126, i126)
449_0_test_LE(EOS(STATIC_449), i126, i126) → 453_0_test_Inc(EOS(STATIC_453), i126) | >(i126, 0)
453_0_test_Inc(EOS(STATIC_453), i126) → 457_0_test_JMP(EOS(STATIC_457), +(i126, -1)) | >(i126, 0)
457_0_test_JMP(EOS(STATIC_457), i128) → 463_0_test_Load(EOS(STATIC_463), i128)
463_0_test_Load(EOS(STATIC_463), i128) → 443_0_test_Load(EOS(STATIC_443), i128)
443_0_test_Load(EOS(STATIC_443), i122) → 446_0_test_LE(EOS(STATIC_446), i122, i122)
R rules:

Combined rules. Obtained 1 conditional rules for P and 0 conditional rules for R.


P rules:
446_0_test_LE(EOS(STATIC_446), x0, x0) → 446_0_test_LE(EOS(STATIC_446), +(x0, -1), +(x0, -1)) | >(x0, 0)
R rules:

Filtered ground terms:



446_0_test_LE(x1, x2, x3) → 446_0_test_LE(x2, x3)
EOS(x1) → EOS
Cond_446_0_test_LE(x1, x2, x3, x4) → Cond_446_0_test_LE(x1, x3, x4)

Filtered duplicate args:



446_0_test_LE(x1, x2) → 446_0_test_LE(x2)
Cond_446_0_test_LE(x1, x2, x3) → Cond_446_0_test_LE(x1, x3)

Combined rules. Obtained 1 conditional rules for P and 0 conditional rules for R.


P rules:
446_0_test_LE(x0) → 446_0_test_LE(+(x0, -1)) | >(x0, 0)
R rules:

Finished conversion. Obtained 2 rules for P and 0 rules for R. System has predefined symbols.


P rules:
446_0_TEST_LE(x0) → COND_446_0_TEST_LE(>(x0, 0), x0)
COND_446_0_TEST_LE(TRUE, x0) → 446_0_TEST_LE(+(x0, -1))
R rules:

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

Integer


R is empty.

The integer pair graph contains the following rules and edges:
(0): 446_0_TEST_LE(x0[0]) → COND_446_0_TEST_LE(x0[0] > 0, x0[0])
(1): COND_446_0_TEST_LE(TRUE, x0[1]) → 446_0_TEST_LE(x0[1] + -1)

(0) -> (1), if (x0[0] > 0x0[0]* x0[1])


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



The set Q is empty.

(41) IDPNonInfProof (SOUND transformation)

Used the following options for this NonInfProof:
IDPGPoloSolver: Range: [(-1,2)] IsNat: false Interpretation Shape Heuristic: aprove.DPFramework.IDPProblem.Processors.nonInf.poly.IdpCand1ShapeHeuristic@172675af Constraint Generator: NonInfConstraintGenerator: PathGenerator: MetricPathGenerator: Max Left Steps: 0 Max Right Steps: 0

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

    (1)    (>(x0[0], 0)=TRUEx0[0]=x0[1]446_0_TEST_LE(x0[0])≥NonInfC∧446_0_TEST_LE(x0[0])≥COND_446_0_TEST_LE(>(x0[0], 0), x0[0])∧(UIncreasing(COND_446_0_TEST_LE(>(x0[0], 0), x0[0])), ≥))



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

    (2)    (>(x0[0], 0)=TRUE446_0_TEST_LE(x0[0])≥NonInfC∧446_0_TEST_LE(x0[0])≥COND_446_0_TEST_LE(>(x0[0], 0), x0[0])∧(UIncreasing(COND_446_0_TEST_LE(>(x0[0], 0), x0[0])), ≥))



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

    (3)    (x0[0] + [-1] ≥ 0 ⇒ (UIncreasing(COND_446_0_TEST_LE(>(x0[0], 0), x0[0])), ≥)∧[(-1)Bound*bni_8] + [(2)bni_8]x0[0] ≥ 0∧[(-1)bso_9] ≥ 0)



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

    (4)    (x0[0] + [-1] ≥ 0 ⇒ (UIncreasing(COND_446_0_TEST_LE(>(x0[0], 0), x0[0])), ≥)∧[(-1)Bound*bni_8] + [(2)bni_8]x0[0] ≥ 0∧[(-1)bso_9] ≥ 0)



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

    (5)    (x0[0] + [-1] ≥ 0 ⇒ (UIncreasing(COND_446_0_TEST_LE(>(x0[0], 0), x0[0])), ≥)∧[(-1)Bound*bni_8] + [(2)bni_8]x0[0] ≥ 0∧[(-1)bso_9] ≥ 0)



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

    (6)    (x0[0] ≥ 0 ⇒ (UIncreasing(COND_446_0_TEST_LE(>(x0[0], 0), x0[0])), ≥)∧[(-1)Bound*bni_8 + (2)bni_8] + [(2)bni_8]x0[0] ≥ 0∧[(-1)bso_9] ≥ 0)







For Pair COND_446_0_TEST_LE(TRUE, x0) → 446_0_TEST_LE(+(x0, -1)) the following chains were created:
  • We consider the chain COND_446_0_TEST_LE(TRUE, x0[1]) → 446_0_TEST_LE(+(x0[1], -1)) which results in the following constraint:

    (7)    (COND_446_0_TEST_LE(TRUE, x0[1])≥NonInfC∧COND_446_0_TEST_LE(TRUE, x0[1])≥446_0_TEST_LE(+(x0[1], -1))∧(UIncreasing(446_0_TEST_LE(+(x0[1], -1))), ≥))



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

    (8)    ((UIncreasing(446_0_TEST_LE(+(x0[1], -1))), ≥)∧[bni_10] = 0∧[2 + (-1)bso_11] ≥ 0)



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

    (9)    ((UIncreasing(446_0_TEST_LE(+(x0[1], -1))), ≥)∧[bni_10] = 0∧[2 + (-1)bso_11] ≥ 0)



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

    (10)    ((UIncreasing(446_0_TEST_LE(+(x0[1], -1))), ≥)∧[bni_10] = 0∧[2 + (-1)bso_11] ≥ 0)



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

    (11)    ((UIncreasing(446_0_TEST_LE(+(x0[1], -1))), ≥)∧[bni_10] = 0∧0 = 0∧[2 + (-1)bso_11] ≥ 0)







To summarize, we get the following constraints P for the following pairs.
  • 446_0_TEST_LE(x0) → COND_446_0_TEST_LE(>(x0, 0), x0)
    • (x0[0] ≥ 0 ⇒ (UIncreasing(COND_446_0_TEST_LE(>(x0[0], 0), x0[0])), ≥)∧[(-1)Bound*bni_8 + (2)bni_8] + [(2)bni_8]x0[0] ≥ 0∧[(-1)bso_9] ≥ 0)

  • COND_446_0_TEST_LE(TRUE, x0) → 446_0_TEST_LE(+(x0, -1))
    • ((UIncreasing(446_0_TEST_LE(+(x0[1], -1))), ≥)∧[bni_10] = 0∧0 = 0∧[2 + (-1)bso_11] ≥ 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(446_0_TEST_LE(x1)) = [2]x1   
POL(COND_446_0_TEST_LE(x1, x2)) = [2]x2   
POL(>(x1, x2)) = [-1]   
POL(0) = 0   
POL(+(x1, x2)) = x1 + x2   
POL(-1) = [-1]   

The following pairs are in P>:

COND_446_0_TEST_LE(TRUE, x0[1]) → 446_0_TEST_LE(+(x0[1], -1))

The following pairs are in Pbound:

446_0_TEST_LE(x0[0]) → COND_446_0_TEST_LE(>(x0[0], 0), x0[0])

The following pairs are in P:

446_0_TEST_LE(x0[0]) → COND_446_0_TEST_LE(>(x0[0], 0), x0[0])

There are no usable rules.

(42) Complex Obligation (AND)

(43) 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): 446_0_TEST_LE(x0[0]) → COND_446_0_TEST_LE(x0[0] > 0, x0[0])


The set Q is empty.

(44) IDependencyGraphProof (EQUIVALENT transformation)

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

(45) TRUE

(46) 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_446_0_TEST_LE(TRUE, x0[1]) → 446_0_TEST_LE(x0[1] + -1)


The set Q is empty.

(47) IDependencyGraphProof (EQUIVALENT transformation)

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

(48) TRUE

(49) Obligation:

SCC of termination graph based on JBC Program.
SCC contains nodes from the following methods: Test9.test(I)V
SCC calls the following helper methods:
Performed SCC analyses: UsedFieldsAnalysis

(50) SCCToIDPv1Proof (SOUND transformation)

Transformed FIGraph SCCs to IDPs. Log:

Generated 6 rules for P and 0 rules for R.


P rules:
410_0_test_LE(EOS(STATIC_410), i112, i112) → 414_0_test_LE(EOS(STATIC_414), i112, i112)
414_0_test_LE(EOS(STATIC_414), i112, i112) → 418_0_test_Inc(EOS(STATIC_418), i112) | >(i112, 0)
418_0_test_Inc(EOS(STATIC_418), i112) → 421_0_test_JMP(EOS(STATIC_421), +(i112, -1)) | >(i112, 0)
421_0_test_JMP(EOS(STATIC_421), i115) → 428_0_test_Load(EOS(STATIC_428), i115)
428_0_test_Load(EOS(STATIC_428), i115) → 407_0_test_Load(EOS(STATIC_407), i115)
407_0_test_Load(EOS(STATIC_407), i109) → 410_0_test_LE(EOS(STATIC_410), i109, i109)
R rules:

Combined rules. Obtained 1 conditional rules for P and 0 conditional rules for R.


P rules:
410_0_test_LE(EOS(STATIC_410), x0, x0) → 410_0_test_LE(EOS(STATIC_410), +(x0, -1), +(x0, -1)) | >(x0, 0)
R rules:

Filtered ground terms:



410_0_test_LE(x1, x2, x3) → 410_0_test_LE(x2, x3)
EOS(x1) → EOS
Cond_410_0_test_LE(x1, x2, x3, x4) → Cond_410_0_test_LE(x1, x3, x4)

Filtered duplicate args:



410_0_test_LE(x1, x2) → 410_0_test_LE(x2)
Cond_410_0_test_LE(x1, x2, x3) → Cond_410_0_test_LE(x1, x3)

Combined rules. Obtained 1 conditional rules for P and 0 conditional rules for R.


P rules:
410_0_test_LE(x0) → 410_0_test_LE(+(x0, -1)) | >(x0, 0)
R rules:

Finished conversion. Obtained 2 rules for P and 0 rules for R. System has predefined symbols.


P rules:
410_0_TEST_LE(x0) → COND_410_0_TEST_LE(>(x0, 0), x0)
COND_410_0_TEST_LE(TRUE, x0) → 410_0_TEST_LE(+(x0, -1))
R rules:

(51) 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): 410_0_TEST_LE(x0[0]) → COND_410_0_TEST_LE(x0[0] > 0, x0[0])
(1): COND_410_0_TEST_LE(TRUE, x0[1]) → 410_0_TEST_LE(x0[1] + -1)

(0) -> (1), if (x0[0] > 0x0[0]* x0[1])


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



The set Q is empty.

(52) IDPNonInfProof (SOUND transformation)

Used the following options for this NonInfProof:
IDPGPoloSolver: Range: [(-1,2)] IsNat: false Interpretation Shape Heuristic: aprove.DPFramework.IDPProblem.Processors.nonInf.poly.IdpCand1ShapeHeuristic@172675af Constraint Generator: NonInfConstraintGenerator: PathGenerator: MetricPathGenerator: Max Left Steps: 0 Max Right Steps: 0

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

    (1)    (>(x0[0], 0)=TRUEx0[0]=x0[1]410_0_TEST_LE(x0[0])≥NonInfC∧410_0_TEST_LE(x0[0])≥COND_410_0_TEST_LE(>(x0[0], 0), x0[0])∧(UIncreasing(COND_410_0_TEST_LE(>(x0[0], 0), x0[0])), ≥))



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

    (2)    (>(x0[0], 0)=TRUE410_0_TEST_LE(x0[0])≥NonInfC∧410_0_TEST_LE(x0[0])≥COND_410_0_TEST_LE(>(x0[0], 0), x0[0])∧(UIncreasing(COND_410_0_TEST_LE(>(x0[0], 0), x0[0])), ≥))



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

    (3)    (x0[0] + [-1] ≥ 0 ⇒ (UIncreasing(COND_410_0_TEST_LE(>(x0[0], 0), x0[0])), ≥)∧[(-1)Bound*bni_8] + [(2)bni_8]x0[0] ≥ 0∧[(-1)bso_9] ≥ 0)



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

    (4)    (x0[0] + [-1] ≥ 0 ⇒ (UIncreasing(COND_410_0_TEST_LE(>(x0[0], 0), x0[0])), ≥)∧[(-1)Bound*bni_8] + [(2)bni_8]x0[0] ≥ 0∧[(-1)bso_9] ≥ 0)



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

    (5)    (x0[0] + [-1] ≥ 0 ⇒ (UIncreasing(COND_410_0_TEST_LE(>(x0[0], 0), x0[0])), ≥)∧[(-1)Bound*bni_8] + [(2)bni_8]x0[0] ≥ 0∧[(-1)bso_9] ≥ 0)



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

    (6)    (x0[0] ≥ 0 ⇒ (UIncreasing(COND_410_0_TEST_LE(>(x0[0], 0), x0[0])), ≥)∧[(-1)Bound*bni_8 + (2)bni_8] + [(2)bni_8]x0[0] ≥ 0∧[(-1)bso_9] ≥ 0)







For Pair COND_410_0_TEST_LE(TRUE, x0) → 410_0_TEST_LE(+(x0, -1)) the following chains were created:
  • We consider the chain COND_410_0_TEST_LE(TRUE, x0[1]) → 410_0_TEST_LE(+(x0[1], -1)) which results in the following constraint:

    (7)    (COND_410_0_TEST_LE(TRUE, x0[1])≥NonInfC∧COND_410_0_TEST_LE(TRUE, x0[1])≥410_0_TEST_LE(+(x0[1], -1))∧(UIncreasing(410_0_TEST_LE(+(x0[1], -1))), ≥))



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

    (8)    ((UIncreasing(410_0_TEST_LE(+(x0[1], -1))), ≥)∧[bni_10] = 0∧[2 + (-1)bso_11] ≥ 0)



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

    (9)    ((UIncreasing(410_0_TEST_LE(+(x0[1], -1))), ≥)∧[bni_10] = 0∧[2 + (-1)bso_11] ≥ 0)



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

    (10)    ((UIncreasing(410_0_TEST_LE(+(x0[1], -1))), ≥)∧[bni_10] = 0∧[2 + (-1)bso_11] ≥ 0)



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

    (11)    ((UIncreasing(410_0_TEST_LE(+(x0[1], -1))), ≥)∧[bni_10] = 0∧0 = 0∧[2 + (-1)bso_11] ≥ 0)







To summarize, we get the following constraints P for the following pairs.
  • 410_0_TEST_LE(x0) → COND_410_0_TEST_LE(>(x0, 0), x0)
    • (x0[0] ≥ 0 ⇒ (UIncreasing(COND_410_0_TEST_LE(>(x0[0], 0), x0[0])), ≥)∧[(-1)Bound*bni_8 + (2)bni_8] + [(2)bni_8]x0[0] ≥ 0∧[(-1)bso_9] ≥ 0)

  • COND_410_0_TEST_LE(TRUE, x0) → 410_0_TEST_LE(+(x0, -1))
    • ((UIncreasing(410_0_TEST_LE(+(x0[1], -1))), ≥)∧[bni_10] = 0∧0 = 0∧[2 + (-1)bso_11] ≥ 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(410_0_TEST_LE(x1)) = [2]x1   
POL(COND_410_0_TEST_LE(x1, x2)) = [2]x2   
POL(>(x1, x2)) = [-1]   
POL(0) = 0   
POL(+(x1, x2)) = x1 + x2   
POL(-1) = [-1]   

The following pairs are in P>:

COND_410_0_TEST_LE(TRUE, x0[1]) → 410_0_TEST_LE(+(x0[1], -1))

The following pairs are in Pbound:

410_0_TEST_LE(x0[0]) → COND_410_0_TEST_LE(>(x0[0], 0), x0[0])

The following pairs are in P:

410_0_TEST_LE(x0[0]) → COND_410_0_TEST_LE(>(x0[0], 0), x0[0])

There are no usable rules.

(53) Complex Obligation (AND)

(54) 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): 410_0_TEST_LE(x0[0]) → COND_410_0_TEST_LE(x0[0] > 0, x0[0])


The set Q is empty.

(55) IDependencyGraphProof (EQUIVALENT transformation)

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

(56) TRUE

(57) 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_410_0_TEST_LE(TRUE, x0[1]) → 410_0_TEST_LE(x0[1] + -1)


The set Q is empty.

(58) IDependencyGraphProof (EQUIVALENT transformation)

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

(59) TRUE

(60) Obligation:

SCC of termination graph based on JBC Program.
SCC contains nodes from the following methods: Test9.test(I)V
SCC calls the following helper methods:
Performed SCC analyses: UsedFieldsAnalysis

(61) SCCToIDPv1Proof (SOUND transformation)

Transformed FIGraph SCCs to IDPs. Log:

Generated 6 rules for P and 0 rules for R.


P rules:
376_0_test_LE(EOS(STATIC_376), i102, i102) → 380_0_test_LE(EOS(STATIC_380), i102, i102)
380_0_test_LE(EOS(STATIC_380), i102, i102) → 384_0_test_Inc(EOS(STATIC_384), i102) | >(i102, 0)
384_0_test_Inc(EOS(STATIC_384), i102) → 388_0_test_JMP(EOS(STATIC_388), +(i102, -1)) | >(i102, 0)
388_0_test_JMP(EOS(STATIC_388), i106) → 393_0_test_Load(EOS(STATIC_393), i106)
393_0_test_Load(EOS(STATIC_393), i106) → 373_0_test_Load(EOS(STATIC_373), i106)
373_0_test_Load(EOS(STATIC_373), i98) → 376_0_test_LE(EOS(STATIC_376), i98, i98)
R rules:

Combined rules. Obtained 1 conditional rules for P and 0 conditional rules for R.


P rules:
376_0_test_LE(EOS(STATIC_376), x0, x0) → 376_0_test_LE(EOS(STATIC_376), +(x0, -1), +(x0, -1)) | >(x0, 0)
R rules:

Filtered ground terms:



376_0_test_LE(x1, x2, x3) → 376_0_test_LE(x2, x3)
EOS(x1) → EOS
Cond_376_0_test_LE(x1, x2, x3, x4) → Cond_376_0_test_LE(x1, x3, x4)

Filtered duplicate args:



376_0_test_LE(x1, x2) → 376_0_test_LE(x2)
Cond_376_0_test_LE(x1, x2, x3) → Cond_376_0_test_LE(x1, x3)

Combined rules. Obtained 1 conditional rules for P and 0 conditional rules for R.


P rules:
376_0_test_LE(x0) → 376_0_test_LE(+(x0, -1)) | >(x0, 0)
R rules:

Finished conversion. Obtained 2 rules for P and 0 rules for R. System has predefined symbols.


P rules:
376_0_TEST_LE(x0) → COND_376_0_TEST_LE(>(x0, 0), x0)
COND_376_0_TEST_LE(TRUE, x0) → 376_0_TEST_LE(+(x0, -1))
R rules:

(62) 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): 376_0_TEST_LE(x0[0]) → COND_376_0_TEST_LE(x0[0] > 0, x0[0])
(1): COND_376_0_TEST_LE(TRUE, x0[1]) → 376_0_TEST_LE(x0[1] + -1)

(0) -> (1), if (x0[0] > 0x0[0]* x0[1])


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



The set Q is empty.

(63) IDPNonInfProof (SOUND transformation)

Used the following options for this NonInfProof:
IDPGPoloSolver: Range: [(-1,2)] IsNat: false Interpretation Shape Heuristic: aprove.DPFramework.IDPProblem.Processors.nonInf.poly.IdpCand1ShapeHeuristic@172675af Constraint Generator: NonInfConstraintGenerator: PathGenerator: MetricPathGenerator: Max Left Steps: 0 Max Right Steps: 0

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

    (1)    (>(x0[0], 0)=TRUEx0[0]=x0[1]376_0_TEST_LE(x0[0])≥NonInfC∧376_0_TEST_LE(x0[0])≥COND_376_0_TEST_LE(>(x0[0], 0), x0[0])∧(UIncreasing(COND_376_0_TEST_LE(>(x0[0], 0), x0[0])), ≥))



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

    (2)    (>(x0[0], 0)=TRUE376_0_TEST_LE(x0[0])≥NonInfC∧376_0_TEST_LE(x0[0])≥COND_376_0_TEST_LE(>(x0[0], 0), x0[0])∧(UIncreasing(COND_376_0_TEST_LE(>(x0[0], 0), x0[0])), ≥))



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

    (3)    (x0[0] + [-1] ≥ 0 ⇒ (UIncreasing(COND_376_0_TEST_LE(>(x0[0], 0), x0[0])), ≥)∧[(-1)Bound*bni_8] + [(2)bni_8]x0[0] ≥ 0∧[(-1)bso_9] ≥ 0)



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

    (4)    (x0[0] + [-1] ≥ 0 ⇒ (UIncreasing(COND_376_0_TEST_LE(>(x0[0], 0), x0[0])), ≥)∧[(-1)Bound*bni_8] + [(2)bni_8]x0[0] ≥ 0∧[(-1)bso_9] ≥ 0)



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

    (5)    (x0[0] + [-1] ≥ 0 ⇒ (UIncreasing(COND_376_0_TEST_LE(>(x0[0], 0), x0[0])), ≥)∧[(-1)Bound*bni_8] + [(2)bni_8]x0[0] ≥ 0∧[(-1)bso_9] ≥ 0)



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

    (6)    (x0[0] ≥ 0 ⇒ (UIncreasing(COND_376_0_TEST_LE(>(x0[0], 0), x0[0])), ≥)∧[(-1)Bound*bni_8 + (2)bni_8] + [(2)bni_8]x0[0] ≥ 0∧[(-1)bso_9] ≥ 0)







For Pair COND_376_0_TEST_LE(TRUE, x0) → 376_0_TEST_LE(+(x0, -1)) the following chains were created:
  • We consider the chain COND_376_0_TEST_LE(TRUE, x0[1]) → 376_0_TEST_LE(+(x0[1], -1)) which results in the following constraint:

    (7)    (COND_376_0_TEST_LE(TRUE, x0[1])≥NonInfC∧COND_376_0_TEST_LE(TRUE, x0[1])≥376_0_TEST_LE(+(x0[1], -1))∧(UIncreasing(376_0_TEST_LE(+(x0[1], -1))), ≥))



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

    (8)    ((UIncreasing(376_0_TEST_LE(+(x0[1], -1))), ≥)∧[bni_10] = 0∧[2 + (-1)bso_11] ≥ 0)



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

    (9)    ((UIncreasing(376_0_TEST_LE(+(x0[1], -1))), ≥)∧[bni_10] = 0∧[2 + (-1)bso_11] ≥ 0)



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

    (10)    ((UIncreasing(376_0_TEST_LE(+(x0[1], -1))), ≥)∧[bni_10] = 0∧[2 + (-1)bso_11] ≥ 0)



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

    (11)    ((UIncreasing(376_0_TEST_LE(+(x0[1], -1))), ≥)∧[bni_10] = 0∧0 = 0∧[2 + (-1)bso_11] ≥ 0)







To summarize, we get the following constraints P for the following pairs.
  • 376_0_TEST_LE(x0) → COND_376_0_TEST_LE(>(x0, 0), x0)
    • (x0[0] ≥ 0 ⇒ (UIncreasing(COND_376_0_TEST_LE(>(x0[0], 0), x0[0])), ≥)∧[(-1)Bound*bni_8 + (2)bni_8] + [(2)bni_8]x0[0] ≥ 0∧[(-1)bso_9] ≥ 0)

  • COND_376_0_TEST_LE(TRUE, x0) → 376_0_TEST_LE(+(x0, -1))
    • ((UIncreasing(376_0_TEST_LE(+(x0[1], -1))), ≥)∧[bni_10] = 0∧0 = 0∧[2 + (-1)bso_11] ≥ 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(376_0_TEST_LE(x1)) = [2]x1   
POL(COND_376_0_TEST_LE(x1, x2)) = [2]x2   
POL(>(x1, x2)) = [-1]   
POL(0) = 0   
POL(+(x1, x2)) = x1 + x2   
POL(-1) = [-1]   

The following pairs are in P>:

COND_376_0_TEST_LE(TRUE, x0[1]) → 376_0_TEST_LE(+(x0[1], -1))

The following pairs are in Pbound:

376_0_TEST_LE(x0[0]) → COND_376_0_TEST_LE(>(x0[0], 0), x0[0])

The following pairs are in P:

376_0_TEST_LE(x0[0]) → COND_376_0_TEST_LE(>(x0[0], 0), x0[0])

There are no usable rules.

(64) Complex Obligation (AND)

(65) 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): 376_0_TEST_LE(x0[0]) → COND_376_0_TEST_LE(x0[0] > 0, x0[0])


The set Q is empty.

(66) IDependencyGraphProof (EQUIVALENT transformation)

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

(67) TRUE

(68) 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_376_0_TEST_LE(TRUE, x0[1]) → 376_0_TEST_LE(x0[1] + -1)


The set Q is empty.

(69) IDependencyGraphProof (EQUIVALENT transformation)

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

(70) TRUE

(71) Obligation:

SCC of termination graph based on JBC Program.
SCC contains nodes from the following methods: Test9.test(I)V
SCC calls the following helper methods:
Performed SCC analyses: UsedFieldsAnalysis

(72) SCCToIDPv1Proof (SOUND transformation)

Transformed FIGraph SCCs to IDPs. Log:

Generated 6 rules for P and 0 rules for R.


P rules:
341_0_test_LE(EOS(STATIC_341), i91, i91) → 345_0_test_LE(EOS(STATIC_345), i91, i91)
345_0_test_LE(EOS(STATIC_345), i91, i91) → 349_0_test_Inc(EOS(STATIC_349), i91) | >(i91, 0)
349_0_test_Inc(EOS(STATIC_349), i91) → 353_0_test_JMP(EOS(STATIC_353), +(i91, -1)) | >(i91, 0)
353_0_test_JMP(EOS(STATIC_353), i94) → 358_0_test_Load(EOS(STATIC_358), i94)
358_0_test_Load(EOS(STATIC_358), i94) → 338_0_test_Load(EOS(STATIC_338), i94)
338_0_test_Load(EOS(STATIC_338), i86) → 341_0_test_LE(EOS(STATIC_341), i86, i86)
R rules:

Combined rules. Obtained 1 conditional rules for P and 0 conditional rules for R.


P rules:
341_0_test_LE(EOS(STATIC_341), x0, x0) → 341_0_test_LE(EOS(STATIC_341), +(x0, -1), +(x0, -1)) | >(x0, 0)
R rules:

Filtered ground terms:



341_0_test_LE(x1, x2, x3) → 341_0_test_LE(x2, x3)
EOS(x1) → EOS
Cond_341_0_test_LE(x1, x2, x3, x4) → Cond_341_0_test_LE(x1, x3, x4)

Filtered duplicate args:



341_0_test_LE(x1, x2) → 341_0_test_LE(x2)
Cond_341_0_test_LE(x1, x2, x3) → Cond_341_0_test_LE(x1, x3)

Combined rules. Obtained 1 conditional rules for P and 0 conditional rules for R.


P rules:
341_0_test_LE(x0) → 341_0_test_LE(+(x0, -1)) | >(x0, 0)
R rules:

Finished conversion. Obtained 2 rules for P and 0 rules for R. System has predefined symbols.


P rules:
341_0_TEST_LE(x0) → COND_341_0_TEST_LE(>(x0, 0), x0)
COND_341_0_TEST_LE(TRUE, x0) → 341_0_TEST_LE(+(x0, -1))
R rules:

(73) 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): 341_0_TEST_LE(x0[0]) → COND_341_0_TEST_LE(x0[0] > 0, x0[0])
(1): COND_341_0_TEST_LE(TRUE, x0[1]) → 341_0_TEST_LE(x0[1] + -1)

(0) -> (1), if (x0[0] > 0x0[0]* x0[1])


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



The set Q is empty.

(74) IDPNonInfProof (SOUND transformation)

Used the following options for this NonInfProof:
IDPGPoloSolver: Range: [(-1,2)] IsNat: false Interpretation Shape Heuristic: aprove.DPFramework.IDPProblem.Processors.nonInf.poly.IdpCand1ShapeHeuristic@172675af Constraint Generator: NonInfConstraintGenerator: PathGenerator: MetricPathGenerator: Max Left Steps: 0 Max Right Steps: 0

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

    (1)    (>(x0[0], 0)=TRUEx0[0]=x0[1]341_0_TEST_LE(x0[0])≥NonInfC∧341_0_TEST_LE(x0[0])≥COND_341_0_TEST_LE(>(x0[0], 0), x0[0])∧(UIncreasing(COND_341_0_TEST_LE(>(x0[0], 0), x0[0])), ≥))



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

    (2)    (>(x0[0], 0)=TRUE341_0_TEST_LE(x0[0])≥NonInfC∧341_0_TEST_LE(x0[0])≥COND_341_0_TEST_LE(>(x0[0], 0), x0[0])∧(UIncreasing(COND_341_0_TEST_LE(>(x0[0], 0), x0[0])), ≥))



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

    (3)    (x0[0] + [-1] ≥ 0 ⇒ (UIncreasing(COND_341_0_TEST_LE(>(x0[0], 0), x0[0])), ≥)∧[(-1)Bound*bni_8] + [(2)bni_8]x0[0] ≥ 0∧[(-1)bso_9] ≥ 0)



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

    (4)    (x0[0] + [-1] ≥ 0 ⇒ (UIncreasing(COND_341_0_TEST_LE(>(x0[0], 0), x0[0])), ≥)∧[(-1)Bound*bni_8] + [(2)bni_8]x0[0] ≥ 0∧[(-1)bso_9] ≥ 0)



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

    (5)    (x0[0] + [-1] ≥ 0 ⇒ (UIncreasing(COND_341_0_TEST_LE(>(x0[0], 0), x0[0])), ≥)∧[(-1)Bound*bni_8] + [(2)bni_8]x0[0] ≥ 0∧[(-1)bso_9] ≥ 0)



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

    (6)    (x0[0] ≥ 0 ⇒ (UIncreasing(COND_341_0_TEST_LE(>(x0[0], 0), x0[0])), ≥)∧[(-1)Bound*bni_8 + (2)bni_8] + [(2)bni_8]x0[0] ≥ 0∧[(-1)bso_9] ≥ 0)







For Pair COND_341_0_TEST_LE(TRUE, x0) → 341_0_TEST_LE(+(x0, -1)) the following chains were created:
  • We consider the chain COND_341_0_TEST_LE(TRUE, x0[1]) → 341_0_TEST_LE(+(x0[1], -1)) which results in the following constraint:

    (7)    (COND_341_0_TEST_LE(TRUE, x0[1])≥NonInfC∧COND_341_0_TEST_LE(TRUE, x0[1])≥341_0_TEST_LE(+(x0[1], -1))∧(UIncreasing(341_0_TEST_LE(+(x0[1], -1))), ≥))



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

    (8)    ((UIncreasing(341_0_TEST_LE(+(x0[1], -1))), ≥)∧[bni_10] = 0∧[2 + (-1)bso_11] ≥ 0)



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

    (9)    ((UIncreasing(341_0_TEST_LE(+(x0[1], -1))), ≥)∧[bni_10] = 0∧[2 + (-1)bso_11] ≥ 0)



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

    (10)    ((UIncreasing(341_0_TEST_LE(+(x0[1], -1))), ≥)∧[bni_10] = 0∧[2 + (-1)bso_11] ≥ 0)



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

    (11)    ((UIncreasing(341_0_TEST_LE(+(x0[1], -1))), ≥)∧[bni_10] = 0∧0 = 0∧[2 + (-1)bso_11] ≥ 0)







To summarize, we get the following constraints P for the following pairs.
  • 341_0_TEST_LE(x0) → COND_341_0_TEST_LE(>(x0, 0), x0)
    • (x0[0] ≥ 0 ⇒ (UIncreasing(COND_341_0_TEST_LE(>(x0[0], 0), x0[0])), ≥)∧[(-1)Bound*bni_8 + (2)bni_8] + [(2)bni_8]x0[0] ≥ 0∧[(-1)bso_9] ≥ 0)

  • COND_341_0_TEST_LE(TRUE, x0) → 341_0_TEST_LE(+(x0, -1))
    • ((UIncreasing(341_0_TEST_LE(+(x0[1], -1))), ≥)∧[bni_10] = 0∧0 = 0∧[2 + (-1)bso_11] ≥ 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(341_0_TEST_LE(x1)) = [2]x1   
POL(COND_341_0_TEST_LE(x1, x2)) = [2]x2   
POL(>(x1, x2)) = [-1]   
POL(0) = 0   
POL(+(x1, x2)) = x1 + x2   
POL(-1) = [-1]   

The following pairs are in P>:

COND_341_0_TEST_LE(TRUE, x0[1]) → 341_0_TEST_LE(+(x0[1], -1))

The following pairs are in Pbound:

341_0_TEST_LE(x0[0]) → COND_341_0_TEST_LE(>(x0[0], 0), x0[0])

The following pairs are in P:

341_0_TEST_LE(x0[0]) → COND_341_0_TEST_LE(>(x0[0], 0), x0[0])

There are no usable rules.

(75) Complex Obligation (AND)

(76) 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): 341_0_TEST_LE(x0[0]) → COND_341_0_TEST_LE(x0[0] > 0, x0[0])


The set Q is empty.

(77) IDependencyGraphProof (EQUIVALENT transformation)

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

(78) TRUE

(79) 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_341_0_TEST_LE(TRUE, x0[1]) → 341_0_TEST_LE(x0[1] + -1)


The set Q is empty.

(80) IDependencyGraphProof (EQUIVALENT transformation)

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

(81) TRUE

(82) Obligation:

SCC of termination graph based on JBC Program.
SCC contains nodes from the following methods: Test9.test(I)V
SCC calls the following helper methods:
Performed SCC analyses: UsedFieldsAnalysis

(83) SCCToIDPv1Proof (SOUND transformation)

Transformed FIGraph SCCs to IDPs. Log:

Generated 6 rules for P and 0 rules for R.


P rules:
306_0_test_LE(EOS(STATIC_306), i78, i78) → 310_0_test_LE(EOS(STATIC_310), i78, i78)
310_0_test_LE(EOS(STATIC_310), i78, i78) → 314_0_test_Inc(EOS(STATIC_314), i78) | >(i78, 0)
314_0_test_Inc(EOS(STATIC_314), i78) → 318_0_test_JMP(EOS(STATIC_318), +(i78, -1)) | >(i78, 0)
318_0_test_JMP(EOS(STATIC_318), i80) → 323_0_test_Load(EOS(STATIC_323), i80)
323_0_test_Load(EOS(STATIC_323), i80) → 303_0_test_Load(EOS(STATIC_303), i80)
303_0_test_Load(EOS(STATIC_303), i74) → 306_0_test_LE(EOS(STATIC_306), i74, i74)
R rules:

Combined rules. Obtained 1 conditional rules for P and 0 conditional rules for R.


P rules:
306_0_test_LE(EOS(STATIC_306), x0, x0) → 306_0_test_LE(EOS(STATIC_306), +(x0, -1), +(x0, -1)) | >(x0, 0)
R rules:

Filtered ground terms:



306_0_test_LE(x1, x2, x3) → 306_0_test_LE(x2, x3)
EOS(x1) → EOS
Cond_306_0_test_LE(x1, x2, x3, x4) → Cond_306_0_test_LE(x1, x3, x4)

Filtered duplicate args:



306_0_test_LE(x1, x2) → 306_0_test_LE(x2)
Cond_306_0_test_LE(x1, x2, x3) → Cond_306_0_test_LE(x1, x3)

Combined rules. Obtained 1 conditional rules for P and 0 conditional rules for R.


P rules:
306_0_test_LE(x0) → 306_0_test_LE(+(x0, -1)) | >(x0, 0)
R rules:

Finished conversion. Obtained 2 rules for P and 0 rules for R. System has predefined symbols.


P rules:
306_0_TEST_LE(x0) → COND_306_0_TEST_LE(>(x0, 0), x0)
COND_306_0_TEST_LE(TRUE, x0) → 306_0_TEST_LE(+(x0, -1))
R rules:

(84) 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): 306_0_TEST_LE(x0[0]) → COND_306_0_TEST_LE(x0[0] > 0, x0[0])
(1): COND_306_0_TEST_LE(TRUE, x0[1]) → 306_0_TEST_LE(x0[1] + -1)

(0) -> (1), if (x0[0] > 0x0[0]* x0[1])


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



The set Q is empty.

(85) IDPNonInfProof (SOUND transformation)

Used the following options for this NonInfProof:
IDPGPoloSolver: Range: [(-1,2)] IsNat: false Interpretation Shape Heuristic: aprove.DPFramework.IDPProblem.Processors.nonInf.poly.IdpCand1ShapeHeuristic@172675af Constraint Generator: NonInfConstraintGenerator: PathGenerator: MetricPathGenerator: Max Left Steps: 0 Max Right Steps: 0

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

    (1)    (>(x0[0], 0)=TRUEx0[0]=x0[1]306_0_TEST_LE(x0[0])≥NonInfC∧306_0_TEST_LE(x0[0])≥COND_306_0_TEST_LE(>(x0[0], 0), x0[0])∧(UIncreasing(COND_306_0_TEST_LE(>(x0[0], 0), x0[0])), ≥))



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

    (2)    (>(x0[0], 0)=TRUE306_0_TEST_LE(x0[0])≥NonInfC∧306_0_TEST_LE(x0[0])≥COND_306_0_TEST_LE(>(x0[0], 0), x0[0])∧(UIncreasing(COND_306_0_TEST_LE(>(x0[0], 0), x0[0])), ≥))



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

    (3)    (x0[0] + [-1] ≥ 0 ⇒ (UIncreasing(COND_306_0_TEST_LE(>(x0[0], 0), x0[0])), ≥)∧[(-1)Bound*bni_8] + [(2)bni_8]x0[0] ≥ 0∧[(-1)bso_9] ≥ 0)



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

    (4)    (x0[0] + [-1] ≥ 0 ⇒ (UIncreasing(COND_306_0_TEST_LE(>(x0[0], 0), x0[0])), ≥)∧[(-1)Bound*bni_8] + [(2)bni_8]x0[0] ≥ 0∧[(-1)bso_9] ≥ 0)



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

    (5)    (x0[0] + [-1] ≥ 0 ⇒ (UIncreasing(COND_306_0_TEST_LE(>(x0[0], 0), x0[0])), ≥)∧[(-1)Bound*bni_8] + [(2)bni_8]x0[0] ≥ 0∧[(-1)bso_9] ≥ 0)



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

    (6)    (x0[0] ≥ 0 ⇒ (UIncreasing(COND_306_0_TEST_LE(>(x0[0], 0), x0[0])), ≥)∧[(-1)Bound*bni_8 + (2)bni_8] + [(2)bni_8]x0[0] ≥ 0∧[(-1)bso_9] ≥ 0)







For Pair COND_306_0_TEST_LE(TRUE, x0) → 306_0_TEST_LE(+(x0, -1)) the following chains were created:
  • We consider the chain COND_306_0_TEST_LE(TRUE, x0[1]) → 306_0_TEST_LE(+(x0[1], -1)) which results in the following constraint:

    (7)    (COND_306_0_TEST_LE(TRUE, x0[1])≥NonInfC∧COND_306_0_TEST_LE(TRUE, x0[1])≥306_0_TEST_LE(+(x0[1], -1))∧(UIncreasing(306_0_TEST_LE(+(x0[1], -1))), ≥))



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

    (8)    ((UIncreasing(306_0_TEST_LE(+(x0[1], -1))), ≥)∧[bni_10] = 0∧[2 + (-1)bso_11] ≥ 0)



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

    (9)    ((UIncreasing(306_0_TEST_LE(+(x0[1], -1))), ≥)∧[bni_10] = 0∧[2 + (-1)bso_11] ≥ 0)



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

    (10)    ((UIncreasing(306_0_TEST_LE(+(x0[1], -1))), ≥)∧[bni_10] = 0∧[2 + (-1)bso_11] ≥ 0)



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

    (11)    ((UIncreasing(306_0_TEST_LE(+(x0[1], -1))), ≥)∧[bni_10] = 0∧0 = 0∧[2 + (-1)bso_11] ≥ 0)







To summarize, we get the following constraints P for the following pairs.
  • 306_0_TEST_LE(x0) → COND_306_0_TEST_LE(>(x0, 0), x0)
    • (x0[0] ≥ 0 ⇒ (UIncreasing(COND_306_0_TEST_LE(>(x0[0], 0), x0[0])), ≥)∧[(-1)Bound*bni_8 + (2)bni_8] + [(2)bni_8]x0[0] ≥ 0∧[(-1)bso_9] ≥ 0)

  • COND_306_0_TEST_LE(TRUE, x0) → 306_0_TEST_LE(+(x0, -1))
    • ((UIncreasing(306_0_TEST_LE(+(x0[1], -1))), ≥)∧[bni_10] = 0∧0 = 0∧[2 + (-1)bso_11] ≥ 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(306_0_TEST_LE(x1)) = [2]x1   
POL(COND_306_0_TEST_LE(x1, x2)) = [2]x2   
POL(>(x1, x2)) = [-1]   
POL(0) = 0   
POL(+(x1, x2)) = x1 + x2   
POL(-1) = [-1]   

The following pairs are in P>:

COND_306_0_TEST_LE(TRUE, x0[1]) → 306_0_TEST_LE(+(x0[1], -1))

The following pairs are in Pbound:

306_0_TEST_LE(x0[0]) → COND_306_0_TEST_LE(>(x0[0], 0), x0[0])

The following pairs are in P:

306_0_TEST_LE(x0[0]) → COND_306_0_TEST_LE(>(x0[0], 0), x0[0])

There are no usable rules.

(86) Complex Obligation (AND)

(87) 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): 306_0_TEST_LE(x0[0]) → COND_306_0_TEST_LE(x0[0] > 0, x0[0])


The set Q is empty.

(88) IDependencyGraphProof (EQUIVALENT transformation)

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

(89) TRUE

(90) 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_306_0_TEST_LE(TRUE, x0[1]) → 306_0_TEST_LE(x0[1] + -1)


The set Q is empty.

(91) IDependencyGraphProof (EQUIVALENT transformation)

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

(92) TRUE

(93) Obligation:

SCC of termination graph based on JBC Program.
SCC contains nodes from the following methods: Test9.test(I)V
SCC calls the following helper methods:
Performed SCC analyses: UsedFieldsAnalysis

(94) SCCToIDPv1Proof (SOUND transformation)

Transformed FIGraph SCCs to IDPs. Log:

Generated 6 rules for P and 0 rules for R.


P rules:
270_0_test_LE(EOS(STATIC_270), i68, i68) → 274_0_test_LE(EOS(STATIC_274), i68, i68)
274_0_test_LE(EOS(STATIC_274), i68, i68) → 278_0_test_Inc(EOS(STATIC_278), i68) | >(i68, 0)
278_0_test_Inc(EOS(STATIC_278), i68) → 282_0_test_JMP(EOS(STATIC_282), +(i68, -1)) | >(i68, 0)
282_0_test_JMP(EOS(STATIC_282), i69) → 288_0_test_Load(EOS(STATIC_288), i69)
288_0_test_Load(EOS(STATIC_288), i69) → 267_0_test_Load(EOS(STATIC_267), i69)
267_0_test_Load(EOS(STATIC_267), i62) → 270_0_test_LE(EOS(STATIC_270), i62, i62)
R rules:

Combined rules. Obtained 1 conditional rules for P and 0 conditional rules for R.


P rules:
270_0_test_LE(EOS(STATIC_270), x0, x0) → 270_0_test_LE(EOS(STATIC_270), +(x0, -1), +(x0, -1)) | >(x0, 0)
R rules:

Filtered ground terms:



270_0_test_LE(x1, x2, x3) → 270_0_test_LE(x2, x3)
EOS(x1) → EOS
Cond_270_0_test_LE(x1, x2, x3, x4) → Cond_270_0_test_LE(x1, x3, x4)

Filtered duplicate args:



270_0_test_LE(x1, x2) → 270_0_test_LE(x2)
Cond_270_0_test_LE(x1, x2, x3) → Cond_270_0_test_LE(x1, x3)

Combined rules. Obtained 1 conditional rules for P and 0 conditional rules for R.


P rules:
270_0_test_LE(x0) → 270_0_test_LE(+(x0, -1)) | >(x0, 0)
R rules:

Finished conversion. Obtained 2 rules for P and 0 rules for R. System has predefined symbols.


P rules:
270_0_TEST_LE(x0) → COND_270_0_TEST_LE(>(x0, 0), x0)
COND_270_0_TEST_LE(TRUE, x0) → 270_0_TEST_LE(+(x0, -1))
R rules:

(95) 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): 270_0_TEST_LE(x0[0]) → COND_270_0_TEST_LE(x0[0] > 0, x0[0])
(1): COND_270_0_TEST_LE(TRUE, x0[1]) → 270_0_TEST_LE(x0[1] + -1)

(0) -> (1), if (x0[0] > 0x0[0]* x0[1])


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



The set Q is empty.

(96) IDPNonInfProof (SOUND transformation)

Used the following options for this NonInfProof:
IDPGPoloSolver: Range: [(-1,2)] IsNat: false Interpretation Shape Heuristic: aprove.DPFramework.IDPProblem.Processors.nonInf.poly.IdpCand1ShapeHeuristic@172675af Constraint Generator: NonInfConstraintGenerator: PathGenerator: MetricPathGenerator: Max Left Steps: 0 Max Right Steps: 0

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

    (1)    (>(x0[0], 0)=TRUEx0[0]=x0[1]270_0_TEST_LE(x0[0])≥NonInfC∧270_0_TEST_LE(x0[0])≥COND_270_0_TEST_LE(>(x0[0], 0), x0[0])∧(UIncreasing(COND_270_0_TEST_LE(>(x0[0], 0), x0[0])), ≥))



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

    (2)    (>(x0[0], 0)=TRUE270_0_TEST_LE(x0[0])≥NonInfC∧270_0_TEST_LE(x0[0])≥COND_270_0_TEST_LE(>(x0[0], 0), x0[0])∧(UIncreasing(COND_270_0_TEST_LE(>(x0[0], 0), x0[0])), ≥))



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

    (3)    (x0[0] + [-1] ≥ 0 ⇒ (UIncreasing(COND_270_0_TEST_LE(>(x0[0], 0), x0[0])), ≥)∧[(-1)Bound*bni_8] + [(2)bni_8]x0[0] ≥ 0∧[(-1)bso_9] ≥ 0)



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

    (4)    (x0[0] + [-1] ≥ 0 ⇒ (UIncreasing(COND_270_0_TEST_LE(>(x0[0], 0), x0[0])), ≥)∧[(-1)Bound*bni_8] + [(2)bni_8]x0[0] ≥ 0∧[(-1)bso_9] ≥ 0)



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

    (5)    (x0[0] + [-1] ≥ 0 ⇒ (UIncreasing(COND_270_0_TEST_LE(>(x0[0], 0), x0[0])), ≥)∧[(-1)Bound*bni_8] + [(2)bni_8]x0[0] ≥ 0∧[(-1)bso_9] ≥ 0)



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

    (6)    (x0[0] ≥ 0 ⇒ (UIncreasing(COND_270_0_TEST_LE(>(x0[0], 0), x0[0])), ≥)∧[(-1)Bound*bni_8 + (2)bni_8] + [(2)bni_8]x0[0] ≥ 0∧[(-1)bso_9] ≥ 0)







For Pair COND_270_0_TEST_LE(TRUE, x0) → 270_0_TEST_LE(+(x0, -1)) the following chains were created:
  • We consider the chain COND_270_0_TEST_LE(TRUE, x0[1]) → 270_0_TEST_LE(+(x0[1], -1)) which results in the following constraint:

    (7)    (COND_270_0_TEST_LE(TRUE, x0[1])≥NonInfC∧COND_270_0_TEST_LE(TRUE, x0[1])≥270_0_TEST_LE(+(x0[1], -1))∧(UIncreasing(270_0_TEST_LE(+(x0[1], -1))), ≥))



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

    (8)    ((UIncreasing(270_0_TEST_LE(+(x0[1], -1))), ≥)∧[bni_10] = 0∧[2 + (-1)bso_11] ≥ 0)



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

    (9)    ((UIncreasing(270_0_TEST_LE(+(x0[1], -1))), ≥)∧[bni_10] = 0∧[2 + (-1)bso_11] ≥ 0)



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

    (10)    ((UIncreasing(270_0_TEST_LE(+(x0[1], -1))), ≥)∧[bni_10] = 0∧[2 + (-1)bso_11] ≥ 0)



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

    (11)    ((UIncreasing(270_0_TEST_LE(+(x0[1], -1))), ≥)∧[bni_10] = 0∧0 = 0∧[2 + (-1)bso_11] ≥ 0)







To summarize, we get the following constraints P for the following pairs.
  • 270_0_TEST_LE(x0) → COND_270_0_TEST_LE(>(x0, 0), x0)
    • (x0[0] ≥ 0 ⇒ (UIncreasing(COND_270_0_TEST_LE(>(x0[0], 0), x0[0])), ≥)∧[(-1)Bound*bni_8 + (2)bni_8] + [(2)bni_8]x0[0] ≥ 0∧[(-1)bso_9] ≥ 0)

  • COND_270_0_TEST_LE(TRUE, x0) → 270_0_TEST_LE(+(x0, -1))
    • ((UIncreasing(270_0_TEST_LE(+(x0[1], -1))), ≥)∧[bni_10] = 0∧0 = 0∧[2 + (-1)bso_11] ≥ 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(270_0_TEST_LE(x1)) = [2]x1   
POL(COND_270_0_TEST_LE(x1, x2)) = [2]x2   
POL(>(x1, x2)) = [-1]   
POL(0) = 0   
POL(+(x1, x2)) = x1 + x2   
POL(-1) = [-1]   

The following pairs are in P>:

COND_270_0_TEST_LE(TRUE, x0[1]) → 270_0_TEST_LE(+(x0[1], -1))

The following pairs are in Pbound:

270_0_TEST_LE(x0[0]) → COND_270_0_TEST_LE(>(x0[0], 0), x0[0])

The following pairs are in P:

270_0_TEST_LE(x0[0]) → COND_270_0_TEST_LE(>(x0[0], 0), x0[0])

There are no usable rules.

(97) Complex Obligation (AND)

(98) 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): 270_0_TEST_LE(x0[0]) → COND_270_0_TEST_LE(x0[0] > 0, x0[0])


The set Q is empty.

(99) IDependencyGraphProof (EQUIVALENT transformation)

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

(100) TRUE

(101) 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_270_0_TEST_LE(TRUE, x0[1]) → 270_0_TEST_LE(x0[1] + -1)


The set Q is empty.

(102) IDependencyGraphProof (EQUIVALENT transformation)

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

(103) TRUE

(104) Obligation:

SCC of termination graph based on JBC Program.
SCC contains nodes from the following methods: Test9.test(I)V
SCC calls the following helper methods:
Performed SCC analyses: UsedFieldsAnalysis

(105) SCCToIDPv1Proof (SOUND transformation)

Transformed FIGraph SCCs to IDPs. Log:

Generated 6 rules for P and 0 rules for R.


P rules:
235_0_test_LE(EOS(STATIC_235), i55, i55) → 238_0_test_LE(EOS(STATIC_238), i55, i55)
238_0_test_LE(EOS(STATIC_238), i55, i55) → 243_0_test_Inc(EOS(STATIC_243), i55) | >(i55, 0)
243_0_test_Inc(EOS(STATIC_243), i55) → 247_0_test_JMP(EOS(STATIC_247), +(i55, -1)) | >(i55, 0)
247_0_test_JMP(EOS(STATIC_247), i58) → 252_0_test_Load(EOS(STATIC_252), i58)
252_0_test_Load(EOS(STATIC_252), i58) → 232_0_test_Load(EOS(STATIC_232), i58)
232_0_test_Load(EOS(STATIC_232), i49) → 235_0_test_LE(EOS(STATIC_235), i49, i49)
R rules:

Combined rules. Obtained 1 conditional rules for P and 0 conditional rules for R.


P rules:
235_0_test_LE(EOS(STATIC_235), x0, x0) → 235_0_test_LE(EOS(STATIC_235), +(x0, -1), +(x0, -1)) | >(x0, 0)
R rules:

Filtered ground terms:



235_0_test_LE(x1, x2, x3) → 235_0_test_LE(x2, x3)
EOS(x1) → EOS
Cond_235_0_test_LE(x1, x2, x3, x4) → Cond_235_0_test_LE(x1, x3, x4)

Filtered duplicate args:



235_0_test_LE(x1, x2) → 235_0_test_LE(x2)
Cond_235_0_test_LE(x1, x2, x3) → Cond_235_0_test_LE(x1, x3)

Combined rules. Obtained 1 conditional rules for P and 0 conditional rules for R.


P rules:
235_0_test_LE(x0) → 235_0_test_LE(+(x0, -1)) | >(x0, 0)
R rules:

Finished conversion. Obtained 2 rules for P and 0 rules for R. System has predefined symbols.


P rules:
235_0_TEST_LE(x0) → COND_235_0_TEST_LE(>(x0, 0), x0)
COND_235_0_TEST_LE(TRUE, x0) → 235_0_TEST_LE(+(x0, -1))
R rules:

(106) 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): 235_0_TEST_LE(x0[0]) → COND_235_0_TEST_LE(x0[0] > 0, x0[0])
(1): COND_235_0_TEST_LE(TRUE, x0[1]) → 235_0_TEST_LE(x0[1] + -1)

(0) -> (1), if (x0[0] > 0x0[0]* x0[1])


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



The set Q is empty.

(107) IDPNonInfProof (SOUND transformation)

Used the following options for this NonInfProof:
IDPGPoloSolver: Range: [(-1,2)] IsNat: false Interpretation Shape Heuristic: aprove.DPFramework.IDPProblem.Processors.nonInf.poly.IdpCand1ShapeHeuristic@172675af Constraint Generator: NonInfConstraintGenerator: PathGenerator: MetricPathGenerator: Max Left Steps: 0 Max Right Steps: 0

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

    (1)    (>(x0[0], 0)=TRUEx0[0]=x0[1]235_0_TEST_LE(x0[0])≥NonInfC∧235_0_TEST_LE(x0[0])≥COND_235_0_TEST_LE(>(x0[0], 0), x0[0])∧(UIncreasing(COND_235_0_TEST_LE(>(x0[0], 0), x0[0])), ≥))



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

    (2)    (>(x0[0], 0)=TRUE235_0_TEST_LE(x0[0])≥NonInfC∧235_0_TEST_LE(x0[0])≥COND_235_0_TEST_LE(>(x0[0], 0), x0[0])∧(UIncreasing(COND_235_0_TEST_LE(>(x0[0], 0), x0[0])), ≥))



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

    (3)    (x0[0] + [-1] ≥ 0 ⇒ (UIncreasing(COND_235_0_TEST_LE(>(x0[0], 0), x0[0])), ≥)∧[(-1)Bound*bni_8] + [(2)bni_8]x0[0] ≥ 0∧[(-1)bso_9] ≥ 0)



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

    (4)    (x0[0] + [-1] ≥ 0 ⇒ (UIncreasing(COND_235_0_TEST_LE(>(x0[0], 0), x0[0])), ≥)∧[(-1)Bound*bni_8] + [(2)bni_8]x0[0] ≥ 0∧[(-1)bso_9] ≥ 0)



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

    (5)    (x0[0] + [-1] ≥ 0 ⇒ (UIncreasing(COND_235_0_TEST_LE(>(x0[0], 0), x0[0])), ≥)∧[(-1)Bound*bni_8] + [(2)bni_8]x0[0] ≥ 0∧[(-1)bso_9] ≥ 0)



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

    (6)    (x0[0] ≥ 0 ⇒ (UIncreasing(COND_235_0_TEST_LE(>(x0[0], 0), x0[0])), ≥)∧[(-1)Bound*bni_8 + (2)bni_8] + [(2)bni_8]x0[0] ≥ 0∧[(-1)bso_9] ≥ 0)







For Pair COND_235_0_TEST_LE(TRUE, x0) → 235_0_TEST_LE(+(x0, -1)) the following chains were created:
  • We consider the chain COND_235_0_TEST_LE(TRUE, x0[1]) → 235_0_TEST_LE(+(x0[1], -1)) which results in the following constraint:

    (7)    (COND_235_0_TEST_LE(TRUE, x0[1])≥NonInfC∧COND_235_0_TEST_LE(TRUE, x0[1])≥235_0_TEST_LE(+(x0[1], -1))∧(UIncreasing(235_0_TEST_LE(+(x0[1], -1))), ≥))



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

    (8)    ((UIncreasing(235_0_TEST_LE(+(x0[1], -1))), ≥)∧[bni_10] = 0∧[2 + (-1)bso_11] ≥ 0)



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

    (9)    ((UIncreasing(235_0_TEST_LE(+(x0[1], -1))), ≥)∧[bni_10] = 0∧[2 + (-1)bso_11] ≥ 0)



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

    (10)    ((UIncreasing(235_0_TEST_LE(+(x0[1], -1))), ≥)∧[bni_10] = 0∧[2 + (-1)bso_11] ≥ 0)



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

    (11)    ((UIncreasing(235_0_TEST_LE(+(x0[1], -1))), ≥)∧[bni_10] = 0∧0 = 0∧[2 + (-1)bso_11] ≥ 0)







To summarize, we get the following constraints P for the following pairs.
  • 235_0_TEST_LE(x0) → COND_235_0_TEST_LE(>(x0, 0), x0)
    • (x0[0] ≥ 0 ⇒ (UIncreasing(COND_235_0_TEST_LE(>(x0[0], 0), x0[0])), ≥)∧[(-1)Bound*bni_8 + (2)bni_8] + [(2)bni_8]x0[0] ≥ 0∧[(-1)bso_9] ≥ 0)

  • COND_235_0_TEST_LE(TRUE, x0) → 235_0_TEST_LE(+(x0, -1))
    • ((UIncreasing(235_0_TEST_LE(+(x0[1], -1))), ≥)∧[bni_10] = 0∧0 = 0∧[2 + (-1)bso_11] ≥ 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(235_0_TEST_LE(x1)) = [2]x1   
POL(COND_235_0_TEST_LE(x1, x2)) = [2]x2   
POL(>(x1, x2)) = [-1]   
POL(0) = 0   
POL(+(x1, x2)) = x1 + x2   
POL(-1) = [-1]   

The following pairs are in P>:

COND_235_0_TEST_LE(TRUE, x0[1]) → 235_0_TEST_LE(+(x0[1], -1))

The following pairs are in Pbound:

235_0_TEST_LE(x0[0]) → COND_235_0_TEST_LE(>(x0[0], 0), x0[0])

The following pairs are in P:

235_0_TEST_LE(x0[0]) → COND_235_0_TEST_LE(>(x0[0], 0), x0[0])

There are no usable rules.

(108) Complex Obligation (AND)

(109) 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): 235_0_TEST_LE(x0[0]) → COND_235_0_TEST_LE(x0[0] > 0, x0[0])


The set Q is empty.

(110) IDependencyGraphProof (EQUIVALENT transformation)

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

(111) TRUE

(112) 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_235_0_TEST_LE(TRUE, x0[1]) → 235_0_TEST_LE(x0[1] + -1)


The set Q is empty.

(113) IDependencyGraphProof (EQUIVALENT transformation)

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

(114) TRUE

(115) Obligation:

SCC of termination graph based on JBC Program.
SCC contains nodes from the following methods: Test9.test(I)V
SCC calls the following helper methods:
Performed SCC analyses: UsedFieldsAnalysis

(116) SCCToIDPv1Proof (SOUND transformation)

Transformed FIGraph SCCs to IDPs. Log:

Generated 6 rules for P and 0 rules for R.


P rules:
194_0_test_LE(EOS(STATIC_194), i44, i44) → 198_0_test_LE(EOS(STATIC_198), i44, i44)
198_0_test_LE(EOS(STATIC_198), i44, i44) → 202_0_test_Inc(EOS(STATIC_202), i44) | >(i44, 0)
202_0_test_Inc(EOS(STATIC_202), i44) → 207_0_test_JMP(EOS(STATIC_207), +(i44, -1)) | >(i44, 0)
207_0_test_JMP(EOS(STATIC_207), i45) → 215_0_test_Load(EOS(STATIC_215), i45)
215_0_test_Load(EOS(STATIC_215), i45) → 191_0_test_Load(EOS(STATIC_191), i45)
191_0_test_Load(EOS(STATIC_191), i38) → 194_0_test_LE(EOS(STATIC_194), i38, i38)
R rules:

Combined rules. Obtained 1 conditional rules for P and 0 conditional rules for R.


P rules:
194_0_test_LE(EOS(STATIC_194), x0, x0) → 194_0_test_LE(EOS(STATIC_194), +(x0, -1), +(x0, -1)) | >(x0, 0)
R rules:

Filtered ground terms:



194_0_test_LE(x1, x2, x3) → 194_0_test_LE(x2, x3)
EOS(x1) → EOS
Cond_194_0_test_LE(x1, x2, x3, x4) → Cond_194_0_test_LE(x1, x3, x4)

Filtered duplicate args:



194_0_test_LE(x1, x2) → 194_0_test_LE(x2)
Cond_194_0_test_LE(x1, x2, x3) → Cond_194_0_test_LE(x1, x3)

Combined rules. Obtained 1 conditional rules for P and 0 conditional rules for R.


P rules:
194_0_test_LE(x0) → 194_0_test_LE(+(x0, -1)) | >(x0, 0)
R rules:

Finished conversion. Obtained 2 rules for P and 0 rules for R. System has predefined symbols.


P rules:
194_0_TEST_LE(x0) → COND_194_0_TEST_LE(>(x0, 0), x0)
COND_194_0_TEST_LE(TRUE, x0) → 194_0_TEST_LE(+(x0, -1))
R rules:

(117) 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): 194_0_TEST_LE(x0[0]) → COND_194_0_TEST_LE(x0[0] > 0, x0[0])
(1): COND_194_0_TEST_LE(TRUE, x0[1]) → 194_0_TEST_LE(x0[1] + -1)

(0) -> (1), if (x0[0] > 0x0[0]* x0[1])


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



The set Q is empty.

(118) IDPNonInfProof (SOUND transformation)

Used the following options for this NonInfProof:
IDPGPoloSolver: Range: [(-1,2)] IsNat: false Interpretation Shape Heuristic: aprove.DPFramework.IDPProblem.Processors.nonInf.poly.IdpCand1ShapeHeuristic@172675af Constraint Generator: NonInfConstraintGenerator: PathGenerator: MetricPathGenerator: Max Left Steps: 0 Max Right Steps: 0

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

    (1)    (>(x0[0], 0)=TRUEx0[0]=x0[1]194_0_TEST_LE(x0[0])≥NonInfC∧194_0_TEST_LE(x0[0])≥COND_194_0_TEST_LE(>(x0[0], 0), x0[0])∧(UIncreasing(COND_194_0_TEST_LE(>(x0[0], 0), x0[0])), ≥))



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

    (2)    (>(x0[0], 0)=TRUE194_0_TEST_LE(x0[0])≥NonInfC∧194_0_TEST_LE(x0[0])≥COND_194_0_TEST_LE(>(x0[0], 0), x0[0])∧(UIncreasing(COND_194_0_TEST_LE(>(x0[0], 0), x0[0])), ≥))



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

    (3)    (x0[0] + [-1] ≥ 0 ⇒ (UIncreasing(COND_194_0_TEST_LE(>(x0[0], 0), x0[0])), ≥)∧[(-1)Bound*bni_8] + [(2)bni_8]x0[0] ≥ 0∧[(-1)bso_9] ≥ 0)



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

    (4)    (x0[0] + [-1] ≥ 0 ⇒ (UIncreasing(COND_194_0_TEST_LE(>(x0[0], 0), x0[0])), ≥)∧[(-1)Bound*bni_8] + [(2)bni_8]x0[0] ≥ 0∧[(-1)bso_9] ≥ 0)



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

    (5)    (x0[0] + [-1] ≥ 0 ⇒ (UIncreasing(COND_194_0_TEST_LE(>(x0[0], 0), x0[0])), ≥)∧[(-1)Bound*bni_8] + [(2)bni_8]x0[0] ≥ 0∧[(-1)bso_9] ≥ 0)



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

    (6)    (x0[0] ≥ 0 ⇒ (UIncreasing(COND_194_0_TEST_LE(>(x0[0], 0), x0[0])), ≥)∧[(-1)Bound*bni_8 + (2)bni_8] + [(2)bni_8]x0[0] ≥ 0∧[(-1)bso_9] ≥ 0)







For Pair COND_194_0_TEST_LE(TRUE, x0) → 194_0_TEST_LE(+(x0, -1)) the following chains were created:
  • We consider the chain COND_194_0_TEST_LE(TRUE, x0[1]) → 194_0_TEST_LE(+(x0[1], -1)) which results in the following constraint:

    (7)    (COND_194_0_TEST_LE(TRUE, x0[1])≥NonInfC∧COND_194_0_TEST_LE(TRUE, x0[1])≥194_0_TEST_LE(+(x0[1], -1))∧(UIncreasing(194_0_TEST_LE(+(x0[1], -1))), ≥))



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

    (8)    ((UIncreasing(194_0_TEST_LE(+(x0[1], -1))), ≥)∧[bni_10] = 0∧[2 + (-1)bso_11] ≥ 0)



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

    (9)    ((UIncreasing(194_0_TEST_LE(+(x0[1], -1))), ≥)∧[bni_10] = 0∧[2 + (-1)bso_11] ≥ 0)



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

    (10)    ((UIncreasing(194_0_TEST_LE(+(x0[1], -1))), ≥)∧[bni_10] = 0∧[2 + (-1)bso_11] ≥ 0)



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

    (11)    ((UIncreasing(194_0_TEST_LE(+(x0[1], -1))), ≥)∧[bni_10] = 0∧0 = 0∧[2 + (-1)bso_11] ≥ 0)







To summarize, we get the following constraints P for the following pairs.
  • 194_0_TEST_LE(x0) → COND_194_0_TEST_LE(>(x0, 0), x0)
    • (x0[0] ≥ 0 ⇒ (UIncreasing(COND_194_0_TEST_LE(>(x0[0], 0), x0[0])), ≥)∧[(-1)Bound*bni_8 + (2)bni_8] + [(2)bni_8]x0[0] ≥ 0∧[(-1)bso_9] ≥ 0)

  • COND_194_0_TEST_LE(TRUE, x0) → 194_0_TEST_LE(+(x0, -1))
    • ((UIncreasing(194_0_TEST_LE(+(x0[1], -1))), ≥)∧[bni_10] = 0∧0 = 0∧[2 + (-1)bso_11] ≥ 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(194_0_TEST_LE(x1)) = [2]x1   
POL(COND_194_0_TEST_LE(x1, x2)) = [2]x2   
POL(>(x1, x2)) = [-1]   
POL(0) = 0   
POL(+(x1, x2)) = x1 + x2   
POL(-1) = [-1]   

The following pairs are in P>:

COND_194_0_TEST_LE(TRUE, x0[1]) → 194_0_TEST_LE(+(x0[1], -1))

The following pairs are in Pbound:

194_0_TEST_LE(x0[0]) → COND_194_0_TEST_LE(>(x0[0], 0), x0[0])

The following pairs are in P:

194_0_TEST_LE(x0[0]) → COND_194_0_TEST_LE(>(x0[0], 0), x0[0])

There are no usable rules.

(119) Complex Obligation (AND)

(120) 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): 194_0_TEST_LE(x0[0]) → COND_194_0_TEST_LE(x0[0] > 0, x0[0])


The set Q is empty.

(121) IDependencyGraphProof (EQUIVALENT transformation)

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

(122) TRUE

(123) 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_194_0_TEST_LE(TRUE, x0[1]) → 194_0_TEST_LE(x0[1] + -1)


The set Q is empty.

(124) IDependencyGraphProof (EQUIVALENT transformation)

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

(125) TRUE

(126) Obligation:

SCC of termination graph based on JBC Program.
SCC contains nodes from the following methods: Test9.test(I)V
SCC calls the following helper methods:
Performed SCC analyses: UsedFieldsAnalysis

(127) SCCToIDPv1Proof (SOUND transformation)

Transformed FIGraph SCCs to IDPs. Log:

Generated 6 rules for P and 0 rules for R.


P rules:
157_0_test_LE(EOS(STATIC_157), i31, i31) → 161_0_test_LE(EOS(STATIC_161), i31, i31)
161_0_test_LE(EOS(STATIC_161), i31, i31) → 165_0_test_Inc(EOS(STATIC_165), i31) | >(i31, 0)
165_0_test_Inc(EOS(STATIC_165), i31) → 169_0_test_JMP(EOS(STATIC_169), +(i31, -1)) | >(i31, 0)
169_0_test_JMP(EOS(STATIC_169), i33) → 175_0_test_Load(EOS(STATIC_175), i33)
175_0_test_Load(EOS(STATIC_175), i33) → 153_0_test_Load(EOS(STATIC_153), i33)
153_0_test_Load(EOS(STATIC_153), i24) → 157_0_test_LE(EOS(STATIC_157), i24, i24)
R rules:

Combined rules. Obtained 1 conditional rules for P and 0 conditional rules for R.


P rules:
157_0_test_LE(EOS(STATIC_157), x0, x0) → 157_0_test_LE(EOS(STATIC_157), +(x0, -1), +(x0, -1)) | >(x0, 0)
R rules:

Filtered ground terms:



157_0_test_LE(x1, x2, x3) → 157_0_test_LE(x2, x3)
EOS(x1) → EOS
Cond_157_0_test_LE(x1, x2, x3, x4) → Cond_157_0_test_LE(x1, x3, x4)

Filtered duplicate args:



157_0_test_LE(x1, x2) → 157_0_test_LE(x2)
Cond_157_0_test_LE(x1, x2, x3) → Cond_157_0_test_LE(x1, x3)

Combined rules. Obtained 1 conditional rules for P and 0 conditional rules for R.


P rules:
157_0_test_LE(x0) → 157_0_test_LE(+(x0, -1)) | >(x0, 0)
R rules:

Finished conversion. Obtained 2 rules for P and 0 rules for R. System has predefined symbols.


P rules:
157_0_TEST_LE(x0) → COND_157_0_TEST_LE(>(x0, 0), x0)
COND_157_0_TEST_LE(TRUE, x0) → 157_0_TEST_LE(+(x0, -1))
R rules:

(128) 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): 157_0_TEST_LE(x0[0]) → COND_157_0_TEST_LE(x0[0] > 0, x0[0])
(1): COND_157_0_TEST_LE(TRUE, x0[1]) → 157_0_TEST_LE(x0[1] + -1)

(0) -> (1), if (x0[0] > 0x0[0]* x0[1])


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



The set Q is empty.

(129) IDPNonInfProof (SOUND transformation)

Used the following options for this NonInfProof:
IDPGPoloSolver: Range: [(-1,2)] IsNat: false Interpretation Shape Heuristic: aprove.DPFramework.IDPProblem.Processors.nonInf.poly.IdpCand1ShapeHeuristic@172675af Constraint Generator: NonInfConstraintGenerator: PathGenerator: MetricPathGenerator: Max Left Steps: 0 Max Right Steps: 0

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

    (1)    (>(x0[0], 0)=TRUEx0[0]=x0[1]157_0_TEST_LE(x0[0])≥NonInfC∧157_0_TEST_LE(x0[0])≥COND_157_0_TEST_LE(>(x0[0], 0), x0[0])∧(UIncreasing(COND_157_0_TEST_LE(>(x0[0], 0), x0[0])), ≥))



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

    (2)    (>(x0[0], 0)=TRUE157_0_TEST_LE(x0[0])≥NonInfC∧157_0_TEST_LE(x0[0])≥COND_157_0_TEST_LE(>(x0[0], 0), x0[0])∧(UIncreasing(COND_157_0_TEST_LE(>(x0[0], 0), x0[0])), ≥))



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

    (3)    (x0[0] + [-1] ≥ 0 ⇒ (UIncreasing(COND_157_0_TEST_LE(>(x0[0], 0), x0[0])), ≥)∧[(-1)Bound*bni_8] + [(2)bni_8]x0[0] ≥ 0∧[(-1)bso_9] ≥ 0)



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

    (4)    (x0[0] + [-1] ≥ 0 ⇒ (UIncreasing(COND_157_0_TEST_LE(>(x0[0], 0), x0[0])), ≥)∧[(-1)Bound*bni_8] + [(2)bni_8]x0[0] ≥ 0∧[(-1)bso_9] ≥ 0)



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

    (5)    (x0[0] + [-1] ≥ 0 ⇒ (UIncreasing(COND_157_0_TEST_LE(>(x0[0], 0), x0[0])), ≥)∧[(-1)Bound*bni_8] + [(2)bni_8]x0[0] ≥ 0∧[(-1)bso_9] ≥ 0)



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

    (6)    (x0[0] ≥ 0 ⇒ (UIncreasing(COND_157_0_TEST_LE(>(x0[0], 0), x0[0])), ≥)∧[(-1)Bound*bni_8 + (2)bni_8] + [(2)bni_8]x0[0] ≥ 0∧[(-1)bso_9] ≥ 0)







For Pair COND_157_0_TEST_LE(TRUE, x0) → 157_0_TEST_LE(+(x0, -1)) the following chains were created:
  • We consider the chain COND_157_0_TEST_LE(TRUE, x0[1]) → 157_0_TEST_LE(+(x0[1], -1)) which results in the following constraint:

    (7)    (COND_157_0_TEST_LE(TRUE, x0[1])≥NonInfC∧COND_157_0_TEST_LE(TRUE, x0[1])≥157_0_TEST_LE(+(x0[1], -1))∧(UIncreasing(157_0_TEST_LE(+(x0[1], -1))), ≥))



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

    (8)    ((UIncreasing(157_0_TEST_LE(+(x0[1], -1))), ≥)∧[bni_10] = 0∧[2 + (-1)bso_11] ≥ 0)



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

    (9)    ((UIncreasing(157_0_TEST_LE(+(x0[1], -1))), ≥)∧[bni_10] = 0∧[2 + (-1)bso_11] ≥ 0)



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

    (10)    ((UIncreasing(157_0_TEST_LE(+(x0[1], -1))), ≥)∧[bni_10] = 0∧[2 + (-1)bso_11] ≥ 0)



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

    (11)    ((UIncreasing(157_0_TEST_LE(+(x0[1], -1))), ≥)∧[bni_10] = 0∧0 = 0∧[2 + (-1)bso_11] ≥ 0)







To summarize, we get the following constraints P for the following pairs.
  • 157_0_TEST_LE(x0) → COND_157_0_TEST_LE(>(x0, 0), x0)
    • (x0[0] ≥ 0 ⇒ (UIncreasing(COND_157_0_TEST_LE(>(x0[0], 0), x0[0])), ≥)∧[(-1)Bound*bni_8 + (2)bni_8] + [(2)bni_8]x0[0] ≥ 0∧[(-1)bso_9] ≥ 0)

  • COND_157_0_TEST_LE(TRUE, x0) → 157_0_TEST_LE(+(x0, -1))
    • ((UIncreasing(157_0_TEST_LE(+(x0[1], -1))), ≥)∧[bni_10] = 0∧0 = 0∧[2 + (-1)bso_11] ≥ 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(157_0_TEST_LE(x1)) = [2]x1   
POL(COND_157_0_TEST_LE(x1, x2)) = [2]x2   
POL(>(x1, x2)) = [-1]   
POL(0) = 0   
POL(+(x1, x2)) = x1 + x2   
POL(-1) = [-1]   

The following pairs are in P>:

COND_157_0_TEST_LE(TRUE, x0[1]) → 157_0_TEST_LE(+(x0[1], -1))

The following pairs are in Pbound:

157_0_TEST_LE(x0[0]) → COND_157_0_TEST_LE(>(x0[0], 0), x0[0])

The following pairs are in P:

157_0_TEST_LE(x0[0]) → COND_157_0_TEST_LE(>(x0[0], 0), x0[0])

There are no usable rules.

(130) Complex Obligation (AND)

(131) 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): 157_0_TEST_LE(x0[0]) → COND_157_0_TEST_LE(x0[0] > 0, x0[0])


The set Q is empty.

(132) IDependencyGraphProof (EQUIVALENT transformation)

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

(133) TRUE

(134) 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_157_0_TEST_LE(TRUE, x0[1]) → 157_0_TEST_LE(x0[1] + -1)


The set Q is empty.

(135) IDependencyGraphProof (EQUIVALENT transformation)

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

(136) TRUE

(137) Obligation:

SCC of termination graph based on JBC Program.
SCC contains nodes from the following methods: Test9.main([Ljava/lang/String;)V
SCC calls the following helper methods: Test9.test(I)V
Performed SCC analyses: UsedFieldsAnalysis

(138) SCCToIDPv1Proof (SOUND transformation)

Transformed FIGraph SCCs to IDPs. Log:

Generated 27 rules for P and 134 rules for R.


P rules:
70_0_main_ConstantStackPush(EOS(STATIC_70), i4, i4) → 74_0_main_Cmp(EOS(STATIC_74), i4, i4, 0)
74_0_main_Cmp(EOS(STATIC_74), i9, i9, matching1) → 79_0_main_Cmp(EOS(STATIC_79), i9, i9, 0) | =(matching1, 0)
79_0_main_Cmp(EOS(STATIC_79), i9, i9, matching1) → 82_0_main_LE(EOS(STATIC_82), i9, 1) | &&(>(i9, 0), =(matching1, 0))
82_0_main_LE(EOS(STATIC_82), i9, matching1) → 84_0_main_Load(EOS(STATIC_84), i9) | &&(>(1, 0), =(matching1, 1))
84_0_main_Load(EOS(STATIC_84), i9) → 86_0_main_TypeCast(EOS(STATIC_86), i9, i9)
86_0_main_TypeCast(EOS(STATIC_86), i9, i9) → 87_0_main_Store(EOS(STATIC_87), i9, i10) | =(i10, i9)
87_0_main_Store(EOS(STATIC_87), i9, i10) → 89_0_main_Load(EOS(STATIC_89), i9, i10)
89_0_main_Load(EOS(STATIC_89), i9, i10) → 91_0_main_ConstantStackPush(EOS(STATIC_91), i9, i10, i10)
91_0_main_ConstantStackPush(EOS(STATIC_91), i9, i10, i10) → 92_0_main_GE(EOS(STATIC_92), i9, i10, i10, 100)
92_0_main_GE(EOS(STATIC_92), i9, i14, i14, matching1) → 93_0_main_GE(EOS(STATIC_93), i9, i14, i14, 100) | =(matching1, 100)
92_0_main_GE(EOS(STATIC_92), i9, i15, i15, matching1) → 94_0_main_GE(EOS(STATIC_94), i9, i15, i15, 100) | =(matching1, 100)
93_0_main_GE(EOS(STATIC_93), i9, i14, i14, matching1) → 95_0_main_Load(EOS(STATIC_95), i9, i14) | &&(<(i14, 100), =(matching1, 100))
95_0_main_Load(EOS(STATIC_95), i9, i14) → 99_0_main_InvokeMethod(EOS(STATIC_99), i9, i14, i14)
99_0_main_InvokeMethod(EOS(STATIC_99), i9, i14, i14) → 103_1_main_InvokeMethod(103_0_test_Load(EOS(STATIC_103), i14), i9, i14, i14)
103_1_main_InvokeMethod(555_0_test_Return(EOS(STATIC_555)), i9, i167, i167) → 576_0_test_Return(EOS(STATIC_576), i9, i167, i167)
576_0_test_Return(EOS(STATIC_576), i9, i167, i167) → 577_0_main_Inc(EOS(STATIC_577), i9, i167)
577_0_main_Inc(EOS(STATIC_577), i9, i167) → 580_0_main_JMP(EOS(STATIC_580), i9, +(i167, 1)) | >(i167, 0)
580_0_main_JMP(EOS(STATIC_580), i9, i172) → 583_0_main_Load(EOS(STATIC_583), i9, i172)
583_0_main_Load(EOS(STATIC_583), i9, i172) → 89_0_main_Load(EOS(STATIC_89), i9, i172)
94_0_main_GE(EOS(STATIC_94), i9, i15, i15, matching1) → 97_0_main_Load(EOS(STATIC_97), i9) | &&(>=(i15, 100), =(matching1, 100))
97_0_main_Load(EOS(STATIC_97), i9) → 101_0_main_ConstantStackPush(EOS(STATIC_101), i9)
101_0_main_ConstantStackPush(EOS(STATIC_101), i9) → 106_0_main_IntArithmetic(EOS(STATIC_106), i9, 1)
106_0_main_IntArithmetic(EOS(STATIC_106), i9, matching1) → 116_0_main_Store(EOS(STATIC_116), -(i9, 1)) | &&(>(i9, 0), =(matching1, 1))
116_0_main_Store(EOS(STATIC_116), i18) → 120_0_main_JMP(EOS(STATIC_120), i18)
120_0_main_JMP(EOS(STATIC_120), i18) → 129_0_main_Load(EOS(STATIC_129), i18)
129_0_main_Load(EOS(STATIC_129), i18) → 68_0_main_Load(EOS(STATIC_68), i18)
68_0_main_Load(EOS(STATIC_68), i4) → 70_0_main_ConstantStackPush(EOS(STATIC_70), i4, i4)
R rules:
103_0_test_Load(EOS(STATIC_103), i14) → 114_0_test_Load(EOS(STATIC_114), i14)
114_0_test_Load(EOS(STATIC_114), i14) → 122_0_test_Load(EOS(STATIC_122), i14)
122_0_test_Load(EOS(STATIC_122), i14) → 132_0_test_Store(EOS(STATIC_132), i14, i14)
132_0_test_Store(EOS(STATIC_132), i14, i14) → 134_0_test_Load(EOS(STATIC_134), i14, i14)
134_0_test_Load(EOS(STATIC_134), i14, i14) → 153_0_test_Load(EOS(STATIC_153), i14, i14)
153_0_test_Load(EOS(STATIC_153), i14, i24) → 157_0_test_LE(EOS(STATIC_157), i14, i24, i24)
157_0_test_LE(EOS(STATIC_157), i14, matching1, matching2) → 160_0_test_LE(EOS(STATIC_160), i14, 0, 0) | &&(=(matching1, 0), =(matching2, 0))
157_0_test_LE(EOS(STATIC_157), i14, i31, i31) → 161_0_test_LE(EOS(STATIC_161), i14, i31, i31)
160_0_test_LE(EOS(STATIC_160), i14, matching1, matching2) → 163_0_test_Load(EOS(STATIC_163), i14) | &&(&&(<=(0, 0), =(matching1, 0)), =(matching2, 0))
161_0_test_LE(EOS(STATIC_161), i14, i31, i31) → 165_0_test_Inc(EOS(STATIC_165), i14, i31) | >(i31, 0)
163_0_test_Load(EOS(STATIC_163), i14) → 167_0_test_Store(EOS(STATIC_167), i14, i14)
165_0_test_Inc(EOS(STATIC_165), i14, i31) → 169_0_test_JMP(EOS(STATIC_169), i14, +(i31, -1)) | >(i31, 0)
167_0_test_Store(EOS(STATIC_167), i14, i14) → 171_0_test_Load(EOS(STATIC_171), i14, i14)
169_0_test_JMP(EOS(STATIC_169), i14, i33) → 175_0_test_Load(EOS(STATIC_175), i14, i33)
171_0_test_Load(EOS(STATIC_171), i14, i14) → 191_0_test_Load(EOS(STATIC_191), i14, i14)
175_0_test_Load(EOS(STATIC_175), i14, i33) → 153_0_test_Load(EOS(STATIC_153), i14, i33)
191_0_test_Load(EOS(STATIC_191), i14, i38) → 194_0_test_LE(EOS(STATIC_194), i14, i38, i38)
194_0_test_LE(EOS(STATIC_194), i14, matching1, matching2) → 197_0_test_LE(EOS(STATIC_197), i14, 0, 0) | &&(=(matching1, 0), =(matching2, 0))
194_0_test_LE(EOS(STATIC_194), i14, i44, i44) → 198_0_test_LE(EOS(STATIC_198), i14, i44, i44)
197_0_test_LE(EOS(STATIC_197), i14, matching1, matching2) → 200_0_test_Load(EOS(STATIC_200), i14) | &&(&&(<=(0, 0), =(matching1, 0)), =(matching2, 0))
198_0_test_LE(EOS(STATIC_198), i14, i44, i44) → 202_0_test_Inc(EOS(STATIC_202), i14, i44) | >(i44, 0)
200_0_test_Load(EOS(STATIC_200), i14) → 204_0_test_Store(EOS(STATIC_204), i14, i14)
202_0_test_Inc(EOS(STATIC_202), i14, i44) → 207_0_test_JMP(EOS(STATIC_207), i14, +(i44, -1)) | >(i44, 0)
204_0_test_Store(EOS(STATIC_204), i14, i14) → 209_0_test_Load(EOS(STATIC_209), i14, i14)
207_0_test_JMP(EOS(STATIC_207), i14, i45) → 215_0_test_Load(EOS(STATIC_215), i14, i45)
209_0_test_Load(EOS(STATIC_209), i14, i14) → 232_0_test_Load(EOS(STATIC_232), i14, i14)
215_0_test_Load(EOS(STATIC_215), i14, i45) → 191_0_test_Load(EOS(STATIC_191), i14, i45)
232_0_test_Load(EOS(STATIC_232), i14, i49) → 235_0_test_LE(EOS(STATIC_235), i14, i49, i49)
235_0_test_LE(EOS(STATIC_235), i14, matching1, matching2) → 237_0_test_LE(EOS(STATIC_237), i14, 0, 0) | &&(=(matching1, 0), =(matching2, 0))
235_0_test_LE(EOS(STATIC_235), i14, i55, i55) → 238_0_test_LE(EOS(STATIC_238), i14, i55, i55)
237_0_test_LE(EOS(STATIC_237), i14, matching1, matching2) → 241_0_test_Load(EOS(STATIC_241), i14) | &&(&&(<=(0, 0), =(matching1, 0)), =(matching2, 0))
238_0_test_LE(EOS(STATIC_238), i14, i55, i55) → 243_0_test_Inc(EOS(STATIC_243), i14, i55) | >(i55, 0)
241_0_test_Load(EOS(STATIC_241), i14) → 245_0_test_Store(EOS(STATIC_245), i14, i14)
243_0_test_Inc(EOS(STATIC_243), i14, i55) → 247_0_test_JMP(EOS(STATIC_247), i14, +(i55, -1)) | >(i55, 0)
245_0_test_Store(EOS(STATIC_245), i14, i14) → 249_0_test_Load(EOS(STATIC_249), i14, i14)
247_0_test_JMP(EOS(STATIC_247), i14, i58) → 252_0_test_Load(EOS(STATIC_252), i14, i58)
249_0_test_Load(EOS(STATIC_249), i14, i14) → 267_0_test_Load(EOS(STATIC_267), i14, i14)
252_0_test_Load(EOS(STATIC_252), i14, i58) → 232_0_test_Load(EOS(STATIC_232), i14, i58)
267_0_test_Load(EOS(STATIC_267), i14, i62) → 270_0_test_LE(EOS(STATIC_270), i14, i62, i62)
270_0_test_LE(EOS(STATIC_270), i14, matching1, matching2) → 273_0_test_LE(EOS(STATIC_273), i14, 0, 0) | &&(=(matching1, 0), =(matching2, 0))
270_0_test_LE(EOS(STATIC_270), i14, i68, i68) → 274_0_test_LE(EOS(STATIC_274), i14, i68, i68)
273_0_test_LE(EOS(STATIC_273), i14, matching1, matching2) → 276_0_test_Load(EOS(STATIC_276), i14) | &&(&&(<=(0, 0), =(matching1, 0)), =(matching2, 0))
274_0_test_LE(EOS(STATIC_274), i14, i68, i68) → 278_0_test_Inc(EOS(STATIC_278), i14, i68) | >(i68, 0)
276_0_test_Load(EOS(STATIC_276), i14) → 280_0_test_Store(EOS(STATIC_280), i14, i14)
278_0_test_Inc(EOS(STATIC_278), i14, i68) → 282_0_test_JMP(EOS(STATIC_282), i14, +(i68, -1)) | >(i68, 0)
280_0_test_Store(EOS(STATIC_280), i14, i14) → 284_0_test_Load(EOS(STATIC_284), i14, i14)
282_0_test_JMP(EOS(STATIC_282), i14, i69) → 288_0_test_Load(EOS(STATIC_288), i14, i69)
284_0_test_Load(EOS(STATIC_284), i14, i14) → 303_0_test_Load(EOS(STATIC_303), i14, i14)
288_0_test_Load(EOS(STATIC_288), i14, i69) → 267_0_test_Load(EOS(STATIC_267), i14, i69)
303_0_test_Load(EOS(STATIC_303), i14, i74) → 306_0_test_LE(EOS(STATIC_306), i14, i74, i74)
306_0_test_LE(EOS(STATIC_306), i14, matching1, matching2) → 308_0_test_LE(EOS(STATIC_308), i14, 0, 0) | &&(=(matching1, 0), =(matching2, 0))
306_0_test_LE(EOS(STATIC_306), i14, i78, i78) → 310_0_test_LE(EOS(STATIC_310), i14, i78, i78)
308_0_test_LE(EOS(STATIC_308), i14, matching1, matching2) → 312_0_test_Load(EOS(STATIC_312), i14) | &&(&&(<=(0, 0), =(matching1, 0)), =(matching2, 0))
310_0_test_LE(EOS(STATIC_310), i14, i78, i78) → 314_0_test_Inc(EOS(STATIC_314), i14, i78) | >(i78, 0)
312_0_test_Load(EOS(STATIC_312), i14) → 316_0_test_Store(EOS(STATIC_316), i14, i14)
314_0_test_Inc(EOS(STATIC_314), i14, i78) → 318_0_test_JMP(EOS(STATIC_318), i14, +(i78, -1)) | >(i78, 0)
316_0_test_Store(EOS(STATIC_316), i14, i14) → 320_0_test_Load(EOS(STATIC_320), i14, i14)
318_0_test_JMP(EOS(STATIC_318), i14, i80) → 323_0_test_Load(EOS(STATIC_323), i14, i80)
320_0_test_Load(EOS(STATIC_320), i14, i14) → 338_0_test_Load(EOS(STATIC_338), i14, i14)
323_0_test_Load(EOS(STATIC_323), i14, i80) → 303_0_test_Load(EOS(STATIC_303), i14, i80)
338_0_test_Load(EOS(STATIC_338), i14, i86) → 341_0_test_LE(EOS(STATIC_341), i14, i86, i86)
341_0_test_LE(EOS(STATIC_341), i14, matching1, matching2) → 344_0_test_LE(EOS(STATIC_344), i14, 0, 0) | &&(=(matching1, 0), =(matching2, 0))
341_0_test_LE(EOS(STATIC_341), i14, i91, i91) → 345_0_test_LE(EOS(STATIC_345), i14, i91, i91)
344_0_test_LE(EOS(STATIC_344), i14, matching1, matching2) → 347_0_test_Load(EOS(STATIC_347), i14) | &&(&&(<=(0, 0), =(matching1, 0)), =(matching2, 0))
345_0_test_LE(EOS(STATIC_345), i14, i91, i91) → 349_0_test_Inc(EOS(STATIC_349), i14, i91) | >(i91, 0)
347_0_test_Load(EOS(STATIC_347), i14) → 351_0_test_Store(EOS(STATIC_351), i14, i14)
349_0_test_Inc(EOS(STATIC_349), i14, i91) → 353_0_test_JMP(EOS(STATIC_353), i14, +(i91, -1)) | >(i91, 0)
351_0_test_Store(EOS(STATIC_351), i14, i14) → 355_0_test_Load(EOS(STATIC_355), i14, i14)
353_0_test_JMP(EOS(STATIC_353), i14, i94) → 358_0_test_Load(EOS(STATIC_358), i14, i94)
355_0_test_Load(EOS(STATIC_355), i14, i14) → 373_0_test_Load(EOS(STATIC_373), i14, i14)
358_0_test_Load(EOS(STATIC_358), i14, i94) → 338_0_test_Load(EOS(STATIC_338), i14, i94)
373_0_test_Load(EOS(STATIC_373), i14, i98) → 376_0_test_LE(EOS(STATIC_376), i14, i98, i98)
376_0_test_LE(EOS(STATIC_376), i14, matching1, matching2) → 379_0_test_LE(EOS(STATIC_379), i14, 0, 0) | &&(=(matching1, 0), =(matching2, 0))
376_0_test_LE(EOS(STATIC_376), i14, i102, i102) → 380_0_test_LE(EOS(STATIC_380), i14, i102, i102)
379_0_test_LE(EOS(STATIC_379), i14, matching1, matching2) → 382_0_test_Load(EOS(STATIC_382), i14) | &&(&&(<=(0, 0), =(matching1, 0)), =(matching2, 0))
380_0_test_LE(EOS(STATIC_380), i14, i102, i102) → 384_0_test_Inc(EOS(STATIC_384), i14, i102) | >(i102, 0)
382_0_test_Load(EOS(STATIC_382), i14) → 386_0_test_Store(EOS(STATIC_386), i14, i14)
384_0_test_Inc(EOS(STATIC_384), i14, i102) → 388_0_test_JMP(EOS(STATIC_388), i14, +(i102, -1)) | >(i102, 0)
386_0_test_Store(EOS(STATIC_386), i14, i14) → 390_0_test_Load(EOS(STATIC_390), i14, i14)
388_0_test_JMP(EOS(STATIC_388), i14, i106) → 393_0_test_Load(EOS(STATIC_393), i14, i106)
390_0_test_Load(EOS(STATIC_390), i14, i14) → 407_0_test_Load(EOS(STATIC_407), i14, i14)
393_0_test_Load(EOS(STATIC_393), i14, i106) → 373_0_test_Load(EOS(STATIC_373), i14, i106)
407_0_test_Load(EOS(STATIC_407), i14, i109) → 410_0_test_LE(EOS(STATIC_410), i14, i109, i109)
410_0_test_LE(EOS(STATIC_410), i14, matching1, matching2) → 412_0_test_LE(EOS(STATIC_412), i14, 0, 0) | &&(=(matching1, 0), =(matching2, 0))
410_0_test_LE(EOS(STATIC_410), i14, i112, i112) → 414_0_test_LE(EOS(STATIC_414), i14, i112, i112)
412_0_test_LE(EOS(STATIC_412), i14, matching1, matching2) → 416_0_test_Load(EOS(STATIC_416), i14) | &&(&&(<=(0, 0), =(matching1, 0)), =(matching2, 0))
414_0_test_LE(EOS(STATIC_414), i14, i112, i112) → 418_0_test_Inc(EOS(STATIC_418), i14, i112) | >(i112, 0)
416_0_test_Load(EOS(STATIC_416), i14) → 420_0_test_Store(EOS(STATIC_420), i14, i14)
418_0_test_Inc(EOS(STATIC_418), i14, i112) → 421_0_test_JMP(EOS(STATIC_421), i14, +(i112, -1)) | >(i112, 0)
420_0_test_Store(EOS(STATIC_420), i14, i14) → 424_0_test_Load(EOS(STATIC_424), i14, i14)
421_0_test_JMP(EOS(STATIC_421), i14, i115) → 428_0_test_Load(EOS(STATIC_428), i14, i115)
424_0_test_Load(EOS(STATIC_424), i14, i14) → 443_0_test_Load(EOS(STATIC_443), i14, i14)
428_0_test_Load(EOS(STATIC_428), i14, i115) → 407_0_test_Load(EOS(STATIC_407), i14, i115)
443_0_test_Load(EOS(STATIC_443), i14, i122) → 446_0_test_LE(EOS(STATIC_446), i14, i122, i122)
446_0_test_LE(EOS(STATIC_446), i14, matching1, matching2) → 448_0_test_LE(EOS(STATIC_448), i14, 0, 0) | &&(=(matching1, 0), =(matching2, 0))
446_0_test_LE(EOS(STATIC_446), i14, i126, i126) → 449_0_test_LE(EOS(STATIC_449), i14, i126, i126)
448_0_test_LE(EOS(STATIC_448), i14, matching1, matching2) → 451_0_test_Load(EOS(STATIC_451), i14) | &&(&&(<=(0, 0), =(matching1, 0)), =(matching2, 0))
449_0_test_LE(EOS(STATIC_449), i14, i126, i126) → 453_0_test_Inc(EOS(STATIC_453), i14, i126) | >(i126, 0)
451_0_test_Load(EOS(STATIC_451), i14) → 455_0_test_Store(EOS(STATIC_455), i14, i14)
453_0_test_Inc(EOS(STATIC_453), i14, i126) → 457_0_test_JMP(EOS(STATIC_457), i14, +(i126, -1)) | >(i126, 0)
455_0_test_Store(EOS(STATIC_455), i14, i14) → 459_0_test_Load(EOS(STATIC_459), i14, i14)
457_0_test_JMP(EOS(STATIC_457), i14, i128) → 463_0_test_Load(EOS(STATIC_463), i14, i128)
459_0_test_Load(EOS(STATIC_459), i14, i14) → 477_0_test_Load(EOS(STATIC_477), i14, i14)
463_0_test_Load(EOS(STATIC_463), i14, i128) → 443_0_test_Load(EOS(STATIC_443), i14, i128)
477_0_test_Load(EOS(STATIC_477), i14, i132) → 479_0_test_LE(EOS(STATIC_479), i14, i132, i132)
479_0_test_LE(EOS(STATIC_479), i14, matching1, matching2) → 483_0_test_LE(EOS(STATIC_483), i14, 0, 0) | &&(=(matching1, 0), =(matching2, 0))
479_0_test_LE(EOS(STATIC_479), i14, i137, i137) → 484_0_test_LE(EOS(STATIC_484), i14, i137, i137)
483_0_test_LE(EOS(STATIC_483), i14, matching1, matching2) → 485_0_test_Load(EOS(STATIC_485), i14) | &&(&&(<=(0, 0), =(matching1, 0)), =(matching2, 0))
484_0_test_LE(EOS(STATIC_484), i14, i137, i137) → 488_0_test_Inc(EOS(STATIC_488), i14, i137) | >(i137, 0)
485_0_test_Load(EOS(STATIC_485), i14) → 491_0_test_Store(EOS(STATIC_491), i14, i14)
488_0_test_Inc(EOS(STATIC_488), i14, i137) → 493_0_test_JMP(EOS(STATIC_493), i14, +(i137, -1)) | >(i137, 0)
491_0_test_Store(EOS(STATIC_491), i14, i14) → 495_0_test_Load(EOS(STATIC_495), i14, i14)
493_0_test_JMP(EOS(STATIC_493), i14, i140) → 498_0_test_Load(EOS(STATIC_498), i14, i140)
495_0_test_Load(EOS(STATIC_495), i14, i14) → 512_0_test_Load(EOS(STATIC_512), i14, i14)
498_0_test_Load(EOS(STATIC_498), i14, i140) → 477_0_test_Load(EOS(STATIC_477), i14, i140)
512_0_test_Load(EOS(STATIC_512), i14, i144) → 515_0_test_LE(EOS(STATIC_515), i14, i144, i144)
515_0_test_LE(EOS(STATIC_515), i14, matching1, matching2) → 517_0_test_LE(EOS(STATIC_517), i14, 0, 0) | &&(=(matching1, 0), =(matching2, 0))
515_0_test_LE(EOS(STATIC_515), i14, i150, i150) → 518_0_test_LE(EOS(STATIC_518), i14, i150, i150)
517_0_test_LE(EOS(STATIC_517), i14, matching1, matching2) → 520_0_test_Load(EOS(STATIC_520), i14) | &&(&&(<=(0, 0), =(matching1, 0)), =(matching2, 0))
518_0_test_LE(EOS(STATIC_518), i14, i150, i150) → 522_0_test_Inc(EOS(STATIC_522), i14, i150) | >(i150, 0)
520_0_test_Load(EOS(STATIC_520), i14) → 524_0_test_Store(EOS(STATIC_524), i14)
522_0_test_Inc(EOS(STATIC_522), i14, i150) → 526_0_test_JMP(EOS(STATIC_526), i14, +(i150, -1)) | >(i150, 0)
524_0_test_Store(EOS(STATIC_524), i14) → 529_0_test_Load(EOS(STATIC_529), i14)
526_0_test_JMP(EOS(STATIC_526), i14, i153) → 533_0_test_Load(EOS(STATIC_533), i14, i153)
529_0_test_Load(EOS(STATIC_529), i14) → 546_0_test_Load(EOS(STATIC_546), i14)
533_0_test_Load(EOS(STATIC_533), i14, i153) → 512_0_test_Load(EOS(STATIC_512), i14, i153)
546_0_test_Load(EOS(STATIC_546), i158) → 549_0_test_LE(EOS(STATIC_549), i158, i158)
549_0_test_LE(EOS(STATIC_549), matching1, matching2) → 552_0_test_LE(EOS(STATIC_552), 0, 0) | &&(=(matching1, 0), =(matching2, 0))
549_0_test_LE(EOS(STATIC_549), i161, i161) → 553_0_test_LE(EOS(STATIC_553), i161, i161)
552_0_test_LE(EOS(STATIC_552), matching1, matching2) → 555_0_test_Return(EOS(STATIC_555)) | &&(&&(<=(0, 0), =(matching1, 0)), =(matching2, 0))
553_0_test_LE(EOS(STATIC_553), i161, i161) → 557_0_test_Inc(EOS(STATIC_557), i161) | >(i161, 0)
557_0_test_Inc(EOS(STATIC_557), i161) → 563_0_test_JMP(EOS(STATIC_563), +(i161, -1)) | >(i161, 0)
563_0_test_JMP(EOS(STATIC_563), i163) → 574_0_test_Load(EOS(STATIC_574), i163)
574_0_test_Load(EOS(STATIC_574), i163) → 546_0_test_Load(EOS(STATIC_546), i163)

Combined rules. Obtained 3 conditional rules for P and 25 conditional rules for R.


P rules:
92_0_main_GE(EOS(STATIC_92), x0, x1, x1, 100) → 103_1_main_InvokeMethod(103_0_test_Load(EOS(STATIC_103), x1), x0, x1, x1) | <(x1, 100)
103_1_main_InvokeMethod(555_0_test_Return(EOS(STATIC_555)), x0, x1, x1) → 92_0_main_GE(EOS(STATIC_92), x0, +(x1, 1), +(x1, 1), 100) | >(x1, 0)
92_0_main_GE(EOS(STATIC_92), x0, x1, x1, 100) → 92_0_main_GE(EOS(STATIC_92), -(x0, 1), -(x0, 1), -(x0, 1), 100) | &&(>(+(x1, 1), 100), >(x0, 1))
R rules:
103_0_test_Load(EOS(STATIC_103), x0) → 157_0_test_LE(EOS(STATIC_157), x0, x0, x0)
157_0_test_LE(EOS(STATIC_157), x0, x1, x1) → 157_0_test_LE(EOS(STATIC_157), x0, +(x1, -1), +(x1, -1)) | >(x1, 0)
157_0_test_LE(EOS(STATIC_157), x0, 0, 0) → 194_0_test_LE(EOS(STATIC_194), x0, x0, x0)
194_0_test_LE(EOS(STATIC_194), x0, x1, x1) → 194_0_test_LE(EOS(STATIC_194), x0, +(x1, -1), +(x1, -1)) | >(x1, 0)
194_0_test_LE(EOS(STATIC_194), x0, 0, 0) → 235_0_test_LE(EOS(STATIC_235), x0, x0, x0)
235_0_test_LE(EOS(STATIC_235), x0, x1, x1) → 235_0_test_LE(EOS(STATIC_235), x0, +(x1, -1), +(x1, -1)) | >(x1, 0)
235_0_test_LE(EOS(STATIC_235), x0, 0, 0) → 270_0_test_LE(EOS(STATIC_270), x0, x0, x0)
270_0_test_LE(EOS(STATIC_270), x0, x1, x1) → 270_0_test_LE(EOS(STATIC_270), x0, +(x1, -1), +(x1, -1)) | >(x1, 0)
270_0_test_LE(EOS(STATIC_270), x0, 0, 0) → 306_0_test_LE(EOS(STATIC_306), x0, x0, x0)
306_0_test_LE(EOS(STATIC_306), x0, x1, x1) → 306_0_test_LE(EOS(STATIC_306), x0, +(x1, -1), +(x1, -1)) | >(x1, 0)
306_0_test_LE(EOS(STATIC_306), x0, 0, 0) → 341_0_test_LE(EOS(STATIC_341), x0, x0, x0)
341_0_test_LE(EOS(STATIC_341), x0, x1, x1) → 341_0_test_LE(EOS(STATIC_341), x0, +(x1, -1), +(x1, -1)) | >(x1, 0)
341_0_test_LE(EOS(STATIC_341), x0, 0, 0) → 376_0_test_LE(EOS(STATIC_376), x0, x0, x0)
376_0_test_LE(EOS(STATIC_376), x0, x1, x1) → 376_0_test_LE(EOS(STATIC_376), x0, +(x1, -1), +(x1, -1)) | >(x1, 0)
376_0_test_LE(EOS(STATIC_376), x0, 0, 0) → 410_0_test_LE(EOS(STATIC_410), x0, x0, x0)
410_0_test_LE(EOS(STATIC_410), x0, x1, x1) → 410_0_test_LE(EOS(STATIC_410), x0, +(x1, -1), +(x1, -1)) | >(x1, 0)
410_0_test_LE(EOS(STATIC_410), x0, 0, 0) → 446_0_test_LE(EOS(STATIC_446), x0, x0, x0)
446_0_test_LE(EOS(STATIC_446), x0, x1, x1) → 446_0_test_LE(EOS(STATIC_446), x0, +(x1, -1), +(x1, -1)) | >(x1, 0)
446_0_test_LE(EOS(STATIC_446), x0, 0, 0) → 479_0_test_LE(EOS(STATIC_479), x0, x0, x0)
479_0_test_LE(EOS(STATIC_479), x0, x1, x1) → 479_0_test_LE(EOS(STATIC_479), x0, +(x1, -1), +(x1, -1)) | >(x1, 0)
479_0_test_LE(EOS(STATIC_479), x0, 0, 0) → 515_0_test_LE(EOS(STATIC_515), x0, x0, x0)
515_0_test_LE(EOS(STATIC_515), x0, x1, x1) → 515_0_test_LE(EOS(STATIC_515), x0, +(x1, -1), +(x1, -1)) | >(x1, 0)
515_0_test_LE(EOS(STATIC_515), x0, 0, 0) → 549_0_test_LE(EOS(STATIC_549), x0, x0)
549_0_test_LE(EOS(STATIC_549), 0, 0) → 555_0_test_Return(EOS(STATIC_555))
549_0_test_LE(EOS(STATIC_549), x0, x0) → 549_0_test_LE(EOS(STATIC_549), +(x0, -1), +(x0, -1)) | >(x0, 0)

Filtered ground terms:



92_0_main_GE(x1, x2, x3, x4, x5) → 92_0_main_GE(x2, x3, x4)
Cond_92_0_main_GE1(x1, x2, x3, x4, x5, x6) → Cond_92_0_main_GE1(x1, x3, x4, x5)
Cond_103_1_main_InvokeMethod(x1, x2, x3, x4, x5) → Cond_103_1_main_InvokeMethod(x1, x3, x4, x5)
555_0_test_Return(x1) → 555_0_test_Return
103_0_test_Load(x1, x2) → 103_0_test_Load(x2)
Cond_92_0_main_GE(x1, x2, x3, x4, x5, x6) → Cond_92_0_main_GE(x1, x3, x4, x5)
549_0_test_LE(x1, x2, x3) → 549_0_test_LE(x2, x3)
Cond_549_0_test_LE(x1, x2, x3, x4) → Cond_549_0_test_LE(x1, x3, x4)
515_0_test_LE(x1, x2, x3, x4) → 515_0_test_LE(x2, x3, x4)
Cond_515_0_test_LE(x1, x2, x3, x4, x5) → Cond_515_0_test_LE(x1, x3, x4, x5)
479_0_test_LE(x1, x2, x3, x4) → 479_0_test_LE(x2, x3, x4)
Cond_479_0_test_LE(x1, x2, x3, x4, x5) → Cond_479_0_test_LE(x1, x3, x4, x5)
446_0_test_LE(x1, x2, x3, x4) → 446_0_test_LE(x2, x3, x4)
Cond_446_0_test_LE(x1, x2, x3, x4, x5) → Cond_446_0_test_LE(x1, x3, x4, x5)
410_0_test_LE(x1, x2, x3, x4) → 410_0_test_LE(x2, x3, x4)
Cond_410_0_test_LE(x1, x2, x3, x4, x5) → Cond_410_0_test_LE(x1, x3, x4, x5)
376_0_test_LE(x1, x2, x3, x4) → 376_0_test_LE(x2, x3, x4)
Cond_376_0_test_LE(x1, x2, x3, x4, x5) → Cond_376_0_test_LE(x1, x3, x4, x5)
341_0_test_LE(x1, x2, x3, x4) → 341_0_test_LE(x2, x3, x4)
Cond_341_0_test_LE(x1, x2, x3, x4, x5) → Cond_341_0_test_LE(x1, x3, x4, x5)
306_0_test_LE(x1, x2, x3, x4) → 306_0_test_LE(x2, x3, x4)
Cond_306_0_test_LE(x1, x2, x3, x4, x5) → Cond_306_0_test_LE(x1, x3, x4, x5)
270_0_test_LE(x1, x2, x3, x4) → 270_0_test_LE(x2, x3, x4)
Cond_270_0_test_LE(x1, x2, x3, x4, x5) → Cond_270_0_test_LE(x1, x3, x4, x5)
235_0_test_LE(x1, x2, x3, x4) → 235_0_test_LE(x2, x3, x4)
Cond_235_0_test_LE(x1, x2, x3, x4, x5) → Cond_235_0_test_LE(x1, x3, x4, x5)
194_0_test_LE(x1, x2, x3, x4) → 194_0_test_LE(x2, x3, x4)
Cond_194_0_test_LE(x1, x2, x3, x4, x5) → Cond_194_0_test_LE(x1, x3, x4, x5)
157_0_test_LE(x1, x2, x3, x4) → 157_0_test_LE(x2, x3, x4)
Cond_157_0_test_LE(x1, x2, x3, x4, x5) → Cond_157_0_test_LE(x1, x3, x4, x5)

Filtered duplicate args:



92_0_main_GE(x1, x2, x3) → 92_0_main_GE(x1, x3)
Cond_92_0_main_GE(x1, x2, x3, x4) → Cond_92_0_main_GE(x1, x2, x4)
103_1_main_InvokeMethod(x1, x2, x3, x4) → 103_1_main_InvokeMethod(x1, x2, x4)
Cond_103_1_main_InvokeMethod(x1, x2, x3, x4) → Cond_103_1_main_InvokeMethod(x1, x2, x4)
Cond_92_0_main_GE1(x1, x2, x3, x4) → Cond_92_0_main_GE1(x1, x2, x4)
Cond_157_0_test_LE(x1, x2, x3, x4) → Cond_157_0_test_LE(x1, x2, x4)
Cond_194_0_test_LE(x1, x2, x3, x4) → Cond_194_0_test_LE(x1, x2, x4)
Cond_235_0_test_LE(x1, x2, x3, x4) → Cond_235_0_test_LE(x1, x2, x4)
Cond_270_0_test_LE(x1, x2, x3, x4) → Cond_270_0_test_LE(x1, x2, x4)
Cond_306_0_test_LE(x1, x2, x3, x4) → Cond_306_0_test_LE(x1, x2, x4)
Cond_341_0_test_LE(x1, x2, x3, x4) → Cond_341_0_test_LE(x1, x2, x4)
Cond_376_0_test_LE(x1, x2, x3, x4) → Cond_376_0_test_LE(x1, x2, x4)
Cond_410_0_test_LE(x1, x2, x3, x4) → Cond_410_0_test_LE(x1, x2, x4)
Cond_446_0_test_LE(x1, x2, x3, x4) → Cond_446_0_test_LE(x1, x2, x4)
Cond_479_0_test_LE(x1, x2, x3, x4) → Cond_479_0_test_LE(x1, x2, x4)
Cond_515_0_test_LE(x1, x2, x3, x4) → Cond_515_0_test_LE(x1, x2, x4)
549_0_test_LE(x1, x2) → 549_0_test_LE(x2)
Cond_549_0_test_LE(x1, x2, x3) → Cond_549_0_test_LE(x1, x3)

Filtered unneeded arguments:



Cond_92_0_main_GE1(x1, x2, x3) → Cond_92_0_main_GE1(x1, x2)

Combined rules. Obtained 3 conditional rules for P and 25 conditional rules for R.


P rules:
92_0_main_GE(x0, x1) → 103_1_main_InvokeMethod(103_0_test_Load(x1), x0, x1) | <(x1, 100)
103_1_main_InvokeMethod(555_0_test_Return, x0, x1) → 92_0_main_GE(x0, +(x1, 1)) | >(x1, 0)
92_0_main_GE(x0, x1) → 92_0_main_GE(-(x0, 1), -(x0, 1)) | &&(>(x1, 99), >(x0, 1))
R rules:
103_0_test_Load(x0) → 157_0_test_LE(x0, x0, x0)
157_0_test_LE(x0, x1, x1) → 157_0_test_LE(x0, +(x1, -1), +(x1, -1)) | >(x1, 0)
157_0_test_LE(x0, 0, 0) → 194_0_test_LE(x0, x0, x0)
194_0_test_LE(x0, x1, x1) → 194_0_test_LE(x0, +(x1, -1), +(x1, -1)) | >(x1, 0)
194_0_test_LE(x0, 0, 0) → 235_0_test_LE(x0, x0, x0)
235_0_test_LE(x0, x1, x1) → 235_0_test_LE(x0, +(x1, -1), +(x1, -1)) | >(x1, 0)
235_0_test_LE(x0, 0, 0) → 270_0_test_LE(x0, x0, x0)
270_0_test_LE(x0, x1, x1) → 270_0_test_LE(x0, +(x1, -1), +(x1, -1)) | >(x1, 0)
270_0_test_LE(x0, 0, 0) → 306_0_test_LE(x0, x0, x0)
306_0_test_LE(x0, x1, x1) → 306_0_test_LE(x0, +(x1, -1), +(x1, -1)) | >(x1, 0)
306_0_test_LE(x0, 0, 0) → 341_0_test_LE(x0, x0, x0)
341_0_test_LE(x0, x1, x1) → 341_0_test_LE(x0, +(x1, -1), +(x1, -1)) | >(x1, 0)
341_0_test_LE(x0, 0, 0) → 376_0_test_LE(x0, x0, x0)
376_0_test_LE(x0, x1, x1) → 376_0_test_LE(x0, +(x1, -1), +(x1, -1)) | >(x1, 0)
376_0_test_LE(x0, 0, 0) → 410_0_test_LE(x0, x0, x0)
410_0_test_LE(x0, x1, x1) → 410_0_test_LE(x0, +(x1, -1), +(x1, -1)) | >(x1, 0)
410_0_test_LE(x0, 0, 0) → 446_0_test_LE(x0, x0, x0)
446_0_test_LE(x0, x1, x1) → 446_0_test_LE(x0, +(x1, -1), +(x1, -1)) | >(x1, 0)
446_0_test_LE(x0, 0, 0) → 479_0_test_LE(x0, x0, x0)
479_0_test_LE(x0, x1, x1) → 479_0_test_LE(x0, +(x1, -1), +(x1, -1)) | >(x1, 0)
479_0_test_LE(x0, 0, 0) → 515_0_test_LE(x0, x0, x0)
515_0_test_LE(x0, x1, x1) → 515_0_test_LE(x0, +(x1, -1), +(x1, -1)) | >(x1, 0)
515_0_test_LE(x0, 0, 0) → 549_0_test_LE(x0)
549_0_test_LE(0) → 555_0_test_Return
549_0_test_LE(x0) → 549_0_test_LE(+(x0, -1)) | >(x0, 0)

Finished conversion. Obtained 6 rules for P and 37 rules for R. System has predefined symbols.


P rules:
92_0_MAIN_GE(x0, x1) → COND_92_0_MAIN_GE(<(x1, 100), x0, x1)
COND_92_0_MAIN_GE(TRUE, x0, x1) → 103_1_MAIN_INVOKEMETHOD(103_0_test_Load(x1), x0, x1)
103_1_MAIN_INVOKEMETHOD(555_0_test_Return, x0, x1) → COND_103_1_MAIN_INVOKEMETHOD(>(x1, 0), 555_0_test_Return, x0, x1)
COND_103_1_MAIN_INVOKEMETHOD(TRUE, 555_0_test_Return, x0, x1) → 92_0_MAIN_GE(x0, +(x1, 1))
92_0_MAIN_GE(x0, x1) → COND_92_0_MAIN_GE1(&&(>(x1, 99), >(x0, 1)), x0, x1)
COND_92_0_MAIN_GE1(TRUE, x0, x1) → 92_0_MAIN_GE(-(x0, 1), -(x0, 1))
R rules:
103_0_test_Load(x0) → 157_0_test_LE(x0, x0, x0)
157_0_test_LE(x0, x1, x1) → Cond_157_0_test_LE(>(x1, 0), x0, x1, x1)
Cond_157_0_test_LE(TRUE, x0, x1, x1) → 157_0_test_LE(x0, +(x1, -1), +(x1, -1))
157_0_test_LE(x0, 0, 0) → 194_0_test_LE(x0, x0, x0)
194_0_test_LE(x0, x1, x1) → Cond_194_0_test_LE(>(x1, 0), x0, x1, x1)
Cond_194_0_test_LE(TRUE, x0, x1, x1) → 194_0_test_LE(x0, +(x1, -1), +(x1, -1))
194_0_test_LE(x0, 0, 0) → 235_0_test_LE(x0, x0, x0)
235_0_test_LE(x0, x1, x1) → Cond_235_0_test_LE(>(x1, 0), x0, x1, x1)
Cond_235_0_test_LE(TRUE, x0, x1, x1) → 235_0_test_LE(x0, +(x1, -1), +(x1, -1))
235_0_test_LE(x0, 0, 0) → 270_0_test_LE(x0, x0, x0)
270_0_test_LE(x0, x1, x1) → Cond_270_0_test_LE(>(x1, 0), x0, x1, x1)
Cond_270_0_test_LE(TRUE, x0, x1, x1) → 270_0_test_LE(x0, +(x1, -1), +(x1, -1))
270_0_test_LE(x0, 0, 0) → 306_0_test_LE(x0, x0, x0)
306_0_test_LE(x0, x1, x1) → Cond_306_0_test_LE(>(x1, 0), x0, x1, x1)
Cond_306_0_test_LE(TRUE, x0, x1, x1) → 306_0_test_LE(x0, +(x1, -1), +(x1, -1))
306_0_test_LE(x0, 0, 0) → 341_0_test_LE(x0, x0, x0)
341_0_test_LE(x0, x1, x1) → Cond_341_0_test_LE(>(x1, 0), x0, x1, x1)
Cond_341_0_test_LE(TRUE, x0, x1, x1) → 341_0_test_LE(x0, +(x1, -1), +(x1, -1))
341_0_test_LE(x0, 0, 0) → 376_0_test_LE(x0, x0, x0)
376_0_test_LE(x0, x1, x1) → Cond_376_0_test_LE(>(x1, 0), x0, x1, x1)
Cond_376_0_test_LE(TRUE, x0, x1, x1) → 376_0_test_LE(x0, +(x1, -1), +(x1, -1))
376_0_test_LE(x0, 0, 0) → 410_0_test_LE(x0, x0, x0)
410_0_test_LE(x0, x1, x1) → Cond_410_0_test_LE(>(x1, 0), x0, x1, x1)
Cond_410_0_test_LE(TRUE, x0, x1, x1) → 410_0_test_LE(x0, +(x1, -1), +(x1, -1))
410_0_test_LE(x0, 0, 0) → 446_0_test_LE(x0, x0, x0)
446_0_test_LE(x0, x1, x1) → Cond_446_0_test_LE(>(x1, 0), x0, x1, x1)
Cond_446_0_test_LE(TRUE, x0, x1, x1) → 446_0_test_LE(x0, +(x1, -1), +(x1, -1))
446_0_test_LE(x0, 0, 0) → 479_0_test_LE(x0, x0, x0)
479_0_test_LE(x0, x1, x1) → Cond_479_0_test_LE(>(x1, 0), x0, x1, x1)
Cond_479_0_test_LE(TRUE, x0, x1, x1) → 479_0_test_LE(x0, +(x1, -1), +(x1, -1))
479_0_test_LE(x0, 0, 0) → 515_0_test_LE(x0, x0, x0)
515_0_test_LE(x0, x1, x1) → Cond_515_0_test_LE(>(x1, 0), x0, x1, x1)
Cond_515_0_test_LE(TRUE, x0, x1, x1) → 515_0_test_LE(x0, +(x1, -1), +(x1, -1))
515_0_test_LE(x0, 0, 0) → 549_0_test_LE(x0)
549_0_test_LE(0) → 555_0_test_Return
549_0_test_LE(x0) → Cond_549_0_test_LE(>(x0, 0), x0)
Cond_549_0_test_LE(TRUE, x0) → 549_0_test_LE(+(x0, -1))

(139) 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, Boolean


The ITRS R consists of the following rules:
103_0_test_Load(x0) → 157_0_test_LE(x0, x0, x0)
157_0_test_LE(x0, x1, x1) → Cond_157_0_test_LE(x1 > 0, x0, x1, x1)
Cond_157_0_test_LE(TRUE, x0, x1, x1) → 157_0_test_LE(x0, x1 + -1, x1 + -1)
157_0_test_LE(x0, 0, 0) → 194_0_test_LE(x0, x0, x0)
194_0_test_LE(x0, x1, x1) → Cond_194_0_test_LE(x1 > 0, x0, x1, x1)
Cond_194_0_test_LE(TRUE, x0, x1, x1) → 194_0_test_LE(x0, x1 + -1, x1 + -1)
194_0_test_LE(x0, 0, 0) → 235_0_test_LE(x0, x0, x0)
235_0_test_LE(x0, x1, x1) → Cond_235_0_test_LE(x1 > 0, x0, x1, x1)
Cond_235_0_test_LE(TRUE, x0, x1, x1) → 235_0_test_LE(x0, x1 + -1, x1 + -1)
235_0_test_LE(x0, 0, 0) → 270_0_test_LE(x0, x0, x0)
270_0_test_LE(x0, x1, x1) → Cond_270_0_test_LE(x1 > 0, x0, x1, x1)
Cond_270_0_test_LE(TRUE, x0, x1, x1) → 270_0_test_LE(x0, x1 + -1, x1 + -1)
270_0_test_LE(x0, 0, 0) → 306_0_test_LE(x0, x0, x0)
306_0_test_LE(x0, x1, x1) → Cond_306_0_test_LE(x1 > 0, x0, x1, x1)
Cond_306_0_test_LE(TRUE, x0, x1, x1) → 306_0_test_LE(x0, x1 + -1, x1 + -1)
306_0_test_LE(x0, 0, 0) → 341_0_test_LE(x0, x0, x0)
341_0_test_LE(x0, x1, x1) → Cond_341_0_test_LE(x1 > 0, x0, x1, x1)
Cond_341_0_test_LE(TRUE, x0, x1, x1) → 341_0_test_LE(x0, x1 + -1, x1 + -1)
341_0_test_LE(x0, 0, 0) → 376_0_test_LE(x0, x0, x0)
376_0_test_LE(x0, x1, x1) → Cond_376_0_test_LE(x1 > 0, x0, x1, x1)
Cond_376_0_test_LE(TRUE, x0, x1, x1) → 376_0_test_LE(x0, x1 + -1, x1 + -1)
376_0_test_LE(x0, 0, 0) → 410_0_test_LE(x0, x0, x0)
410_0_test_LE(x0, x1, x1) → Cond_410_0_test_LE(x1 > 0, x0, x1, x1)
Cond_410_0_test_LE(TRUE, x0, x1, x1) → 410_0_test_LE(x0, x1 + -1, x1 + -1)
410_0_test_LE(x0, 0, 0) → 446_0_test_LE(x0, x0, x0)
446_0_test_LE(x0, x1, x1) → Cond_446_0_test_LE(x1 > 0, x0, x1, x1)
Cond_446_0_test_LE(TRUE, x0, x1, x1) → 446_0_test_LE(x0, x1 + -1, x1 + -1)
446_0_test_LE(x0, 0, 0) → 479_0_test_LE(x0, x0, x0)
479_0_test_LE(x0, x1, x1) → Cond_479_0_test_LE(x1 > 0, x0, x1, x1)
Cond_479_0_test_LE(TRUE, x0, x1, x1) → 479_0_test_LE(x0, x1 + -1, x1 + -1)
479_0_test_LE(x0, 0, 0) → 515_0_test_LE(x0, x0, x0)
515_0_test_LE(x0, x1, x1) → Cond_515_0_test_LE(x1 > 0, x0, x1, x1)
Cond_515_0_test_LE(TRUE, x0, x1, x1) → 515_0_test_LE(x0, x1 + -1, x1 + -1)
515_0_test_LE(x0, 0, 0) → 549_0_test_LE(x0)
549_0_test_LE(0) → 555_0_test_Return
549_0_test_LE(x0) → Cond_549_0_test_LE(x0 > 0, x0)
Cond_549_0_test_LE(TRUE, x0) → 549_0_test_LE(x0 + -1)

The integer pair graph contains the following rules and edges:
(0): 92_0_MAIN_GE(x0[0], x1[0]) → COND_92_0_MAIN_GE(x1[0] < 100, x0[0], x1[0])
(1): COND_92_0_MAIN_GE(TRUE, x0[1], x1[1]) → 103_1_MAIN_INVOKEMETHOD(103_0_test_Load(x1[1]), x0[1], x1[1])
(2): 103_1_MAIN_INVOKEMETHOD(555_0_test_Return, x0[2], x1[2]) → COND_103_1_MAIN_INVOKEMETHOD(x1[2] > 0, 555_0_test_Return, x0[2], x1[2])
(3): COND_103_1_MAIN_INVOKEMETHOD(TRUE, 555_0_test_Return, x0[3], x1[3]) → 92_0_MAIN_GE(x0[3], x1[3] + 1)
(4): 92_0_MAIN_GE(x0[4], x1[4]) → COND_92_0_MAIN_GE1(x1[4] > 99 && x0[4] > 1, x0[4], x1[4])
(5): COND_92_0_MAIN_GE1(TRUE, x0[5], x1[5]) → 92_0_MAIN_GE(x0[5] - 1, x0[5] - 1)

(0) -> (1), if (x1[0] < 100x0[0]* x0[1]x1[0]* x1[1])


(1) -> (2), if (103_0_test_Load(x1[1]) →* 555_0_test_Returnx0[1]* x0[2]x1[1]* x1[2])


(2) -> (3), if (x1[2] > 0x0[2]* x0[3]x1[2]* x1[3])


(3) -> (0), if (x0[3]* x0[0]x1[3] + 1* x1[0])


(3) -> (4), if (x0[3]* x0[4]x1[3] + 1* x1[4])


(4) -> (5), if (x1[4] > 99 && x0[4] > 1x0[4]* x0[5]x1[4]* x1[5])


(5) -> (0), if (x0[5] - 1* x0[0]x0[5] - 1* x1[0])


(5) -> (4), if (x0[5] - 1* x0[4]x0[5] - 1* x1[4])



The set Q consists of the following terms:
103_0_test_Load(x0)
157_0_test_LE(x0, x1, x1)
Cond_157_0_test_LE(TRUE, x0, x1, x1)
194_0_test_LE(x0, x1, x1)
Cond_194_0_test_LE(TRUE, x0, x1, x1)
235_0_test_LE(x0, x1, x1)
Cond_235_0_test_LE(TRUE, x0, x1, x1)
270_0_test_LE(x0, x1, x1)
Cond_270_0_test_LE(TRUE, x0, x1, x1)
306_0_test_LE(x0, x1, x1)
Cond_306_0_test_LE(TRUE, x0, x1, x1)
341_0_test_LE(x0, x1, x1)
Cond_341_0_test_LE(TRUE, x0, x1, x1)
376_0_test_LE(x0, x1, x1)
Cond_376_0_test_LE(TRUE, x0, x1, x1)
410_0_test_LE(x0, x1, x1)
Cond_410_0_test_LE(TRUE, x0, x1, x1)
446_0_test_LE(x0, x1, x1)
Cond_446_0_test_LE(TRUE, x0, x1, x1)
479_0_test_LE(x0, x1, x1)
Cond_479_0_test_LE(TRUE, x0, x1, x1)
515_0_test_LE(x0, x1, x1)
Cond_515_0_test_LE(TRUE, x0, x1, x1)
549_0_test_LE(x0)
Cond_549_0_test_LE(TRUE, x0)

(140) IDPNonInfProof (SOUND transformation)

Used the following options for this NonInfProof:
IDPGPoloSolver: Range: [(-1,2)] IsNat: false Interpretation Shape Heuristic: aprove.DPFramework.IDPProblem.Processors.nonInf.poly.IdpCand1ShapeHeuristic@172675af Constraint Generator: NonInfConstraintGenerator: PathGenerator: MetricPathGenerator: Max Left Steps: 0 Max Right Steps: 0

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 92_0_MAIN_GE(x0, x1) → COND_92_0_MAIN_GE(<(x1, 100), x0, x1) the following chains were created:
  • We consider the chain 92_0_MAIN_GE(x0[0], x1[0]) → COND_92_0_MAIN_GE(<(x1[0], 100), x0[0], x1[0]), COND_92_0_MAIN_GE(TRUE, x0[1], x1[1]) → 103_1_MAIN_INVOKEMETHOD(103_0_test_Load(x1[1]), x0[1], x1[1]) which results in the following constraint:

    (1)    (<(x1[0], 100)=TRUEx0[0]=x0[1]x1[0]=x1[1]92_0_MAIN_GE(x0[0], x1[0])≥NonInfC∧92_0_MAIN_GE(x0[0], x1[0])≥COND_92_0_MAIN_GE(<(x1[0], 100), x0[0], x1[0])∧(UIncreasing(COND_92_0_MAIN_GE(<(x1[0], 100), x0[0], x1[0])), ≥))



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

    (2)    (<(x1[0], 100)=TRUE92_0_MAIN_GE(x0[0], x1[0])≥NonInfC∧92_0_MAIN_GE(x0[0], x1[0])≥COND_92_0_MAIN_GE(<(x1[0], 100), x0[0], x1[0])∧(UIncreasing(COND_92_0_MAIN_GE(<(x1[0], 100), x0[0], x1[0])), ≥))



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

    (3)    ([99] + [-1]x1[0] ≥ 0 ⇒ (UIncreasing(COND_92_0_MAIN_GE(<(x1[0], 100), x0[0], x1[0])), ≥)∧[(-1)bni_87 + (-1)Bound*bni_87] + [bni_87]x0[0] ≥ 0∧[(-1)bso_88] ≥ 0)



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

    (4)    ([99] + [-1]x1[0] ≥ 0 ⇒ (UIncreasing(COND_92_0_MAIN_GE(<(x1[0], 100), x0[0], x1[0])), ≥)∧[(-1)bni_87 + (-1)Bound*bni_87] + [bni_87]x0[0] ≥ 0∧[(-1)bso_88] ≥ 0)



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

    (5)    ([99] + [-1]x1[0] ≥ 0 ⇒ (UIncreasing(COND_92_0_MAIN_GE(<(x1[0], 100), x0[0], x1[0])), ≥)∧[(-1)bni_87 + (-1)Bound*bni_87] + [bni_87]x0[0] ≥ 0∧[(-1)bso_88] ≥ 0)



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

    (6)    ([99] + [-1]x1[0] ≥ 0 ⇒ (UIncreasing(COND_92_0_MAIN_GE(<(x1[0], 100), x0[0], x1[0])), ≥)∧[bni_87] = 0∧[(-1)bni_87 + (-1)Bound*bni_87] ≥ 0∧0 = 0∧[(-1)bso_88] ≥ 0)



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

    (7)    ([99] + [-1]x1[0] ≥ 0∧x1[0] ≥ 0 ⇒ (UIncreasing(COND_92_0_MAIN_GE(<(x1[0], 100), x0[0], x1[0])), ≥)∧[bni_87] = 0∧[(-1)bni_87 + (-1)Bound*bni_87] ≥ 0∧0 = 0∧[(-1)bso_88] ≥ 0)


    (8)    ([99] + x1[0] ≥ 0∧x1[0] ≥ 0 ⇒ (UIncreasing(COND_92_0_MAIN_GE(<(x1[0], 100), x0[0], x1[0])), ≥)∧[bni_87] = 0∧[(-1)bni_87 + (-1)Bound*bni_87] ≥ 0∧0 = 0∧[(-1)bso_88] ≥ 0)







For Pair COND_92_0_MAIN_GE(TRUE, x0, x1) → 103_1_MAIN_INVOKEMETHOD(103_0_test_Load(x1), x0, x1) the following chains were created:
  • We consider the chain COND_92_0_MAIN_GE(TRUE, x0[1], x1[1]) → 103_1_MAIN_INVOKEMETHOD(103_0_test_Load(x1[1]), x0[1], x1[1]) which results in the following constraint:

    (9)    (COND_92_0_MAIN_GE(TRUE, x0[1], x1[1])≥NonInfC∧COND_92_0_MAIN_GE(TRUE, x0[1], x1[1])≥103_1_MAIN_INVOKEMETHOD(103_0_test_Load(x1[1]), x0[1], x1[1])∧(UIncreasing(103_1_MAIN_INVOKEMETHOD(103_0_test_Load(x1[1]), x0[1], x1[1])), ≥))



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

    (10)    ((UIncreasing(103_1_MAIN_INVOKEMETHOD(103_0_test_Load(x1[1]), x0[1], x1[1])), ≥)∧[bni_89] = 0∧[(-1)bso_90] ≥ 0)



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

    (11)    ((UIncreasing(103_1_MAIN_INVOKEMETHOD(103_0_test_Load(x1[1]), x0[1], x1[1])), ≥)∧[bni_89] = 0∧[(-1)bso_90] ≥ 0)



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

    (12)    ((UIncreasing(103_1_MAIN_INVOKEMETHOD(103_0_test_Load(x1[1]), x0[1], x1[1])), ≥)∧[bni_89] = 0∧[(-1)bso_90] ≥ 0)



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

    (13)    ((UIncreasing(103_1_MAIN_INVOKEMETHOD(103_0_test_Load(x1[1]), x0[1], x1[1])), ≥)∧[bni_89] = 0∧0 = 0∧0 = 0∧[(-1)bso_90] ≥ 0)







For Pair 103_1_MAIN_INVOKEMETHOD(555_0_test_Return, x0, x1) → COND_103_1_MAIN_INVOKEMETHOD(>(x1, 0), 555_0_test_Return, x0, x1) the following chains were created:
  • We consider the chain 103_1_MAIN_INVOKEMETHOD(555_0_test_Return, x0[2], x1[2]) → COND_103_1_MAIN_INVOKEMETHOD(>(x1[2], 0), 555_0_test_Return, x0[2], x1[2]), COND_103_1_MAIN_INVOKEMETHOD(TRUE, 555_0_test_Return, x0[3], x1[3]) → 92_0_MAIN_GE(x0[3], +(x1[3], 1)) which results in the following constraint:

    (14)    (>(x1[2], 0)=TRUEx0[2]=x0[3]x1[2]=x1[3]103_1_MAIN_INVOKEMETHOD(555_0_test_Return, x0[2], x1[2])≥NonInfC∧103_1_MAIN_INVOKEMETHOD(555_0_test_Return, x0[2], x1[2])≥COND_103_1_MAIN_INVOKEMETHOD(>(x1[2], 0), 555_0_test_Return, x0[2], x1[2])∧(UIncreasing(COND_103_1_MAIN_INVOKEMETHOD(>(x1[2], 0), 555_0_test_Return, x0[2], x1[2])), ≥))



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

    (15)    (>(x1[2], 0)=TRUE103_1_MAIN_INVOKEMETHOD(555_0_test_Return, x0[2], x1[2])≥NonInfC∧103_1_MAIN_INVOKEMETHOD(555_0_test_Return, x0[2], x1[2])≥COND_103_1_MAIN_INVOKEMETHOD(>(x1[2], 0), 555_0_test_Return, x0[2], x1[2])∧(UIncreasing(COND_103_1_MAIN_INVOKEMETHOD(>(x1[2], 0), 555_0_test_Return, x0[2], x1[2])), ≥))



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

    (16)    (x1[2] + [-1] ≥ 0 ⇒ (UIncreasing(COND_103_1_MAIN_INVOKEMETHOD(>(x1[2], 0), 555_0_test_Return, x0[2], x1[2])), ≥)∧[(-1)bni_91 + (-1)Bound*bni_91] + [bni_91]x0[2] ≥ 0∧[(-1)bso_92] ≥ 0)



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

    (17)    (x1[2] + [-1] ≥ 0 ⇒ (UIncreasing(COND_103_1_MAIN_INVOKEMETHOD(>(x1[2], 0), 555_0_test_Return, x0[2], x1[2])), ≥)∧[(-1)bni_91 + (-1)Bound*bni_91] + [bni_91]x0[2] ≥ 0∧[(-1)bso_92] ≥ 0)



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

    (18)    (x1[2] + [-1] ≥ 0 ⇒ (UIncreasing(COND_103_1_MAIN_INVOKEMETHOD(>(x1[2], 0), 555_0_test_Return, x0[2], x1[2])), ≥)∧[(-1)bni_91 + (-1)Bound*bni_91] + [bni_91]x0[2] ≥ 0∧[(-1)bso_92] ≥ 0)



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

    (19)    (x1[2] + [-1] ≥ 0 ⇒ (UIncreasing(COND_103_1_MAIN_INVOKEMETHOD(>(x1[2], 0), 555_0_test_Return, x0[2], x1[2])), ≥)∧[bni_91] = 0∧[(-1)bni_91 + (-1)Bound*bni_91] ≥ 0∧0 = 0∧[(-1)bso_92] ≥ 0)



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

    (20)    (x1[2] ≥ 0 ⇒ (UIncreasing(COND_103_1_MAIN_INVOKEMETHOD(>(x1[2], 0), 555_0_test_Return, x0[2], x1[2])), ≥)∧[bni_91] = 0∧[(-1)bni_91 + (-1)Bound*bni_91] ≥ 0∧0 = 0∧[(-1)bso_92] ≥ 0)







For Pair COND_103_1_MAIN_INVOKEMETHOD(TRUE, 555_0_test_Return, x0, x1) → 92_0_MAIN_GE(x0, +(x1, 1)) the following chains were created:
  • We consider the chain COND_103_1_MAIN_INVOKEMETHOD(TRUE, 555_0_test_Return, x0[3], x1[3]) → 92_0_MAIN_GE(x0[3], +(x1[3], 1)) which results in the following constraint:

    (21)    (COND_103_1_MAIN_INVOKEMETHOD(TRUE, 555_0_test_Return, x0[3], x1[3])≥NonInfC∧COND_103_1_MAIN_INVOKEMETHOD(TRUE, 555_0_test_Return, x0[3], x1[3])≥92_0_MAIN_GE(x0[3], +(x1[3], 1))∧(UIncreasing(92_0_MAIN_GE(x0[3], +(x1[3], 1))), ≥))



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

    (22)    ((UIncreasing(92_0_MAIN_GE(x0[3], +(x1[3], 1))), ≥)∧[bni_93] = 0∧[(-1)bso_94] ≥ 0)



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

    (23)    ((UIncreasing(92_0_MAIN_GE(x0[3], +(x1[3], 1))), ≥)∧[bni_93] = 0∧[(-1)bso_94] ≥ 0)



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

    (24)    ((UIncreasing(92_0_MAIN_GE(x0[3], +(x1[3], 1))), ≥)∧[bni_93] = 0∧[(-1)bso_94] ≥ 0)



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

    (25)    ((UIncreasing(92_0_MAIN_GE(x0[3], +(x1[3], 1))), ≥)∧[bni_93] = 0∧0 = 0∧0 = 0∧[(-1)bso_94] ≥ 0)







For Pair 92_0_MAIN_GE(x0, x1) → COND_92_0_MAIN_GE1(&&(>(x1, 99), >(x0, 1)), x0, x1) the following chains were created:
  • We consider the chain 92_0_MAIN_GE(x0[4], x1[4]) → COND_92_0_MAIN_GE1(&&(>(x1[4], 99), >(x0[4], 1)), x0[4], x1[4]), COND_92_0_MAIN_GE1(TRUE, x0[5], x1[5]) → 92_0_MAIN_GE(-(x0[5], 1), -(x0[5], 1)) which results in the following constraint:

    (26)    (&&(>(x1[4], 99), >(x0[4], 1))=TRUEx0[4]=x0[5]x1[4]=x1[5]92_0_MAIN_GE(x0[4], x1[4])≥NonInfC∧92_0_MAIN_GE(x0[4], x1[4])≥COND_92_0_MAIN_GE1(&&(>(x1[4], 99), >(x0[4], 1)), x0[4], x1[4])∧(UIncreasing(COND_92_0_MAIN_GE1(&&(>(x1[4], 99), >(x0[4], 1)), x0[4], x1[4])), ≥))



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

    (27)    (>(x1[4], 99)=TRUE>(x0[4], 1)=TRUE92_0_MAIN_GE(x0[4], x1[4])≥NonInfC∧92_0_MAIN_GE(x0[4], x1[4])≥COND_92_0_MAIN_GE1(&&(>(x1[4], 99), >(x0[4], 1)), x0[4], x1[4])∧(UIncreasing(COND_92_0_MAIN_GE1(&&(>(x1[4], 99), >(x0[4], 1)), x0[4], x1[4])), ≥))



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

    (28)    (x1[4] + [-100] ≥ 0∧x0[4] + [-2] ≥ 0 ⇒ (UIncreasing(COND_92_0_MAIN_GE1(&&(>(x1[4], 99), >(x0[4], 1)), x0[4], x1[4])), ≥)∧[(-1)bni_95 + (-1)Bound*bni_95] + [bni_95]x0[4] ≥ 0∧[(-1)bso_96] ≥ 0)



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

    (29)    (x1[4] + [-100] ≥ 0∧x0[4] + [-2] ≥ 0 ⇒ (UIncreasing(COND_92_0_MAIN_GE1(&&(>(x1[4], 99), >(x0[4], 1)), x0[4], x1[4])), ≥)∧[(-1)bni_95 + (-1)Bound*bni_95] + [bni_95]x0[4] ≥ 0∧[(-1)bso_96] ≥ 0)



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

    (30)    (x1[4] + [-100] ≥ 0∧x0[4] + [-2] ≥ 0 ⇒ (UIncreasing(COND_92_0_MAIN_GE1(&&(>(x1[4], 99), >(x0[4], 1)), x0[4], x1[4])), ≥)∧[(-1)bni_95 + (-1)Bound*bni_95] + [bni_95]x0[4] ≥ 0∧[(-1)bso_96] ≥ 0)



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

    (31)    (x1[4] ≥ 0∧x0[4] + [-2] ≥ 0 ⇒ (UIncreasing(COND_92_0_MAIN_GE1(&&(>(x1[4], 99), >(x0[4], 1)), x0[4], x1[4])), ≥)∧[(-1)bni_95 + (-1)Bound*bni_95] + [bni_95]x0[4] ≥ 0∧[(-1)bso_96] ≥ 0)



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

    (32)    (x1[4] ≥ 0∧x0[4] ≥ 0 ⇒ (UIncreasing(COND_92_0_MAIN_GE1(&&(>(x1[4], 99), >(x0[4], 1)), x0[4], x1[4])), ≥)∧[bni_95 + (-1)Bound*bni_95] + [bni_95]x0[4] ≥ 0∧[(-1)bso_96] ≥ 0)







For Pair COND_92_0_MAIN_GE1(TRUE, x0, x1) → 92_0_MAIN_GE(-(x0, 1), -(x0, 1)) the following chains were created:
  • We consider the chain COND_92_0_MAIN_GE1(TRUE, x0[5], x1[5]) → 92_0_MAIN_GE(-(x0[5], 1), -(x0[5], 1)) which results in the following constraint:

    (33)    (COND_92_0_MAIN_GE1(TRUE, x0[5], x1[5])≥NonInfC∧COND_92_0_MAIN_GE1(TRUE, x0[5], x1[5])≥92_0_MAIN_GE(-(x0[5], 1), -(x0[5], 1))∧(UIncreasing(92_0_MAIN_GE(-(x0[5], 1), -(x0[5], 1))), ≥))



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

    (34)    ((UIncreasing(92_0_MAIN_GE(-(x0[5], 1), -(x0[5], 1))), ≥)∧[bni_97] = 0∧[1 + (-1)bso_98] ≥ 0)



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

    (35)    ((UIncreasing(92_0_MAIN_GE(-(x0[5], 1), -(x0[5], 1))), ≥)∧[bni_97] = 0∧[1 + (-1)bso_98] ≥ 0)



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

    (36)    ((UIncreasing(92_0_MAIN_GE(-(x0[5], 1), -(x0[5], 1))), ≥)∧[bni_97] = 0∧[1 + (-1)bso_98] ≥ 0)



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

    (37)    ((UIncreasing(92_0_MAIN_GE(-(x0[5], 1), -(x0[5], 1))), ≥)∧[bni_97] = 0∧0 = 0∧0 = 0∧[1 + (-1)bso_98] ≥ 0)







To summarize, we get the following constraints P for the following pairs.
  • 92_0_MAIN_GE(x0, x1) → COND_92_0_MAIN_GE(<(x1, 100), x0, x1)
    • ([99] + [-1]x1[0] ≥ 0∧x1[0] ≥ 0 ⇒ (UIncreasing(COND_92_0_MAIN_GE(<(x1[0], 100), x0[0], x1[0])), ≥)∧[bni_87] = 0∧[(-1)bni_87 + (-1)Bound*bni_87] ≥ 0∧0 = 0∧[(-1)bso_88] ≥ 0)
    • ([99] + x1[0] ≥ 0∧x1[0] ≥ 0 ⇒ (UIncreasing(COND_92_0_MAIN_GE(<(x1[0], 100), x0[0], x1[0])), ≥)∧[bni_87] = 0∧[(-1)bni_87 + (-1)Bound*bni_87] ≥ 0∧0 = 0∧[(-1)bso_88] ≥ 0)

  • COND_92_0_MAIN_GE(TRUE, x0, x1) → 103_1_MAIN_INVOKEMETHOD(103_0_test_Load(x1), x0, x1)
    • ((UIncreasing(103_1_MAIN_INVOKEMETHOD(103_0_test_Load(x1[1]), x0[1], x1[1])), ≥)∧[bni_89] = 0∧0 = 0∧0 = 0∧[(-1)bso_90] ≥ 0)

  • 103_1_MAIN_INVOKEMETHOD(555_0_test_Return, x0, x1) → COND_103_1_MAIN_INVOKEMETHOD(>(x1, 0), 555_0_test_Return, x0, x1)
    • (x1[2] ≥ 0 ⇒ (UIncreasing(COND_103_1_MAIN_INVOKEMETHOD(>(x1[2], 0), 555_0_test_Return, x0[2], x1[2])), ≥)∧[bni_91] = 0∧[(-1)bni_91 + (-1)Bound*bni_91] ≥ 0∧0 = 0∧[(-1)bso_92] ≥ 0)

  • COND_103_1_MAIN_INVOKEMETHOD(TRUE, 555_0_test_Return, x0, x1) → 92_0_MAIN_GE(x0, +(x1, 1))
    • ((UIncreasing(92_0_MAIN_GE(x0[3], +(x1[3], 1))), ≥)∧[bni_93] = 0∧0 = 0∧0 = 0∧[(-1)bso_94] ≥ 0)

  • 92_0_MAIN_GE(x0, x1) → COND_92_0_MAIN_GE1(&&(>(x1, 99), >(x0, 1)), x0, x1)
    • (x1[4] ≥ 0∧x0[4] ≥ 0 ⇒ (UIncreasing(COND_92_0_MAIN_GE1(&&(>(x1[4], 99), >(x0[4], 1)), x0[4], x1[4])), ≥)∧[bni_95 + (-1)Bound*bni_95] + [bni_95]x0[4] ≥ 0∧[(-1)bso_96] ≥ 0)

  • COND_92_0_MAIN_GE1(TRUE, x0, x1) → 92_0_MAIN_GE(-(x0, 1), -(x0, 1))
    • ((UIncreasing(92_0_MAIN_GE(-(x0[5], 1), -(x0[5], 1))), ≥)∧[bni_97] = 0∧0 = 0∧0 = 0∧[1 + (-1)bso_98] ≥ 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(103_0_test_Load(x1)) = [1]   
POL(157_0_test_LE(x1, x2, x3)) = [1]   
POL(Cond_157_0_test_LE(x1, x2, x3, x4)) = [1]   
POL(>(x1, x2)) = [-1]   
POL(0) = 0   
POL(+(x1, x2)) = x1 + x2   
POL(-1) = [-1]   
POL(194_0_test_LE(x1, x2, x3)) = [1] + [-1]x3 + x2   
POL(Cond_194_0_test_LE(x1, x2, x3, x4)) = [1] + x4 + [-1]x3   
POL(235_0_test_LE(x1, x2, x3)) = [1] + x3 + [-1]x2   
POL(Cond_235_0_test_LE(x1, x2, x3, x4)) = [1] + [-1]x4 + x3   
POL(270_0_test_LE(x1, x2, x3)) = [1] + x3 + [-1]x2   
POL(Cond_270_0_test_LE(x1, x2, x3, x4)) = [1] + [-1]x4 + x3   
POL(306_0_test_LE(x1, x2, x3)) = [1] + x3 + [-1]x2   
POL(Cond_306_0_test_LE(x1, x2, x3, x4)) = [1] + [-1]x4 + x3   
POL(341_0_test_LE(x1, x2, x3)) = [1] + x3 + [-1]x2   
POL(Cond_341_0_test_LE(x1, x2, x3, x4)) = [1] + [-1]x4 + x3   
POL(376_0_test_LE(x1, x2, x3)) = [1]   
POL(Cond_376_0_test_LE(x1, x2, x3, x4)) = [1]   
POL(410_0_test_LE(x1, x2, x3)) = [1] + x3 + [-1]x2   
POL(Cond_410_0_test_LE(x1, x2, x3, x4)) = [1] + [-1]x4 + x3   
POL(446_0_test_LE(x1, x2, x3)) = [1]   
POL(Cond_446_0_test_LE(x1, x2, x3, x4)) = [1]   
POL(479_0_test_LE(x1, x2, x3)) = [1] + x3 + [-1]x2   
POL(Cond_479_0_test_LE(x1, x2, x3, x4)) = [1] + [-1]x4 + x3   
POL(515_0_test_LE(x1, x2, x3)) = [1]   
POL(Cond_515_0_test_LE(x1, x2, x3, x4)) = [1]   
POL(549_0_test_LE(x1)) = [1]   
POL(555_0_test_Return) = [1]   
POL(Cond_549_0_test_LE(x1, x2)) = [1]   
POL(92_0_MAIN_GE(x1, x2)) = [-1] + x1   
POL(COND_92_0_MAIN_GE(x1, x2, x3)) = [-1] + x2   
POL(<(x1, x2)) = [-1]   
POL(100) = [100]   
POL(103_1_MAIN_INVOKEMETHOD(x1, x2, x3)) = [-1]x1 + x2   
POL(COND_103_1_MAIN_INVOKEMETHOD(x1, x2, x3, x4)) = [-1] + x3   
POL(1) = [1]   
POL(COND_92_0_MAIN_GE1(x1, x2, x3)) = [-1] + x2   
POL(&&(x1, x2)) = [-1]   
POL(99) = [99]   
POL(-(x1, x2)) = x1 + [-1]x2   

The following pairs are in P>:

COND_92_0_MAIN_GE1(TRUE, x0[5], x1[5]) → 92_0_MAIN_GE(-(x0[5], 1), -(x0[5], 1))

The following pairs are in Pbound:

92_0_MAIN_GE(x0[4], x1[4]) → COND_92_0_MAIN_GE1(&&(>(x1[4], 99), >(x0[4], 1)), x0[4], x1[4])

The following pairs are in P:

92_0_MAIN_GE(x0[0], x1[0]) → COND_92_0_MAIN_GE(<(x1[0], 100), x0[0], x1[0])
COND_92_0_MAIN_GE(TRUE, x0[1], x1[1]) → 103_1_MAIN_INVOKEMETHOD(103_0_test_Load(x1[1]), x0[1], x1[1])
103_1_MAIN_INVOKEMETHOD(555_0_test_Return, x0[2], x1[2]) → COND_103_1_MAIN_INVOKEMETHOD(>(x1[2], 0), 555_0_test_Return, x0[2], x1[2])
COND_103_1_MAIN_INVOKEMETHOD(TRUE, 555_0_test_Return, x0[3], x1[3]) → 92_0_MAIN_GE(x0[3], +(x1[3], 1))
92_0_MAIN_GE(x0[4], x1[4]) → COND_92_0_MAIN_GE1(&&(>(x1[4], 99), >(x0[4], 1)), x0[4], x1[4])

At least the following rules have been oriented under context sensitive arithmetic replacement:

103_0_test_Load(x0)1157_0_test_LE(x0, x0, x0)1
157_0_test_LE(x0, 0, 0)1194_0_test_LE(x0, x0, x0)1
Cond_157_0_test_LE(TRUE, x0, x1, x1)1157_0_test_LE(x0, +(x1, -1), +(x1, -1))1
157_0_test_LE(x0, x1, x1)1Cond_157_0_test_LE(>(x1, 0), x0, x1, x1)1
194_0_test_LE(x0, 0, 0)1235_0_test_LE(x0, x0, x0)1
Cond_194_0_test_LE(TRUE, x0, x1, x1)1194_0_test_LE(x0, +(x1, -1), +(x1, -1))1
194_0_test_LE(x0, x1, x1)1Cond_194_0_test_LE(>(x1, 0), x0, x1, x1)1
235_0_test_LE(x0, 0, 0)1270_0_test_LE(x0, x0, x0)1
Cond_235_0_test_LE(TRUE, x0, x1, x1)1235_0_test_LE(x0, +(x1, -1), +(x1, -1))1
235_0_test_LE(x0, x1, x1)1Cond_235_0_test_LE(>(x1, 0), x0, x1, x1)1
270_0_test_LE(x0, 0, 0)1306_0_test_LE(x0, x0, x0)1
Cond_270_0_test_LE(TRUE, x0, x1, x1)1270_0_test_LE(x0, +(x1, -1), +(x1, -1))1
270_0_test_LE(x0, x1, x1)1Cond_270_0_test_LE(>(x1, 0), x0, x1, x1)1
306_0_test_LE(x0, 0, 0)1341_0_test_LE(x0, x0, x0)1
Cond_306_0_test_LE(TRUE, x0, x1, x1)1306_0_test_LE(x0, +(x1, -1), +(x1, -1))1
306_0_test_LE(x0, x1, x1)1Cond_306_0_test_LE(>(x1, 0), x0, x1, x1)1
341_0_test_LE(x0, 0, 0)1376_0_test_LE(x0, x0, x0)1
Cond_341_0_test_LE(TRUE, x0, x1, x1)1341_0_test_LE(x0, +(x1, -1), +(x1, -1))1
341_0_test_LE(x0, x1, x1)1Cond_341_0_test_LE(>(x1, 0), x0, x1, x1)1
376_0_test_LE(x0, 0, 0)1410_0_test_LE(x0, x0, x0)1
Cond_376_0_test_LE(TRUE, x0, x1, x1)1376_0_test_LE(x0, +(x1, -1), +(x1, -1))1
376_0_test_LE(x0, x1, x1)1Cond_376_0_test_LE(>(x1, 0), x0, x1, x1)1
410_0_test_LE(x0, 0, 0)1446_0_test_LE(x0, x0, x0)1
Cond_410_0_test_LE(TRUE, x0, x1, x1)1410_0_test_LE(x0, +(x1, -1), +(x1, -1))1
410_0_test_LE(x0, x1, x1)1Cond_410_0_test_LE(>(x1, 0), x0, x1, x1)1
446_0_test_LE(x0, 0, 0)1479_0_test_LE(x0, x0, x0)1
Cond_446_0_test_LE(TRUE, x0, x1, x1)1446_0_test_LE(x0, +(x1, -1), +(x1, -1))1
446_0_test_LE(x0, x1, x1)1Cond_446_0_test_LE(>(x1, 0), x0, x1, x1)1
479_0_test_LE(x0, 0, 0)1515_0_test_LE(x0, x0, x0)1
Cond_479_0_test_LE(TRUE, x0, x1, x1)1479_0_test_LE(x0, +(x1, -1), +(x1, -1))1
479_0_test_LE(x0, x1, x1)1Cond_479_0_test_LE(>(x1, 0), x0, x1, x1)1
515_0_test_LE(x0, 0, 0)1549_0_test_LE(x0)1
Cond_515_0_test_LE(TRUE, x0, x1, x1)1515_0_test_LE(x0, +(x1, -1), +(x1, -1))1
515_0_test_LE(x0, x1, x1)1Cond_515_0_test_LE(>(x1, 0), x0, x1, x1)1
549_0_test_LE(0)1555_0_test_Return1
549_0_test_LE(x0)1Cond_549_0_test_LE(>(x0, 0), x0)1
Cond_549_0_test_LE(TRUE, x0)1549_0_test_LE(+(x0, -1))1

(141) Complex Obligation (AND)

(142) 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, Boolean


The ITRS R consists of the following rules:
103_0_test_Load(x0) → 157_0_test_LE(x0, x0, x0)
157_0_test_LE(x0, x1, x1) → Cond_157_0_test_LE(x1 > 0, x0, x1, x1)
Cond_157_0_test_LE(TRUE, x0, x1, x1) → 157_0_test_LE(x0, x1 + -1, x1 + -1)
157_0_test_LE(x0, 0, 0) → 194_0_test_LE(x0, x0, x0)
194_0_test_LE(x0, x1, x1) → Cond_194_0_test_LE(x1 > 0, x0, x1, x1)
Cond_194_0_test_LE(TRUE, x0, x1, x1) → 194_0_test_LE(x0, x1 + -1, x1 + -1)
194_0_test_LE(x0, 0, 0) → 235_0_test_LE(x0, x0, x0)
235_0_test_LE(x0, x1, x1) → Cond_235_0_test_LE(x1 > 0, x0, x1, x1)
Cond_235_0_test_LE(TRUE, x0, x1, x1) → 235_0_test_LE(x0, x1 + -1, x1 + -1)
235_0_test_LE(x0, 0, 0) → 270_0_test_LE(x0, x0, x0)
270_0_test_LE(x0, x1, x1) → Cond_270_0_test_LE(x1 > 0, x0, x1, x1)
Cond_270_0_test_LE(TRUE, x0, x1, x1) → 270_0_test_LE(x0, x1 + -1, x1 + -1)
270_0_test_LE(x0, 0, 0) → 306_0_test_LE(x0, x0, x0)
306_0_test_LE(x0, x1, x1) → Cond_306_0_test_LE(x1 > 0, x0, x1, x1)
Cond_306_0_test_LE(TRUE, x0, x1, x1) → 306_0_test_LE(x0, x1 + -1, x1 + -1)
306_0_test_LE(x0, 0, 0) → 341_0_test_LE(x0, x0, x0)
341_0_test_LE(x0, x1, x1) → Cond_341_0_test_LE(x1 > 0, x0, x1, x1)
Cond_341_0_test_LE(TRUE, x0, x1, x1) → 341_0_test_LE(x0, x1 + -1, x1 + -1)
341_0_test_LE(x0, 0, 0) → 376_0_test_LE(x0, x0, x0)
376_0_test_LE(x0, x1, x1) → Cond_376_0_test_LE(x1 > 0, x0, x1, x1)
Cond_376_0_test_LE(TRUE, x0, x1, x1) → 376_0_test_LE(x0, x1 + -1, x1 + -1)
376_0_test_LE(x0, 0, 0) → 410_0_test_LE(x0, x0, x0)
410_0_test_LE(x0, x1, x1) → Cond_410_0_test_LE(x1 > 0, x0, x1, x1)
Cond_410_0_test_LE(TRUE, x0, x1, x1) → 410_0_test_LE(x0, x1 + -1, x1 + -1)
410_0_test_LE(x0, 0, 0) → 446_0_test_LE(x0, x0, x0)
446_0_test_LE(x0, x1, x1) → Cond_446_0_test_LE(x1 > 0, x0, x1, x1)
Cond_446_0_test_LE(TRUE, x0, x1, x1) → 446_0_test_LE(x0, x1 + -1, x1 + -1)
446_0_test_LE(x0, 0, 0) → 479_0_test_LE(x0, x0, x0)
479_0_test_LE(x0, x1, x1) → Cond_479_0_test_LE(x1 > 0, x0, x1, x1)
Cond_479_0_test_LE(TRUE, x0, x1, x1) → 479_0_test_LE(x0, x1 + -1, x1 + -1)
479_0_test_LE(x0, 0, 0) → 515_0_test_LE(x0, x0, x0)
515_0_test_LE(x0, x1, x1) → Cond_515_0_test_LE(x1 > 0, x0, x1, x1)
Cond_515_0_test_LE(TRUE, x0, x1, x1) → 515_0_test_LE(x0, x1 + -1, x1 + -1)
515_0_test_LE(x0, 0, 0) → 549_0_test_LE(x0)
549_0_test_LE(0) → 555_0_test_Return
549_0_test_LE(x0) → Cond_549_0_test_LE(x0 > 0, x0)
Cond_549_0_test_LE(TRUE, x0) → 549_0_test_LE(x0 + -1)

The integer pair graph contains the following rules and edges:
(0): 92_0_MAIN_GE(x0[0], x1[0]) → COND_92_0_MAIN_GE(x1[0] < 100, x0[0], x1[0])
(1): COND_92_0_MAIN_GE(TRUE, x0[1], x1[1]) → 103_1_MAIN_INVOKEMETHOD(103_0_test_Load(x1[1]), x0[1], x1[1])
(2): 103_1_MAIN_INVOKEMETHOD(555_0_test_Return, x0[2], x1[2]) → COND_103_1_MAIN_INVOKEMETHOD(x1[2] > 0, 555_0_test_Return, x0[2], x1[2])
(3): COND_103_1_MAIN_INVOKEMETHOD(TRUE, 555_0_test_Return, x0[3], x1[3]) → 92_0_MAIN_GE(x0[3], x1[3] + 1)
(4): 92_0_MAIN_GE(x0[4], x1[4]) → COND_92_0_MAIN_GE1(x1[4] > 99 && x0[4] > 1, x0[4], x1[4])

(3) -> (0), if (x0[3]* x0[0]x1[3] + 1* x1[0])


(0) -> (1), if (x1[0] < 100x0[0]* x0[1]x1[0]* x1[1])


(1) -> (2), if (103_0_test_Load(x1[1]) →* 555_0_test_Returnx0[1]* x0[2]x1[1]* x1[2])


(2) -> (3), if (x1[2] > 0x0[2]* x0[3]x1[2]* x1[3])


(3) -> (4), if (x0[3]* x0[4]x1[3] + 1* x1[4])



The set Q consists of the following terms:
103_0_test_Load(x0)
157_0_test_LE(x0, x1, x1)
Cond_157_0_test_LE(TRUE, x0, x1, x1)
194_0_test_LE(x0, x1, x1)
Cond_194_0_test_LE(TRUE, x0, x1, x1)
235_0_test_LE(x0, x1, x1)
Cond_235_0_test_LE(TRUE, x0, x1, x1)
270_0_test_LE(x0, x1, x1)
Cond_270_0_test_LE(TRUE, x0, x1, x1)
306_0_test_LE(x0, x1, x1)
Cond_306_0_test_LE(TRUE, x0, x1, x1)
341_0_test_LE(x0, x1, x1)
Cond_341_0_test_LE(TRUE, x0, x1, x1)
376_0_test_LE(x0, x1, x1)
Cond_376_0_test_LE(TRUE, x0, x1, x1)
410_0_test_LE(x0, x1, x1)
Cond_410_0_test_LE(TRUE, x0, x1, x1)
446_0_test_LE(x0, x1, x1)
Cond_446_0_test_LE(TRUE, x0, x1, x1)
479_0_test_LE(x0, x1, x1)
Cond_479_0_test_LE(TRUE, x0, x1, x1)
515_0_test_LE(x0, x1, x1)
Cond_515_0_test_LE(TRUE, x0, x1, x1)
549_0_test_LE(x0)
Cond_549_0_test_LE(TRUE, x0)

(143) IDependencyGraphProof (EQUIVALENT transformation)

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

(144) 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:
103_0_test_Load(x0) → 157_0_test_LE(x0, x0, x0)
157_0_test_LE(x0, x1, x1) → Cond_157_0_test_LE(x1 > 0, x0, x1, x1)
Cond_157_0_test_LE(TRUE, x0, x1, x1) → 157_0_test_LE(x0, x1 + -1, x1 + -1)
157_0_test_LE(x0, 0, 0) → 194_0_test_LE(x0, x0, x0)
194_0_test_LE(x0, x1, x1) → Cond_194_0_test_LE(x1 > 0, x0, x1, x1)
Cond_194_0_test_LE(TRUE, x0, x1, x1) → 194_0_test_LE(x0, x1 + -1, x1 + -1)
194_0_test_LE(x0, 0, 0) → 235_0_test_LE(x0, x0, x0)
235_0_test_LE(x0, x1, x1) → Cond_235_0_test_LE(x1 > 0, x0, x1, x1)
Cond_235_0_test_LE(TRUE, x0, x1, x1) → 235_0_test_LE(x0, x1 + -1, x1 + -1)
235_0_test_LE(x0, 0, 0) → 270_0_test_LE(x0, x0, x0)
270_0_test_LE(x0, x1, x1) → Cond_270_0_test_LE(x1 > 0, x0, x1, x1)
Cond_270_0_test_LE(TRUE, x0, x1, x1) → 270_0_test_LE(x0, x1 + -1, x1 + -1)
270_0_test_LE(x0, 0, 0) → 306_0_test_LE(x0, x0, x0)
306_0_test_LE(x0, x1, x1) → Cond_306_0_test_LE(x1 > 0, x0, x1, x1)
Cond_306_0_test_LE(TRUE, x0, x1, x1) → 306_0_test_LE(x0, x1 + -1, x1 + -1)
306_0_test_LE(x0, 0, 0) → 341_0_test_LE(x0, x0, x0)
341_0_test_LE(x0, x1, x1) → Cond_341_0_test_LE(x1 > 0, x0, x1, x1)
Cond_341_0_test_LE(TRUE, x0, x1, x1) → 341_0_test_LE(x0, x1 + -1, x1 + -1)
341_0_test_LE(x0, 0, 0) → 376_0_test_LE(x0, x0, x0)
376_0_test_LE(x0, x1, x1) → Cond_376_0_test_LE(x1 > 0, x0, x1, x1)
Cond_376_0_test_LE(TRUE, x0, x1, x1) → 376_0_test_LE(x0, x1 + -1, x1 + -1)
376_0_test_LE(x0, 0, 0) → 410_0_test_LE(x0, x0, x0)
410_0_test_LE(x0, x1, x1) → Cond_410_0_test_LE(x1 > 0, x0, x1, x1)
Cond_410_0_test_LE(TRUE, x0, x1, x1) → 410_0_test_LE(x0, x1 + -1, x1 + -1)
410_0_test_LE(x0, 0, 0) → 446_0_test_LE(x0, x0, x0)
446_0_test_LE(x0, x1, x1) → Cond_446_0_test_LE(x1 > 0, x0, x1, x1)
Cond_446_0_test_LE(TRUE, x0, x1, x1) → 446_0_test_LE(x0, x1 + -1, x1 + -1)
446_0_test_LE(x0, 0, 0) → 479_0_test_LE(x0, x0, x0)
479_0_test_LE(x0, x1, x1) → Cond_479_0_test_LE(x1 > 0, x0, x1, x1)
Cond_479_0_test_LE(TRUE, x0, x1, x1) → 479_0_test_LE(x0, x1 + -1, x1 + -1)
479_0_test_LE(x0, 0, 0) → 515_0_test_LE(x0, x0, x0)
515_0_test_LE(x0, x1, x1) → Cond_515_0_test_LE(x1 > 0, x0, x1, x1)
Cond_515_0_test_LE(TRUE, x0, x1, x1) → 515_0_test_LE(x0, x1 + -1, x1 + -1)
515_0_test_LE(x0, 0, 0) → 549_0_test_LE(x0)
549_0_test_LE(0) → 555_0_test_Return
549_0_test_LE(x0) → Cond_549_0_test_LE(x0 > 0, x0)
Cond_549_0_test_LE(TRUE, x0) → 549_0_test_LE(x0 + -1)

The integer pair graph contains the following rules and edges:
(3): COND_103_1_MAIN_INVOKEMETHOD(TRUE, 555_0_test_Return, x0[3], x1[3]) → 92_0_MAIN_GE(x0[3], x1[3] + 1)
(2): 103_1_MAIN_INVOKEMETHOD(555_0_test_Return, x0[2], x1[2]) → COND_103_1_MAIN_INVOKEMETHOD(x1[2] > 0, 555_0_test_Return, x0[2], x1[2])
(1): COND_92_0_MAIN_GE(TRUE, x0[1], x1[1]) → 103_1_MAIN_INVOKEMETHOD(103_0_test_Load(x1[1]), x0[1], x1[1])
(0): 92_0_MAIN_GE(x0[0], x1[0]) → COND_92_0_MAIN_GE(x1[0] < 100, x0[0], x1[0])

(3) -> (0), if (x0[3]* x0[0]x1[3] + 1* x1[0])


(0) -> (1), if (x1[0] < 100x0[0]* x0[1]x1[0]* x1[1])


(1) -> (2), if (103_0_test_Load(x1[1]) →* 555_0_test_Returnx0[1]* x0[2]x1[1]* x1[2])


(2) -> (3), if (x1[2] > 0x0[2]* x0[3]x1[2]* x1[3])



The set Q consists of the following terms:
103_0_test_Load(x0)
157_0_test_LE(x0, x1, x1)
Cond_157_0_test_LE(TRUE, x0, x1, x1)
194_0_test_LE(x0, x1, x1)
Cond_194_0_test_LE(TRUE, x0, x1, x1)
235_0_test_LE(x0, x1, x1)
Cond_235_0_test_LE(TRUE, x0, x1, x1)
270_0_test_LE(x0, x1, x1)
Cond_270_0_test_LE(TRUE, x0, x1, x1)
306_0_test_LE(x0, x1, x1)
Cond_306_0_test_LE(TRUE, x0, x1, x1)
341_0_test_LE(x0, x1, x1)
Cond_341_0_test_LE(TRUE, x0, x1, x1)
376_0_test_LE(x0, x1, x1)
Cond_376_0_test_LE(TRUE, x0, x1, x1)
410_0_test_LE(x0, x1, x1)
Cond_410_0_test_LE(TRUE, x0, x1, x1)
446_0_test_LE(x0, x1, x1)
Cond_446_0_test_LE(TRUE, x0, x1, x1)
479_0_test_LE(x0, x1, x1)
Cond_479_0_test_LE(TRUE, x0, x1, x1)
515_0_test_LE(x0, x1, x1)
Cond_515_0_test_LE(TRUE, x0, x1, x1)
549_0_test_LE(x0)
Cond_549_0_test_LE(TRUE, x0)

(145) IDPNonInfProof (SOUND transformation)

Used the following options for this NonInfProof:
IDPGPoloSolver: Range: [(-1,2)] IsNat: false Interpretation Shape Heuristic: aprove.DPFramework.IDPProblem.Processors.nonInf.poly.IdpCand1ShapeHeuristic@172675af Constraint Generator: NonInfConstraintGenerator: PathGenerator: MetricPathGenerator: Max Left Steps: 0 Max Right Steps: 0

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_103_1_MAIN_INVOKEMETHOD(TRUE, 555_0_test_Return, x0[3], x1[3]) → 92_0_MAIN_GE(x0[3], +(x1[3], 1)) the following chains were created:
  • We consider the chain COND_103_1_MAIN_INVOKEMETHOD(TRUE, 555_0_test_Return, x0[3], x1[3]) → 92_0_MAIN_GE(x0[3], +(x1[3], 1)) which results in the following constraint:

    (1)    (COND_103_1_MAIN_INVOKEMETHOD(TRUE, 555_0_test_Return, x0[3], x1[3])≥NonInfC∧COND_103_1_MAIN_INVOKEMETHOD(TRUE, 555_0_test_Return, x0[3], x1[3])≥92_0_MAIN_GE(x0[3], +(x1[3], 1))∧(UIncreasing(92_0_MAIN_GE(x0[3], +(x1[3], 1))), ≥))



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

    (2)    ((UIncreasing(92_0_MAIN_GE(x0[3], +(x1[3], 1))), ≥)∧[bni_36] = 0∧[(-1)bso_37] ≥ 0)



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

    (3)    ((UIncreasing(92_0_MAIN_GE(x0[3], +(x1[3], 1))), ≥)∧[bni_36] = 0∧[(-1)bso_37] ≥ 0)



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

    (4)    ((UIncreasing(92_0_MAIN_GE(x0[3], +(x1[3], 1))), ≥)∧[bni_36] = 0∧[(-1)bso_37] ≥ 0)



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

    (5)    ((UIncreasing(92_0_MAIN_GE(x0[3], +(x1[3], 1))), ≥)∧[bni_36] = 0∧0 = 0∧[(-1)bso_37] ≥ 0)







For Pair 103_1_MAIN_INVOKEMETHOD(555_0_test_Return, x0[2], x1[2]) → COND_103_1_MAIN_INVOKEMETHOD(>(x1[2], 0), 555_0_test_Return, x0[2], x1[2]) the following chains were created:
  • We consider the chain 103_1_MAIN_INVOKEMETHOD(555_0_test_Return, x0[2], x1[2]) → COND_103_1_MAIN_INVOKEMETHOD(>(x1[2], 0), 555_0_test_Return, x0[2], x1[2]), COND_103_1_MAIN_INVOKEMETHOD(TRUE, 555_0_test_Return, x0[3], x1[3]) → 92_0_MAIN_GE(x0[3], +(x1[3], 1)) which results in the following constraint:

    (6)    (>(x1[2], 0)=TRUEx0[2]=x0[3]x1[2]=x1[3]103_1_MAIN_INVOKEMETHOD(555_0_test_Return, x0[2], x1[2])≥NonInfC∧103_1_MAIN_INVOKEMETHOD(555_0_test_Return, x0[2], x1[2])≥COND_103_1_MAIN_INVOKEMETHOD(>(x1[2], 0), 555_0_test_Return, x0[2], x1[2])∧(UIncreasing(COND_103_1_MAIN_INVOKEMETHOD(>(x1[2], 0), 555_0_test_Return, x0[2], x1[2])), ≥))



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

    (7)    (>(x1[2], 0)=TRUE103_1_MAIN_INVOKEMETHOD(555_0_test_Return, x0[2], x1[2])≥NonInfC∧103_1_MAIN_INVOKEMETHOD(555_0_test_Return, x0[2], x1[2])≥COND_103_1_MAIN_INVOKEMETHOD(>(x1[2], 0), 555_0_test_Return, x0[2], x1[2])∧(UIncreasing(COND_103_1_MAIN_INVOKEMETHOD(>(x1[2], 0), 555_0_test_Return, x0[2], x1[2])), ≥))



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

    (8)    (x1[2] + [-1] ≥ 0 ⇒ (UIncreasing(COND_103_1_MAIN_INVOKEMETHOD(>(x1[2], 0), 555_0_test_Return, x0[2], x1[2])), ≥)∧[(2)bni_38 + (-1)Bound*bni_38] + [(-1)bni_38]x1[2] ≥ 0∧[1 + (-1)bso_39] ≥ 0)



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

    (9)    (x1[2] + [-1] ≥ 0 ⇒ (UIncreasing(COND_103_1_MAIN_INVOKEMETHOD(>(x1[2], 0), 555_0_test_Return, x0[2], x1[2])), ≥)∧[(2)bni_38 + (-1)Bound*bni_38] + [(-1)bni_38]x1[2] ≥ 0∧[1 + (-1)bso_39] ≥ 0)



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

    (10)    (x1[2] + [-1] ≥ 0 ⇒ (UIncreasing(COND_103_1_MAIN_INVOKEMETHOD(>(x1[2], 0), 555_0_test_Return, x0[2], x1[2])), ≥)∧[(2)bni_38 + (-1)Bound*bni_38] + [(-1)bni_38]x1[2] ≥ 0∧[1 + (-1)bso_39] ≥ 0)



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

    (11)    (x1[2] ≥ 0 ⇒ (UIncreasing(COND_103_1_MAIN_INVOKEMETHOD(>(x1[2], 0), 555_0_test_Return, x0[2], x1[2])), ≥)∧[bni_38 + (-1)Bound*bni_38] + [(-1)bni_38]x1[2] ≥ 0∧[1 + (-1)bso_39] ≥ 0)







For Pair COND_92_0_MAIN_GE(TRUE, x0[1], x1[1]) → 103_1_MAIN_INVOKEMETHOD(103_0_test_Load(x1[1]), x0[1], x1[1]) the following chains were created:
  • We consider the chain COND_92_0_MAIN_GE(TRUE, x0[1], x1[1]) → 103_1_MAIN_INVOKEMETHOD(103_0_test_Load(x1[1]), x0[1], x1[1]) which results in the following constraint:

    (12)    (COND_92_0_MAIN_GE(TRUE, x0[1], x1[1])≥NonInfC∧COND_92_0_MAIN_GE(TRUE, x0[1], x1[1])≥103_1_MAIN_INVOKEMETHOD(103_0_test_Load(x1[1]), x0[1], x1[1])∧(UIncreasing(103_1_MAIN_INVOKEMETHOD(103_0_test_Load(x1[1]), x0[1], x1[1])), ≥))



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

    (13)    ((UIncreasing(103_1_MAIN_INVOKEMETHOD(103_0_test_Load(x1[1]), x0[1], x1[1])), ≥)∧[bni_40] = 0∧[(-1)bso_41] ≥ 0)



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

    (14)    ((UIncreasing(103_1_MAIN_INVOKEMETHOD(103_0_test_Load(x1[1]), x0[1], x1[1])), ≥)∧[bni_40] = 0∧[(-1)bso_41] ≥ 0)



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

    (15)    ((UIncreasing(103_1_MAIN_INVOKEMETHOD(103_0_test_Load(x1[1]), x0[1], x1[1])), ≥)∧[bni_40] = 0∧[(-1)bso_41] ≥ 0)



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

    (16)    ((UIncreasing(103_1_MAIN_INVOKEMETHOD(103_0_test_Load(x1[1]), x0[1], x1[1])), ≥)∧[bni_40] = 0∧0 = 0∧[(-1)bso_41] ≥ 0)







For Pair 92_0_MAIN_GE(x0[0], x1[0]) → COND_92_0_MAIN_GE(<(x1[0], 100), x0[0], x1[0]) the following chains were created:
  • We consider the chain 92_0_MAIN_GE(x0[0], x1[0]) → COND_92_0_MAIN_GE(<(x1[0], 100), x0[0], x1[0]), COND_92_0_MAIN_GE(TRUE, x0[1], x1[1]) → 103_1_MAIN_INVOKEMETHOD(103_0_test_Load(x1[1]), x0[1], x1[1]) which results in the following constraint:

    (17)    (<(x1[0], 100)=TRUEx0[0]=x0[1]x1[0]=x1[1]92_0_MAIN_GE(x0[0], x1[0])≥NonInfC∧92_0_MAIN_GE(x0[0], x1[0])≥COND_92_0_MAIN_GE(<(x1[0], 100), x0[0], x1[0])∧(UIncreasing(COND_92_0_MAIN_GE(<(x1[0], 100), x0[0], x1[0])), ≥))



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

    (18)    (<(x1[0], 100)=TRUE92_0_MAIN_GE(x0[0], x1[0])≥NonInfC∧92_0_MAIN_GE(x0[0], x1[0])≥COND_92_0_MAIN_GE(<(x1[0], 100), x0[0], x1[0])∧(UIncreasing(COND_92_0_MAIN_GE(<(x1[0], 100), x0[0], x1[0])), ≥))



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

    (19)    ([99] + [-1]x1[0] ≥ 0 ⇒ (UIncreasing(COND_92_0_MAIN_GE(<(x1[0], 100), x0[0], x1[0])), ≥)∧[(2)bni_42 + (-1)Bound*bni_42] + [(-1)bni_42]x1[0] ≥ 0∧[(-1)bso_43] ≥ 0)



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

    (20)    ([99] + [-1]x1[0] ≥ 0 ⇒ (UIncreasing(COND_92_0_MAIN_GE(<(x1[0], 100), x0[0], x1[0])), ≥)∧[(2)bni_42 + (-1)Bound*bni_42] + [(-1)bni_42]x1[0] ≥ 0∧[(-1)bso_43] ≥ 0)



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

    (21)    ([99] + [-1]x1[0] ≥ 0 ⇒ (UIncreasing(COND_92_0_MAIN_GE(<(x1[0], 100), x0[0], x1[0])), ≥)∧[(2)bni_42 + (-1)Bound*bni_42] + [(-1)bni_42]x1[0] ≥ 0∧[(-1)bso_43] ≥ 0)



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

    (22)    ([99] + x1[0] ≥ 0∧x1[0] ≥ 0 ⇒ (UIncreasing(COND_92_0_MAIN_GE(<(x1[0], 100), x0[0], x1[0])), ≥)∧[(2)bni_42 + (-1)Bound*bni_42] + [bni_42]x1[0] ≥ 0∧[(-1)bso_43] ≥ 0)


    (23)    ([99] + [-1]x1[0] ≥ 0∧x1[0] ≥ 0 ⇒ (UIncreasing(COND_92_0_MAIN_GE(<(x1[0], 100), x0[0], x1[0])), ≥)∧[(2)bni_42 + (-1)Bound*bni_42] + [(-1)bni_42]x1[0] ≥ 0∧[(-1)bso_43] ≥ 0)







To summarize, we get the following constraints P for the following pairs.
  • COND_103_1_MAIN_INVOKEMETHOD(TRUE, 555_0_test_Return, x0[3], x1[3]) → 92_0_MAIN_GE(x0[3], +(x1[3], 1))
    • ((UIncreasing(92_0_MAIN_GE(x0[3], +(x1[3], 1))), ≥)∧[bni_36] = 0∧0 = 0∧[(-1)bso_37] ≥ 0)

  • 103_1_MAIN_INVOKEMETHOD(555_0_test_Return, x0[2], x1[2]) → COND_103_1_MAIN_INVOKEMETHOD(>(x1[2], 0), 555_0_test_Return, x0[2], x1[2])
    • (x1[2] ≥ 0 ⇒ (UIncreasing(COND_103_1_MAIN_INVOKEMETHOD(>(x1[2], 0), 555_0_test_Return, x0[2], x1[2])), ≥)∧[bni_38 + (-1)Bound*bni_38] + [(-1)bni_38]x1[2] ≥ 0∧[1 + (-1)bso_39] ≥ 0)

  • COND_92_0_MAIN_GE(TRUE, x0[1], x1[1]) → 103_1_MAIN_INVOKEMETHOD(103_0_test_Load(x1[1]), x0[1], x1[1])
    • ((UIncreasing(103_1_MAIN_INVOKEMETHOD(103_0_test_Load(x1[1]), x0[1], x1[1])), ≥)∧[bni_40] = 0∧0 = 0∧[(-1)bso_41] ≥ 0)

  • 92_0_MAIN_GE(x0[0], x1[0]) → COND_92_0_MAIN_GE(<(x1[0], 100), x0[0], x1[0])
    • ([99] + x1[0] ≥ 0∧x1[0] ≥ 0 ⇒ (UIncreasing(COND_92_0_MAIN_GE(<(x1[0], 100), x0[0], x1[0])), ≥)∧[(2)bni_42 + (-1)Bound*bni_42] + [bni_42]x1[0] ≥ 0∧[(-1)bso_43] ≥ 0)
    • ([99] + [-1]x1[0] ≥ 0∧x1[0] ≥ 0 ⇒ (UIncreasing(COND_92_0_MAIN_GE(<(x1[0], 100), x0[0], x1[0])), ≥)∧[(2)bni_42 + (-1)Bound*bni_42] + [(-1)bni_42]x1[0] ≥ 0∧[(-1)bso_43] ≥ 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(103_0_test_Load(x1)) = [-1] + [-1]x1   
POL(157_0_test_LE(x1, x2, x3)) = [-1] + [-1]x3 + x1   
POL(Cond_157_0_test_LE(x1, x2, x3, x4)) = [-1] + [2]x4 + [-1]x3 + [-1]x2   
POL(>(x1, x2)) = [-1]   
POL(0) = 0   
POL(+(x1, x2)) = x1 + x2   
POL(-1) = [-1]   
POL(194_0_test_LE(x1, x2, x3)) = [-1]x3 + [-1]x2   
POL(Cond_194_0_test_LE(x1, x2, x3, x4)) = [1] + [-1]x3 + [-1]x2   
POL(235_0_test_LE(x1, x2, x3)) = [-1] + [-1]x3 + [-1]x1   
POL(Cond_235_0_test_LE(x1, x2, x3, x4)) = [2] + [-1]x4 + [-1]x3 + [-1]x2   
POL(270_0_test_LE(x1, x2, x3)) = [2] + x3 + [-1]x2 + x1   
POL(Cond_270_0_test_LE(x1, x2, x3, x4)) = [-1] + [-1]x4 + x3 + [-1]x2   
POL(306_0_test_LE(x1, x2, x3)) = [-1] + [-1]x3 + [2]x2 + [2]x1   
POL(Cond_306_0_test_LE(x1, x2, x3, x4)) = [-1] + x4 + [-1]x3 + [-1]x2   
POL(341_0_test_LE(x1, x2, x3)) = x3 + [-1]x2 + x1   
POL(Cond_341_0_test_LE(x1, x2, x3, x4)) = [1] + [-1]x4 + x3 + [-1]x2   
POL(376_0_test_LE(x1, x2, x3)) = [-1]x3 + [-1]x2 + [-1]x1   
POL(Cond_376_0_test_LE(x1, x2, x3, x4)) = [-1] + x4 + [-1]x3 + [-1]x2   
POL(410_0_test_LE(x1, x2, x3)) = [-1] + [-1]x3 + [-1]x2 + [2]x1   
POL(Cond_410_0_test_LE(x1, x2, x3, x4)) = [2]x4 + [-1]x3 + [-1]x2   
POL(446_0_test_LE(x1, x2, x3)) = [-1] + [-1]x3 + [-1]x2 + x1   
POL(Cond_446_0_test_LE(x1, x2, x3, x4)) = [-1] + [-1]x4 + [-1]x3 + [-1]x2   
POL(479_0_test_LE(x1, x2, x3)) = [-1] + x3 + x2 + x1   
POL(Cond_479_0_test_LE(x1, x2, x3, x4)) = [-1] + [-1]x4 + x3 + [-1]x2   
POL(515_0_test_LE(x1, x2, x3)) = [1] + [-1]x3 + [-1]x2   
POL(Cond_515_0_test_LE(x1, x2, x3, x4)) = [-1] + x4 + [-1]x3 + [-1]x2   
POL(549_0_test_LE(x1)) = [1] + x1   
POL(555_0_test_Return) = [-1]   
POL(Cond_549_0_test_LE(x1, x2)) = [-1] + [-1]x2   
POL(COND_103_1_MAIN_INVOKEMETHOD(x1, x2, x3, x4)) = [1] + [-1]x4   
POL(92_0_MAIN_GE(x1, x2)) = [2] + [-1]x2   
POL(1) = [1]   
POL(103_1_MAIN_INVOKEMETHOD(x1, x2, x3)) = [2] + [-1]x3   
POL(COND_92_0_MAIN_GE(x1, x2, x3)) = [2] + [-1]x3   
POL(<(x1, x2)) = [1]   
POL(100) = [100]   

The following pairs are in P>:

103_1_MAIN_INVOKEMETHOD(555_0_test_Return, x0[2], x1[2]) → COND_103_1_MAIN_INVOKEMETHOD(>(x1[2], 0), 555_0_test_Return, x0[2], x1[2])

The following pairs are in Pbound:

92_0_MAIN_GE(x0[0], x1[0]) → COND_92_0_MAIN_GE(<(x1[0], 100), x0[0], x1[0])

The following pairs are in P:

COND_103_1_MAIN_INVOKEMETHOD(TRUE, 555_0_test_Return, x0[3], x1[3]) → 92_0_MAIN_GE(x0[3], +(x1[3], 1))
COND_92_0_MAIN_GE(TRUE, x0[1], x1[1]) → 103_1_MAIN_INVOKEMETHOD(103_0_test_Load(x1[1]), x0[1], x1[1])
92_0_MAIN_GE(x0[0], x1[0]) → COND_92_0_MAIN_GE(<(x1[0], 100), x0[0], x1[0])

There are no usable rules.

(146) Complex Obligation (AND)

(147) 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:
103_0_test_Load(x0) → 157_0_test_LE(x0, x0, x0)
157_0_test_LE(x0, x1, x1) → Cond_157_0_test_LE(x1 > 0, x0, x1, x1)
Cond_157_0_test_LE(TRUE, x0, x1, x1) → 157_0_test_LE(x0, x1 + -1, x1 + -1)
157_0_test_LE(x0, 0, 0) → 194_0_test_LE(x0, x0, x0)
194_0_test_LE(x0, x1, x1) → Cond_194_0_test_LE(x1 > 0, x0, x1, x1)
Cond_194_0_test_LE(TRUE, x0, x1, x1) → 194_0_test_LE(x0, x1 + -1, x1 + -1)
194_0_test_LE(x0, 0, 0) → 235_0_test_LE(x0, x0, x0)
235_0_test_LE(x0, x1, x1) → Cond_235_0_test_LE(x1 > 0, x0, x1, x1)
Cond_235_0_test_LE(TRUE, x0, x1, x1) → 235_0_test_LE(x0, x1 + -1, x1 + -1)
235_0_test_LE(x0, 0, 0) → 270_0_test_LE(x0, x0, x0)
270_0_test_LE(x0, x1, x1) → Cond_270_0_test_LE(x1 > 0, x0, x1, x1)
Cond_270_0_test_LE(TRUE, x0, x1, x1) → 270_0_test_LE(x0, x1 + -1, x1 + -1)
270_0_test_LE(x0, 0, 0) → 306_0_test_LE(x0, x0, x0)
306_0_test_LE(x0, x1, x1) → Cond_306_0_test_LE(x1 > 0, x0, x1, x1)
Cond_306_0_test_LE(TRUE, x0, x1, x1) → 306_0_test_LE(x0, x1 + -1, x1 + -1)
306_0_test_LE(x0, 0, 0) → 341_0_test_LE(x0, x0, x0)
341_0_test_LE(x0, x1, x1) → Cond_341_0_test_LE(x1 > 0, x0, x1, x1)
Cond_341_0_test_LE(TRUE, x0, x1, x1) → 341_0_test_LE(x0, x1 + -1, x1 + -1)
341_0_test_LE(x0, 0, 0) → 376_0_test_LE(x0, x0, x0)
376_0_test_LE(x0, x1, x1) → Cond_376_0_test_LE(x1 > 0, x0, x1, x1)
Cond_376_0_test_LE(TRUE, x0, x1, x1) → 376_0_test_LE(x0, x1 + -1, x1 + -1)
376_0_test_LE(x0, 0, 0) → 410_0_test_LE(x0, x0, x0)
410_0_test_LE(x0, x1, x1) → Cond_410_0_test_LE(x1 > 0, x0, x1, x1)
Cond_410_0_test_LE(TRUE, x0, x1, x1) → 410_0_test_LE(x0, x1 + -1, x1 + -1)
410_0_test_LE(x0, 0, 0) → 446_0_test_LE(x0, x0, x0)
446_0_test_LE(x0, x1, x1) → Cond_446_0_test_LE(x1 > 0, x0, x1, x1)
Cond_446_0_test_LE(TRUE, x0, x1, x1) → 446_0_test_LE(x0, x1 + -1, x1 + -1)
446_0_test_LE(x0, 0, 0) → 479_0_test_LE(x0, x0, x0)
479_0_test_LE(x0, x1, x1) → Cond_479_0_test_LE(x1 > 0, x0, x1, x1)
Cond_479_0_test_LE(TRUE, x0, x1, x1) → 479_0_test_LE(x0, x1 + -1, x1 + -1)
479_0_test_LE(x0, 0, 0) → 515_0_test_LE(x0, x0, x0)
515_0_test_LE(x0, x1, x1) → Cond_515_0_test_LE(x1 > 0, x0, x1, x1)
Cond_515_0_test_LE(TRUE, x0, x1, x1) → 515_0_test_LE(x0, x1 + -1, x1 + -1)
515_0_test_LE(x0, 0, 0) → 549_0_test_LE(x0)
549_0_test_LE(0) → 555_0_test_Return
549_0_test_LE(x0) → Cond_549_0_test_LE(x0 > 0, x0)
Cond_549_0_test_LE(TRUE, x0) → 549_0_test_LE(x0 + -1)

The integer pair graph contains the following rules and edges:
(3): COND_103_1_MAIN_INVOKEMETHOD(TRUE, 555_0_test_Return, x0[3], x1[3]) → 92_0_MAIN_GE(x0[3], x1[3] + 1)
(1): COND_92_0_MAIN_GE(TRUE, x0[1], x1[1]) → 103_1_MAIN_INVOKEMETHOD(103_0_test_Load(x1[1]), x0[1], x1[1])
(0): 92_0_MAIN_GE(x0[0], x1[0]) → COND_92_0_MAIN_GE(x1[0] < 100, x0[0], x1[0])

(3) -> (0), if (x0[3]* x0[0]x1[3] + 1* x1[0])


(0) -> (1), if (x1[0] < 100x0[0]* x0[1]x1[0]* x1[1])



The set Q consists of the following terms:
103_0_test_Load(x0)
157_0_test_LE(x0, x1, x1)
Cond_157_0_test_LE(TRUE, x0, x1, x1)
194_0_test_LE(x0, x1, x1)
Cond_194_0_test_LE(TRUE, x0, x1, x1)
235_0_test_LE(x0, x1, x1)
Cond_235_0_test_LE(TRUE, x0, x1, x1)
270_0_test_LE(x0, x1, x1)
Cond_270_0_test_LE(TRUE, x0, x1, x1)
306_0_test_LE(x0, x1, x1)
Cond_306_0_test_LE(TRUE, x0, x1, x1)
341_0_test_LE(x0, x1, x1)
Cond_341_0_test_LE(TRUE, x0, x1, x1)
376_0_test_LE(x0, x1, x1)
Cond_376_0_test_LE(TRUE, x0, x1, x1)
410_0_test_LE(x0, x1, x1)
Cond_410_0_test_LE(TRUE, x0, x1, x1)
446_0_test_LE(x0, x1, x1)
Cond_446_0_test_LE(TRUE, x0, x1, x1)
479_0_test_LE(x0, x1, x1)
Cond_479_0_test_LE(TRUE, x0, x1, x1)
515_0_test_LE(x0, x1, x1)
Cond_515_0_test_LE(TRUE, x0, x1, x1)
549_0_test_LE(x0)
Cond_549_0_test_LE(TRUE, x0)

(148) IDependencyGraphProof (EQUIVALENT transformation)

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

(149) TRUE

(150) 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:
103_0_test_Load(x0) → 157_0_test_LE(x0, x0, x0)
157_0_test_LE(x0, x1, x1) → Cond_157_0_test_LE(x1 > 0, x0, x1, x1)
Cond_157_0_test_LE(TRUE, x0, x1, x1) → 157_0_test_LE(x0, x1 + -1, x1 + -1)
157_0_test_LE(x0, 0, 0) → 194_0_test_LE(x0, x0, x0)
194_0_test_LE(x0, x1, x1) → Cond_194_0_test_LE(x1 > 0, x0, x1, x1)
Cond_194_0_test_LE(TRUE, x0, x1, x1) → 194_0_test_LE(x0, x1 + -1, x1 + -1)
194_0_test_LE(x0, 0, 0) → 235_0_test_LE(x0, x0, x0)
235_0_test_LE(x0, x1, x1) → Cond_235_0_test_LE(x1 > 0, x0, x1, x1)
Cond_235_0_test_LE(TRUE, x0, x1, x1) → 235_0_test_LE(x0, x1 + -1, x1 + -1)
235_0_test_LE(x0, 0, 0) → 270_0_test_LE(x0, x0, x0)
270_0_test_LE(x0, x1, x1) → Cond_270_0_test_LE(x1 > 0, x0, x1, x1)
Cond_270_0_test_LE(TRUE, x0, x1, x1) → 270_0_test_LE(x0, x1 + -1, x1 + -1)
270_0_test_LE(x0, 0, 0) → 306_0_test_LE(x0, x0, x0)
306_0_test_LE(x0, x1, x1) → Cond_306_0_test_LE(x1 > 0, x0, x1, x1)
Cond_306_0_test_LE(TRUE, x0, x1, x1) → 306_0_test_LE(x0, x1 + -1, x1 + -1)
306_0_test_LE(x0, 0, 0) → 341_0_test_LE(x0, x0, x0)
341_0_test_LE(x0, x1, x1) → Cond_341_0_test_LE(x1 > 0, x0, x1, x1)
Cond_341_0_test_LE(TRUE, x0, x1, x1) → 341_0_test_LE(x0, x1 + -1, x1 + -1)
341_0_test_LE(x0, 0, 0) → 376_0_test_LE(x0, x0, x0)
376_0_test_LE(x0, x1, x1) → Cond_376_0_test_LE(x1 > 0, x0, x1, x1)
Cond_376_0_test_LE(TRUE, x0, x1, x1) → 376_0_test_LE(x0, x1 + -1, x1 + -1)
376_0_test_LE(x0, 0, 0) → 410_0_test_LE(x0, x0, x0)
410_0_test_LE(x0, x1, x1) → Cond_410_0_test_LE(x1 > 0, x0, x1, x1)
Cond_410_0_test_LE(TRUE, x0, x1, x1) → 410_0_test_LE(x0, x1 + -1, x1 + -1)
410_0_test_LE(x0, 0, 0) → 446_0_test_LE(x0, x0, x0)
446_0_test_LE(x0, x1, x1) → Cond_446_0_test_LE(x1 > 0, x0, x1, x1)
Cond_446_0_test_LE(TRUE, x0, x1, x1) → 446_0_test_LE(x0, x1 + -1, x1 + -1)
446_0_test_LE(x0, 0, 0) → 479_0_test_LE(x0, x0, x0)
479_0_test_LE(x0, x1, x1) → Cond_479_0_test_LE(x1 > 0, x0, x1, x1)
Cond_479_0_test_LE(TRUE, x0, x1, x1) → 479_0_test_LE(x0, x1 + -1, x1 + -1)
479_0_test_LE(x0, 0, 0) → 515_0_test_LE(x0, x0, x0)
515_0_test_LE(x0, x1, x1) → Cond_515_0_test_LE(x1 > 0, x0, x1, x1)
Cond_515_0_test_LE(TRUE, x0, x1, x1) → 515_0_test_LE(x0, x1 + -1, x1 + -1)
515_0_test_LE(x0, 0, 0) → 549_0_test_LE(x0)
549_0_test_LE(0) → 555_0_test_Return
549_0_test_LE(x0) → Cond_549_0_test_LE(x0 > 0, x0)
Cond_549_0_test_LE(TRUE, x0) → 549_0_test_LE(x0 + -1)

The integer pair graph contains the following rules and edges:
(3): COND_103_1_MAIN_INVOKEMETHOD(TRUE, 555_0_test_Return, x0[3], x1[3]) → 92_0_MAIN_GE(x0[3], x1[3] + 1)
(2): 103_1_MAIN_INVOKEMETHOD(555_0_test_Return, x0[2], x1[2]) → COND_103_1_MAIN_INVOKEMETHOD(x1[2] > 0, 555_0_test_Return, x0[2], x1[2])
(1): COND_92_0_MAIN_GE(TRUE, x0[1], x1[1]) → 103_1_MAIN_INVOKEMETHOD(103_0_test_Load(x1[1]), x0[1], x1[1])

(1) -> (2), if (103_0_test_Load(x1[1]) →* 555_0_test_Returnx0[1]* x0[2]x1[1]* x1[2])


(2) -> (3), if (x1[2] > 0x0[2]* x0[3]x1[2]* x1[3])



The set Q consists of the following terms:
103_0_test_Load(x0)
157_0_test_LE(x0, x1, x1)
Cond_157_0_test_LE(TRUE, x0, x1, x1)
194_0_test_LE(x0, x1, x1)
Cond_194_0_test_LE(TRUE, x0, x1, x1)
235_0_test_LE(x0, x1, x1)
Cond_235_0_test_LE(TRUE, x0, x1, x1)
270_0_test_LE(x0, x1, x1)
Cond_270_0_test_LE(TRUE, x0, x1, x1)
306_0_test_LE(x0, x1, x1)
Cond_306_0_test_LE(TRUE, x0, x1, x1)
341_0_test_LE(x0, x1, x1)
Cond_341_0_test_LE(TRUE, x0, x1, x1)
376_0_test_LE(x0, x1, x1)
Cond_376_0_test_LE(TRUE, x0, x1, x1)
410_0_test_LE(x0, x1, x1)
Cond_410_0_test_LE(TRUE, x0, x1, x1)
446_0_test_LE(x0, x1, x1)
Cond_446_0_test_LE(TRUE, x0, x1, x1)
479_0_test_LE(x0, x1, x1)
Cond_479_0_test_LE(TRUE, x0, x1, x1)
515_0_test_LE(x0, x1, x1)
Cond_515_0_test_LE(TRUE, x0, x1, x1)
549_0_test_LE(x0)
Cond_549_0_test_LE(TRUE, x0)

(151) IDependencyGraphProof (EQUIVALENT transformation)

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

(152) TRUE

(153) 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:
103_0_test_Load(x0) → 157_0_test_LE(x0, x0, x0)
157_0_test_LE(x0, x1, x1) → Cond_157_0_test_LE(x1 > 0, x0, x1, x1)
Cond_157_0_test_LE(TRUE, x0, x1, x1) → 157_0_test_LE(x0, x1 + -1, x1 + -1)
157_0_test_LE(x0, 0, 0) → 194_0_test_LE(x0, x0, x0)
194_0_test_LE(x0, x1, x1) → Cond_194_0_test_LE(x1 > 0, x0, x1, x1)
Cond_194_0_test_LE(TRUE, x0, x1, x1) → 194_0_test_LE(x0, x1 + -1, x1 + -1)
194_0_test_LE(x0, 0, 0) → 235_0_test_LE(x0, x0, x0)
235_0_test_LE(x0, x1, x1) → Cond_235_0_test_LE(x1 > 0, x0, x1, x1)
Cond_235_0_test_LE(TRUE, x0, x1, x1) → 235_0_test_LE(x0, x1 + -1, x1 + -1)
235_0_test_LE(x0, 0, 0) → 270_0_test_LE(x0, x0, x0)
270_0_test_LE(x0, x1, x1) → Cond_270_0_test_LE(x1 > 0, x0, x1, x1)
Cond_270_0_test_LE(TRUE, x0, x1, x1) → 270_0_test_LE(x0, x1 + -1, x1 + -1)
270_0_test_LE(x0, 0, 0) → 306_0_test_LE(x0, x0, x0)
306_0_test_LE(x0, x1, x1) → Cond_306_0_test_LE(x1 > 0, x0, x1, x1)
Cond_306_0_test_LE(TRUE, x0, x1, x1) → 306_0_test_LE(x0, x1 + -1, x1 + -1)
306_0_test_LE(x0, 0, 0) → 341_0_test_LE(x0, x0, x0)
341_0_test_LE(x0, x1, x1) → Cond_341_0_test_LE(x1 > 0, x0, x1, x1)
Cond_341_0_test_LE(TRUE, x0, x1, x1) → 341_0_test_LE(x0, x1 + -1, x1 + -1)
341_0_test_LE(x0, 0, 0) → 376_0_test_LE(x0, x0, x0)
376_0_test_LE(x0, x1, x1) → Cond_376_0_test_LE(x1 > 0, x0, x1, x1)
Cond_376_0_test_LE(TRUE, x0, x1, x1) → 376_0_test_LE(x0, x1 + -1, x1 + -1)
376_0_test_LE(x0, 0, 0) → 410_0_test_LE(x0, x0, x0)
410_0_test_LE(x0, x1, x1) → Cond_410_0_test_LE(x1 > 0, x0, x1, x1)
Cond_410_0_test_LE(TRUE, x0, x1, x1) → 410_0_test_LE(x0, x1 + -1, x1 + -1)
410_0_test_LE(x0, 0, 0) → 446_0_test_LE(x0, x0, x0)
446_0_test_LE(x0, x1, x1) → Cond_446_0_test_LE(x1 > 0, x0, x1, x1)
Cond_446_0_test_LE(TRUE, x0, x1, x1) → 446_0_test_LE(x0, x1 + -1, x1 + -1)
446_0_test_LE(x0, 0, 0) → 479_0_test_LE(x0, x0, x0)
479_0_test_LE(x0, x1, x1) → Cond_479_0_test_LE(x1 > 0, x0, x1, x1)
Cond_479_0_test_LE(TRUE, x0, x1, x1) → 479_0_test_LE(x0, x1 + -1, x1 + -1)
479_0_test_LE(x0, 0, 0) → 515_0_test_LE(x0, x0, x0)
515_0_test_LE(x0, x1, x1) → Cond_515_0_test_LE(x1 > 0, x0, x1, x1)
Cond_515_0_test_LE(TRUE, x0, x1, x1) → 515_0_test_LE(x0, x1 + -1, x1 + -1)
515_0_test_LE(x0, 0, 0) → 549_0_test_LE(x0)
549_0_test_LE(0) → 555_0_test_Return
549_0_test_LE(x0) → Cond_549_0_test_LE(x0 > 0, x0)
Cond_549_0_test_LE(TRUE, x0) → 549_0_test_LE(x0 + -1)

The integer pair graph contains the following rules and edges:
(0): 92_0_MAIN_GE(x0[0], x1[0]) → COND_92_0_MAIN_GE(x1[0] < 100, x0[0], x1[0])
(1): COND_92_0_MAIN_GE(TRUE, x0[1], x1[1]) → 103_1_MAIN_INVOKEMETHOD(103_0_test_Load(x1[1]), x0[1], x1[1])
(2): 103_1_MAIN_INVOKEMETHOD(555_0_test_Return, x0[2], x1[2]) → COND_103_1_MAIN_INVOKEMETHOD(x1[2] > 0, 555_0_test_Return, x0[2], x1[2])
(3): COND_103_1_MAIN_INVOKEMETHOD(TRUE, 555_0_test_Return, x0[3], x1[3]) → 92_0_MAIN_GE(x0[3], x1[3] + 1)
(5): COND_92_0_MAIN_GE1(TRUE, x0[5], x1[5]) → 92_0_MAIN_GE(x0[5] - 1, x0[5] - 1)

(3) -> (0), if (x0[3]* x0[0]x1[3] + 1* x1[0])


(5) -> (0), if (x0[5] - 1* x0[0]x0[5] - 1* x1[0])


(0) -> (1), if (x1[0] < 100x0[0]* x0[1]x1[0]* x1[1])


(1) -> (2), if (103_0_test_Load(x1[1]) →* 555_0_test_Returnx0[1]* x0[2]x1[1]* x1[2])


(2) -> (3), if (x1[2] > 0x0[2]* x0[3]x1[2]* x1[3])



The set Q consists of the following terms:
103_0_test_Load(x0)
157_0_test_LE(x0, x1, x1)
Cond_157_0_test_LE(TRUE, x0, x1, x1)
194_0_test_LE(x0, x1, x1)
Cond_194_0_test_LE(TRUE, x0, x1, x1)
235_0_test_LE(x0, x1, x1)
Cond_235_0_test_LE(TRUE, x0, x1, x1)
270_0_test_LE(x0, x1, x1)
Cond_270_0_test_LE(TRUE, x0, x1, x1)
306_0_test_LE(x0, x1, x1)
Cond_306_0_test_LE(TRUE, x0, x1, x1)
341_0_test_LE(x0, x1, x1)
Cond_341_0_test_LE(TRUE, x0, x1, x1)
376_0_test_LE(x0, x1, x1)
Cond_376_0_test_LE(TRUE, x0, x1, x1)
410_0_test_LE(x0, x1, x1)
Cond_410_0_test_LE(TRUE, x0, x1, x1)
446_0_test_LE(x0, x1, x1)
Cond_446_0_test_LE(TRUE, x0, x1, x1)
479_0_test_LE(x0, x1, x1)
Cond_479_0_test_LE(TRUE, x0, x1, x1)
515_0_test_LE(x0, x1, x1)
Cond_515_0_test_LE(TRUE, x0, x1, x1)
549_0_test_LE(x0)
Cond_549_0_test_LE(TRUE, x0)

(154) IDependencyGraphProof (EQUIVALENT transformation)

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

(155) 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:
103_0_test_Load(x0) → 157_0_test_LE(x0, x0, x0)
157_0_test_LE(x0, x1, x1) → Cond_157_0_test_LE(x1 > 0, x0, x1, x1)
Cond_157_0_test_LE(TRUE, x0, x1, x1) → 157_0_test_LE(x0, x1 + -1, x1 + -1)
157_0_test_LE(x0, 0, 0) → 194_0_test_LE(x0, x0, x0)
194_0_test_LE(x0, x1, x1) → Cond_194_0_test_LE(x1 > 0, x0, x1, x1)
Cond_194_0_test_LE(TRUE, x0, x1, x1) → 194_0_test_LE(x0, x1 + -1, x1 + -1)
194_0_test_LE(x0, 0, 0) → 235_0_test_LE(x0, x0, x0)
235_0_test_LE(x0, x1, x1) → Cond_235_0_test_LE(x1 > 0, x0, x1, x1)
Cond_235_0_test_LE(TRUE, x0, x1, x1) → 235_0_test_LE(x0, x1 + -1, x1 + -1)
235_0_test_LE(x0, 0, 0) → 270_0_test_LE(x0, x0, x0)
270_0_test_LE(x0, x1, x1) → Cond_270_0_test_LE(x1 > 0, x0, x1, x1)
Cond_270_0_test_LE(TRUE, x0, x1, x1) → 270_0_test_LE(x0, x1 + -1, x1 + -1)
270_0_test_LE(x0, 0, 0) → 306_0_test_LE(x0, x0, x0)
306_0_test_LE(x0, x1, x1) → Cond_306_0_test_LE(x1 > 0, x0, x1, x1)
Cond_306_0_test_LE(TRUE, x0, x1, x1) → 306_0_test_LE(x0, x1 + -1, x1 + -1)
306_0_test_LE(x0, 0, 0) → 341_0_test_LE(x0, x0, x0)
341_0_test_LE(x0, x1, x1) → Cond_341_0_test_LE(x1 > 0, x0, x1, x1)
Cond_341_0_test_LE(TRUE, x0, x1, x1) → 341_0_test_LE(x0, x1 + -1, x1 + -1)
341_0_test_LE(x0, 0, 0) → 376_0_test_LE(x0, x0, x0)
376_0_test_LE(x0, x1, x1) → Cond_376_0_test_LE(x1 > 0, x0, x1, x1)
Cond_376_0_test_LE(TRUE, x0, x1, x1) → 376_0_test_LE(x0, x1 + -1, x1 + -1)
376_0_test_LE(x0, 0, 0) → 410_0_test_LE(x0, x0, x0)
410_0_test_LE(x0, x1, x1) → Cond_410_0_test_LE(x1 > 0, x0, x1, x1)
Cond_410_0_test_LE(TRUE, x0, x1, x1) → 410_0_test_LE(x0, x1 + -1, x1 + -1)
410_0_test_LE(x0, 0, 0) → 446_0_test_LE(x0, x0, x0)
446_0_test_LE(x0, x1, x1) → Cond_446_0_test_LE(x1 > 0, x0, x1, x1)
Cond_446_0_test_LE(TRUE, x0, x1, x1) → 446_0_test_LE(x0, x1 + -1, x1 + -1)
446_0_test_LE(x0, 0, 0) → 479_0_test_LE(x0, x0, x0)
479_0_test_LE(x0, x1, x1) → Cond_479_0_test_LE(x1 > 0, x0, x1, x1)
Cond_479_0_test_LE(TRUE, x0, x1, x1) → 479_0_test_LE(x0, x1 + -1, x1 + -1)
479_0_test_LE(x0, 0, 0) → 515_0_test_LE(x0, x0, x0)
515_0_test_LE(x0, x1, x1) → Cond_515_0_test_LE(x1 > 0, x0, x1, x1)
Cond_515_0_test_LE(TRUE, x0, x1, x1) → 515_0_test_LE(x0, x1 + -1, x1 + -1)
515_0_test_LE(x0, 0, 0) → 549_0_test_LE(x0)
549_0_test_LE(0) → 555_0_test_Return
549_0_test_LE(x0) → Cond_549_0_test_LE(x0 > 0, x0)
Cond_549_0_test_LE(TRUE, x0) → 549_0_test_LE(x0 + -1)

The integer pair graph contains the following rules and edges:
(3): COND_103_1_MAIN_INVOKEMETHOD(TRUE, 555_0_test_Return, x0[3], x1[3]) → 92_0_MAIN_GE(x0[3], x1[3] + 1)
(2): 103_1_MAIN_INVOKEMETHOD(555_0_test_Return, x0[2], x1[2]) → COND_103_1_MAIN_INVOKEMETHOD(x1[2] > 0, 555_0_test_Return, x0[2], x1[2])
(1): COND_92_0_MAIN_GE(TRUE, x0[1], x1[1]) → 103_1_MAIN_INVOKEMETHOD(103_0_test_Load(x1[1]), x0[1], x1[1])
(0): 92_0_MAIN_GE(x0[0], x1[0]) → COND_92_0_MAIN_GE(x1[0] < 100, x0[0], x1[0])

(3) -> (0), if (x0[3]* x0[0]x1[3] + 1* x1[0])


(0) -> (1), if (x1[0] < 100x0[0]* x0[1]x1[0]* x1[1])


(1) -> (2), if (103_0_test_Load(x1[1]) →* 555_0_test_Returnx0[1]* x0[2]x1[1]* x1[2])


(2) -> (3), if (x1[2] > 0x0[2]* x0[3]x1[2]* x1[3])



The set Q consists of the following terms:
103_0_test_Load(x0)
157_0_test_LE(x0, x1, x1)
Cond_157_0_test_LE(TRUE, x0, x1, x1)
194_0_test_LE(x0, x1, x1)
Cond_194_0_test_LE(TRUE, x0, x1, x1)
235_0_test_LE(x0, x1, x1)
Cond_235_0_test_LE(TRUE, x0, x1, x1)
270_0_test_LE(x0, x1, x1)
Cond_270_0_test_LE(TRUE, x0, x1, x1)
306_0_test_LE(x0, x1, x1)
Cond_306_0_test_LE(TRUE, x0, x1, x1)
341_0_test_LE(x0, x1, x1)
Cond_341_0_test_LE(TRUE, x0, x1, x1)
376_0_test_LE(x0, x1, x1)
Cond_376_0_test_LE(TRUE, x0, x1, x1)
410_0_test_LE(x0, x1, x1)
Cond_410_0_test_LE(TRUE, x0, x1, x1)
446_0_test_LE(x0, x1, x1)
Cond_446_0_test_LE(TRUE, x0, x1, x1)
479_0_test_LE(x0, x1, x1)
Cond_479_0_test_LE(TRUE, x0, x1, x1)
515_0_test_LE(x0, x1, x1)
Cond_515_0_test_LE(TRUE, x0, x1, x1)
549_0_test_LE(x0)
Cond_549_0_test_LE(TRUE, x0)

(156) IDPNonInfProof (SOUND transformation)

Used the following options for this NonInfProof:
IDPGPoloSolver: Range: [(-1,2)] IsNat: false Interpretation Shape Heuristic: aprove.DPFramework.IDPProblem.Processors.nonInf.poly.IdpCand1ShapeHeuristic@172675af Constraint Generator: NonInfConstraintGenerator: PathGenerator: MetricPathGenerator: Max Left Steps: 0 Max Right Steps: 0

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_103_1_MAIN_INVOKEMETHOD(TRUE, 555_0_test_Return, x0[3], x1[3]) → 92_0_MAIN_GE(x0[3], +(x1[3], 1)) the following chains were created:
  • We consider the chain COND_103_1_MAIN_INVOKEMETHOD(TRUE, 555_0_test_Return, x0[3], x1[3]) → 92_0_MAIN_GE(x0[3], +(x1[3], 1)) which results in the following constraint:

    (1)    (COND_103_1_MAIN_INVOKEMETHOD(TRUE, 555_0_test_Return, x0[3], x1[3])≥NonInfC∧COND_103_1_MAIN_INVOKEMETHOD(TRUE, 555_0_test_Return, x0[3], x1[3])≥92_0_MAIN_GE(x0[3], +(x1[3], 1))∧(UIncreasing(92_0_MAIN_GE(x0[3], +(x1[3], 1))), ≥))



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

    (2)    ((UIncreasing(92_0_MAIN_GE(x0[3], +(x1[3], 1))), ≥)∧[bni_35] = 0∧[1 + (-1)bso_36] ≥ 0)



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

    (3)    ((UIncreasing(92_0_MAIN_GE(x0[3], +(x1[3], 1))), ≥)∧[bni_35] = 0∧[1 + (-1)bso_36] ≥ 0)



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

    (4)    ((UIncreasing(92_0_MAIN_GE(x0[3], +(x1[3], 1))), ≥)∧[bni_35] = 0∧[1 + (-1)bso_36] ≥ 0)



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

    (5)    ((UIncreasing(92_0_MAIN_GE(x0[3], +(x1[3], 1))), ≥)∧[bni_35] = 0∧0 = 0∧[1 + (-1)bso_36] ≥ 0)







For Pair 103_1_MAIN_INVOKEMETHOD(555_0_test_Return, x0[2], x1[2]) → COND_103_1_MAIN_INVOKEMETHOD(>(x1[2], 0), 555_0_test_Return, x0[2], x1[2]) the following chains were created:
  • We consider the chain 103_1_MAIN_INVOKEMETHOD(555_0_test_Return, x0[2], x1[2]) → COND_103_1_MAIN_INVOKEMETHOD(>(x1[2], 0), 555_0_test_Return, x0[2], x1[2]), COND_103_1_MAIN_INVOKEMETHOD(TRUE, 555_0_test_Return, x0[3], x1[3]) → 92_0_MAIN_GE(x0[3], +(x1[3], 1)) which results in the following constraint:

    (6)    (>(x1[2], 0)=TRUEx0[2]=x0[3]x1[2]=x1[3]103_1_MAIN_INVOKEMETHOD(555_0_test_Return, x0[2], x1[2])≥NonInfC∧103_1_MAIN_INVOKEMETHOD(555_0_test_Return, x0[2], x1[2])≥COND_103_1_MAIN_INVOKEMETHOD(>(x1[2], 0), 555_0_test_Return, x0[2], x1[2])∧(UIncreasing(COND_103_1_MAIN_INVOKEMETHOD(>(x1[2], 0), 555_0_test_Return, x0[2], x1[2])), ≥))



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

    (7)    (>(x1[2], 0)=TRUE103_1_MAIN_INVOKEMETHOD(555_0_test_Return, x0[2], x1[2])≥NonInfC∧103_1_MAIN_INVOKEMETHOD(555_0_test_Return, x0[2], x1[2])≥COND_103_1_MAIN_INVOKEMETHOD(>(x1[2], 0), 555_0_test_Return, x0[2], x1[2])∧(UIncreasing(COND_103_1_MAIN_INVOKEMETHOD(>(x1[2], 0), 555_0_test_Return, x0[2], x1[2])), ≥))



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

    (8)    (x1[2] + [-1] ≥ 0 ⇒ (UIncreasing(COND_103_1_MAIN_INVOKEMETHOD(>(x1[2], 0), 555_0_test_Return, x0[2], x1[2])), ≥)∧[(-1)bni_37 + (-1)Bound*bni_37] + [(-1)bni_37]x1[2] ≥ 0∧[(-1)bso_38] ≥ 0)



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

    (9)    (x1[2] + [-1] ≥ 0 ⇒ (UIncreasing(COND_103_1_MAIN_INVOKEMETHOD(>(x1[2], 0), 555_0_test_Return, x0[2], x1[2])), ≥)∧[(-1)bni_37 + (-1)Bound*bni_37] + [(-1)bni_37]x1[2] ≥ 0∧[(-1)bso_38] ≥ 0)



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

    (10)    (x1[2] + [-1] ≥ 0 ⇒ (UIncreasing(COND_103_1_MAIN_INVOKEMETHOD(>(x1[2], 0), 555_0_test_Return, x0[2], x1[2])), ≥)∧[(-1)bni_37 + (-1)Bound*bni_37] + [(-1)bni_37]x1[2] ≥ 0∧[(-1)bso_38] ≥ 0)



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

    (11)    (x1[2] ≥ 0 ⇒ (UIncreasing(COND_103_1_MAIN_INVOKEMETHOD(>(x1[2], 0), 555_0_test_Return, x0[2], x1[2])), ≥)∧[(-2)bni_37 + (-1)Bound*bni_37] + [(-1)bni_37]x1[2] ≥ 0∧[(-1)bso_38] ≥ 0)







For Pair COND_92_0_MAIN_GE(TRUE, x0[1], x1[1]) → 103_1_MAIN_INVOKEMETHOD(103_0_test_Load(x1[1]), x0[1], x1[1]) the following chains were created:
  • We consider the chain COND_92_0_MAIN_GE(TRUE, x0[1], x1[1]) → 103_1_MAIN_INVOKEMETHOD(103_0_test_Load(x1[1]), x0[1], x1[1]) which results in the following constraint:

    (12)    (COND_92_0_MAIN_GE(TRUE, x0[1], x1[1])≥NonInfC∧COND_92_0_MAIN_GE(TRUE, x0[1], x1[1])≥103_1_MAIN_INVOKEMETHOD(103_0_test_Load(x1[1]), x0[1], x1[1])∧(UIncreasing(103_1_MAIN_INVOKEMETHOD(103_0_test_Load(x1[1]), x0[1], x1[1])), ≥))



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

    (13)    ((UIncreasing(103_1_MAIN_INVOKEMETHOD(103_0_test_Load(x1[1]), x0[1], x1[1])), ≥)∧[bni_39] = 0∧[(-1)bso_40] ≥ 0)



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

    (14)    ((UIncreasing(103_1_MAIN_INVOKEMETHOD(103_0_test_Load(x1[1]), x0[1], x1[1])), ≥)∧[bni_39] = 0∧[(-1)bso_40] ≥ 0)



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

    (15)    ((UIncreasing(103_1_MAIN_INVOKEMETHOD(103_0_test_Load(x1[1]), x0[1], x1[1])), ≥)∧[bni_39] = 0∧[(-1)bso_40] ≥ 0)



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

    (16)    ((UIncreasing(103_1_MAIN_INVOKEMETHOD(103_0_test_Load(x1[1]), x0[1], x1[1])), ≥)∧[bni_39] = 0∧0 = 0∧[(-1)bso_40] ≥ 0)







For Pair 92_0_MAIN_GE(x0[0], x1[0]) → COND_92_0_MAIN_GE(<(x1[0], 100), x0[0], x1[0]) the following chains were created:
  • We consider the chain 92_0_MAIN_GE(x0[0], x1[0]) → COND_92_0_MAIN_GE(<(x1[0], 100), x0[0], x1[0]), COND_92_0_MAIN_GE(TRUE, x0[1], x1[1]) → 103_1_MAIN_INVOKEMETHOD(103_0_test_Load(x1[1]), x0[1], x1[1]) which results in the following constraint:

    (17)    (<(x1[0], 100)=TRUEx0[0]=x0[1]x1[0]=x1[1]92_0_MAIN_GE(x0[0], x1[0])≥NonInfC∧92_0_MAIN_GE(x0[0], x1[0])≥COND_92_0_MAIN_GE(<(x1[0], 100), x0[0], x1[0])∧(UIncreasing(COND_92_0_MAIN_GE(<(x1[0], 100), x0[0], x1[0])), ≥))



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

    (18)    (<(x1[0], 100)=TRUE92_0_MAIN_GE(x0[0], x1[0])≥NonInfC∧92_0_MAIN_GE(x0[0], x1[0])≥COND_92_0_MAIN_GE(<(x1[0], 100), x0[0], x1[0])∧(UIncreasing(COND_92_0_MAIN_GE(<(x1[0], 100), x0[0], x1[0])), ≥))



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

    (19)    ([99] + [-1]x1[0] ≥ 0 ⇒ (UIncreasing(COND_92_0_MAIN_GE(<(x1[0], 100), x0[0], x1[0])), ≥)∧[(-1)bni_41 + (-1)Bound*bni_41] + [(-1)bni_41]x1[0] ≥ 0∧[(-1)bso_42] ≥ 0)



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

    (20)    ([99] + [-1]x1[0] ≥ 0 ⇒ (UIncreasing(COND_92_0_MAIN_GE(<(x1[0], 100), x0[0], x1[0])), ≥)∧[(-1)bni_41 + (-1)Bound*bni_41] + [(-1)bni_41]x1[0] ≥ 0∧[(-1)bso_42] ≥ 0)



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

    (21)    ([99] + [-1]x1[0] ≥ 0 ⇒ (UIncreasing(COND_92_0_MAIN_GE(<(x1[0], 100), x0[0], x1[0])), ≥)∧[(-1)bni_41 + (-1)Bound*bni_41] + [(-1)bni_41]x1[0] ≥ 0∧[(-1)bso_42] ≥ 0)



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

    (22)    ([99] + x1[0] ≥ 0∧x1[0] ≥ 0 ⇒ (UIncreasing(COND_92_0_MAIN_GE(<(x1[0], 100), x0[0], x1[0])), ≥)∧[(-1)bni_41 + (-1)Bound*bni_41] + [bni_41]x1[0] ≥ 0∧[(-1)bso_42] ≥ 0)


    (23)    ([99] + [-1]x1[0] ≥ 0∧x1[0] ≥ 0 ⇒ (UIncreasing(COND_92_0_MAIN_GE(<(x1[0], 100), x0[0], x1[0])), ≥)∧[(-1)bni_41 + (-1)Bound*bni_41] + [(-1)bni_41]x1[0] ≥ 0∧[(-1)bso_42] ≥ 0)







To summarize, we get the following constraints P for the following pairs.
  • COND_103_1_MAIN_INVOKEMETHOD(TRUE, 555_0_test_Return, x0[3], x1[3]) → 92_0_MAIN_GE(x0[3], +(x1[3], 1))
    • ((UIncreasing(92_0_MAIN_GE(x0[3], +(x1[3], 1))), ≥)∧[bni_35] = 0∧0 = 0∧[1 + (-1)bso_36] ≥ 0)

  • 103_1_MAIN_INVOKEMETHOD(555_0_test_Return, x0[2], x1[2]) → COND_103_1_MAIN_INVOKEMETHOD(>(x1[2], 0), 555_0_test_Return, x0[2], x1[2])
    • (x1[2] ≥ 0 ⇒ (UIncreasing(COND_103_1_MAIN_INVOKEMETHOD(>(x1[2], 0), 555_0_test_Return, x0[2], x1[2])), ≥)∧[(-2)bni_37 + (-1)Bound*bni_37] + [(-1)bni_37]x1[2] ≥ 0∧[(-1)bso_38] ≥ 0)

  • COND_92_0_MAIN_GE(TRUE, x0[1], x1[1]) → 103_1_MAIN_INVOKEMETHOD(103_0_test_Load(x1[1]), x0[1], x1[1])
    • ((UIncreasing(103_1_MAIN_INVOKEMETHOD(103_0_test_Load(x1[1]), x0[1], x1[1])), ≥)∧[bni_39] = 0∧0 = 0∧[(-1)bso_40] ≥ 0)

  • 92_0_MAIN_GE(x0[0], x1[0]) → COND_92_0_MAIN_GE(<(x1[0], 100), x0[0], x1[0])
    • ([99] + x1[0] ≥ 0∧x1[0] ≥ 0 ⇒ (UIncreasing(COND_92_0_MAIN_GE(<(x1[0], 100), x0[0], x1[0])), ≥)∧[(-1)bni_41 + (-1)Bound*bni_41] + [bni_41]x1[0] ≥ 0∧[(-1)bso_42] ≥ 0)
    • ([99] + [-1]x1[0] ≥ 0∧x1[0] ≥ 0 ⇒ (UIncreasing(COND_92_0_MAIN_GE(<(x1[0], 100), x0[0], x1[0])), ≥)∧[(-1)bni_41 + (-1)Bound*bni_41] + [(-1)bni_41]x1[0] ≥ 0∧[(-1)bso_42] ≥ 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(103_0_test_Load(x1)) = [-1]   
POL(157_0_test_LE(x1, x2, x3)) = [-1]x3 + [-1]x2 + [-1]x1   
POL(Cond_157_0_test_LE(x1, x2, x3, x4)) = [-1] + x4 + [-1]x3   
POL(>(x1, x2)) = [-1]   
POL(0) = 0   
POL(+(x1, x2)) = x1 + x2   
POL(-1) = [-1]   
POL(194_0_test_LE(x1, x2, x3)) = [-1] + x3 + [-1]x2   
POL(Cond_194_0_test_LE(x1, x2, x3, x4)) = [-1] + x4 + x3   
POL(235_0_test_LE(x1, x2, x3)) = [-1] + [-1]x3 + [-1]x2 + [-1]x1   
POL(Cond_235_0_test_LE(x1, x2, x3, x4)) = [1] + [-1]x3   
POL(270_0_test_LE(x1, x2, x3)) = [-1] + [2]x3 + [-1]x2 + [2]x1   
POL(Cond_270_0_test_LE(x1, x2, x3, x4)) = [2] + [-1]x4 + [2]x3   
POL(306_0_test_LE(x1, x2, x3)) = [1] + [-1]x3 + [-1]x2 + [-1]x1   
POL(Cond_306_0_test_LE(x1, x2, x3, x4)) = [-1] + x4 + [-1]x3   
POL(341_0_test_LE(x1, x2, x3)) = [-1]x3 + [-1]x2 + [-1]x1   
POL(Cond_341_0_test_LE(x1, x2, x3, x4)) = [-1] + [-1]x3   
POL(376_0_test_LE(x1, x2, x3)) = [1] + [-1]x3 + [-1]x1   
POL(Cond_376_0_test_LE(x1, x2, x3, x4)) = [-1] + x4 + [-1]x3   
POL(410_0_test_LE(x1, x2, x3)) = [-1] + [-1]x3 + [-1]x2 + [-1]x1   
POL(Cond_410_0_test_LE(x1, x2, x3, x4)) = [-1] + [-1]x4 + [-1]x3   
POL(446_0_test_LE(x1, x2, x3)) = [-1] + [-1]x3 + [-1]x2 + [-1]x1   
POL(Cond_446_0_test_LE(x1, x2, x3, x4)) = [-1] + [-1]x4 + [-1]x3   
POL(479_0_test_LE(x1, x2, x3)) = [-1]x3 + [-1]x2 + x1   
POL(Cond_479_0_test_LE(x1, x2, x3, x4)) = [2] + [2]x4 + [-1]x3   
POL(515_0_test_LE(x1, x2, x3)) = [2] + [-1]x3 + [-1]x2 + [-1]x1   
POL(Cond_515_0_test_LE(x1, x2, x3, x4)) = [-1] + [-1]x3   
POL(549_0_test_LE(x1)) = [2] + [-1]x1   
POL(555_0_test_Return) = [-1]   
POL(Cond_549_0_test_LE(x1, x2)) = [-1] + [-1]x2   
POL(COND_103_1_MAIN_INVOKEMETHOD(x1, x2, x3, x4)) = [-1] + [-1]x4   
POL(92_0_MAIN_GE(x1, x2)) = [-1] + [-1]x2   
POL(1) = [1]   
POL(103_1_MAIN_INVOKEMETHOD(x1, x2, x3)) = [-1] + [-1]x3   
POL(COND_92_0_MAIN_GE(x1, x2, x3)) = [-1] + [-1]x3   
POL(<(x1, x2)) = [-1]   
POL(100) = [100]   

The following pairs are in P>:

COND_103_1_MAIN_INVOKEMETHOD(TRUE, 555_0_test_Return, x0[3], x1[3]) → 92_0_MAIN_GE(x0[3], +(x1[3], 1))

The following pairs are in Pbound:

92_0_MAIN_GE(x0[0], x1[0]) → COND_92_0_MAIN_GE(<(x1[0], 100), x0[0], x1[0])

The following pairs are in P:

103_1_MAIN_INVOKEMETHOD(555_0_test_Return, x0[2], x1[2]) → COND_103_1_MAIN_INVOKEMETHOD(>(x1[2], 0), 555_0_test_Return, x0[2], x1[2])
COND_92_0_MAIN_GE(TRUE, x0[1], x1[1]) → 103_1_MAIN_INVOKEMETHOD(103_0_test_Load(x1[1]), x0[1], x1[1])
92_0_MAIN_GE(x0[0], x1[0]) → COND_92_0_MAIN_GE(<(x1[0], 100), x0[0], x1[0])

At least the following rules have been oriented under context sensitive arithmetic replacement:

515_0_test_LE(x0, 0, 0)1549_0_test_LE(x0)1
549_0_test_LE(0)1555_0_test_Return1
549_0_test_LE(x0)1Cond_549_0_test_LE(>(x0, 0), x0)1
549_0_test_LE(+(x0, -1))1Cond_549_0_test_LE(TRUE, x0)1

(157) Complex Obligation (AND)

(158) 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:
103_0_test_Load(x0) → 157_0_test_LE(x0, x0, x0)
157_0_test_LE(x0, x1, x1) → Cond_157_0_test_LE(x1 > 0, x0, x1, x1)
Cond_157_0_test_LE(TRUE, x0, x1, x1) → 157_0_test_LE(x0, x1 + -1, x1 + -1)
157_0_test_LE(x0, 0, 0) → 194_0_test_LE(x0, x0, x0)
194_0_test_LE(x0, x1, x1) → Cond_194_0_test_LE(x1 > 0, x0, x1, x1)
Cond_194_0_test_LE(TRUE, x0, x1, x1) → 194_0_test_LE(x0, x1 + -1, x1 + -1)
194_0_test_LE(x0, 0, 0) → 235_0_test_LE(x0, x0, x0)
235_0_test_LE(x0, x1, x1) → Cond_235_0_test_LE(x1 > 0, x0, x1, x1)
Cond_235_0_test_LE(TRUE, x0, x1, x1) → 235_0_test_LE(x0, x1 + -1, x1 + -1)
235_0_test_LE(x0, 0, 0) → 270_0_test_LE(x0, x0, x0)
270_0_test_LE(x0, x1, x1) → Cond_270_0_test_LE(x1 > 0, x0, x1, x1)
Cond_270_0_test_LE(TRUE, x0, x1, x1) → 270_0_test_LE(x0, x1 + -1, x1 + -1)
270_0_test_LE(x0, 0, 0) → 306_0_test_LE(x0, x0, x0)
306_0_test_LE(x0, x1, x1) → Cond_306_0_test_LE(x1 > 0, x0, x1, x1)
Cond_306_0_test_LE(TRUE, x0, x1, x1) → 306_0_test_LE(x0, x1 + -1, x1 + -1)
306_0_test_LE(x0, 0, 0) → 341_0_test_LE(x0, x0, x0)
341_0_test_LE(x0, x1, x1) → Cond_341_0_test_LE(x1 > 0, x0, x1, x1)
Cond_341_0_test_LE(TRUE, x0, x1, x1) → 341_0_test_LE(x0, x1 + -1, x1 + -1)
341_0_test_LE(x0, 0, 0) → 376_0_test_LE(x0, x0, x0)
376_0_test_LE(x0, x1, x1) → Cond_376_0_test_LE(x1 > 0, x0, x1, x1)
Cond_376_0_test_LE(TRUE, x0, x1, x1) → 376_0_test_LE(x0, x1 + -1, x1 + -1)
376_0_test_LE(x0, 0, 0) → 410_0_test_LE(x0, x0, x0)
410_0_test_LE(x0, x1, x1) → Cond_410_0_test_LE(x1 > 0, x0, x1, x1)
Cond_410_0_test_LE(TRUE, x0, x1, x1) → 410_0_test_LE(x0, x1 + -1, x1 + -1)
410_0_test_LE(x0, 0, 0) → 446_0_test_LE(x0, x0, x0)
446_0_test_LE(x0, x1, x1) → Cond_446_0_test_LE(x1 > 0, x0, x1, x1)
Cond_446_0_test_LE(TRUE, x0, x1, x1) → 446_0_test_LE(x0, x1 + -1, x1 + -1)
446_0_test_LE(x0, 0, 0) → 479_0_test_LE(x0, x0, x0)
479_0_test_LE(x0, x1, x1) → Cond_479_0_test_LE(x1 > 0, x0, x1, x1)
Cond_479_0_test_LE(TRUE, x0, x1, x1) → 479_0_test_LE(x0, x1 + -1, x1 + -1)
479_0_test_LE(x0, 0, 0) → 515_0_test_LE(x0, x0, x0)
515_0_test_LE(x0, x1, x1) → Cond_515_0_test_LE(x1 > 0, x0, x1, x1)
Cond_515_0_test_LE(TRUE, x0, x1, x1) → 515_0_test_LE(x0, x1 + -1, x1 + -1)
515_0_test_LE(x0, 0, 0) → 549_0_test_LE(x0)
549_0_test_LE(0) → 555_0_test_Return
549_0_test_LE(x0) → Cond_549_0_test_LE(x0 > 0, x0)
Cond_549_0_test_LE(TRUE, x0) → 549_0_test_LE(x0 + -1)

The integer pair graph contains the following rules and edges:
(2): 103_1_MAIN_INVOKEMETHOD(555_0_test_Return, x0[2], x1[2]) → COND_103_1_MAIN_INVOKEMETHOD(x1[2] > 0, 555_0_test_Return, x0[2], x1[2])
(1): COND_92_0_MAIN_GE(TRUE, x0[1], x1[1]) → 103_1_MAIN_INVOKEMETHOD(103_0_test_Load(x1[1]), x0[1], x1[1])
(0): 92_0_MAIN_GE(x0[0], x1[0]) → COND_92_0_MAIN_GE(x1[0] < 100, x0[0], x1[0])

(0) -> (1), if (x1[0] < 100x0[0]* x0[1]x1[0]* x1[1])


(1) -> (2), if (103_0_test_Load(x1[1]) →* 555_0_test_Returnx0[1]* x0[2]x1[1]* x1[2])



The set Q consists of the following terms:
103_0_test_Load(x0)
157_0_test_LE(x0, x1, x1)
Cond_157_0_test_LE(TRUE, x0, x1, x1)
194_0_test_LE(x0, x1, x1)
Cond_194_0_test_LE(TRUE, x0, x1, x1)
235_0_test_LE(x0, x1, x1)
Cond_235_0_test_LE(TRUE, x0, x1, x1)
270_0_test_LE(x0, x1, x1)
Cond_270_0_test_LE(TRUE, x0, x1, x1)
306_0_test_LE(x0, x1, x1)
Cond_306_0_test_LE(TRUE, x0, x1, x1)
341_0_test_LE(x0, x1, x1)
Cond_341_0_test_LE(TRUE, x0, x1, x1)
376_0_test_LE(x0, x1, x1)
Cond_376_0_test_LE(TRUE, x0, x1, x1)
410_0_test_LE(x0, x1, x1)
Cond_410_0_test_LE(TRUE, x0, x1, x1)
446_0_test_LE(x0, x1, x1)
Cond_446_0_test_LE(TRUE, x0, x1, x1)
479_0_test_LE(x0, x1, x1)
Cond_479_0_test_LE(TRUE, x0, x1, x1)
515_0_test_LE(x0, x1, x1)
Cond_515_0_test_LE(TRUE, x0, x1, x1)
549_0_test_LE(x0)
Cond_549_0_test_LE(TRUE, x0)

(159) IDependencyGraphProof (EQUIVALENT transformation)

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

(160) TRUE

(161) 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:
103_0_test_Load(x0) → 157_0_test_LE(x0, x0, x0)
157_0_test_LE(x0, x1, x1) → Cond_157_0_test_LE(x1 > 0, x0, x1, x1)
Cond_157_0_test_LE(TRUE, x0, x1, x1) → 157_0_test_LE(x0, x1 + -1, x1 + -1)
157_0_test_LE(x0, 0, 0) → 194_0_test_LE(x0, x0, x0)
194_0_test_LE(x0, x1, x1) → Cond_194_0_test_LE(x1 > 0, x0, x1, x1)
Cond_194_0_test_LE(TRUE, x0, x1, x1) → 194_0_test_LE(x0, x1 + -1, x1 + -1)
194_0_test_LE(x0, 0, 0) → 235_0_test_LE(x0, x0, x0)
235_0_test_LE(x0, x1, x1) → Cond_235_0_test_LE(x1 > 0, x0, x1, x1)
Cond_235_0_test_LE(TRUE, x0, x1, x1) → 235_0_test_LE(x0, x1 + -1, x1 + -1)
235_0_test_LE(x0, 0, 0) → 270_0_test_LE(x0, x0, x0)
270_0_test_LE(x0, x1, x1) → Cond_270_0_test_LE(x1 > 0, x0, x1, x1)
Cond_270_0_test_LE(TRUE, x0, x1, x1) → 270_0_test_LE(x0, x1 + -1, x1 + -1)
270_0_test_LE(x0, 0, 0) → 306_0_test_LE(x0, x0, x0)
306_0_test_LE(x0, x1, x1) → Cond_306_0_test_LE(x1 > 0, x0, x1, x1)
Cond_306_0_test_LE(TRUE, x0, x1, x1) → 306_0_test_LE(x0, x1 + -1, x1 + -1)
306_0_test_LE(x0, 0, 0) → 341_0_test_LE(x0, x0, x0)
341_0_test_LE(x0, x1, x1) → Cond_341_0_test_LE(x1 > 0, x0, x1, x1)
Cond_341_0_test_LE(TRUE, x0, x1, x1) → 341_0_test_LE(x0, x1 + -1, x1 + -1)
341_0_test_LE(x0, 0, 0) → 376_0_test_LE(x0, x0, x0)
376_0_test_LE(x0, x1, x1) → Cond_376_0_test_LE(x1 > 0, x0, x1, x1)
Cond_376_0_test_LE(TRUE, x0, x1, x1) → 376_0_test_LE(x0, x1 + -1, x1 + -1)
376_0_test_LE(x0, 0, 0) → 410_0_test_LE(x0, x0, x0)
410_0_test_LE(x0, x1, x1) → Cond_410_0_test_LE(x1 > 0, x0, x1, x1)
Cond_410_0_test_LE(TRUE, x0, x1, x1) → 410_0_test_LE(x0, x1 + -1, x1 + -1)
410_0_test_LE(x0, 0, 0) → 446_0_test_LE(x0, x0, x0)
446_0_test_LE(x0, x1, x1) → Cond_446_0_test_LE(x1 > 0, x0, x1, x1)
Cond_446_0_test_LE(TRUE, x0, x1, x1) → 446_0_test_LE(x0, x1 + -1, x1 + -1)
446_0_test_LE(x0, 0, 0) → 479_0_test_LE(x0, x0, x0)
479_0_test_LE(x0, x1, x1) → Cond_479_0_test_LE(x1 > 0, x0, x1, x1)
Cond_479_0_test_LE(TRUE, x0, x1, x1) → 479_0_test_LE(x0, x1 + -1, x1 + -1)
479_0_test_LE(x0, 0, 0) → 515_0_test_LE(x0, x0, x0)
515_0_test_LE(x0, x1, x1) → Cond_515_0_test_LE(x1 > 0, x0, x1, x1)
Cond_515_0_test_LE(TRUE, x0, x1, x1) → 515_0_test_LE(x0, x1 + -1, x1 + -1)
515_0_test_LE(x0, 0, 0) → 549_0_test_LE(x0)
549_0_test_LE(0) → 555_0_test_Return
549_0_test_LE(x0) → Cond_549_0_test_LE(x0 > 0, x0)
Cond_549_0_test_LE(TRUE, x0) → 549_0_test_LE(x0 + -1)

The integer pair graph contains the following rules and edges:
(3): COND_103_1_MAIN_INVOKEMETHOD(TRUE, 555_0_test_Return, x0[3], x1[3]) → 92_0_MAIN_GE(x0[3], x1[3] + 1)
(2): 103_1_MAIN_INVOKEMETHOD(555_0_test_Return, x0[2], x1[2]) → COND_103_1_MAIN_INVOKEMETHOD(x1[2] > 0, 555_0_test_Return, x0[2], x1[2])
(1): COND_92_0_MAIN_GE(TRUE, x0[1], x1[1]) → 103_1_MAIN_INVOKEMETHOD(103_0_test_Load(x1[1]), x0[1], x1[1])

(1) -> (2), if (103_0_test_Load(x1[1]) →* 555_0_test_Returnx0[1]* x0[2]x1[1]* x1[2])


(2) -> (3), if (x1[2] > 0x0[2]* x0[3]x1[2]* x1[3])



The set Q consists of the following terms:
103_0_test_Load(x0)
157_0_test_LE(x0, x1, x1)
Cond_157_0_test_LE(TRUE, x0, x1, x1)
194_0_test_LE(x0, x1, x1)
Cond_194_0_test_LE(TRUE, x0, x1, x1)
235_0_test_LE(x0, x1, x1)
Cond_235_0_test_LE(TRUE, x0, x1, x1)
270_0_test_LE(x0, x1, x1)
Cond_270_0_test_LE(TRUE, x0, x1, x1)
306_0_test_LE(x0, x1, x1)
Cond_306_0_test_LE(TRUE, x0, x1, x1)
341_0_test_LE(x0, x1, x1)
Cond_341_0_test_LE(TRUE, x0, x1, x1)
376_0_test_LE(x0, x1, x1)
Cond_376_0_test_LE(TRUE, x0, x1, x1)
410_0_test_LE(x0, x1, x1)
Cond_410_0_test_LE(TRUE, x0, x1, x1)
446_0_test_LE(x0, x1, x1)
Cond_446_0_test_LE(TRUE, x0, x1, x1)
479_0_test_LE(x0, x1, x1)
Cond_479_0_test_LE(TRUE, x0, x1, x1)
515_0_test_LE(x0, x1, x1)
Cond_515_0_test_LE(TRUE, x0, x1, x1)
549_0_test_LE(x0)
Cond_549_0_test_LE(TRUE, x0)

(162) IDependencyGraphProof (EQUIVALENT transformation)

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

(163) TRUE