(0) Obligation:

JBC Problem based on JBC Program:
Manifest-Version: 1.0 Created-By: 1.6.0_20 (Apple Inc.) Main-Class: Recursions
public class Recursions {
public static void main(String args[]) {
for (int i = 0; i < args.length; i++)
rec0(0, args.length);
}

public static void rec0(int i, int stop) {
if (i <= stop) {
rec1(0, 2*i, i);
rec0(i+1, stop);
}
}

public static void rec1(int j, int stop, int i) {
if (j <= stop) {
rec2(i+j, 0, i, j);
rec1(j+1, stop, i);
}
}

public static void rec2(int k, int stop, int i, int j) {
if (k >= stop) {
rec3(0, 2*i + 3*j + 4*k, i, j ,k);
rec2(k-1, stop, i, j);
}
}

public static void rec3(int l, int stop, int i, int j, int k) {
if (l <= stop) {
rec4(1000*i+100*j+10*k+l, 0);
rec3(l+1, stop, i, j, k);
}
}

public static void rec4(int m, int stop) {
if (m >= stop)
rec4(m-1, stop);
}
}


(1) JBCToGraph (SOUND transformation)

Constructed TerminationGraph.

(2) Obligation:

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

Recursions.rec0(II)V: Graph of 28 nodes with 0 SCCs.

Recursions.rec1(III)V: Graph of 29 nodes with 0 SCCs.

Recursions.rec2(IIII)V: Graph of 41 nodes with 0 SCCs.

Recursions.rec3(IIIII)V: Graph of 40 nodes with 0 SCCs.

Recursions.rec4(II)V: Graph of 19 nodes with 0 SCCs.


(3) TerminationGraphToSCCProof (SOUND transformation)

Splitted TerminationGraph to 6 SCCss.

(4) Complex Obligation (AND)

(5) Obligation:

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

(6) SCCToIDPv1Proof (SOUND transformation)

Transformed FIGraph SCCs to IDPs. Log:

Generated 11 rules for P and 7 rules for R.


P rules:
964_0_rec4_Load(EOS(STATIC_964), i89, matching1, i89) → 971_0_rec4_LT(EOS(STATIC_971), i89, 0, i89, 0) | =(matching1, 0)
971_0_rec4_LT(EOS(STATIC_971), i100, matching1, i100, matching2) → 977_0_rec4_LT(EOS(STATIC_977), i100, 0, i100, 0) | &&(=(matching1, 0), =(matching2, 0))
977_0_rec4_LT(EOS(STATIC_977), i100, matching1, i100, matching2) → 985_0_rec4_Load(EOS(STATIC_985), i100, 0) | &&(&&(>=(i100, 0), =(matching1, 0)), =(matching2, 0))
985_0_rec4_Load(EOS(STATIC_985), i100, matching1) → 996_0_rec4_ConstantStackPush(EOS(STATIC_996), 0, i100) | =(matching1, 0)
996_0_rec4_ConstantStackPush(EOS(STATIC_996), matching1, i100) → 1001_0_rec4_IntArithmetic(EOS(STATIC_1001), 0, i100, 1) | =(matching1, 0)
1001_0_rec4_IntArithmetic(EOS(STATIC_1001), matching1, i100, matching2) → 1008_0_rec4_Load(EOS(STATIC_1008), 0, -(i100, 1)) | &&(&&(>=(i100, 0), =(matching1, 0)), =(matching2, 1))
1008_0_rec4_Load(EOS(STATIC_1008), matching1, i119) → 1012_0_rec4_InvokeMethod(EOS(STATIC_1012), i119, 0) | =(matching1, 0)
1012_0_rec4_InvokeMethod(EOS(STATIC_1012), i119, matching1) → 1017_1_rec4_InvokeMethod(1017_0_rec4_Load(EOS(STATIC_1017), i119, 0), i119, 0) | =(matching1, 0)
1017_0_rec4_Load(EOS(STATIC_1017), i119, matching1) → 1023_0_rec4_Load(EOS(STATIC_1023), i119, 0) | =(matching1, 0)
1023_0_rec4_Load(EOS(STATIC_1023), i119, matching1) → 958_0_rec4_Load(EOS(STATIC_958), i119, 0) | =(matching1, 0)
958_0_rec4_Load(EOS(STATIC_958), i89, matching1) → 964_0_rec4_Load(EOS(STATIC_964), i89, 0, i89) | =(matching1, 0)
R rules:
971_0_rec4_LT(EOS(STATIC_971), i99, matching1, i99, matching2) → 976_0_rec4_LT(EOS(STATIC_976), i99, 0, i99, 0) | &&(=(matching1, 0), =(matching2, 0))
976_0_rec4_LT(EOS(STATIC_976), i99, matching1, i99, matching2) → 984_0_rec4_Return(EOS(STATIC_984)) | &&(&&(<(i99, 0), =(matching1, 0)), =(matching2, 0))
1017_1_rec4_InvokeMethod(984_0_rec4_Return(EOS(STATIC_984)), matching1, matching2) → 1039_0_rec4_Return(EOS(STATIC_1039), -1, 0) | &&(=(matching1, -1), =(matching2, 0))
1017_1_rec4_InvokeMethod(1070_0_rec4_Return(EOS(STATIC_1070)), i139, matching1) → 1090_0_rec4_Return(EOS(STATIC_1090), i139, 0) | =(matching1, 0)
1039_0_rec4_Return(EOS(STATIC_1039), matching1, matching2) → 1063_0_rec4_Return(EOS(STATIC_1063), -1, 0) | &&(=(matching1, -1), =(matching2, 0))
1063_0_rec4_Return(EOS(STATIC_1063), i133, matching1) → 1070_0_rec4_Return(EOS(STATIC_1070)) | =(matching1, 0)
1090_0_rec4_Return(EOS(STATIC_1090), i139, matching1) → 1063_0_rec4_Return(EOS(STATIC_1063), i139, 0) | =(matching1, 0)

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


P rules:
964_0_rec4_Load(EOS(STATIC_964), x0, 0, x0) → 1017_1_rec4_InvokeMethod(964_0_rec4_Load(EOS(STATIC_964), -(x0, 1), 0, -(x0, 1)), -(x0, 1), 0) | >(+(x0, 1), 0)
R rules:
1017_1_rec4_InvokeMethod(984_0_rec4_Return(EOS(STATIC_984)), -1, 0) → 1070_0_rec4_Return(EOS(STATIC_1070))
1017_1_rec4_InvokeMethod(1070_0_rec4_Return(EOS(STATIC_1070)), x0, 0) → 1070_0_rec4_Return(EOS(STATIC_1070))

Filtered ground terms:



1017_1_rec4_InvokeMethod(x1, x2, x3) → 1017_1_rec4_InvokeMethod(x1, x2)
964_0_rec4_Load(x1, x2, x3, x4) → 964_0_rec4_Load(x2, x4)
Cond_964_0_rec4_Load(x1, x2, x3, x4, x5) → Cond_964_0_rec4_Load(x1, x3, x5)
1070_0_rec4_Return(x1) → 1070_0_rec4_Return
984_0_rec4_Return(x1) → 984_0_rec4_Return

Filtered duplicate args:



964_0_rec4_Load(x1, x2) → 964_0_rec4_Load(x2)
Cond_964_0_rec4_Load(x1, x2, x3) → Cond_964_0_rec4_Load(x1, x3)

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


P rules:
964_0_rec4_Load(x0) → 1017_1_rec4_InvokeMethod(964_0_rec4_Load(-(x0, 1)), -(x0, 1)) | >(x0, -1)
R rules:
1017_1_rec4_InvokeMethod(984_0_rec4_Return, -1) → 1070_0_rec4_Return
1017_1_rec4_InvokeMethod(1070_0_rec4_Return, x0) → 1070_0_rec4_Return

Performed bisimulation on rules. Used the following equivalence classes: {[984_0_rec4_Return, 1070_0_rec4_Return]=984_0_rec4_Return}


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


P rules:
964_0_REC4_LOAD(x0) → COND_964_0_REC4_LOAD(>(x0, -1), x0)
COND_964_0_REC4_LOAD(TRUE, x0) → 964_0_REC4_LOAD(-(x0, 1))
R rules:
1017_1_rec4_InvokeMethod(984_0_rec4_Return, -1) → 984_0_rec4_Return
1017_1_rec4_InvokeMethod(984_0_rec4_Return, x0) → 984_0_rec4_Return

(7) Obligation:

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


The following domains are used:

Integer


The ITRS R consists of the following rules:
1017_1_rec4_InvokeMethod(984_0_rec4_Return, -1) → 984_0_rec4_Return
1017_1_rec4_InvokeMethod(984_0_rec4_Return, x0) → 984_0_rec4_Return

The integer pair graph contains the following rules and edges:
(0): 964_0_REC4_LOAD(x0[0]) → COND_964_0_REC4_LOAD(x0[0] > -1, x0[0])
(1): COND_964_0_REC4_LOAD(TRUE, x0[1]) → 964_0_REC4_LOAD(x0[1] - 1)

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


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



The set Q consists of the following terms:
1017_1_rec4_InvokeMethod(984_0_rec4_Return, x0)

(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@46ef0a4f 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 964_0_REC4_LOAD(x0) → COND_964_0_REC4_LOAD(>(x0, -1), x0) the following chains were created:
  • We consider the chain 964_0_REC4_LOAD(x0[0]) → COND_964_0_REC4_LOAD(>(x0[0], -1), x0[0]), COND_964_0_REC4_LOAD(TRUE, x0[1]) → 964_0_REC4_LOAD(-(x0[1], 1)) which results in the following constraint:

    (1)    (>(x0[0], -1)=TRUEx0[0]=x0[1]964_0_REC4_LOAD(x0[0])≥NonInfC∧964_0_REC4_LOAD(x0[0])≥COND_964_0_REC4_LOAD(>(x0[0], -1), x0[0])∧(UIncreasing(COND_964_0_REC4_LOAD(>(x0[0], -1), x0[0])), ≥))



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

    (2)    (>(x0[0], -1)=TRUE964_0_REC4_LOAD(x0[0])≥NonInfC∧964_0_REC4_LOAD(x0[0])≥COND_964_0_REC4_LOAD(>(x0[0], -1), x0[0])∧(UIncreasing(COND_964_0_REC4_LOAD(>(x0[0], -1), x0[0])), ≥))



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

    (3)    (x0[0] ≥ 0 ⇒ (UIncreasing(COND_964_0_REC4_LOAD(>(x0[0], -1), x0[0])), ≥)∧[(-1)Bound*bni_10] + [(2)bni_10]x0[0] ≥ 0∧[(-1)bso_11] ≥ 0)



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

    (4)    (x0[0] ≥ 0 ⇒ (UIncreasing(COND_964_0_REC4_LOAD(>(x0[0], -1), x0[0])), ≥)∧[(-1)Bound*bni_10] + [(2)bni_10]x0[0] ≥ 0∧[(-1)bso_11] ≥ 0)



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

    (5)    (x0[0] ≥ 0 ⇒ (UIncreasing(COND_964_0_REC4_LOAD(>(x0[0], -1), x0[0])), ≥)∧[(-1)Bound*bni_10] + [(2)bni_10]x0[0] ≥ 0∧[(-1)bso_11] ≥ 0)







For Pair COND_964_0_REC4_LOAD(TRUE, x0) → 964_0_REC4_LOAD(-(x0, 1)) the following chains were created:
  • We consider the chain COND_964_0_REC4_LOAD(TRUE, x0[1]) → 964_0_REC4_LOAD(-(x0[1], 1)) which results in the following constraint:

    (6)    (COND_964_0_REC4_LOAD(TRUE, x0[1])≥NonInfC∧COND_964_0_REC4_LOAD(TRUE, x0[1])≥964_0_REC4_LOAD(-(x0[1], 1))∧(UIncreasing(964_0_REC4_LOAD(-(x0[1], 1))), ≥))



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

    (7)    ((UIncreasing(964_0_REC4_LOAD(-(x0[1], 1))), ≥)∧[bni_12] = 0∧[2 + (-1)bso_13] ≥ 0)



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

    (8)    ((UIncreasing(964_0_REC4_LOAD(-(x0[1], 1))), ≥)∧[bni_12] = 0∧[2 + (-1)bso_13] ≥ 0)



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

    (9)    ((UIncreasing(964_0_REC4_LOAD(-(x0[1], 1))), ≥)∧[bni_12] = 0∧[2 + (-1)bso_13] ≥ 0)



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

    (10)    ((UIncreasing(964_0_REC4_LOAD(-(x0[1], 1))), ≥)∧[bni_12] = 0∧0 = 0∧[2 + (-1)bso_13] ≥ 0)







To summarize, we get the following constraints P for the following pairs.
  • 964_0_REC4_LOAD(x0) → COND_964_0_REC4_LOAD(>(x0, -1), x0)
    • (x0[0] ≥ 0 ⇒ (UIncreasing(COND_964_0_REC4_LOAD(>(x0[0], -1), x0[0])), ≥)∧[(-1)Bound*bni_10] + [(2)bni_10]x0[0] ≥ 0∧[(-1)bso_11] ≥ 0)

  • COND_964_0_REC4_LOAD(TRUE, x0) → 964_0_REC4_LOAD(-(x0, 1))
    • ((UIncreasing(964_0_REC4_LOAD(-(x0[1], 1))), ≥)∧[bni_12] = 0∧0 = 0∧[2 + (-1)bso_13] ≥ 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(1017_1_rec4_InvokeMethod(x1, x2)) = [-1]   
POL(984_0_rec4_Return) = [-1]   
POL(-1) = [-1]   
POL(964_0_REC4_LOAD(x1)) = [2]x1   
POL(COND_964_0_REC4_LOAD(x1, x2)) = [2]x2   
POL(>(x1, x2)) = [-1]   
POL(-(x1, x2)) = x1 + [-1]x2   
POL(1) = [1]   

The following pairs are in P>:

COND_964_0_REC4_LOAD(TRUE, x0[1]) → 964_0_REC4_LOAD(-(x0[1], 1))

The following pairs are in Pbound:

964_0_REC4_LOAD(x0[0]) → COND_964_0_REC4_LOAD(>(x0[0], -1), x0[0])

The following pairs are in P:

964_0_REC4_LOAD(x0[0]) → COND_964_0_REC4_LOAD(>(x0[0], -1), 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


The ITRS R consists of the following rules:
1017_1_rec4_InvokeMethod(984_0_rec4_Return, -1) → 984_0_rec4_Return
1017_1_rec4_InvokeMethod(984_0_rec4_Return, x0) → 984_0_rec4_Return

The integer pair graph contains the following rules and edges:
(0): 964_0_REC4_LOAD(x0[0]) → COND_964_0_REC4_LOAD(x0[0] > -1, x0[0])


The set Q consists of the following terms:
1017_1_rec4_InvokeMethod(984_0_rec4_Return, x0)

(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


The ITRS R consists of the following rules:
1017_1_rec4_InvokeMethod(984_0_rec4_Return, -1) → 984_0_rec4_Return
1017_1_rec4_InvokeMethod(984_0_rec4_Return, x0) → 984_0_rec4_Return

The integer pair graph contains the following rules and edges:
(1): COND_964_0_REC4_LOAD(TRUE, x0[1]) → 964_0_REC4_LOAD(x0[1] - 1)


The set Q consists of the following terms:
1017_1_rec4_InvokeMethod(984_0_rec4_Return, x0)

(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: Recursions.rec3(IIIII)V
SCC calls the following helper methods: Recursions.rec4(II)V, Recursions.rec3(IIIII)V
Performed SCC analyses: UsedFieldsAnalysis

(17) SCCToIDPv1Proof (SOUND transformation)

Transformed FIGraph SCCs to IDPs. Log:

Generated 34 rules for P and 27 rules for R.


P rules:
1194_0_rec3_Load(EOS(STATIC_1194), i197, i115, i116, i117, i118, i197) → 1198_0_rec3_GT(EOS(STATIC_1198), i197, i115, i116, i117, i118, i197, i115)
1198_0_rec3_GT(EOS(STATIC_1198), i197, i115, i116, i117, i118, i197, i115) → 1202_0_rec3_GT(EOS(STATIC_1202), i197, i115, i116, i117, i118, i197, i115)
1202_0_rec3_GT(EOS(STATIC_1202), i197, i115, i116, i117, i118, i197, i115) → 1208_0_rec3_ConstantStackPush(EOS(STATIC_1208), i197, i115, i116, i117, i118) | <=(i197, i115)
1208_0_rec3_ConstantStackPush(EOS(STATIC_1208), i197, i115, i116, i117, i118) → 1213_0_rec3_Load(EOS(STATIC_1213), i197, i115, i116, i117, i118, 1000)
1213_0_rec3_Load(EOS(STATIC_1213), i197, i115, i116, i117, i118, matching1) → 1218_0_rec3_IntArithmetic(EOS(STATIC_1218), i197, i115, i116, i117, i118, 1000, i116) | =(matching1, 1000)
1218_0_rec3_IntArithmetic(EOS(STATIC_1218), i197, i115, i116, i117, i118, matching1, i116) → 1222_0_rec3_ConstantStackPush(EOS(STATIC_1222), i197, i115, i116, i117, i118, *(1000, i116)) | =(matching1, 1000)
1222_0_rec3_ConstantStackPush(EOS(STATIC_1222), i197, i115, i116, i117, i118, i211) → 1224_0_rec3_Load(EOS(STATIC_1224), i197, i115, i116, i117, i118, i211, 100)
1224_0_rec3_Load(EOS(STATIC_1224), i197, i115, i116, i117, i118, i211, matching1) → 1227_0_rec3_IntArithmetic(EOS(STATIC_1227), i197, i115, i116, i117, i118, i211, 100, i117) | =(matching1, 100)
1227_0_rec3_IntArithmetic(EOS(STATIC_1227), i197, i115, i116, i117, i118, i211, matching1, i117) → 1229_0_rec3_IntArithmetic(EOS(STATIC_1229), i197, i115, i116, i117, i118, i211, *(100, i117)) | =(matching1, 100)
1229_0_rec3_IntArithmetic(EOS(STATIC_1229), i197, i115, i116, i117, i118, i211, i212) → 1231_0_rec3_ConstantStackPush(EOS(STATIC_1231), i197, i115, i116, i117, i118, +(i211, i212))
1231_0_rec3_ConstantStackPush(EOS(STATIC_1231), i197, i115, i116, i117, i118, i213) → 1235_0_rec3_Load(EOS(STATIC_1235), i197, i115, i116, i117, i118, i213, 10)
1235_0_rec3_Load(EOS(STATIC_1235), i197, i115, i116, i117, i118, i213, matching1) → 1237_0_rec3_IntArithmetic(EOS(STATIC_1237), i197, i115, i116, i117, i118, i213, 10, i118) | =(matching1, 10)
1237_0_rec3_IntArithmetic(EOS(STATIC_1237), i197, i115, i116, i117, i118, i213, matching1, i118) → 1240_0_rec3_IntArithmetic(EOS(STATIC_1240), i197, i115, i116, i117, i118, i213, *(10, i118)) | =(matching1, 10)
1240_0_rec3_IntArithmetic(EOS(STATIC_1240), i197, i115, i116, i117, i118, i213, i219) → 1243_0_rec3_Load(EOS(STATIC_1243), i197, i115, i116, i117, i118, +(i213, i219))
1243_0_rec3_Load(EOS(STATIC_1243), i197, i115, i116, i117, i118, i222) → 1247_0_rec3_IntArithmetic(EOS(STATIC_1247), i197, i115, i116, i117, i118, i222, i197)
1247_0_rec3_IntArithmetic(EOS(STATIC_1247), i197, i115, i116, i117, i118, i222, i197) → 1251_0_rec3_ConstantStackPush(EOS(STATIC_1251), i197, i115, i116, i117, i118, +(i222, i197)) | >=(i197, 0)
1251_0_rec3_ConstantStackPush(EOS(STATIC_1251), i197, i115, i116, i117, i118, i223) → 1254_0_rec3_InvokeMethod(EOS(STATIC_1254), i197, i115, i116, i117, i118, i223, 0)
1254_0_rec3_InvokeMethod(EOS(STATIC_1254), i197, i115, i116, i117, i118, i223, matching1) → 1257_1_rec3_InvokeMethod(1257_0_rec4_Load(EOS(STATIC_1257), i223, 0), i197, i115, i116, i117, i118, i223, 0) | =(matching1, 0)
1257_1_rec3_InvokeMethod(984_0_rec4_Return(EOS(STATIC_984)), i197, i115, i116, i117, i118, i226, matching1) → 1268_0_rec4_Return(EOS(STATIC_1268), i197, i115, i116, i117, i118, i226, 0) | =(matching1, 0)
1257_1_rec3_InvokeMethod(1070_0_rec4_Return(EOS(STATIC_1070)), i197, i115, i116, i117, i118, i227, matching1) → 1271_0_rec4_Return(EOS(STATIC_1271), i197, i115, i116, i117, i118, i227, 0) | =(matching1, 0)
1268_0_rec4_Return(EOS(STATIC_1268), i197, i115, i116, i117, i118, i226, matching1) → 1272_0_rec4_Return(EOS(STATIC_1272), i197, i115, i116, i117, i118, i226, 0) | =(matching1, 0)
1272_0_rec4_Return(EOS(STATIC_1272), i197, i115, i116, i117, i118, i229, matching1) → 1274_0_rec3_Load(EOS(STATIC_1274), i197, i115, i116, i117, i118) | =(matching1, 0)
1274_0_rec3_Load(EOS(STATIC_1274), i197, i115, i116, i117, i118) → 1277_0_rec3_ConstantStackPush(EOS(STATIC_1277), i115, i116, i117, i118, i197)
1277_0_rec3_ConstantStackPush(EOS(STATIC_1277), i115, i116, i117, i118, i197) → 1279_0_rec3_IntArithmetic(EOS(STATIC_1279), i115, i116, i117, i118, i197, 1)
1279_0_rec3_IntArithmetic(EOS(STATIC_1279), i115, i116, i117, i118, i197, matching1) → 1282_0_rec3_Load(EOS(STATIC_1282), i115, i116, i117, i118, +(i197, 1)) | &&(>=(i197, 0), =(matching1, 1))
1282_0_rec3_Load(EOS(STATIC_1282), i115, i116, i117, i118, i232) → 1284_0_rec3_Load(EOS(STATIC_1284), i116, i117, i118, i232, i115)
1284_0_rec3_Load(EOS(STATIC_1284), i116, i117, i118, i232, i115) → 1287_0_rec3_Load(EOS(STATIC_1287), i117, i118, i232, i115, i116)
1287_0_rec3_Load(EOS(STATIC_1287), i117, i118, i232, i115, i116) → 1290_0_rec3_Load(EOS(STATIC_1290), i118, i232, i115, i116, i117)
1290_0_rec3_Load(EOS(STATIC_1290), i118, i232, i115, i116, i117) → 1292_0_rec3_InvokeMethod(EOS(STATIC_1292), i232, i115, i116, i117, i118)
1292_0_rec3_InvokeMethod(EOS(STATIC_1292), i232, i115, i116, i117, i118) → 1295_1_rec3_InvokeMethod(1295_0_rec3_Load(EOS(STATIC_1295), i232, i115, i116, i117, i118), i232, i115, i116, i117, i118)
1295_0_rec3_Load(EOS(STATIC_1295), i232, i115, i116, i117, i118) → 1298_0_rec3_Load(EOS(STATIC_1298), i232, i115, i116, i117, i118)
1298_0_rec3_Load(EOS(STATIC_1298), i232, i115, i116, i117, i118) → 1190_0_rec3_Load(EOS(STATIC_1190), i232, i115, i116, i117, i118)
1190_0_rec3_Load(EOS(STATIC_1190), i197, i115, i116, i117, i118) → 1194_0_rec3_Load(EOS(STATIC_1194), i197, i115, i116, i117, i118, i197)
1271_0_rec4_Return(EOS(STATIC_1271), i197, i115, i116, i117, i118, i227, matching1) → 1272_0_rec4_Return(EOS(STATIC_1272), i197, i115, i116, i117, i118, i227, 0) | =(matching1, 0)
R rules:
1257_0_rec4_Load(EOS(STATIC_1257), i223, matching1) → 1260_0_rec4_Load(EOS(STATIC_1260), i223, 0) | =(matching1, 0)
1260_0_rec4_Load(EOS(STATIC_1260), i223, matching1) → 958_0_rec4_Load(EOS(STATIC_958), i223, 0) | =(matching1, 0)
1023_0_rec4_Load(EOS(STATIC_1023), matching1) → 958_0_rec4_Load(EOS(STATIC_958), i119, 0) | =(matching1, 0)
958_0_rec4_Load(EOS(STATIC_958), i89, matching1) → 964_0_rec4_Load(EOS(STATIC_964), i89, 0, i89) | =(matching1, 0)
964_0_rec4_Load(EOS(STATIC_964), i89, matching1, i89) → 971_0_rec4_LT(EOS(STATIC_971), i89, 0, i89, 0) | =(matching1, 0)
971_0_rec4_LT(EOS(STATIC_971), i99, matching1, i99, matching2) → 976_0_rec4_LT(EOS(STATIC_976), i99, 0, i99, 0) | &&(=(matching1, 0), =(matching2, 0))
971_0_rec4_LT(EOS(STATIC_971), i100, matching1, i100, matching2) → 977_0_rec4_LT(EOS(STATIC_977), i100, 0, i100, 0) | &&(=(matching1, 0), =(matching2, 0))
976_0_rec4_LT(EOS(STATIC_976), i99, matching1, i99, matching2) → 984_0_rec4_Return(EOS(STATIC_984)) | &&(&&(<(i99, 0), =(matching1, 0)), =(matching2, 0))
977_0_rec4_LT(EOS(STATIC_977), i100, matching1, i100, matching2) → 985_0_rec4_Load(EOS(STATIC_985), i100, 0) | &&(&&(>=(i100, 0), =(matching1, 0)), =(matching2, 0))
985_0_rec4_Load(EOS(STATIC_985), i100, matching1) → 996_0_rec4_ConstantStackPush(EOS(STATIC_996), 0, i100) | =(matching1, 0)
996_0_rec4_ConstantStackPush(EOS(STATIC_996), matching1, i100) → 1001_0_rec4_IntArithmetic(EOS(STATIC_1001), 0, i100) | =(matching1, 0)
1001_0_rec4_IntArithmetic(EOS(STATIC_1001), matching1, i100) → 1008_0_rec4_Load(EOS(STATIC_1008), 0) | &&(>=(i100, 0), =(matching1, 0))
1008_0_rec4_Load(EOS(STATIC_1008), matching1) → 1012_0_rec4_InvokeMethod(EOS(STATIC_1012), 0) | =(matching1, 0)
1012_0_rec4_InvokeMethod(EOS(STATIC_1012), matching1) → 1017_1_rec4_InvokeMethod(1017_0_rec4_Load(EOS(STATIC_1017), 0), 0) | =(matching1, 0)
1017_0_rec4_Load(EOS(STATIC_1017), matching1) → 1023_0_rec4_Load(EOS(STATIC_1023), 0) | =(matching1, 0)
1017_1_rec4_InvokeMethod(984_0_rec4_Return(EOS(STATIC_984)), matching1) → 1039_0_rec4_Return(EOS(STATIC_1039), 0) | =(matching1, 0)
1017_1_rec4_InvokeMethod(1070_0_rec4_Return(EOS(STATIC_1070)), matching1) → 1090_0_rec4_Return(EOS(STATIC_1090), 0) | =(matching1, 0)
1039_0_rec4_Return(EOS(STATIC_1039), matching1) → 1063_0_rec4_Return(EOS(STATIC_1063), 0) | =(matching1, 0)
1063_0_rec4_Return(EOS(STATIC_1063), matching1) → 1070_0_rec4_Return(EOS(STATIC_1070)) | =(matching1, 0)
1090_0_rec4_Return(EOS(STATIC_1090), matching1) → 1063_0_rec4_Return(EOS(STATIC_1063), 0) | =(matching1, 0)
1198_0_rec3_GT(EOS(STATIC_1198), i197, i115, i116, i117, i118, i197, i115) → 1201_0_rec3_GT(EOS(STATIC_1201), i197, i115, i116, i117, i118, i197, i115)
1201_0_rec3_GT(EOS(STATIC_1201), i197, i115, i116, i117, i118, i197, i115) → 1207_0_rec3_Return(EOS(STATIC_1207)) | >(i197, i115)
1207_0_rec3_Return(EOS(STATIC_1207)) → 1308_0_rec3_Return(EOS(STATIC_1308))
1295_1_rec3_InvokeMethod(1207_0_rec3_Return(EOS(STATIC_1207)), i249, i250, i251, i252, i253) → 1305_0_rec3_Return(EOS(STATIC_1305), i249, i250, i251, i252, i253)
1295_1_rec3_InvokeMethod(1308_0_rec3_Return(EOS(STATIC_1308)), i263, i264, i265, i266, i267) → 1319_0_rec3_Return(EOS(STATIC_1319), i263, i264, i265, i266, i267)
1305_0_rec3_Return(EOS(STATIC_1305), i249, i250, i251, i252, i253) → 1308_0_rec3_Return(EOS(STATIC_1308))
1319_0_rec3_Return(EOS(STATIC_1319), i263, i264, i265, i266, i267) → 1305_0_rec3_Return(EOS(STATIC_1305), i263, i264, i265, i266, i267)

Combined rules. Obtained 2 conditional rules for P and 7 conditional rules for R.


P rules:
1257_1_rec3_InvokeMethod(984_0_rec4_Return(EOS(STATIC_984)), x0, x1, x2, x3, x4, x5, 0) → 1295_1_rec3_InvokeMethod(1257_1_rec3_InvokeMethod(1257_0_rec4_Load(EOS(STATIC_1257), +(+(+(*(1000, x2), *(100, x3)), *(10, x4)), +(x0, 1)), 0), +(x0, 1), x1, x2, x3, x4, +(+(+(*(1000, x2), *(100, x3)), *(10, x4)), +(x0, 1)), 0), +(x0, 1), x1, x2, x3, x4) | &&(>=(x1, +(x0, 1)), >(+(x0, 1), 0))
1257_1_rec3_InvokeMethod(1070_0_rec4_Return(EOS(STATIC_1070)), x0, x1, x2, x3, x4, x5, 0) → 1295_1_rec3_InvokeMethod(1257_1_rec3_InvokeMethod(1257_0_rec4_Load(EOS(STATIC_1257), +(+(+(*(1000, x2), *(100, x3)), *(10, x4)), +(x0, 1)), 0), +(x0, 1), x1, x2, x3, x4, +(+(+(*(1000, x2), *(100, x3)), *(10, x4)), +(x0, 1)), 0), +(x0, 1), x1, x2, x3, x4) | &&(>=(x1, +(x0, 1)), >(+(x0, 1), 0))
R rules:
1257_0_rec4_Load(EOS(STATIC_1257), x0, 0) → 971_0_rec4_LT(EOS(STATIC_971), x0, 0, x0, 0)
971_0_rec4_LT(EOS(STATIC_971), x0, 0, x0, 0) → 984_0_rec4_Return(EOS(STATIC_984)) | <(x0, 0)
971_0_rec4_LT(EOS(STATIC_971), x0, 0, x0, 0) → 1017_1_rec4_InvokeMethod(971_0_rec4_LT(EOS(STATIC_971), x3, 0, x3, 0), 0) | >(+(x0, 1), 0)
1017_1_rec4_InvokeMethod(984_0_rec4_Return(EOS(STATIC_984)), 0) → 1070_0_rec4_Return(EOS(STATIC_1070))
1017_1_rec4_InvokeMethod(1070_0_rec4_Return(EOS(STATIC_1070)), 0) → 1070_0_rec4_Return(EOS(STATIC_1070))
1295_1_rec3_InvokeMethod(1207_0_rec3_Return(EOS(STATIC_1207)), x0, x1, x2, x3, x4) → 1308_0_rec3_Return(EOS(STATIC_1308))
1295_1_rec3_InvokeMethod(1308_0_rec3_Return(EOS(STATIC_1308)), x0, x1, x2, x3, x4) → 1308_0_rec3_Return(EOS(STATIC_1308))

Filtered ground terms:



1257_0_rec4_Load(x1, x2, x3) → 1257_0_rec4_Load(x2)
1257_1_rec3_InvokeMethod(x1, x2, x3, x4, x5, x6, x7, x8) → 1257_1_rec3_InvokeMethod(x1, x2, x3, x4, x5, x6, x7)
Cond_1257_1_rec3_InvokeMethod1(x1, x2, x3, x4, x5, x6, x7, x8, x9) → Cond_1257_1_rec3_InvokeMethod1(x1, x3, x4, x5, x6, x7, x8)
1070_0_rec4_Return(x1) → 1070_0_rec4_Return
Cond_1257_1_rec3_InvokeMethod(x1, x2, x3, x4, x5, x6, x7, x8, x9) → Cond_1257_1_rec3_InvokeMethod(x1, x3, x4, x5, x6, x7, x8)
984_0_rec4_Return(x1) → 984_0_rec4_Return
1308_0_rec3_Return(x1) → 1308_0_rec3_Return
1207_0_rec3_Return(x1) → 1207_0_rec3_Return
1017_1_rec4_InvokeMethod(x1, x2) → 1017_1_rec4_InvokeMethod(x1)
971_0_rec4_LT(x1, x2, x3, x4, x5) → 971_0_rec4_LT(x2, x4)
Cond_971_0_rec4_LT1(x1, x2, x3, x4, x5, x6, x7) → Cond_971_0_rec4_LT1(x1, x3, x5, x7)
Cond_971_0_rec4_LT(x1, x2, x3, x4, x5, x6) → Cond_971_0_rec4_LT(x1, x3, x5)

Filtered duplicate args:



971_0_rec4_LT(x1, x2) → 971_0_rec4_LT(x2)
Cond_971_0_rec4_LT(x1, x2, x3) → Cond_971_0_rec4_LT(x1, x3)
Cond_971_0_rec4_LT1(x1, x2, x3, x4) → Cond_971_0_rec4_LT1(x1, x3, x4)

Filtered unneeded arguments:



1257_1_rec3_InvokeMethod(x1, x2, x3, x4, x5, x6, x7) → 1257_1_rec3_InvokeMethod(x1, x2, x3, x4, x5, x6)
Cond_1257_1_rec3_InvokeMethod(x1, x2, x3, x4, x5, x6, x7) → Cond_1257_1_rec3_InvokeMethod(x1, x2, x3, x4, x5, x6)
1295_1_rec3_InvokeMethod(x1, x2, x3, x4, x5, x6) → 1295_1_rec3_InvokeMethod(x1)
Cond_1257_1_rec3_InvokeMethod1(x1, x2, x3, x4, x5, x6, x7) → Cond_1257_1_rec3_InvokeMethod1(x1, x2, x3, x4, x5, x6)
Cond_971_0_rec4_LT(x1, x2) → Cond_971_0_rec4_LT(x1)
Cond_971_0_rec4_LT1(x1, x2, x3) → Cond_971_0_rec4_LT1(x1, x3)

Combined rules. Obtained 2 conditional rules for P and 7 conditional rules for R.


P rules:
1257_1_rec3_InvokeMethod(984_0_rec4_Return, x0, x1, x2, x3, x4) → 1295_1_rec3_InvokeMethod(1257_1_rec3_InvokeMethod(1257_0_rec4_Load(+(+(+(*(1000, x2), *(100, x3)), *(10, x4)), +(x0, 1))), +(x0, 1), x1, x2, x3, x4)) | &&(>=(x1, +(x0, 1)), >(x0, -1))
1257_1_rec3_InvokeMethod(1070_0_rec4_Return, x0, x1, x2, x3, x4) → 1295_1_rec3_InvokeMethod(1257_1_rec3_InvokeMethod(1257_0_rec4_Load(+(+(+(*(1000, x2), *(100, x3)), *(10, x4)), +(x0, 1))), +(x0, 1), x1, x2, x3, x4)) | &&(>=(x1, +(x0, 1)), >(x0, -1))
R rules:
1257_0_rec4_Load(x0) → 971_0_rec4_LT(x0)
971_0_rec4_LT(x0) → 984_0_rec4_Return | <(x0, 0)
971_0_rec4_LT(x0) → 1017_1_rec4_InvokeMethod(971_0_rec4_LT(x3)) | >(x0, -1)
1017_1_rec4_InvokeMethod(984_0_rec4_Return) → 1070_0_rec4_Return
1017_1_rec4_InvokeMethod(1070_0_rec4_Return) → 1070_0_rec4_Return
1295_1_rec3_InvokeMethod(1207_0_rec3_Return) → 1308_0_rec3_Return
1295_1_rec3_InvokeMethod(1308_0_rec3_Return) → 1308_0_rec3_Return

Performed bisimulation on rules. Used the following equivalence classes: {[984_0_rec4_Return, 1070_0_rec4_Return, 1207_0_rec3_Return, 1308_0_rec3_Return]=984_0_rec4_Return, [Cond_1257_1_rec3_InvokeMethod_7, Cond_1257_1_rec3_InvokeMethod1_7]=Cond_1257_1_rec3_InvokeMethod_7}


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


P rules:
1257_1_REC3_INVOKEMETHOD(984_0_rec4_Return, x0, x1, x2, x3, x4) → COND_1257_1_REC3_INVOKEMETHOD(&&(>=(x1, +(x0, 1)), >(x0, -1)), 984_0_rec4_Return, x0, x1, x2, x3, x4)
COND_1257_1_REC3_INVOKEMETHOD(TRUE, 984_0_rec4_Return, x0, x1, x2, x3, x4) → 1257_1_REC3_INVOKEMETHOD(1257_0_rec4_Load(+(+(+(*(1000, x2), *(100, x3)), *(10, x4)), +(x0, 1))), +(x0, 1), x1, x2, x3, x4)
R rules:
1257_0_rec4_Load(x0) → 971_0_rec4_LT(x0)
971_0_rec4_LT(x0) → Cond_971_0_rec4_LT(<(x0, 0), x0)
Cond_971_0_rec4_LT(TRUE, x0) → 984_0_rec4_Return
971_0_rec4_LT(x0) → Cond_971_0_rec4_LT1(>(x0, -1), x0, x3)
Cond_971_0_rec4_LT1(TRUE, x0, x3) → 1017_1_rec4_InvokeMethod(971_0_rec4_LT(x3))
1017_1_rec4_InvokeMethod(984_0_rec4_Return) → 984_0_rec4_Return
1295_1_rec3_InvokeMethod(984_0_rec4_Return) → 984_0_rec4_Return

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


The ITRS R consists of the following rules:
1257_0_rec4_Load(x0) → 971_0_rec4_LT(x0)
971_0_rec4_LT(x0) → Cond_971_0_rec4_LT(x0 < 0, x0)
Cond_971_0_rec4_LT(TRUE, x0) → 984_0_rec4_Return
971_0_rec4_LT(x0) → Cond_971_0_rec4_LT1(x0 > -1, x0, x3)
Cond_971_0_rec4_LT1(TRUE, x0, x3) → 1017_1_rec4_InvokeMethod(971_0_rec4_LT(x3))
1017_1_rec4_InvokeMethod(984_0_rec4_Return) → 984_0_rec4_Return
1295_1_rec3_InvokeMethod(984_0_rec4_Return) → 984_0_rec4_Return

The integer pair graph contains the following rules and edges:
(0): 1257_1_REC3_INVOKEMETHOD(984_0_rec4_Return, x0[0], x1[0], x2[0], x3[0], x4[0]) → COND_1257_1_REC3_INVOKEMETHOD(x1[0] >= x0[0] + 1 && x0[0] > -1, 984_0_rec4_Return, x0[0], x1[0], x2[0], x3[0], x4[0])
(1): COND_1257_1_REC3_INVOKEMETHOD(TRUE, 984_0_rec4_Return, x0[1], x1[1], x2[1], x3[1], x4[1]) → 1257_1_REC3_INVOKEMETHOD(1257_0_rec4_Load(1000 * x2[1] + 100 * x3[1] + 10 * x4[1] + x0[1] + 1), x0[1] + 1, x1[1], x2[1], x3[1], x4[1])

(0) -> (1), if (x1[0] >= x0[0] + 1 && x0[0] > -1x0[0]* x0[1]x1[0]* x1[1]x2[0]* x2[1]x3[0]* x3[1]x4[0]* x4[1])


(1) -> (0), if (1257_0_rec4_Load(1000 * x2[1] + 100 * x3[1] + 10 * x4[1] + x0[1] + 1) →* 984_0_rec4_Returnx0[1] + 1* x0[0]x1[1]* x1[0]x2[1]* x2[0]x3[1]* x3[0]x4[1]* x4[0])



The set Q consists of the following terms:
1257_0_rec4_Load(x0)
971_0_rec4_LT(x0)
Cond_971_0_rec4_LT(TRUE, x0)
Cond_971_0_rec4_LT1(TRUE, x0, x1)
1017_1_rec4_InvokeMethod(984_0_rec4_Return)
1295_1_rec3_InvokeMethod(984_0_rec4_Return)

(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@46ef0a4f 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 1257_1_REC3_INVOKEMETHOD(984_0_rec4_Return, x0, x1, x2, x3, x4) → COND_1257_1_REC3_INVOKEMETHOD(&&(>=(x1, +(x0, 1)), >(x0, -1)), 984_0_rec4_Return, x0, x1, x2, x3, x4) the following chains were created:
  • We consider the chain 1257_1_REC3_INVOKEMETHOD(984_0_rec4_Return, x0[0], x1[0], x2[0], x3[0], x4[0]) → COND_1257_1_REC3_INVOKEMETHOD(&&(>=(x1[0], +(x0[0], 1)), >(x0[0], -1)), 984_0_rec4_Return, x0[0], x1[0], x2[0], x3[0], x4[0]), COND_1257_1_REC3_INVOKEMETHOD(TRUE, 984_0_rec4_Return, x0[1], x1[1], x2[1], x3[1], x4[1]) → 1257_1_REC3_INVOKEMETHOD(1257_0_rec4_Load(+(+(+(*(1000, x2[1]), *(100, x3[1])), *(10, x4[1])), +(x0[1], 1))), +(x0[1], 1), x1[1], x2[1], x3[1], x4[1]) which results in the following constraint:

    (1)    (&&(>=(x1[0], +(x0[0], 1)), >(x0[0], -1))=TRUEx0[0]=x0[1]x1[0]=x1[1]x2[0]=x2[1]x3[0]=x3[1]x4[0]=x4[1]1257_1_REC3_INVOKEMETHOD(984_0_rec4_Return, x0[0], x1[0], x2[0], x3[0], x4[0])≥NonInfC∧1257_1_REC3_INVOKEMETHOD(984_0_rec4_Return, x0[0], x1[0], x2[0], x3[0], x4[0])≥COND_1257_1_REC3_INVOKEMETHOD(&&(>=(x1[0], +(x0[0], 1)), >(x0[0], -1)), 984_0_rec4_Return, x0[0], x1[0], x2[0], x3[0], x4[0])∧(UIncreasing(COND_1257_1_REC3_INVOKEMETHOD(&&(>=(x1[0], +(x0[0], 1)), >(x0[0], -1)), 984_0_rec4_Return, x0[0], x1[0], x2[0], x3[0], x4[0])), ≥))



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

    (2)    (>=(x1[0], +(x0[0], 1))=TRUE>(x0[0], -1)=TRUE1257_1_REC3_INVOKEMETHOD(984_0_rec4_Return, x0[0], x1[0], x2[0], x3[0], x4[0])≥NonInfC∧1257_1_REC3_INVOKEMETHOD(984_0_rec4_Return, x0[0], x1[0], x2[0], x3[0], x4[0])≥COND_1257_1_REC3_INVOKEMETHOD(&&(>=(x1[0], +(x0[0], 1)), >(x0[0], -1)), 984_0_rec4_Return, x0[0], x1[0], x2[0], x3[0], x4[0])∧(UIncreasing(COND_1257_1_REC3_INVOKEMETHOD(&&(>=(x1[0], +(x0[0], 1)), >(x0[0], -1)), 984_0_rec4_Return, x0[0], x1[0], x2[0], x3[0], x4[0])), ≥))



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

    (3)    (x1[0] + [-1] + [-1]x0[0] ≥ 0∧x0[0] ≥ 0 ⇒ (UIncreasing(COND_1257_1_REC3_INVOKEMETHOD(&&(>=(x1[0], +(x0[0], 1)), >(x0[0], -1)), 984_0_rec4_Return, x0[0], x1[0], x2[0], x3[0], x4[0])), ≥)∧[(-1)Bound*bni_26] + [(2)bni_26]x1[0] + [(-1)bni_26]x0[0] ≥ 0∧[1 + (-1)bso_27] ≥ 0)



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

    (4)    (x1[0] + [-1] + [-1]x0[0] ≥ 0∧x0[0] ≥ 0 ⇒ (UIncreasing(COND_1257_1_REC3_INVOKEMETHOD(&&(>=(x1[0], +(x0[0], 1)), >(x0[0], -1)), 984_0_rec4_Return, x0[0], x1[0], x2[0], x3[0], x4[0])), ≥)∧[(-1)Bound*bni_26] + [(2)bni_26]x1[0] + [(-1)bni_26]x0[0] ≥ 0∧[1 + (-1)bso_27] ≥ 0)



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

    (5)    (x1[0] + [-1] + [-1]x0[0] ≥ 0∧x0[0] ≥ 0 ⇒ (UIncreasing(COND_1257_1_REC3_INVOKEMETHOD(&&(>=(x1[0], +(x0[0], 1)), >(x0[0], -1)), 984_0_rec4_Return, x0[0], x1[0], x2[0], x3[0], x4[0])), ≥)∧[(-1)Bound*bni_26] + [(2)bni_26]x1[0] + [(-1)bni_26]x0[0] ≥ 0∧[1 + (-1)bso_27] ≥ 0)



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

    (6)    (x1[0] + [-1] + [-1]x0[0] ≥ 0∧x0[0] ≥ 0 ⇒ (UIncreasing(COND_1257_1_REC3_INVOKEMETHOD(&&(>=(x1[0], +(x0[0], 1)), >(x0[0], -1)), 984_0_rec4_Return, x0[0], x1[0], x2[0], x3[0], x4[0])), ≥)∧0 = 0∧0 = 0∧0 = 0∧[(-1)Bound*bni_26] + [(2)bni_26]x1[0] + [(-1)bni_26]x0[0] ≥ 0∧0 = 0∧0 = 0∧0 = 0∧[1 + (-1)bso_27] ≥ 0)



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

    (7)    (x1[0] ≥ 0∧x0[0] ≥ 0 ⇒ (UIncreasing(COND_1257_1_REC3_INVOKEMETHOD(&&(>=(x1[0], +(x0[0], 1)), >(x0[0], -1)), 984_0_rec4_Return, x0[0], x1[0], x2[0], x3[0], x4[0])), ≥)∧0 = 0∧0 = 0∧0 = 0∧[(-1)Bound*bni_26 + (2)bni_26] + [bni_26]x0[0] + [(2)bni_26]x1[0] ≥ 0∧0 = 0∧0 = 0∧0 = 0∧[1 + (-1)bso_27] ≥ 0)







For Pair COND_1257_1_REC3_INVOKEMETHOD(TRUE, 984_0_rec4_Return, x0, x1, x2, x3, x4) → 1257_1_REC3_INVOKEMETHOD(1257_0_rec4_Load(+(+(+(*(1000, x2), *(100, x3)), *(10, x4)), +(x0, 1))), +(x0, 1), x1, x2, x3, x4) the following chains were created:
  • We consider the chain COND_1257_1_REC3_INVOKEMETHOD(TRUE, 984_0_rec4_Return, x0[1], x1[1], x2[1], x3[1], x4[1]) → 1257_1_REC3_INVOKEMETHOD(1257_0_rec4_Load(+(+(+(*(1000, x2[1]), *(100, x3[1])), *(10, x4[1])), +(x0[1], 1))), +(x0[1], 1), x1[1], x2[1], x3[1], x4[1]) which results in the following constraint:

    (8)    (COND_1257_1_REC3_INVOKEMETHOD(TRUE, 984_0_rec4_Return, x0[1], x1[1], x2[1], x3[1], x4[1])≥NonInfC∧COND_1257_1_REC3_INVOKEMETHOD(TRUE, 984_0_rec4_Return, x0[1], x1[1], x2[1], x3[1], x4[1])≥1257_1_REC3_INVOKEMETHOD(1257_0_rec4_Load(+(+(+(*(1000, x2[1]), *(100, x3[1])), *(10, x4[1])), +(x0[1], 1))), +(x0[1], 1), x1[1], x2[1], x3[1], x4[1])∧(UIncreasing(1257_1_REC3_INVOKEMETHOD(1257_0_rec4_Load(+(+(+(*(1000, x2[1]), *(100, x3[1])), *(10, x4[1])), +(x0[1], 1))), +(x0[1], 1), x1[1], x2[1], x3[1], x4[1])), ≥))



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

    (9)    ((UIncreasing(1257_1_REC3_INVOKEMETHOD(1257_0_rec4_Load(+(+(+(*(1000, x2[1]), *(100, x3[1])), *(10, x4[1])), +(x0[1], 1))), +(x0[1], 1), x1[1], x2[1], x3[1], x4[1])), ≥)∧[bni_28] = 0∧[(-1)bso_29] ≥ 0)



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

    (10)    ((UIncreasing(1257_1_REC3_INVOKEMETHOD(1257_0_rec4_Load(+(+(+(*(1000, x2[1]), *(100, x3[1])), *(10, x4[1])), +(x0[1], 1))), +(x0[1], 1), x1[1], x2[1], x3[1], x4[1])), ≥)∧[bni_28] = 0∧[(-1)bso_29] ≥ 0)



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

    (11)    ((UIncreasing(1257_1_REC3_INVOKEMETHOD(1257_0_rec4_Load(+(+(+(*(1000, x2[1]), *(100, x3[1])), *(10, x4[1])), +(x0[1], 1))), +(x0[1], 1), x1[1], x2[1], x3[1], x4[1])), ≥)∧[bni_28] = 0∧[(-1)bso_29] ≥ 0)



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

    (12)    ((UIncreasing(1257_1_REC3_INVOKEMETHOD(1257_0_rec4_Load(+(+(+(*(1000, x2[1]), *(100, x3[1])), *(10, x4[1])), +(x0[1], 1))), +(x0[1], 1), x1[1], x2[1], x3[1], x4[1])), ≥)∧[bni_28] = 0∧0 = 0∧0 = 0∧0 = 0∧0 = 0∧0 = 0∧[(-1)bso_29] ≥ 0)







To summarize, we get the following constraints P for the following pairs.
  • 1257_1_REC3_INVOKEMETHOD(984_0_rec4_Return, x0, x1, x2, x3, x4) → COND_1257_1_REC3_INVOKEMETHOD(&&(>=(x1, +(x0, 1)), >(x0, -1)), 984_0_rec4_Return, x0, x1, x2, x3, x4)
    • (x1[0] ≥ 0∧x0[0] ≥ 0 ⇒ (UIncreasing(COND_1257_1_REC3_INVOKEMETHOD(&&(>=(x1[0], +(x0[0], 1)), >(x0[0], -1)), 984_0_rec4_Return, x0[0], x1[0], x2[0], x3[0], x4[0])), ≥)∧0 = 0∧0 = 0∧0 = 0∧[(-1)Bound*bni_26 + (2)bni_26] + [bni_26]x0[0] + [(2)bni_26]x1[0] ≥ 0∧0 = 0∧0 = 0∧0 = 0∧[1 + (-1)bso_27] ≥ 0)

  • COND_1257_1_REC3_INVOKEMETHOD(TRUE, 984_0_rec4_Return, x0, x1, x2, x3, x4) → 1257_1_REC3_INVOKEMETHOD(1257_0_rec4_Load(+(+(+(*(1000, x2), *(100, x3)), *(10, x4)), +(x0, 1))), +(x0, 1), x1, x2, x3, x4)
    • ((UIncreasing(1257_1_REC3_INVOKEMETHOD(1257_0_rec4_Load(+(+(+(*(1000, x2[1]), *(100, x3[1])), *(10, x4[1])), +(x0[1], 1))), +(x0[1], 1), x1[1], x2[1], x3[1], x4[1])), ≥)∧[bni_28] = 0∧0 = 0∧0 = 0∧0 = 0∧0 = 0∧0 = 0∧[(-1)bso_29] ≥ 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(1257_0_rec4_Load(x1)) = [-1]   
POL(971_0_rec4_LT(x1)) = [-1]   
POL(Cond_971_0_rec4_LT(x1, x2)) = [-1]   
POL(<(x1, x2)) = [-1]   
POL(0) = 0   
POL(984_0_rec4_Return) = [-1]   
POL(Cond_971_0_rec4_LT1(x1, x2, x3)) = [-1]   
POL(>(x1, x2)) = [-1]   
POL(-1) = [-1]   
POL(1017_1_rec4_InvokeMethod(x1)) = [-1]   
POL(1295_1_rec3_InvokeMethod(x1)) = [-1]   
POL(1257_1_REC3_INVOKEMETHOD(x1, x2, x3, x4, x5, x6)) = [-1] + [2]x3 + [-1]x2 + [-1]x1   
POL(COND_1257_1_REC3_INVOKEMETHOD(x1, x2, x3, x4, x5, x6, x7)) = [-1] + [2]x4 + [-1]x3   
POL(&&(x1, x2)) = [-1]   
POL(>=(x1, x2)) = [-1]   
POL(+(x1, x2)) = x1 + x2   
POL(1) = [1]   
POL(*(x1, x2)) = x1·x2   
POL(1000) = [1000]   
POL(100) = [100]   
POL(10) = [10]   

The following pairs are in P>:

1257_1_REC3_INVOKEMETHOD(984_0_rec4_Return, x0[0], x1[0], x2[0], x3[0], x4[0]) → COND_1257_1_REC3_INVOKEMETHOD(&&(>=(x1[0], +(x0[0], 1)), >(x0[0], -1)), 984_0_rec4_Return, x0[0], x1[0], x2[0], x3[0], x4[0])

The following pairs are in Pbound:

1257_1_REC3_INVOKEMETHOD(984_0_rec4_Return, x0[0], x1[0], x2[0], x3[0], x4[0]) → COND_1257_1_REC3_INVOKEMETHOD(&&(>=(x1[0], +(x0[0], 1)), >(x0[0], -1)), 984_0_rec4_Return, x0[0], x1[0], x2[0], x3[0], x4[0])

The following pairs are in P:

COND_1257_1_REC3_INVOKEMETHOD(TRUE, 984_0_rec4_Return, x0[1], x1[1], x2[1], x3[1], x4[1]) → 1257_1_REC3_INVOKEMETHOD(1257_0_rec4_Load(+(+(+(*(1000, x2[1]), *(100, x3[1])), *(10, x4[1])), +(x0[1], 1))), +(x0[1], 1), x1[1], x2[1], x3[1], x4[1])

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

1257_0_rec4_Load(x0)1971_0_rec4_LT(x0)1
971_0_rec4_LT(x0)1Cond_971_0_rec4_LT(<(x0, 0), x0)1
971_0_rec4_LT(x0)1Cond_971_0_rec4_LT1(>(x0, -1), x0, x3)1
Cond_971_0_rec4_LT1(TRUE, x0, x3)11017_1_rec4_InvokeMethod(971_0_rec4_LT(x3))1
1017_1_rec4_InvokeMethod(984_0_rec4_Return)1984_0_rec4_Return1
Cond_971_0_rec4_LT(TRUE, x0)1984_0_rec4_Return1

(20) Obligation:

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


The following domains are used:

Integer


The ITRS R consists of the following rules:
1257_0_rec4_Load(x0) → 971_0_rec4_LT(x0)
971_0_rec4_LT(x0) → Cond_971_0_rec4_LT(x0 < 0, x0)
Cond_971_0_rec4_LT(TRUE, x0) → 984_0_rec4_Return
971_0_rec4_LT(x0) → Cond_971_0_rec4_LT1(x0 > -1, x0, x3)
Cond_971_0_rec4_LT1(TRUE, x0, x3) → 1017_1_rec4_InvokeMethod(971_0_rec4_LT(x3))
1017_1_rec4_InvokeMethod(984_0_rec4_Return) → 984_0_rec4_Return
1295_1_rec3_InvokeMethod(984_0_rec4_Return) → 984_0_rec4_Return

The integer pair graph contains the following rules and edges:
(1): COND_1257_1_REC3_INVOKEMETHOD(TRUE, 984_0_rec4_Return, x0[1], x1[1], x2[1], x3[1], x4[1]) → 1257_1_REC3_INVOKEMETHOD(1257_0_rec4_Load(1000 * x2[1] + 100 * x3[1] + 10 * x4[1] + x0[1] + 1), x0[1] + 1, x1[1], x2[1], x3[1], x4[1])


The set Q consists of the following terms:
1257_0_rec4_Load(x0)
971_0_rec4_LT(x0)
Cond_971_0_rec4_LT(TRUE, x0)
Cond_971_0_rec4_LT1(TRUE, x0, x1)
1017_1_rec4_InvokeMethod(984_0_rec4_Return)
1295_1_rec3_InvokeMethod(984_0_rec4_Return)

(21) IDependencyGraphProof (EQUIVALENT transformation)

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

(22) TRUE

(23) Obligation:

SCC of termination graph based on JBC Program.
SCC contains nodes from the following methods: Recursions.rec2(IIII)V
SCC calls the following helper methods: Recursions.rec3(IIIII)V, Recursions.rec2(IIII)V, Recursions.rec4(II)V
Performed SCC analyses: UsedFieldsAnalysis

(24) SCCToIDPv1Proof (SOUND transformation)

Transformed FIGraph SCCs to IDPs. Log:

Generated 33 rules for P and 70 rules for R.


P rules:
1236_0_rec2_Load(EOS(STATIC_1236), i214, matching1, i215, i216, i214) → 1238_0_rec2_LT(EOS(STATIC_1238), i214, 0, i215, i216, i214, 0) | =(matching1, 0)
1238_0_rec2_LT(EOS(STATIC_1238), i221, matching1, i215, i216, i221, matching2) → 1242_0_rec2_LT(EOS(STATIC_1242), i221, 0, i215, i216, i221, 0) | &&(=(matching1, 0), =(matching2, 0))
1242_0_rec2_LT(EOS(STATIC_1242), i221, matching1, i215, i216, i221, matching2) → 1246_0_rec2_ConstantStackPush(EOS(STATIC_1246), i221, 0, i215, i216) | &&(&&(>=(i221, 0), =(matching1, 0)), =(matching2, 0))
1246_0_rec2_ConstantStackPush(EOS(STATIC_1246), i221, matching1, i215, i216) → 1250_0_rec2_ConstantStackPush(EOS(STATIC_1250), i221, 0, i215, i216, 0) | =(matching1, 0)
1250_0_rec2_ConstantStackPush(EOS(STATIC_1250), i221, matching1, i215, i216, matching2) → 1252_0_rec2_Load(EOS(STATIC_1252), i221, 0, i215, i216, 0, 2) | &&(=(matching1, 0), =(matching2, 0))
1252_0_rec2_Load(EOS(STATIC_1252), i221, matching1, i215, i216, matching2, matching3) → 1256_0_rec2_IntArithmetic(EOS(STATIC_1256), i221, 0, i215, i216, 0, 2, i215) | &&(&&(=(matching1, 0), =(matching2, 0)), =(matching3, 2))
1256_0_rec2_IntArithmetic(EOS(STATIC_1256), i221, matching1, i215, i216, matching2, matching3, i215) → 1258_0_rec2_ConstantStackPush(EOS(STATIC_1258), i221, 0, i215, i216, 0, *(2, i215)) | &&(&&(=(matching1, 0), =(matching2, 0)), =(matching3, 2))
1258_0_rec2_ConstantStackPush(EOS(STATIC_1258), i221, matching1, i215, i216, matching2, i224) → 1261_0_rec2_Load(EOS(STATIC_1261), i221, 0, i215, i216, 0, i224, 3) | &&(=(matching1, 0), =(matching2, 0))
1261_0_rec2_Load(EOS(STATIC_1261), i221, matching1, i215, i216, matching2, i224, matching3) → 1262_0_rec2_IntArithmetic(EOS(STATIC_1262), i221, 0, i215, i216, 0, i224, 3, i216) | &&(&&(=(matching1, 0), =(matching2, 0)), =(matching3, 3))
1262_0_rec2_IntArithmetic(EOS(STATIC_1262), i221, matching1, i215, i216, matching2, i224, matching3, i216) → 1267_0_rec2_IntArithmetic(EOS(STATIC_1267), i221, 0, i215, i216, 0, i224, *(3, i216)) | &&(&&(=(matching1, 0), =(matching2, 0)), =(matching3, 3))
1267_0_rec2_IntArithmetic(EOS(STATIC_1267), i221, matching1, i215, i216, matching2, i224, i228) → 1273_0_rec2_ConstantStackPush(EOS(STATIC_1273), i221, 0, i215, i216, 0, +(i224, i228)) | &&(=(matching1, 0), =(matching2, 0))
1273_0_rec2_ConstantStackPush(EOS(STATIC_1273), i221, matching1, i215, i216, matching2, i230) → 1276_0_rec2_Load(EOS(STATIC_1276), i221, 0, i215, i216, 0, i230, 4) | &&(=(matching1, 0), =(matching2, 0))
1276_0_rec2_Load(EOS(STATIC_1276), i221, matching1, i215, i216, matching2, i230, matching3) → 1278_0_rec2_IntArithmetic(EOS(STATIC_1278), i221, 0, i215, i216, 0, i230, 4, i221) | &&(&&(=(matching1, 0), =(matching2, 0)), =(matching3, 4))
1278_0_rec2_IntArithmetic(EOS(STATIC_1278), i221, matching1, i215, i216, matching2, i230, matching3, i221) → 1281_0_rec2_IntArithmetic(EOS(STATIC_1281), i221, 0, i215, i216, 0, i230, *(4, i221)) | &&(&&(=(matching1, 0), =(matching2, 0)), =(matching3, 4))
1281_0_rec2_IntArithmetic(EOS(STATIC_1281), i221, matching1, i215, i216, matching2, i230, i231) → 1283_0_rec2_Load(EOS(STATIC_1283), i221, 0, i215, i216, 0, +(i230, i231)) | &&(&&(>=(i231, 0), =(matching1, 0)), =(matching2, 0))
1283_0_rec2_Load(EOS(STATIC_1283), i221, matching1, i215, i216, matching2, i233) → 1286_0_rec2_Load(EOS(STATIC_1286), i221, 0, i215, i216, 0, i233, i215) | &&(=(matching1, 0), =(matching2, 0))
1286_0_rec2_Load(EOS(STATIC_1286), i221, matching1, i215, i216, matching2, i233, i215) → 1289_0_rec2_Load(EOS(STATIC_1289), i221, 0, i215, i216, 0, i233, i215, i216) | &&(=(matching1, 0), =(matching2, 0))
1289_0_rec2_Load(EOS(STATIC_1289), i221, matching1, i215, i216, matching2, i233, i215, i216) → 1291_0_rec2_InvokeMethod(EOS(STATIC_1291), i221, 0, i215, i216, 0, i233, i215, i216, i221) | &&(=(matching1, 0), =(matching2, 0))
1291_0_rec2_InvokeMethod(EOS(STATIC_1291), i221, matching1, i215, i216, matching2, i233, i215, i216, i221) → 1293_1_rec2_InvokeMethod(1293_0_rec3_Load(EOS(STATIC_1293), 0, i233, i215, i216, i221), i221, 0, i215, i216, 0, i233, i215, i216, i221) | &&(=(matching1, 0), =(matching2, 0))
1293_1_rec2_InvokeMethod(1207_0_rec3_Return(EOS(STATIC_1207)), i242, matching1, i240, i241, matching2, i239, i240, i241, i242) → 1304_0_rec3_Return(EOS(STATIC_1304), i242, 0, i240, i241, 0, i239, i240, i241, i242) | &&(=(matching1, 0), =(matching2, 0))
1293_1_rec2_InvokeMethod(1308_0_rec3_Return(EOS(STATIC_1308)), i261, matching1, i259, i260, matching2, i258, i259, i260, i261) → 1318_0_rec3_Return(EOS(STATIC_1318), i261, 0, i259, i260, 0, i258, i259, i260, i261) | &&(=(matching1, 0), =(matching2, 0))
1304_0_rec3_Return(EOS(STATIC_1304), i242, matching1, i240, i241, matching2, i239, i240, i241, i242) → 1306_0_rec2_Load(EOS(STATIC_1306), i242, 0, i240, i241) | &&(=(matching1, 0), =(matching2, 0))
1306_0_rec2_Load(EOS(STATIC_1306), i242, matching1, i240, i241) → 1309_0_rec2_ConstantStackPush(EOS(STATIC_1309), 0, i240, i241, i242) | =(matching1, 0)
1309_0_rec2_ConstantStackPush(EOS(STATIC_1309), matching1, i240, i241, i242) → 1312_0_rec2_IntArithmetic(EOS(STATIC_1312), 0, i240, i241, i242, 1) | =(matching1, 0)
1312_0_rec2_IntArithmetic(EOS(STATIC_1312), matching1, i240, i241, i242, matching2) → 1316_0_rec2_Load(EOS(STATIC_1316), 0, i240, i241, -(i242, 1)) | &&(&&(>=(i242, 0), =(matching1, 0)), =(matching2, 1))
1316_0_rec2_Load(EOS(STATIC_1316), matching1, i240, i241, i268) → 1321_0_rec2_Load(EOS(STATIC_1321), i240, i241, i268, 0) | =(matching1, 0)
1321_0_rec2_Load(EOS(STATIC_1321), i240, i241, i268, matching1) → 1322_0_rec2_Load(EOS(STATIC_1322), i241, i268, 0, i240) | =(matching1, 0)
1322_0_rec2_Load(EOS(STATIC_1322), i241, i268, matching1, i240) → 1323_0_rec2_InvokeMethod(EOS(STATIC_1323), i268, 0, i240, i241) | =(matching1, 0)
1323_0_rec2_InvokeMethod(EOS(STATIC_1323), i268, matching1, i240, i241) → 1324_1_rec2_InvokeMethod(1324_0_rec2_Load(EOS(STATIC_1324), i268, 0, i240, i241), i268, 0, i240, i241) | =(matching1, 0)
1324_0_rec2_Load(EOS(STATIC_1324), i268, matching1, i240, i241) → 1326_0_rec2_Load(EOS(STATIC_1326), i268, 0, i240, i241) | =(matching1, 0)
1326_0_rec2_Load(EOS(STATIC_1326), i268, matching1, i240, i241) → 1233_0_rec2_Load(EOS(STATIC_1233), i268, 0, i240, i241) | =(matching1, 0)
1233_0_rec2_Load(EOS(STATIC_1233), i214, matching1, i215, i216) → 1236_0_rec2_Load(EOS(STATIC_1236), i214, 0, i215, i216, i214) | =(matching1, 0)
1318_0_rec3_Return(EOS(STATIC_1318), i261, matching1, i259, i260, matching2, i258, i259, i260, i261) → 1304_0_rec3_Return(EOS(STATIC_1304), i261, 0, i259, i260, 0, i258, i259, i260, i261) | &&(=(matching1, 0), =(matching2, 0))
R rules:
1293_0_rec3_Load(EOS(STATIC_1293), matching1, i233, i215, i216, i221) → 1296_0_rec3_Load(EOS(STATIC_1296), 0, i233, i215, i216, i221) | =(matching1, 0)
1296_0_rec3_Load(EOS(STATIC_1296), matching1, i233, i215, i216, i221) → 1190_0_rec3_Load(EOS(STATIC_1190), 0, i233, i215, i216, i221) | =(matching1, 0)
1260_0_rec4_Load(EOS(STATIC_1260), matching1) → 958_0_rec4_Load(EOS(STATIC_958), i223, 0) | =(matching1, 0)
1298_0_rec3_Load(EOS(STATIC_1298), i115, i116, i117, i118) → 1190_0_rec3_Load(EOS(STATIC_1190), i232, i115, i116, i117, i118)
1023_0_rec4_Load(EOS(STATIC_1023), matching1) → 958_0_rec4_Load(EOS(STATIC_958), i119, 0) | =(matching1, 0)
1190_0_rec3_Load(EOS(STATIC_1190), i197, i115, i116, i117, i118) → 1194_0_rec3_Load(EOS(STATIC_1194), i197, i115, i116, i117, i118, i197)
1194_0_rec3_Load(EOS(STATIC_1194), i197, i115, i116, i117, i118, i197) → 1198_0_rec3_GT(EOS(STATIC_1198), i197, i115, i116, i117, i118, i197, i115)
1198_0_rec3_GT(EOS(STATIC_1198), i197, i115, i116, i117, i118, i197, i115) → 1201_0_rec3_GT(EOS(STATIC_1201), i197, i115, i116, i117, i118, i197, i115)
1198_0_rec3_GT(EOS(STATIC_1198), i197, i115, i116, i117, i118, i197, i115) → 1202_0_rec3_GT(EOS(STATIC_1202), i197, i115, i116, i117, i118, i197, i115)
1201_0_rec3_GT(EOS(STATIC_1201), i197, i115, i116, i117, i118, i197, i115) → 1207_0_rec3_Return(EOS(STATIC_1207)) | >(i197, i115)
1202_0_rec3_GT(EOS(STATIC_1202), i197, i115, i116, i117, i118, i197, i115) → 1208_0_rec3_ConstantStackPush(EOS(STATIC_1208), i197, i115, i116, i117, i118) | <=(i197, i115)
1207_0_rec3_Return(EOS(STATIC_1207)) → 1308_0_rec3_Return(EOS(STATIC_1308))
1208_0_rec3_ConstantStackPush(EOS(STATIC_1208), i197, i115, i116, i117, i118) → 1213_0_rec3_Load(EOS(STATIC_1213), i197, i115, i116, i117, i118)
1213_0_rec3_Load(EOS(STATIC_1213), i197, i115, i116, i117, i118) → 1218_0_rec3_IntArithmetic(EOS(STATIC_1218), i197, i115, i116, i117, i118, i116)
1218_0_rec3_IntArithmetic(EOS(STATIC_1218), i197, i115, i116, i117, i118, i116) → 1222_0_rec3_ConstantStackPush(EOS(STATIC_1222), i197, i115, i116, i117, i118)
1222_0_rec3_ConstantStackPush(EOS(STATIC_1222), i197, i115, i116, i117, i118) → 1224_0_rec3_Load(EOS(STATIC_1224), i197, i115, i116, i117, i118)
1224_0_rec3_Load(EOS(STATIC_1224), i197, i115, i116, i117, i118) → 1227_0_rec3_IntArithmetic(EOS(STATIC_1227), i197, i115, i116, i117, i118, i117)
1227_0_rec3_IntArithmetic(EOS(STATIC_1227), i197, i115, i116, i117, i118, i117) → 1229_0_rec3_IntArithmetic(EOS(STATIC_1229), i197, i115, i116, i117, i118)
1229_0_rec3_IntArithmetic(EOS(STATIC_1229), i197, i115, i116, i117, i118) → 1231_0_rec3_ConstantStackPush(EOS(STATIC_1231), i197, i115, i116, i117, i118)
1231_0_rec3_ConstantStackPush(EOS(STATIC_1231), i197, i115, i116, i117, i118) → 1235_0_rec3_Load(EOS(STATIC_1235), i197, i115, i116, i117, i118)
1235_0_rec3_Load(EOS(STATIC_1235), i197, i115, i116, i117, i118) → 1237_0_rec3_IntArithmetic(EOS(STATIC_1237), i197, i115, i116, i117, i118, i118)
1237_0_rec3_IntArithmetic(EOS(STATIC_1237), i197, i115, i116, i117, i118, i118) → 1240_0_rec3_IntArithmetic(EOS(STATIC_1240), i197, i115, i116, i117, i118)
1240_0_rec3_IntArithmetic(EOS(STATIC_1240), i197, i115, i116, i117, i118) → 1243_0_rec3_Load(EOS(STATIC_1243), i197, i115, i116, i117, i118)
1243_0_rec3_Load(EOS(STATIC_1243), i197, i115, i116, i117, i118) → 1247_0_rec3_IntArithmetic(EOS(STATIC_1247), i197, i115, i116, i117, i118, i197)
1247_0_rec3_IntArithmetic(EOS(STATIC_1247), i197, i115, i116, i117, i118, i197) → 1251_0_rec3_ConstantStackPush(EOS(STATIC_1251), i197, i115, i116, i117, i118) | >=(i197, 0)
1251_0_rec3_ConstantStackPush(EOS(STATIC_1251), i197, i115, i116, i117, i118) → 1254_0_rec3_InvokeMethod(EOS(STATIC_1254), i197, i115, i116, i117, i118, 0)
1254_0_rec3_InvokeMethod(EOS(STATIC_1254), i197, i115, i116, i117, i118, matching1) → 1257_1_rec3_InvokeMethod(1257_0_rec4_Load(EOS(STATIC_1257), 0), i197, i115, i116, i117, i118, 0) | =(matching1, 0)
1257_0_rec4_Load(EOS(STATIC_1257), matching1) → 1260_0_rec4_Load(EOS(STATIC_1260), 0) | =(matching1, 0)
1257_1_rec3_InvokeMethod(984_0_rec4_Return(EOS(STATIC_984)), i197, i115, i116, i117, i118, matching1) → 1268_0_rec4_Return(EOS(STATIC_1268), i197, i115, i116, i117, i118, 0) | =(matching1, 0)
1257_1_rec3_InvokeMethod(1070_0_rec4_Return(EOS(STATIC_1070)), i197, i115, i116, i117, i118, matching1) → 1271_0_rec4_Return(EOS(STATIC_1271), i197, i115, i116, i117, i118, 0) | =(matching1, 0)
1268_0_rec4_Return(EOS(STATIC_1268), i197, i115, i116, i117, i118, matching1) → 1272_0_rec4_Return(EOS(STATIC_1272), i197, i115, i116, i117, i118, 0) | =(matching1, 0)
1271_0_rec4_Return(EOS(STATIC_1271), i197, i115, i116, i117, i118, matching1) → 1272_0_rec4_Return(EOS(STATIC_1272), i197, i115, i116, i117, i118, 0) | =(matching1, 0)
1272_0_rec4_Return(EOS(STATIC_1272), i197, i115, i116, i117, i118, matching1) → 1274_0_rec3_Load(EOS(STATIC_1274), i197, i115, i116, i117, i118) | =(matching1, 0)
1274_0_rec3_Load(EOS(STATIC_1274), i197, i115, i116, i117, i118) → 1277_0_rec3_ConstantStackPush(EOS(STATIC_1277), i115, i116, i117, i118, i197)
1277_0_rec3_ConstantStackPush(EOS(STATIC_1277), i115, i116, i117, i118, i197) → 1279_0_rec3_IntArithmetic(EOS(STATIC_1279), i115, i116, i117, i118, i197)
1279_0_rec3_IntArithmetic(EOS(STATIC_1279), i115, i116, i117, i118, i197) → 1282_0_rec3_Load(EOS(STATIC_1282), i115, i116, i117, i118) | >=(i197, 0)
1282_0_rec3_Load(EOS(STATIC_1282), i115, i116, i117, i118) → 1284_0_rec3_Load(EOS(STATIC_1284), i116, i117, i118, i115)
1284_0_rec3_Load(EOS(STATIC_1284), i116, i117, i118, i115) → 1287_0_rec3_Load(EOS(STATIC_1287), i117, i118, i115, i116)
1287_0_rec3_Load(EOS(STATIC_1287), i117, i118, i115, i116) → 1290_0_rec3_Load(EOS(STATIC_1290), i118, i115, i116, i117)
1290_0_rec3_Load(EOS(STATIC_1290), i118, i115, i116, i117) → 1292_0_rec3_InvokeMethod(EOS(STATIC_1292), i115, i116, i117, i118)
1292_0_rec3_InvokeMethod(EOS(STATIC_1292), i115, i116, i117, i118) → 1295_1_rec3_InvokeMethod(1295_0_rec3_Load(EOS(STATIC_1295), i115, i116, i117, i118), i115, i116, i117, i118)
1295_0_rec3_Load(EOS(STATIC_1295), i115, i116, i117, i118) → 1298_0_rec3_Load(EOS(STATIC_1298), i115, i116, i117, i118)
1295_1_rec3_InvokeMethod(1207_0_rec3_Return(EOS(STATIC_1207)), i250, i251, i252, i253) → 1305_0_rec3_Return(EOS(STATIC_1305), i250, i251, i252, i253)
1295_1_rec3_InvokeMethod(1308_0_rec3_Return(EOS(STATIC_1308)), i264, i265, i266, i267) → 1319_0_rec3_Return(EOS(STATIC_1319), i264, i265, i266, i267)
1305_0_rec3_Return(EOS(STATIC_1305), i250, i251, i252, i253) → 1308_0_rec3_Return(EOS(STATIC_1308))
1319_0_rec3_Return(EOS(STATIC_1319), i264, i265, i266, i267) → 1305_0_rec3_Return(EOS(STATIC_1305), i264, i265, i266, i267)
1238_0_rec2_LT(EOS(STATIC_1238), i220, matching1, i215, i216, i220, matching2) → 1241_0_rec2_LT(EOS(STATIC_1241), i220, 0, i215, i216, i220, 0) | &&(=(matching1, 0), =(matching2, 0))
1241_0_rec2_LT(EOS(STATIC_1241), i220, matching1, i215, i216, i220, matching2) → 1245_0_rec2_Return(EOS(STATIC_1245)) | &&(&&(<(i220, 0), =(matching1, 0)), =(matching2, 0))
1324_1_rec2_InvokeMethod(1245_0_rec2_Return(EOS(STATIC_1245)), matching1, matching2, i281, i282) → 1329_0_rec2_Return(EOS(STATIC_1329), -1, 0, i281, i282) | &&(=(matching1, -1), =(matching2, 0))
1324_1_rec2_InvokeMethod(1343_0_rec2_Return(EOS(STATIC_1343)), i301, matching1, i302, i303) → 1354_0_rec2_Return(EOS(STATIC_1354), i301, 0, i302, i303) | =(matching1, 0)
1329_0_rec2_Return(EOS(STATIC_1329), matching1, matching2, i281, i282) → 1339_0_rec2_Return(EOS(STATIC_1339), -1, 0, i281, i282) | &&(=(matching1, -1), =(matching2, 0))
1339_0_rec2_Return(EOS(STATIC_1339), i292, matching1, i290, i291) → 1343_0_rec2_Return(EOS(STATIC_1343)) | =(matching1, 0)
1354_0_rec2_Return(EOS(STATIC_1354), i301, matching1, i302, i303) → 1339_0_rec2_Return(EOS(STATIC_1339), i301, 0, i302, i303) | =(matching1, 0)
958_0_rec4_Load(EOS(STATIC_958), i89, matching1) → 964_0_rec4_Load(EOS(STATIC_964), i89, 0, i89) | =(matching1, 0)
964_0_rec4_Load(EOS(STATIC_964), i89, matching1, i89) → 971_0_rec4_LT(EOS(STATIC_971), i89, 0, i89, 0) | =(matching1, 0)
971_0_rec4_LT(EOS(STATIC_971), i99, matching1, i99, matching2) → 976_0_rec4_LT(EOS(STATIC_976), i99, 0, i99, 0) | &&(=(matching1, 0), =(matching2, 0))
971_0_rec4_LT(EOS(STATIC_971), i100, matching1, i100, matching2) → 977_0_rec4_LT(EOS(STATIC_977), i100, 0, i100, 0) | &&(=(matching1, 0), =(matching2, 0))
976_0_rec4_LT(EOS(STATIC_976), i99, matching1, i99, matching2) → 984_0_rec4_Return(EOS(STATIC_984)) | &&(&&(<(i99, 0), =(matching1, 0)), =(matching2, 0))
977_0_rec4_LT(EOS(STATIC_977), i100, matching1, i100, matching2) → 985_0_rec4_Load(EOS(STATIC_985), i100, 0) | &&(&&(>=(i100, 0), =(matching1, 0)), =(matching2, 0))
985_0_rec4_Load(EOS(STATIC_985), i100, matching1) → 996_0_rec4_ConstantStackPush(EOS(STATIC_996), 0, i100) | =(matching1, 0)
996_0_rec4_ConstantStackPush(EOS(STATIC_996), matching1, i100) → 1001_0_rec4_IntArithmetic(EOS(STATIC_1001), 0, i100) | =(matching1, 0)
1001_0_rec4_IntArithmetic(EOS(STATIC_1001), matching1, i100) → 1008_0_rec4_Load(EOS(STATIC_1008), 0) | &&(>=(i100, 0), =(matching1, 0))
1008_0_rec4_Load(EOS(STATIC_1008), matching1) → 1012_0_rec4_InvokeMethod(EOS(STATIC_1012), 0) | =(matching1, 0)
1012_0_rec4_InvokeMethod(EOS(STATIC_1012), matching1) → 1017_1_rec4_InvokeMethod(1017_0_rec4_Load(EOS(STATIC_1017), 0), 0) | =(matching1, 0)
1017_0_rec4_Load(EOS(STATIC_1017), matching1) → 1023_0_rec4_Load(EOS(STATIC_1023), 0) | =(matching1, 0)
1017_1_rec4_InvokeMethod(984_0_rec4_Return(EOS(STATIC_984)), matching1) → 1039_0_rec4_Return(EOS(STATIC_1039), 0) | =(matching1, 0)
1017_1_rec4_InvokeMethod(1070_0_rec4_Return(EOS(STATIC_1070)), matching1) → 1090_0_rec4_Return(EOS(STATIC_1090), 0) | =(matching1, 0)
1039_0_rec4_Return(EOS(STATIC_1039), matching1) → 1063_0_rec4_Return(EOS(STATIC_1063), 0) | =(matching1, 0)
1063_0_rec4_Return(EOS(STATIC_1063), matching1) → 1070_0_rec4_Return(EOS(STATIC_1070)) | =(matching1, 0)
1090_0_rec4_Return(EOS(STATIC_1090), matching1) → 1063_0_rec4_Return(EOS(STATIC_1063), 0) | =(matching1, 0)

Combined rules. Obtained 2 conditional rules for P and 13 conditional rules for R.


P rules:
1293_1_rec2_InvokeMethod(1207_0_rec3_Return(EOS(STATIC_1207)), x0, 0, x2, x3, 0, x5, x2, x3, x0) → 1324_1_rec2_InvokeMethod(1293_1_rec2_InvokeMethod(1293_0_rec3_Load(EOS(STATIC_1293), 0, +(+(*(2, x2), *(3, x3)), *(4, -(x0, 1))), x2, x3, -(x0, 1)), -(x0, 1), 0, x2, x3, 0, +(+(*(2, x2), *(3, x3)), *(4, -(x0, 1))), x2, x3, -(x0, 1)), -(x0, 1), 0, x2, x3) | &&(>(+(x0, 1), 1), <=(0, *(4, -(x0, 1))))
1293_1_rec2_InvokeMethod(1308_0_rec3_Return(EOS(STATIC_1308)), x0, 0, x2, x3, 0, x5, x2, x3, x0) → 1324_1_rec2_InvokeMethod(1293_1_rec2_InvokeMethod(1293_0_rec3_Load(EOS(STATIC_1293), 0, +(+(*(2, x2), *(3, x3)), *(4, -(x0, 1))), x2, x3, -(x0, 1)), -(x0, 1), 0, x2, x3, 0, +(+(*(2, x2), *(3, x3)), *(4, -(x0, 1))), x2, x3, -(x0, 1)), -(x0, 1), 0, x2, x3) | &&(>(+(x0, 1), 1), <=(0, *(4, -(x0, 1))))
R rules:
1293_0_rec3_Load(EOS(STATIC_1293), 0, x1, x2, x3, x4) → 1198_0_rec3_GT(EOS(STATIC_1198), 0, x1, x2, x3, x4, 0, x1)
1198_0_rec3_GT(EOS(STATIC_1198), x0, x1, x2, x3, x4, x0, x1) → 1308_0_rec3_Return(EOS(STATIC_1308)) | <(x1, x0)
1324_1_rec2_InvokeMethod(1245_0_rec2_Return(EOS(STATIC_1245)), -1, 0, x2, x3) → 1343_0_rec2_Return(EOS(STATIC_1343))
1324_1_rec2_InvokeMethod(1343_0_rec2_Return(EOS(STATIC_1343)), x0, 0, x2, x3) → 1343_0_rec2_Return(EOS(STATIC_1343))
1198_0_rec3_GT(EOS(STATIC_1198), x0, x1, x2, x3, x4, x0, x1) → 1257_1_rec3_InvokeMethod(971_0_rec4_LT(EOS(STATIC_971), x5, 0, x5, 0), x0, x1, x2, x3, x4, 0) | &&(>=(x1, x0), >(+(x0, 1), 0))
971_0_rec4_LT(EOS(STATIC_971), x0, 0, x0, 0) → 984_0_rec4_Return(EOS(STATIC_984)) | <(x0, 0)
971_0_rec4_LT(EOS(STATIC_971), x0, 0, x0, 0) → 1017_1_rec4_InvokeMethod(971_0_rec4_LT(EOS(STATIC_971), x3, 0, x3, 0), 0) | >(+(x0, 1), 0)
1017_1_rec4_InvokeMethod(984_0_rec4_Return(EOS(STATIC_984)), 0) → 1070_0_rec4_Return(EOS(STATIC_1070))
1017_1_rec4_InvokeMethod(1070_0_rec4_Return(EOS(STATIC_1070)), 0) → 1070_0_rec4_Return(EOS(STATIC_1070))
1257_1_rec3_InvokeMethod(984_0_rec4_Return(EOS(STATIC_984)), x0, x1, x2, x3, x4, 0) → 1295_1_rec3_InvokeMethod(1198_0_rec3_GT(EOS(STATIC_1198), x6, x1, x2, x3, x4, x6, x1), x1, x2, x3, x4) | >(+(x0, 1), 0)
1257_1_rec3_InvokeMethod(1070_0_rec4_Return(EOS(STATIC_1070)), x0, x1, x2, x3, x4, 0) → 1295_1_rec3_InvokeMethod(1198_0_rec3_GT(EOS(STATIC_1198), x6, x1, x2, x3, x4, x6, x1), x1, x2, x3, x4) | >(+(x0, 1), 0)
1295_1_rec3_InvokeMethod(1207_0_rec3_Return(EOS(STATIC_1207)), x0, x1, x2, x3) → 1308_0_rec3_Return(EOS(STATIC_1308))
1295_1_rec3_InvokeMethod(1308_0_rec3_Return(EOS(STATIC_1308)), x0, x1, x2, x3) → 1308_0_rec3_Return(EOS(STATIC_1308))

Filtered ground terms:



1324_1_rec2_InvokeMethod(x1, x2, x3, x4, x5) → 1324_1_rec2_InvokeMethod(x1, x2, x4, x5)
1293_0_rec3_Load(x1, x2, x3, x4, x5, x6) → 1293_0_rec3_Load(x3, x4, x5, x6)
1293_1_rec2_InvokeMethod(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10) → 1293_1_rec2_InvokeMethod(x1, x2, x4, x5, x7, x8, x9, x10)
Cond_1293_1_rec2_InvokeMethod1(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11) → Cond_1293_1_rec2_InvokeMethod1(x1, x3, x5, x6, x8, x9, x10, x11)
1308_0_rec3_Return(x1) → 1308_0_rec3_Return
Cond_1293_1_rec2_InvokeMethod(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11) → Cond_1293_1_rec2_InvokeMethod(x1, x3, x5, x6, x8, x9, x10, x11)
1207_0_rec3_Return(x1) → 1207_0_rec3_Return
1198_0_rec3_GT(x1, x2, x3, x4, x5, x6, x7, x8) → 1198_0_rec3_GT(x2, x3, x4, x5, x6, x7, x8)
Cond_1257_1_rec3_InvokeMethod1(x1, x2, x3, x4, x5, x6, x7, x8, x9) → Cond_1257_1_rec3_InvokeMethod1(x1, x3, x4, x5, x6, x7, x9)
1070_0_rec4_Return(x1) → 1070_0_rec4_Return
1257_1_rec3_InvokeMethod(x1, x2, x3, x4, x5, x6, x7) → 1257_1_rec3_InvokeMethod(x1, x2, x3, x4, x5, x6)
Cond_1257_1_rec3_InvokeMethod(x1, x2, x3, x4, x5, x6, x7, x8, x9) → Cond_1257_1_rec3_InvokeMethod(x1, x3, x4, x5, x6, x7, x9)
984_0_rec4_Return(x1) → 984_0_rec4_Return
1017_1_rec4_InvokeMethod(x1, x2) → 1017_1_rec4_InvokeMethod(x1)
971_0_rec4_LT(x1, x2, x3, x4, x5) → 971_0_rec4_LT(x2, x4)
Cond_971_0_rec4_LT1(x1, x2, x3, x4, x5, x6, x7) → Cond_971_0_rec4_LT1(x1, x3, x5, x7)
Cond_971_0_rec4_LT(x1, x2, x3, x4, x5, x6) → Cond_971_0_rec4_LT(x1, x3, x5)
Cond_1198_0_rec3_GT1(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10) → Cond_1198_0_rec3_GT1(x1, x3, x4, x5, x6, x7, x8, x9, x10)
1343_0_rec2_Return(x1) → 1343_0_rec2_Return
1245_0_rec2_Return(x1) → 1245_0_rec2_Return
Cond_1198_0_rec3_GT(x1, x2, x3, x4, x5, x6, x7, x8, x9) → Cond_1198_0_rec3_GT(x1, x3, x4, x5, x6, x7, x8, x9)

Filtered duplicate args:



1293_1_rec2_InvokeMethod(x1, x2, x3, x4, x5, x6, x7, x8) → 1293_1_rec2_InvokeMethod(x1, x5, x6, x7, x8)
Cond_1293_1_rec2_InvokeMethod(x1, x2, x3, x4, x5, x6, x7, x8) → Cond_1293_1_rec2_InvokeMethod(x1, x5, x6, x7, x8)
Cond_1293_1_rec2_InvokeMethod1(x1, x2, x3, x4, x5, x6, x7, x8) → Cond_1293_1_rec2_InvokeMethod1(x1, x5, x6, x7, x8)
1198_0_rec3_GT(x1, x2, x3, x4, x5, x6, x7) → 1198_0_rec3_GT(x3, x4, x5, x6, x7)
Cond_1198_0_rec3_GT(x1, x2, x3, x4, x5, x6, x7, x8) → Cond_1198_0_rec3_GT(x1, x4, x5, x6, x7, x8)
Cond_1198_0_rec3_GT1(x1, x2, x3, x4, x5, x6, x7, x8, x9) → Cond_1198_0_rec3_GT1(x1, x4, x5, x6, x7, x8, x9)
971_0_rec4_LT(x1, x2) → 971_0_rec4_LT(x2)
Cond_971_0_rec4_LT(x1, x2, x3) → Cond_971_0_rec4_LT(x1, x3)
Cond_971_0_rec4_LT1(x1, x2, x3, x4) → Cond_971_0_rec4_LT1(x1, x3, x4)

Filtered unneeded arguments:



1293_1_rec2_InvokeMethod(x1, x2, x3, x4, x5) → 1293_1_rec2_InvokeMethod(x1, x3, x4, x5)
Cond_1293_1_rec2_InvokeMethod(x1, x2, x3, x4, x5) → Cond_1293_1_rec2_InvokeMethod(x1, x3, x4, x5)
1324_1_rec2_InvokeMethod(x1, x2, x3, x4) → 1324_1_rec2_InvokeMethod(x1, x2)
Cond_1293_1_rec2_InvokeMethod1(x1, x2, x3, x4, x5) → Cond_1293_1_rec2_InvokeMethod1(x1, x3, x4, x5)
Cond_1198_0_rec3_GT(x1, x2, x3, x4, x5, x6) → Cond_1198_0_rec3_GT(x1)
Cond_1198_0_rec3_GT1(x1, x2, x3, x4, x5, x6, x7) → Cond_1198_0_rec3_GT1(x1, x5, x6, x7)
Cond_971_0_rec4_LT(x1, x2) → Cond_971_0_rec4_LT(x1)
Cond_971_0_rec4_LT1(x1, x2, x3) → Cond_971_0_rec4_LT1(x1, x3)
1257_1_rec3_InvokeMethod(x1, x2, x3, x4, x5, x6) → 1257_1_rec3_InvokeMethod(x1, x2, x3)
Cond_1257_1_rec3_InvokeMethod(x1, x2, x3, x4, x5, x6, x7) → Cond_1257_1_rec3_InvokeMethod(x1, x3, x7)
1295_1_rec3_InvokeMethod(x1, x2, x3, x4, x5) → 1295_1_rec3_InvokeMethod(x1)
Cond_1257_1_rec3_InvokeMethod1(x1, x2, x3, x4, x5, x6, x7) → Cond_1257_1_rec3_InvokeMethod1(x1, x3, x7)
1198_0_rec3_GT(x1, x2, x3, x4, x5) → 1198_0_rec3_GT(x4, x5)
1293_0_rec3_Load(x1, x2, x3, x4) → 1293_0_rec3_Load(x1)

Combined rules. Obtained 2 conditional rules for P and 13 conditional rules for R.


P rules:
1293_1_rec2_InvokeMethod(1207_0_rec3_Return, x2, x3, x0) → 1324_1_rec2_InvokeMethod(1293_1_rec2_InvokeMethod(1293_0_rec3_Load(+(+(*(2, x2), *(3, x3)), *(4, -(x0, 1)))), x2, x3, -(x0, 1)), -(x0, 1)) | &&(>(x0, 0), <=(0, *(4, -(x0, 1))))
1293_1_rec2_InvokeMethod(1308_0_rec3_Return, x2, x3, x0) → 1324_1_rec2_InvokeMethod(1293_1_rec2_InvokeMethod(1293_0_rec3_Load(+(+(*(2, x2), *(3, x3)), *(4, -(x0, 1)))), x2, x3, -(x0, 1)), -(x0, 1)) | &&(>(x0, 0), <=(0, *(4, -(x0, 1))))
R rules:
1293_0_rec3_Load(x1) → 1198_0_rec3_GT(0, x1)
1198_0_rec3_GT(x0, x1) → 1308_0_rec3_Return | <(x1, x0)
1324_1_rec2_InvokeMethod(1245_0_rec2_Return, -1) → 1343_0_rec2_Return
1324_1_rec2_InvokeMethod(1343_0_rec2_Return, x0) → 1343_0_rec2_Return
1198_0_rec3_GT(x0, x1) → 1257_1_rec3_InvokeMethod(971_0_rec4_LT(x5), x0, x1) | &&(>=(x1, x0), >(x0, -1))
971_0_rec4_LT(x0) → 984_0_rec4_Return | <(x0, 0)
971_0_rec4_LT(x0) → 1017_1_rec4_InvokeMethod(971_0_rec4_LT(x3)) | >(x0, -1)
1017_1_rec4_InvokeMethod(984_0_rec4_Return) → 1070_0_rec4_Return
1017_1_rec4_InvokeMethod(1070_0_rec4_Return) → 1070_0_rec4_Return
1257_1_rec3_InvokeMethod(984_0_rec4_Return, x0, x1) → 1295_1_rec3_InvokeMethod(1198_0_rec3_GT(x6, x1)) | >(x0, -1)
1257_1_rec3_InvokeMethod(1070_0_rec4_Return, x0, x1) → 1295_1_rec3_InvokeMethod(1198_0_rec3_GT(x6, x1)) | >(x0, -1)
1295_1_rec3_InvokeMethod(1207_0_rec3_Return) → 1308_0_rec3_Return
1295_1_rec3_InvokeMethod(1308_0_rec3_Return) → 1308_0_rec3_Return

Performed bisimulation on rules. Used the following equivalence classes: {[1308_0_rec3_Return, 1245_0_rec2_Return, 1343_0_rec2_Return, 984_0_rec4_Return, 1070_0_rec4_Return, 1207_0_rec3_Return]=1308_0_rec3_Return, [Cond_1293_1_rec2_InvokeMethod_5, Cond_1293_1_rec2_InvokeMethod1_5]=Cond_1293_1_rec2_InvokeMethod_5, [Cond_1257_1_rec3_InvokeMethod_5, Cond_1257_1_rec3_InvokeMethod1_5]=Cond_1257_1_rec3_InvokeMethod_5}


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


P rules:
1293_1_REC2_INVOKEMETHOD(1308_0_rec3_Return, x2, x3, x0) → COND_1293_1_REC2_INVOKEMETHOD(&&(>(x0, 0), <=(0, *(4, -(x0, 1)))), 1308_0_rec3_Return, x2, x3, x0)
COND_1293_1_REC2_INVOKEMETHOD(TRUE, 1308_0_rec3_Return, x2, x3, x0) → 1293_1_REC2_INVOKEMETHOD(1293_0_rec3_Load(+(+(*(2, x2), *(3, x3)), *(4, -(x0, 1)))), x2, x3, -(x0, 1))
R rules:
1293_0_rec3_Load(x1) → 1198_0_rec3_GT(0, x1)
1198_0_rec3_GT(x0, x1) → Cond_1198_0_rec3_GT(<(x1, x0), x0, x1)
Cond_1198_0_rec3_GT(TRUE, x0, x1) → 1308_0_rec3_Return
1324_1_rec2_InvokeMethod(1308_0_rec3_Return, -1) → 1308_0_rec3_Return
1324_1_rec2_InvokeMethod(1308_0_rec3_Return, x0) → 1308_0_rec3_Return
1198_0_rec3_GT(x0, x1) → Cond_1198_0_rec3_GT1(&&(>=(x1, x0), >(x0, -1)), x0, x1, x5)
Cond_1198_0_rec3_GT1(TRUE, x0, x1, x5) → 1257_1_rec3_InvokeMethod(971_0_rec4_LT(x5), x0, x1)
971_0_rec4_LT(x0) → Cond_971_0_rec4_LT(<(x0, 0), x0)
Cond_971_0_rec4_LT(TRUE, x0) → 1308_0_rec3_Return
971_0_rec4_LT(x0) → Cond_971_0_rec4_LT1(>(x0, -1), x0, x3)
Cond_971_0_rec4_LT1(TRUE, x0, x3) → 1017_1_rec4_InvokeMethod(971_0_rec4_LT(x3))
1017_1_rec4_InvokeMethod(1308_0_rec3_Return) → 1308_0_rec3_Return
1257_1_rec3_InvokeMethod(1308_0_rec3_Return, x0, x1) → Cond_1257_1_rec3_InvokeMethod(>(x0, -1), 1308_0_rec3_Return, x0, x1, x6)
Cond_1257_1_rec3_InvokeMethod(TRUE, 1308_0_rec3_Return, x0, x1, x6) → 1295_1_rec3_InvokeMethod(1198_0_rec3_GT(x6, x1))
1295_1_rec3_InvokeMethod(1308_0_rec3_Return) → 1308_0_rec3_Return

(25) Obligation:

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


The following domains are used:

Integer, Boolean


The ITRS R consists of the following rules:
1293_0_rec3_Load(x1) → 1198_0_rec3_GT(0, x1)
1198_0_rec3_GT(x0, x1) → Cond_1198_0_rec3_GT(x1 < x0, x0, x1)
Cond_1198_0_rec3_GT(TRUE, x0, x1) → 1308_0_rec3_Return
1324_1_rec2_InvokeMethod(1308_0_rec3_Return, -1) → 1308_0_rec3_Return
1324_1_rec2_InvokeMethod(1308_0_rec3_Return, x0) → 1308_0_rec3_Return
1198_0_rec3_GT(x0, x1) → Cond_1198_0_rec3_GT1(x1 >= x0 && x0 > -1, x0, x1, x5)
Cond_1198_0_rec3_GT1(TRUE, x0, x1, x5) → 1257_1_rec3_InvokeMethod(971_0_rec4_LT(x5), x0, x1)
971_0_rec4_LT(x0) → Cond_971_0_rec4_LT(x0 < 0, x0)
Cond_971_0_rec4_LT(TRUE, x0) → 1308_0_rec3_Return
971_0_rec4_LT(x0) → Cond_971_0_rec4_LT1(x0 > -1, x0, x3)
Cond_971_0_rec4_LT1(TRUE, x0, x3) → 1017_1_rec4_InvokeMethod(971_0_rec4_LT(x3))
1017_1_rec4_InvokeMethod(1308_0_rec3_Return) → 1308_0_rec3_Return
1257_1_rec3_InvokeMethod(1308_0_rec3_Return, x0, x1) → Cond_1257_1_rec3_InvokeMethod(x0 > -1, 1308_0_rec3_Return, x0, x1, x6)
Cond_1257_1_rec3_InvokeMethod(TRUE, 1308_0_rec3_Return, x0, x1, x6) → 1295_1_rec3_InvokeMethod(1198_0_rec3_GT(x6, x1))
1295_1_rec3_InvokeMethod(1308_0_rec3_Return) → 1308_0_rec3_Return

The integer pair graph contains the following rules and edges:
(0): 1293_1_REC2_INVOKEMETHOD(1308_0_rec3_Return, x2[0], x3[0], x0[0]) → COND_1293_1_REC2_INVOKEMETHOD(x0[0] > 0 && 0 <= 4 * x0[0] - 1, 1308_0_rec3_Return, x2[0], x3[0], x0[0])
(1): COND_1293_1_REC2_INVOKEMETHOD(TRUE, 1308_0_rec3_Return, x2[1], x3[1], x0[1]) → 1293_1_REC2_INVOKEMETHOD(1293_0_rec3_Load(2 * x2[1] + 3 * x3[1] + 4 * x0[1] - 1), x2[1], x3[1], x0[1] - 1)

(0) -> (1), if (x0[0] > 0 && 0 <= 4 * x0[0] - 1x2[0]* x2[1]x3[0]* x3[1]x0[0]* x0[1])


(1) -> (0), if (1293_0_rec3_Load(2 * x2[1] + 3 * x3[1] + 4 * x0[1] - 1) →* 1308_0_rec3_Returnx2[1]* x2[0]x3[1]* x3[0]x0[1] - 1* x0[0])



The set Q consists of the following terms:
1293_0_rec3_Load(x0)
1198_0_rec3_GT(x0, x1)
Cond_1198_0_rec3_GT(TRUE, x0, x1)
1324_1_rec2_InvokeMethod(1308_0_rec3_Return, x0)
Cond_1198_0_rec3_GT1(TRUE, x0, x1, x2)
971_0_rec4_LT(x0)
Cond_971_0_rec4_LT(TRUE, x0)
Cond_971_0_rec4_LT1(TRUE, x0, x1)
1017_1_rec4_InvokeMethod(1308_0_rec3_Return)
1257_1_rec3_InvokeMethod(1308_0_rec3_Return, x0, x1)
Cond_1257_1_rec3_InvokeMethod(TRUE, 1308_0_rec3_Return, x0, x1, x2)
1295_1_rec3_InvokeMethod(1308_0_rec3_Return)

(26) 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@46ef0a4f 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 1293_1_REC2_INVOKEMETHOD(1308_0_rec3_Return, x2, x3, x0) → COND_1293_1_REC2_INVOKEMETHOD(&&(>(x0, 0), <=(0, *(4, -(x0, 1)))), 1308_0_rec3_Return, x2, x3, x0) the following chains were created:
  • We consider the chain 1293_1_REC2_INVOKEMETHOD(1308_0_rec3_Return, x2[0], x3[0], x0[0]) → COND_1293_1_REC2_INVOKEMETHOD(&&(>(x0[0], 0), <=(0, *(4, -(x0[0], 1)))), 1308_0_rec3_Return, x2[0], x3[0], x0[0]), COND_1293_1_REC2_INVOKEMETHOD(TRUE, 1308_0_rec3_Return, x2[1], x3[1], x0[1]) → 1293_1_REC2_INVOKEMETHOD(1293_0_rec3_Load(+(+(*(2, x2[1]), *(3, x3[1])), *(4, -(x0[1], 1)))), x2[1], x3[1], -(x0[1], 1)) which results in the following constraint:

    (1)    (&&(>(x0[0], 0), <=(0, *(4, -(x0[0], 1))))=TRUEx2[0]=x2[1]x3[0]=x3[1]x0[0]=x0[1]1293_1_REC2_INVOKEMETHOD(1308_0_rec3_Return, x2[0], x3[0], x0[0])≥NonInfC∧1293_1_REC2_INVOKEMETHOD(1308_0_rec3_Return, x2[0], x3[0], x0[0])≥COND_1293_1_REC2_INVOKEMETHOD(&&(>(x0[0], 0), <=(0, *(4, -(x0[0], 1)))), 1308_0_rec3_Return, x2[0], x3[0], x0[0])∧(UIncreasing(COND_1293_1_REC2_INVOKEMETHOD(&&(>(x0[0], 0), <=(0, *(4, -(x0[0], 1)))), 1308_0_rec3_Return, x2[0], x3[0], x0[0])), ≥))



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

    (2)    (>(x0[0], 0)=TRUE<=(0, *(4, -(x0[0], 1)))=TRUE1293_1_REC2_INVOKEMETHOD(1308_0_rec3_Return, x2[0], x3[0], x0[0])≥NonInfC∧1293_1_REC2_INVOKEMETHOD(1308_0_rec3_Return, x2[0], x3[0], x0[0])≥COND_1293_1_REC2_INVOKEMETHOD(&&(>(x0[0], 0), <=(0, *(4, -(x0[0], 1)))), 1308_0_rec3_Return, x2[0], x3[0], x0[0])∧(UIncreasing(COND_1293_1_REC2_INVOKEMETHOD(&&(>(x0[0], 0), <=(0, *(4, -(x0[0], 1)))), 1308_0_rec3_Return, x2[0], x3[0], x0[0])), ≥))



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

    (3)    (x0[0] + [-1] ≥ 0∧[4]x0[0] + [-4] ≥ 0 ⇒ (UIncreasing(COND_1293_1_REC2_INVOKEMETHOD(&&(>(x0[0], 0), <=(0, *(4, -(x0[0], 1)))), 1308_0_rec3_Return, x2[0], x3[0], x0[0])), ≥)∧[(-1)bni_28 + (-1)Bound*bni_28] + [(2)bni_28]x0[0] ≥ 0∧[(-1)bso_29] ≥ 0)



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

    (4)    (x0[0] + [-1] ≥ 0∧[4]x0[0] + [-4] ≥ 0 ⇒ (UIncreasing(COND_1293_1_REC2_INVOKEMETHOD(&&(>(x0[0], 0), <=(0, *(4, -(x0[0], 1)))), 1308_0_rec3_Return, x2[0], x3[0], x0[0])), ≥)∧[(-1)bni_28 + (-1)Bound*bni_28] + [(2)bni_28]x0[0] ≥ 0∧[(-1)bso_29] ≥ 0)



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

    (5)    (x0[0] + [-1] ≥ 0∧[4]x0[0] + [-4] ≥ 0 ⇒ (UIncreasing(COND_1293_1_REC2_INVOKEMETHOD(&&(>(x0[0], 0), <=(0, *(4, -(x0[0], 1)))), 1308_0_rec3_Return, x2[0], x3[0], x0[0])), ≥)∧[(-1)bni_28 + (-1)Bound*bni_28] + [(2)bni_28]x0[0] ≥ 0∧[(-1)bso_29] ≥ 0)



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

    (6)    (x0[0] + [-1] ≥ 0∧[4]x0[0] + [-4] ≥ 0 ⇒ (UIncreasing(COND_1293_1_REC2_INVOKEMETHOD(&&(>(x0[0], 0), <=(0, *(4, -(x0[0], 1)))), 1308_0_rec3_Return, x2[0], x3[0], x0[0])), ≥)∧0 = 0∧0 = 0∧[(-1)bni_28 + (-1)Bound*bni_28] + [(2)bni_28]x0[0] ≥ 0∧0 = 0∧0 = 0∧[(-1)bso_29] ≥ 0)



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

    (7)    (x0[0] ≥ 0∧[4]x0[0] ≥ 0 ⇒ (UIncreasing(COND_1293_1_REC2_INVOKEMETHOD(&&(>(x0[0], 0), <=(0, *(4, -(x0[0], 1)))), 1308_0_rec3_Return, x2[0], x3[0], x0[0])), ≥)∧0 = 0∧0 = 0∧[bni_28 + (-1)Bound*bni_28] + [(2)bni_28]x0[0] ≥ 0∧0 = 0∧0 = 0∧[(-1)bso_29] ≥ 0)



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

    (8)    (x0[0] ≥ 0∧x0[0] ≥ 0 ⇒ (UIncreasing(COND_1293_1_REC2_INVOKEMETHOD(&&(>(x0[0], 0), <=(0, *(4, -(x0[0], 1)))), 1308_0_rec3_Return, x2[0], x3[0], x0[0])), ≥)∧0 = 0∧0 = 0∧[bni_28 + (-1)Bound*bni_28] + [(2)bni_28]x0[0] ≥ 0∧0 = 0∧0 = 0∧[(-1)bso_29] ≥ 0)







For Pair COND_1293_1_REC2_INVOKEMETHOD(TRUE, 1308_0_rec3_Return, x2, x3, x0) → 1293_1_REC2_INVOKEMETHOD(1293_0_rec3_Load(+(+(*(2, x2), *(3, x3)), *(4, -(x0, 1)))), x2, x3, -(x0, 1)) the following chains were created:
  • We consider the chain COND_1293_1_REC2_INVOKEMETHOD(TRUE, 1308_0_rec3_Return, x2[1], x3[1], x0[1]) → 1293_1_REC2_INVOKEMETHOD(1293_0_rec3_Load(+(+(*(2, x2[1]), *(3, x3[1])), *(4, -(x0[1], 1)))), x2[1], x3[1], -(x0[1], 1)) which results in the following constraint:

    (9)    (COND_1293_1_REC2_INVOKEMETHOD(TRUE, 1308_0_rec3_Return, x2[1], x3[1], x0[1])≥NonInfC∧COND_1293_1_REC2_INVOKEMETHOD(TRUE, 1308_0_rec3_Return, x2[1], x3[1], x0[1])≥1293_1_REC2_INVOKEMETHOD(1293_0_rec3_Load(+(+(*(2, x2[1]), *(3, x3[1])), *(4, -(x0[1], 1)))), x2[1], x3[1], -(x0[1], 1))∧(UIncreasing(1293_1_REC2_INVOKEMETHOD(1293_0_rec3_Load(+(+(*(2, x2[1]), *(3, x3[1])), *(4, -(x0[1], 1)))), x2[1], x3[1], -(x0[1], 1))), ≥))



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

    (10)    ((UIncreasing(1293_1_REC2_INVOKEMETHOD(1293_0_rec3_Load(+(+(*(2, x2[1]), *(3, x3[1])), *(4, -(x0[1], 1)))), x2[1], x3[1], -(x0[1], 1))), ≥)∧[bni_30] = 0∧[1 + (-1)bso_31] ≥ 0)



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

    (11)    ((UIncreasing(1293_1_REC2_INVOKEMETHOD(1293_0_rec3_Load(+(+(*(2, x2[1]), *(3, x3[1])), *(4, -(x0[1], 1)))), x2[1], x3[1], -(x0[1], 1))), ≥)∧[bni_30] = 0∧[1 + (-1)bso_31] ≥ 0)



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

    (12)    ((UIncreasing(1293_1_REC2_INVOKEMETHOD(1293_0_rec3_Load(+(+(*(2, x2[1]), *(3, x3[1])), *(4, -(x0[1], 1)))), x2[1], x3[1], -(x0[1], 1))), ≥)∧[bni_30] = 0∧[1 + (-1)bso_31] ≥ 0)



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

    (13)    ((UIncreasing(1293_1_REC2_INVOKEMETHOD(1293_0_rec3_Load(+(+(*(2, x2[1]), *(3, x3[1])), *(4, -(x0[1], 1)))), x2[1], x3[1], -(x0[1], 1))), ≥)∧[bni_30] = 0∧0 = 0∧0 = 0∧0 = 0∧[1 + (-1)bso_31] ≥ 0)







To summarize, we get the following constraints P for the following pairs.
  • 1293_1_REC2_INVOKEMETHOD(1308_0_rec3_Return, x2, x3, x0) → COND_1293_1_REC2_INVOKEMETHOD(&&(>(x0, 0), <=(0, *(4, -(x0, 1)))), 1308_0_rec3_Return, x2, x3, x0)
    • (x0[0] ≥ 0∧x0[0] ≥ 0 ⇒ (UIncreasing(COND_1293_1_REC2_INVOKEMETHOD(&&(>(x0[0], 0), <=(0, *(4, -(x0[0], 1)))), 1308_0_rec3_Return, x2[0], x3[0], x0[0])), ≥)∧0 = 0∧0 = 0∧[bni_28 + (-1)Bound*bni_28] + [(2)bni_28]x0[0] ≥ 0∧0 = 0∧0 = 0∧[(-1)bso_29] ≥ 0)

  • COND_1293_1_REC2_INVOKEMETHOD(TRUE, 1308_0_rec3_Return, x2, x3, x0) → 1293_1_REC2_INVOKEMETHOD(1293_0_rec3_Load(+(+(*(2, x2), *(3, x3)), *(4, -(x0, 1)))), x2, x3, -(x0, 1))
    • ((UIncreasing(1293_1_REC2_INVOKEMETHOD(1293_0_rec3_Load(+(+(*(2, x2[1]), *(3, x3[1])), *(4, -(x0[1], 1)))), x2[1], x3[1], -(x0[1], 1))), ≥)∧[bni_30] = 0∧0 = 0∧0 = 0∧0 = 0∧[1 + (-1)bso_31] ≥ 0)




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

POL(TRUE) = 0   
POL(FALSE) = 0   
POL(1293_0_rec3_Load(x1)) = 0   
POL(1198_0_rec3_GT(x1, x2)) = 0   
POL(0) = 0   
POL(Cond_1198_0_rec3_GT(x1, x2, x3)) = [-1]   
POL(<(x1, x2)) = [-1]   
POL(1308_0_rec3_Return) = [-1]   
POL(1324_1_rec2_InvokeMethod(x1, x2)) = [-1]   
POL(-1) = [-1]   
POL(Cond_1198_0_rec3_GT1(x1, x2, x3, x4)) = 0   
POL(&&(x1, x2)) = [-1]   
POL(>=(x1, x2)) = [-1]   
POL(>(x1, x2)) = [-1]   
POL(1257_1_rec3_InvokeMethod(x1, x2, x3)) = 0   
POL(971_0_rec4_LT(x1)) = [-1] + [-1]x1   
POL(Cond_971_0_rec4_LT(x1, x2)) = [-1] + [-1]x2   
POL(Cond_971_0_rec4_LT1(x1, x2, x3)) = [-1] + [-1]x2   
POL(1017_1_rec4_InvokeMethod(x1)) = [-1]   
POL(Cond_1257_1_rec3_InvokeMethod(x1, x2, x3, x4, x5)) = 0   
POL(1295_1_rec3_InvokeMethod(x1)) = x1   
POL(1293_1_REC2_INVOKEMETHOD(x1, x2, x3, x4)) = [2]x4 + x1   
POL(COND_1293_1_REC2_INVOKEMETHOD(x1, x2, x3, x4, x5)) = [-1] + [2]x5   
POL(<=(x1, x2)) = [-1]   
POL(*(x1, x2)) = x1·x2   
POL(4) = [4]   
POL(-(x1, x2)) = x1 + [-1]x2   
POL(1) = [1]   
POL(+(x1, x2)) = x1 + x2   
POL(2) = [2]   
POL(3) = [3]   

The following pairs are in P>:

COND_1293_1_REC2_INVOKEMETHOD(TRUE, 1308_0_rec3_Return, x2[1], x3[1], x0[1]) → 1293_1_REC2_INVOKEMETHOD(1293_0_rec3_Load(+(+(*(2, x2[1]), *(3, x3[1])), *(4, -(x0[1], 1)))), x2[1], x3[1], -(x0[1], 1))

The following pairs are in Pbound:

1293_1_REC2_INVOKEMETHOD(1308_0_rec3_Return, x2[0], x3[0], x0[0]) → COND_1293_1_REC2_INVOKEMETHOD(&&(>(x0[0], 0), <=(0, *(4, -(x0[0], 1)))), 1308_0_rec3_Return, x2[0], x3[0], x0[0])

The following pairs are in P:

1293_1_REC2_INVOKEMETHOD(1308_0_rec3_Return, x2[0], x3[0], x0[0]) → COND_1293_1_REC2_INVOKEMETHOD(&&(>(x0[0], 0), <=(0, *(4, -(x0[0], 1)))), 1308_0_rec3_Return, x2[0], x3[0], x0[0])

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

1293_0_rec3_Load(x1)11198_0_rec3_GT(0, x1)1
1198_0_rec3_GT(x0, x1)1Cond_1198_0_rec3_GT(<(x1, x0), x0, x1)1
1198_0_rec3_GT(x0, x1)1Cond_1198_0_rec3_GT1(&&(>=(x1, x0), >(x0, -1)), x0, x1, x5)1
Cond_1198_0_rec3_GT1(TRUE, x0, x1, x5)11257_1_rec3_InvokeMethod(971_0_rec4_LT(x5), x0, x1)1
1257_1_rec3_InvokeMethod(1308_0_rec3_Return, x0, x1)1Cond_1257_1_rec3_InvokeMethod(>(x0, -1), 1308_0_rec3_Return, x0, x1, x6)1
Cond_1257_1_rec3_InvokeMethod(TRUE, 1308_0_rec3_Return, x0, x1, x6)11295_1_rec3_InvokeMethod(1198_0_rec3_GT(x6, x1))1
1295_1_rec3_InvokeMethod(1308_0_rec3_Return)11308_0_rec3_Return1
Cond_1198_0_rec3_GT(TRUE, x0, x1)11308_0_rec3_Return1

(27) Complex Obligation (AND)

(28) Obligation:

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


The following domains are used:

Integer, Boolean


The ITRS R consists of the following rules:
1293_0_rec3_Load(x1) → 1198_0_rec3_GT(0, x1)
1198_0_rec3_GT(x0, x1) → Cond_1198_0_rec3_GT(x1 < x0, x0, x1)
Cond_1198_0_rec3_GT(TRUE, x0, x1) → 1308_0_rec3_Return
1324_1_rec2_InvokeMethod(1308_0_rec3_Return, -1) → 1308_0_rec3_Return
1324_1_rec2_InvokeMethod(1308_0_rec3_Return, x0) → 1308_0_rec3_Return
1198_0_rec3_GT(x0, x1) → Cond_1198_0_rec3_GT1(x1 >= x0 && x0 > -1, x0, x1, x5)
Cond_1198_0_rec3_GT1(TRUE, x0, x1, x5) → 1257_1_rec3_InvokeMethod(971_0_rec4_LT(x5), x0, x1)
971_0_rec4_LT(x0) → Cond_971_0_rec4_LT(x0 < 0, x0)
Cond_971_0_rec4_LT(TRUE, x0) → 1308_0_rec3_Return
971_0_rec4_LT(x0) → Cond_971_0_rec4_LT1(x0 > -1, x0, x3)
Cond_971_0_rec4_LT1(TRUE, x0, x3) → 1017_1_rec4_InvokeMethod(971_0_rec4_LT(x3))
1017_1_rec4_InvokeMethod(1308_0_rec3_Return) → 1308_0_rec3_Return
1257_1_rec3_InvokeMethod(1308_0_rec3_Return, x0, x1) → Cond_1257_1_rec3_InvokeMethod(x0 > -1, 1308_0_rec3_Return, x0, x1, x6)
Cond_1257_1_rec3_InvokeMethod(TRUE, 1308_0_rec3_Return, x0, x1, x6) → 1295_1_rec3_InvokeMethod(1198_0_rec3_GT(x6, x1))
1295_1_rec3_InvokeMethod(1308_0_rec3_Return) → 1308_0_rec3_Return

The integer pair graph contains the following rules and edges:
(0): 1293_1_REC2_INVOKEMETHOD(1308_0_rec3_Return, x2[0], x3[0], x0[0]) → COND_1293_1_REC2_INVOKEMETHOD(x0[0] > 0 && 0 <= 4 * x0[0] - 1, 1308_0_rec3_Return, x2[0], x3[0], x0[0])


The set Q consists of the following terms:
1293_0_rec3_Load(x0)
1198_0_rec3_GT(x0, x1)
Cond_1198_0_rec3_GT(TRUE, x0, x1)
1324_1_rec2_InvokeMethod(1308_0_rec3_Return, x0)
Cond_1198_0_rec3_GT1(TRUE, x0, x1, x2)
971_0_rec4_LT(x0)
Cond_971_0_rec4_LT(TRUE, x0)
Cond_971_0_rec4_LT1(TRUE, x0, x1)
1017_1_rec4_InvokeMethod(1308_0_rec3_Return)
1257_1_rec3_InvokeMethod(1308_0_rec3_Return, x0, x1)
Cond_1257_1_rec3_InvokeMethod(TRUE, 1308_0_rec3_Return, x0, x1, x2)
1295_1_rec3_InvokeMethod(1308_0_rec3_Return)

(29) IDependencyGraphProof (EQUIVALENT transformation)

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

(30) TRUE

(31) Obligation:

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


The following domains are used:

Integer, Boolean


The ITRS R consists of the following rules:
1293_0_rec3_Load(x1) → 1198_0_rec3_GT(0, x1)
1198_0_rec3_GT(x0, x1) → Cond_1198_0_rec3_GT(x1 < x0, x0, x1)
Cond_1198_0_rec3_GT(TRUE, x0, x1) → 1308_0_rec3_Return
1324_1_rec2_InvokeMethod(1308_0_rec3_Return, -1) → 1308_0_rec3_Return
1324_1_rec2_InvokeMethod(1308_0_rec3_Return, x0) → 1308_0_rec3_Return
1198_0_rec3_GT(x0, x1) → Cond_1198_0_rec3_GT1(x1 >= x0 && x0 > -1, x0, x1, x5)
Cond_1198_0_rec3_GT1(TRUE, x0, x1, x5) → 1257_1_rec3_InvokeMethod(971_0_rec4_LT(x5), x0, x1)
971_0_rec4_LT(x0) → Cond_971_0_rec4_LT(x0 < 0, x0)
Cond_971_0_rec4_LT(TRUE, x0) → 1308_0_rec3_Return
971_0_rec4_LT(x0) → Cond_971_0_rec4_LT1(x0 > -1, x0, x3)
Cond_971_0_rec4_LT1(TRUE, x0, x3) → 1017_1_rec4_InvokeMethod(971_0_rec4_LT(x3))
1017_1_rec4_InvokeMethod(1308_0_rec3_Return) → 1308_0_rec3_Return
1257_1_rec3_InvokeMethod(1308_0_rec3_Return, x0, x1) → Cond_1257_1_rec3_InvokeMethod(x0 > -1, 1308_0_rec3_Return, x0, x1, x6)
Cond_1257_1_rec3_InvokeMethod(TRUE, 1308_0_rec3_Return, x0, x1, x6) → 1295_1_rec3_InvokeMethod(1198_0_rec3_GT(x6, x1))
1295_1_rec3_InvokeMethod(1308_0_rec3_Return) → 1308_0_rec3_Return

The integer pair graph contains the following rules and edges:
(1): COND_1293_1_REC2_INVOKEMETHOD(TRUE, 1308_0_rec3_Return, x2[1], x3[1], x0[1]) → 1293_1_REC2_INVOKEMETHOD(1293_0_rec3_Load(2 * x2[1] + 3 * x3[1] + 4 * x0[1] - 1), x2[1], x3[1], x0[1] - 1)


The set Q consists of the following terms:
1293_0_rec3_Load(x0)
1198_0_rec3_GT(x0, x1)
Cond_1198_0_rec3_GT(TRUE, x0, x1)
1324_1_rec2_InvokeMethod(1308_0_rec3_Return, x0)
Cond_1198_0_rec3_GT1(TRUE, x0, x1, x2)
971_0_rec4_LT(x0)
Cond_971_0_rec4_LT(TRUE, x0)
Cond_971_0_rec4_LT1(TRUE, x0, x1)
1017_1_rec4_InvokeMethod(1308_0_rec3_Return)
1257_1_rec3_InvokeMethod(1308_0_rec3_Return, x0, x1)
Cond_1257_1_rec3_InvokeMethod(TRUE, 1308_0_rec3_Return, x0, x1, x2)
1295_1_rec3_InvokeMethod(1308_0_rec3_Return)

(32) IDependencyGraphProof (EQUIVALENT transformation)

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

(33) TRUE

(34) Obligation:

SCC of termination graph based on JBC Program.
SCC contains nodes from the following methods: Recursions.rec1(III)V
SCC calls the following helper methods: Recursions.rec2(IIII)V, Recursions.rec1(III)V, Recursions.rec3(IIIII)V, Recursions.rec4(II)V
Performed SCC analyses: UsedFieldsAnalysis

(35) SCCToIDPv1Proof (SOUND transformation)

Transformed FIGraph SCCs to IDPs. Log:

Generated 22 rules for P and 112 rules for R.


P rules:
1187_0_rec1_Load(EOS(STATIC_1187), i195, i43, i196, i195) → 1188_0_rec1_GT(EOS(STATIC_1188), i195, i43, i196, i195, i43)
1188_0_rec1_GT(EOS(STATIC_1188), i195, i43, i196, i195, i43) → 1193_0_rec1_GT(EOS(STATIC_1193), i195, i43, i196, i195, i43)
1193_0_rec1_GT(EOS(STATIC_1193), i195, i43, i196, i195, i43) → 1196_0_rec1_Load(EOS(STATIC_1196), i195, i43, i196) | <=(i195, i43)
1196_0_rec1_Load(EOS(STATIC_1196), i195, i43, i196) → 1200_0_rec1_Load(EOS(STATIC_1200), i195, i43, i196, i196)
1200_0_rec1_Load(EOS(STATIC_1200), i195, i43, i196, i196) → 1206_0_rec1_IntArithmetic(EOS(STATIC_1206), i195, i43, i196, i196, i195)
1206_0_rec1_IntArithmetic(EOS(STATIC_1206), i195, i43, i196, i196, i195) → 1211_0_rec1_ConstantStackPush(EOS(STATIC_1211), i195, i43, i196, +(i196, i195)) | &&(>=(i196, 0), >=(i195, 0))
1211_0_rec1_ConstantStackPush(EOS(STATIC_1211), i195, i43, i196, i202) → 1215_0_rec1_Load(EOS(STATIC_1215), i195, i43, i196, i202, 0)
1215_0_rec1_Load(EOS(STATIC_1215), i195, i43, i196, i202, matching1) → 1219_0_rec1_Load(EOS(STATIC_1219), i195, i43, i196, i202, 0, i196) | =(matching1, 0)
1219_0_rec1_Load(EOS(STATIC_1219), i195, i43, i196, i202, matching1, i196) → 1223_0_rec1_InvokeMethod(EOS(STATIC_1223), i195, i43, i196, i202, 0, i196, i195) | =(matching1, 0)
1223_0_rec1_InvokeMethod(EOS(STATIC_1223), i195, i43, i196, i202, matching1, i196, i195) → 1225_1_rec1_InvokeMethod(1225_0_rec2_Load(EOS(STATIC_1225), i202, 0, i196, i195), i195, i43, i196, i202, 0, i196, i195) | =(matching1, 0)
1225_1_rec1_InvokeMethod(1343_0_rec2_Return(EOS(STATIC_1343)), i299, i43, i298, i297, matching1, i298, i299) → 1352_0_rec2_Return(EOS(STATIC_1352), i299, i43, i298, i297, 0, i298, i299) | =(matching1, 0)
1352_0_rec2_Return(EOS(STATIC_1352), i299, i43, i298, i297, matching1, i298, i299) → 1336_0_rec2_Return(EOS(STATIC_1336), i299, i43, i298, i297, 0, i298, i299) | =(matching1, 0)
1336_0_rec2_Return(EOS(STATIC_1336), i285, i43, i284, i283, matching1, i284, i285) → 1341_0_rec1_Load(EOS(STATIC_1341), i285, i43, i284) | =(matching1, 0)
1341_0_rec1_Load(EOS(STATIC_1341), i285, i43, i284) → 1344_0_rec1_ConstantStackPush(EOS(STATIC_1344), i43, i284, i285)
1344_0_rec1_ConstantStackPush(EOS(STATIC_1344), i43, i284, i285) → 1346_0_rec1_IntArithmetic(EOS(STATIC_1346), i43, i284, i285, 1)
1346_0_rec1_IntArithmetic(EOS(STATIC_1346), i43, i284, i285, matching1) → 1350_0_rec1_Load(EOS(STATIC_1350), i43, i284, +(i285, 1)) | &&(>=(i285, 0), =(matching1, 1))
1350_0_rec1_Load(EOS(STATIC_1350), i43, i284, i304) → 1355_0_rec1_Load(EOS(STATIC_1355), i284, i304, i43)
1355_0_rec1_Load(EOS(STATIC_1355), i284, i304, i43) → 1356_0_rec1_InvokeMethod(EOS(STATIC_1356), i304, i43, i284)
1356_0_rec1_InvokeMethod(EOS(STATIC_1356), i304, i43, i284) → 1357_1_rec1_InvokeMethod(1357_0_rec1_Load(EOS(STATIC_1357), i304, i43, i284), i304, i43, i284)
1357_0_rec1_Load(EOS(STATIC_1357), i304, i43, i284) → 1359_0_rec1_Load(EOS(STATIC_1359), i304, i43, i284)
1359_0_rec1_Load(EOS(STATIC_1359), i304, i43, i284) → 1184_0_rec1_Load(EOS(STATIC_1184), i304, i43, i284)
1184_0_rec1_Load(EOS(STATIC_1184), i195, i43, i196) → 1187_0_rec1_Load(EOS(STATIC_1187), i195, i43, i196, i195)
R rules:
1225_0_rec2_Load(EOS(STATIC_1225), i202, matching1, i196, i195) → 1228_0_rec2_Load(EOS(STATIC_1228), i202, 0, i196, i195) | =(matching1, 0)
1228_0_rec2_Load(EOS(STATIC_1228), i202, matching1, i196, i195) → 1233_0_rec2_Load(EOS(STATIC_1233), i202, 0, i196, i195) | =(matching1, 0)
1296_0_rec3_Load(EOS(STATIC_1296), matching1, i215, i216, i221) → 1190_0_rec3_Load(EOS(STATIC_1190), 0, i233, i215, i216) | =(matching1, 0)
1326_0_rec2_Load(EOS(STATIC_1326), matching1, i240, i241) → 1233_0_rec2_Load(EOS(STATIC_1233), i268, 0, i240, i241) | =(matching1, 0)
1260_0_rec4_Load(EOS(STATIC_1260)) → 958_0_rec4_Load(EOS(STATIC_958), i223, 0)
1298_0_rec3_Load(EOS(STATIC_1298), i115, i116, i117) → 1190_0_rec3_Load(EOS(STATIC_1190), i232, i115, i116, i117)
1023_0_rec4_Load(EOS(STATIC_1023), matching1) → 958_0_rec4_Load(EOS(STATIC_958), i119, 0) | =(matching1, 0)
1233_0_rec2_Load(EOS(STATIC_1233), i214, matching1, i215, i216) → 1236_0_rec2_Load(EOS(STATIC_1236), i214, 0, i215, i216, i214) | =(matching1, 0)
1236_0_rec2_Load(EOS(STATIC_1236), i214, matching1, i215, i216, i214) → 1238_0_rec2_LT(EOS(STATIC_1238), i214, 0, i215, i216, i214, 0) | =(matching1, 0)
1238_0_rec2_LT(EOS(STATIC_1238), i220, matching1, i215, i216, i220, matching2) → 1241_0_rec2_LT(EOS(STATIC_1241), i220, 0, i215, i216, i220, 0) | &&(=(matching1, 0), =(matching2, 0))
1238_0_rec2_LT(EOS(STATIC_1238), i221, matching1, i215, i216, i221, matching2) → 1242_0_rec2_LT(EOS(STATIC_1242), i221, 0, i215, i216, i221, 0) | &&(=(matching1, 0), =(matching2, 0))
1241_0_rec2_LT(EOS(STATIC_1241), i220, matching1, i215, i216, i220, matching2) → 1245_0_rec2_Return(EOS(STATIC_1245)) | &&(&&(<(i220, 0), =(matching1, 0)), =(matching2, 0))
1242_0_rec2_LT(EOS(STATIC_1242), i221, matching1, i215, i216, i221, matching2) → 1246_0_rec2_ConstantStackPush(EOS(STATIC_1246), i221, 0, i215, i216) | &&(&&(>=(i221, 0), =(matching1, 0)), =(matching2, 0))
1246_0_rec2_ConstantStackPush(EOS(STATIC_1246), i221, matching1, i215, i216) → 1250_0_rec2_ConstantStackPush(EOS(STATIC_1250), i221, 0, i215, i216, 0) | =(matching1, 0)
1250_0_rec2_ConstantStackPush(EOS(STATIC_1250), i221, matching1, i215, i216, matching2) → 1252_0_rec2_Load(EOS(STATIC_1252), i221, 0, i215, i216, 0) | &&(=(matching1, 0), =(matching2, 0))
1252_0_rec2_Load(EOS(STATIC_1252), i221, matching1, i215, i216, matching2) → 1256_0_rec2_IntArithmetic(EOS(STATIC_1256), i221, 0, i215, i216, 0, i215) | &&(=(matching1, 0), =(matching2, 0))
1256_0_rec2_IntArithmetic(EOS(STATIC_1256), i221, matching1, i215, i216, matching2, i215) → 1258_0_rec2_ConstantStackPush(EOS(STATIC_1258), i221, 0, i215, i216, 0) | &&(=(matching1, 0), =(matching2, 0))
1258_0_rec2_ConstantStackPush(EOS(STATIC_1258), i221, matching1, i215, i216, matching2) → 1261_0_rec2_Load(EOS(STATIC_1261), i221, 0, i215, i216, 0) | &&(=(matching1, 0), =(matching2, 0))
1261_0_rec2_Load(EOS(STATIC_1261), i221, matching1, i215, i216, matching2) → 1262_0_rec2_IntArithmetic(EOS(STATIC_1262), i221, 0, i215, i216, 0, i216) | &&(=(matching1, 0), =(matching2, 0))
1262_0_rec2_IntArithmetic(EOS(STATIC_1262), i221, matching1, i215, i216, matching2, i216) → 1267_0_rec2_IntArithmetic(EOS(STATIC_1267), i221, 0, i215, i216, 0) | &&(=(matching1, 0), =(matching2, 0))
1267_0_rec2_IntArithmetic(EOS(STATIC_1267), i221, matching1, i215, i216, matching2) → 1273_0_rec2_ConstantStackPush(EOS(STATIC_1273), i221, 0, i215, i216, 0) | &&(=(matching1, 0), =(matching2, 0))
1273_0_rec2_ConstantStackPush(EOS(STATIC_1273), i221, matching1, i215, i216, matching2) → 1276_0_rec2_Load(EOS(STATIC_1276), i221, 0, i215, i216, 0) | &&(=(matching1, 0), =(matching2, 0))
1276_0_rec2_Load(EOS(STATIC_1276), i221, matching1, i215, i216, matching2) → 1278_0_rec2_IntArithmetic(EOS(STATIC_1278), i221, 0, i215, i216, 0, i221) | &&(=(matching1, 0), =(matching2, 0))
1278_0_rec2_IntArithmetic(EOS(STATIC_1278), i221, matching1, i215, i216, matching2, i221) → 1281_0_rec2_IntArithmetic(EOS(STATIC_1281), i221, 0, i215, i216, 0) | &&(=(matching1, 0), =(matching2, 0))
1281_0_rec2_IntArithmetic(EOS(STATIC_1281), i221, matching1, i215, i216, matching2) → 1283_0_rec2_Load(EOS(STATIC_1283), i221, 0, i215, i216, 0) | &&(=(matching1, 0), =(matching2, 0))
1283_0_rec2_Load(EOS(STATIC_1283), i221, matching1, i215, i216, matching2) → 1286_0_rec2_Load(EOS(STATIC_1286), i221, 0, i215, i216, 0, i215) | &&(=(matching1, 0), =(matching2, 0))
1286_0_rec2_Load(EOS(STATIC_1286), i221, matching1, i215, i216, matching2, i215) → 1289_0_rec2_Load(EOS(STATIC_1289), i221, 0, i215, i216, 0, i215, i216) | &&(=(matching1, 0), =(matching2, 0))
1289_0_rec2_Load(EOS(STATIC_1289), i221, matching1, i215, i216, matching2, i215, i216) → 1291_0_rec2_InvokeMethod(EOS(STATIC_1291), i221, 0, i215, i216, 0, i215, i216, i221) | &&(=(matching1, 0), =(matching2, 0))
1291_0_rec2_InvokeMethod(EOS(STATIC_1291), i221, matching1, i215, i216, matching2, i215, i216, i221) → 1293_1_rec2_InvokeMethod(1293_0_rec3_Load(EOS(STATIC_1293), 0, i215, i216, i221), i221, 0, i215, i216, 0, i215, i216, i221) | &&(=(matching1, 0), =(matching2, 0))
1293_0_rec3_Load(EOS(STATIC_1293), matching1, i215, i216, i221) → 1296_0_rec3_Load(EOS(STATIC_1296), 0, i215, i216, i221) | =(matching1, 0)
1293_1_rec2_InvokeMethod(1207_0_rec3_Return(EOS(STATIC_1207)), i242, matching1, i240, i241, matching2, i240, i241, i242) → 1304_0_rec3_Return(EOS(STATIC_1304), i242, 0, i240, i241, 0, i240, i241, i242) | &&(=(matching1, 0), =(matching2, 0))
1293_1_rec2_InvokeMethod(1308_0_rec3_Return(EOS(STATIC_1308)), i261, matching1, i259, i260, matching2, i259, i260, i261) → 1318_0_rec3_Return(EOS(STATIC_1318), i261, 0, i259, i260, 0, i259, i260, i261) | &&(=(matching1, 0), =(matching2, 0))
1304_0_rec3_Return(EOS(STATIC_1304), i242, matching1, i240, i241, matching2, i240, i241, i242) → 1306_0_rec2_Load(EOS(STATIC_1306), i242, 0, i240, i241) | &&(=(matching1, 0), =(matching2, 0))
1306_0_rec2_Load(EOS(STATIC_1306), i242, matching1, i240, i241) → 1309_0_rec2_ConstantStackPush(EOS(STATIC_1309), 0, i240, i241, i242) | =(matching1, 0)
1309_0_rec2_ConstantStackPush(EOS(STATIC_1309), matching1, i240, i241, i242) → 1312_0_rec2_IntArithmetic(EOS(STATIC_1312), 0, i240, i241, i242) | =(matching1, 0)
1312_0_rec2_IntArithmetic(EOS(STATIC_1312), matching1, i240, i241, i242) → 1316_0_rec2_Load(EOS(STATIC_1316), 0, i240, i241) | &&(>=(i242, 0), =(matching1, 0))
1316_0_rec2_Load(EOS(STATIC_1316), matching1, i240, i241) → 1321_0_rec2_Load(EOS(STATIC_1321), i240, i241, 0) | =(matching1, 0)
1318_0_rec3_Return(EOS(STATIC_1318), i261, matching1, i259, i260, matching2, i259, i260, i261) → 1304_0_rec3_Return(EOS(STATIC_1304), i261, 0, i259, i260, 0, i259, i260, i261) | &&(=(matching1, 0), =(matching2, 0))
1321_0_rec2_Load(EOS(STATIC_1321), i240, i241, matching1) → 1322_0_rec2_Load(EOS(STATIC_1322), i241, 0, i240) | =(matching1, 0)
1322_0_rec2_Load(EOS(STATIC_1322), i241, matching1, i240) → 1323_0_rec2_InvokeMethod(EOS(STATIC_1323), 0, i240, i241) | =(matching1, 0)
1323_0_rec2_InvokeMethod(EOS(STATIC_1323), matching1, i240, i241) → 1324_1_rec2_InvokeMethod(1324_0_rec2_Load(EOS(STATIC_1324), 0, i240, i241), 0, i240, i241) | =(matching1, 0)
1324_0_rec2_Load(EOS(STATIC_1324), matching1, i240, i241) → 1326_0_rec2_Load(EOS(STATIC_1326), 0, i240, i241) | =(matching1, 0)
1324_1_rec2_InvokeMethod(1245_0_rec2_Return(EOS(STATIC_1245)), matching1, i281, i282) → 1329_0_rec2_Return(EOS(STATIC_1329), 0, i281, i282) | =(matching1, 0)
1324_1_rec2_InvokeMethod(1343_0_rec2_Return(EOS(STATIC_1343)), matching1, i302, i303) → 1354_0_rec2_Return(EOS(STATIC_1354), 0, i302, i303) | =(matching1, 0)
1329_0_rec2_Return(EOS(STATIC_1329), matching1, i281, i282) → 1339_0_rec2_Return(EOS(STATIC_1339), 0, i281, i282) | =(matching1, 0)
1339_0_rec2_Return(EOS(STATIC_1339), matching1, i290, i291) → 1343_0_rec2_Return(EOS(STATIC_1343)) | =(matching1, 0)
1354_0_rec2_Return(EOS(STATIC_1354), matching1, i302, i303) → 1339_0_rec2_Return(EOS(STATIC_1339), 0, i302, i303) | =(matching1, 0)
1188_0_rec1_GT(EOS(STATIC_1188), i195, i43, i196, i195, i43) → 1192_0_rec1_GT(EOS(STATIC_1192), i195, i43, i196, i195, i43)
1192_0_rec1_GT(EOS(STATIC_1192), i195, i43, i196, i195, i43) → 1195_0_rec1_Return(EOS(STATIC_1195)) | >(i195, i43)
1195_0_rec1_Return(EOS(STATIC_1195)) → 1364_0_rec1_Return(EOS(STATIC_1364))
1357_1_rec1_InvokeMethod(1195_0_rec1_Return(EOS(STATIC_1195)), i314, i315, i316) → 1362_0_rec1_Return(EOS(STATIC_1362), i314, i315, i316)
1357_1_rec1_InvokeMethod(1364_0_rec1_Return(EOS(STATIC_1364)), i323, i324, i325) → 1371_0_rec1_Return(EOS(STATIC_1371), i323, i324, i325)
1362_0_rec1_Return(EOS(STATIC_1362), i314, i315, i316) → 1364_0_rec1_Return(EOS(STATIC_1364))
1371_0_rec1_Return(EOS(STATIC_1371), i323, i324, i325) → 1362_0_rec1_Return(EOS(STATIC_1362), i323, i324, i325)
1190_0_rec3_Load(EOS(STATIC_1190), i197, i115, i116, i117) → 1194_0_rec3_Load(EOS(STATIC_1194), i197, i115, i116, i117, i197)
1194_0_rec3_Load(EOS(STATIC_1194), i197, i115, i116, i117, i197) → 1198_0_rec3_GT(EOS(STATIC_1198), i197, i115, i116, i117, i197, i115)
1198_0_rec3_GT(EOS(STATIC_1198), i197, i115, i116, i117, i197, i115) → 1201_0_rec3_GT(EOS(STATIC_1201), i197, i115, i116, i117, i197, i115)
1198_0_rec3_GT(EOS(STATIC_1198), i197, i115, i116, i117, i197, i115) → 1202_0_rec3_GT(EOS(STATIC_1202), i197, i115, i116, i117, i197, i115)
1201_0_rec3_GT(EOS(STATIC_1201), i197, i115, i116, i117, i197, i115) → 1207_0_rec3_Return(EOS(STATIC_1207)) | >(i197, i115)
1202_0_rec3_GT(EOS(STATIC_1202), i197, i115, i116, i117, i197, i115) → 1208_0_rec3_ConstantStackPush(EOS(STATIC_1208), i197, i115, i116, i117) | <=(i197, i115)
1207_0_rec3_Return(EOS(STATIC_1207)) → 1308_0_rec3_Return(EOS(STATIC_1308))
1208_0_rec3_ConstantStackPush(EOS(STATIC_1208), i197, i115, i116, i117) → 1213_0_rec3_Load(EOS(STATIC_1213), i197, i115, i116, i117)
1213_0_rec3_Load(EOS(STATIC_1213), i197, i115, i116, i117) → 1218_0_rec3_IntArithmetic(EOS(STATIC_1218), i197, i115, i116, i117, i116)
1218_0_rec3_IntArithmetic(EOS(STATIC_1218), i197, i115, i116, i117, i116) → 1222_0_rec3_ConstantStackPush(EOS(STATIC_1222), i197, i115, i116, i117)
1222_0_rec3_ConstantStackPush(EOS(STATIC_1222), i197, i115, i116, i117) → 1224_0_rec3_Load(EOS(STATIC_1224), i197, i115, i116, i117)
1224_0_rec3_Load(EOS(STATIC_1224), i197, i115, i116, i117) → 1227_0_rec3_IntArithmetic(EOS(STATIC_1227), i197, i115, i116, i117, i117)
1227_0_rec3_IntArithmetic(EOS(STATIC_1227), i197, i115, i116, i117, i117) → 1229_0_rec3_IntArithmetic(EOS(STATIC_1229), i197, i115, i116, i117)
1229_0_rec3_IntArithmetic(EOS(STATIC_1229), i197, i115, i116, i117) → 1231_0_rec3_ConstantStackPush(EOS(STATIC_1231), i197, i115, i116, i117)
1231_0_rec3_ConstantStackPush(EOS(STATIC_1231), i197, i115, i116, i117) → 1235_0_rec3_Load(EOS(STATIC_1235), i197, i115, i116, i117)
1235_0_rec3_Load(EOS(STATIC_1235), i197, i115, i116, i117) → 1237_0_rec3_IntArithmetic(EOS(STATIC_1237), i197, i115, i116, i117)
1237_0_rec3_IntArithmetic(EOS(STATIC_1237), i197, i115, i116, i117) → 1240_0_rec3_IntArithmetic(EOS(STATIC_1240), i197, i115, i116, i117)
1240_0_rec3_IntArithmetic(EOS(STATIC_1240), i197, i115, i116, i117) → 1243_0_rec3_Load(EOS(STATIC_1243), i197, i115, i116, i117)
1243_0_rec3_Load(EOS(STATIC_1243), i197, i115, i116, i117) → 1247_0_rec3_IntArithmetic(EOS(STATIC_1247), i197, i115, i116, i117, i197)
1247_0_rec3_IntArithmetic(EOS(STATIC_1247), i197, i115, i116, i117, i197) → 1251_0_rec3_ConstantStackPush(EOS(STATIC_1251), i197, i115, i116, i117) | >=(i197, 0)
1251_0_rec3_ConstantStackPush(EOS(STATIC_1251), i197, i115, i116, i117) → 1254_0_rec3_InvokeMethod(EOS(STATIC_1254), i197, i115, i116, i117)
1254_0_rec3_InvokeMethod(EOS(STATIC_1254), i197, i115, i116, i117) → 1257_1_rec3_InvokeMethod(1257_0_rec4_Load(EOS(STATIC_1257)), i197, i115, i116, i117)
1257_0_rec4_Load(EOS(STATIC_1257)) → 1260_0_rec4_Load(EOS(STATIC_1260))
1257_1_rec3_InvokeMethod(984_0_rec4_Return(EOS(STATIC_984)), i197, i115, i116, i117) → 1268_0_rec4_Return(EOS(STATIC_1268), i197, i115, i116, i117)
1257_1_rec3_InvokeMethod(1070_0_rec4_Return(EOS(STATIC_1070)), i197, i115, i116, i117) → 1271_0_rec4_Return(EOS(STATIC_1271), i197, i115, i116, i117)
1268_0_rec4_Return(EOS(STATIC_1268), i197, i115, i116, i117) → 1272_0_rec4_Return(EOS(STATIC_1272), i197, i115, i116, i117)
1271_0_rec4_Return(EOS(STATIC_1271), i197, i115, i116, i117) → 1272_0_rec4_Return(EOS(STATIC_1272), i197, i115, i116, i117)
1272_0_rec4_Return(EOS(STATIC_1272), i197, i115, i116, i117) → 1274_0_rec3_Load(EOS(STATIC_1274), i197, i115, i116, i117)
1274_0_rec3_Load(EOS(STATIC_1274), i197, i115, i116, i117) → 1277_0_rec3_ConstantStackPush(EOS(STATIC_1277), i115, i116, i117, i197)
1277_0_rec3_ConstantStackPush(EOS(STATIC_1277), i115, i116, i117, i197) → 1279_0_rec3_IntArithmetic(EOS(STATIC_1279), i115, i116, i117, i197)
1279_0_rec3_IntArithmetic(EOS(STATIC_1279), i115, i116, i117, i197) → 1282_0_rec3_Load(EOS(STATIC_1282), i115, i116, i117) | >=(i197, 0)
1282_0_rec3_Load(EOS(STATIC_1282), i115, i116, i117) → 1284_0_rec3_Load(EOS(STATIC_1284), i116, i117, i115)
1284_0_rec3_Load(EOS(STATIC_1284), i116, i117, i115) → 1287_0_rec3_Load(EOS(STATIC_1287), i117, i115, i116)
1287_0_rec3_Load(EOS(STATIC_1287), i117, i115, i116) → 1290_0_rec3_Load(EOS(STATIC_1290), i115, i116, i117)
1290_0_rec3_Load(EOS(STATIC_1290), i115, i116, i117) → 1292_0_rec3_InvokeMethod(EOS(STATIC_1292), i115, i116, i117)
1292_0_rec3_InvokeMethod(EOS(STATIC_1292), i115, i116, i117) → 1295_1_rec3_InvokeMethod(1295_0_rec3_Load(EOS(STATIC_1295), i115, i116, i117), i115, i116, i117)
1295_0_rec3_Load(EOS(STATIC_1295), i115, i116, i117) → 1298_0_rec3_Load(EOS(STATIC_1298), i115, i116, i117)
1295_1_rec3_InvokeMethod(1207_0_rec3_Return(EOS(STATIC_1207)), i250, i251, i252) → 1305_0_rec3_Return(EOS(STATIC_1305), i250, i251, i252)
1295_1_rec3_InvokeMethod(1308_0_rec3_Return(EOS(STATIC_1308)), i264, i265, i266) → 1319_0_rec3_Return(EOS(STATIC_1319), i264, i265, i266)
1305_0_rec3_Return(EOS(STATIC_1305), i250, i251, i252) → 1308_0_rec3_Return(EOS(STATIC_1308))
1319_0_rec3_Return(EOS(STATIC_1319), i264, i265, i266) → 1305_0_rec3_Return(EOS(STATIC_1305), i264, i265, i266)
958_0_rec4_Load(EOS(STATIC_958), i89, matching1) → 964_0_rec4_Load(EOS(STATIC_964), i89, 0, i89) | =(matching1, 0)
964_0_rec4_Load(EOS(STATIC_964), i89, matching1, i89) → 971_0_rec4_LT(EOS(STATIC_971), i89, 0, i89, 0) | =(matching1, 0)
971_0_rec4_LT(EOS(STATIC_971), i99, matching1, i99, matching2) → 976_0_rec4_LT(EOS(STATIC_976), i99, 0, i99, 0) | &&(=(matching1, 0), =(matching2, 0))
971_0_rec4_LT(EOS(STATIC_971), i100, matching1, i100, matching2) → 977_0_rec4_LT(EOS(STATIC_977), i100, 0, i100, 0) | &&(=(matching1, 0), =(matching2, 0))
976_0_rec4_LT(EOS(STATIC_976), i99, matching1, i99, matching2) → 984_0_rec4_Return(EOS(STATIC_984)) | &&(&&(<(i99, 0), =(matching1, 0)), =(matching2, 0))
977_0_rec4_LT(EOS(STATIC_977), i100, matching1, i100, matching2) → 985_0_rec4_Load(EOS(STATIC_985), i100, 0) | &&(&&(>=(i100, 0), =(matching1, 0)), =(matching2, 0))
985_0_rec4_Load(EOS(STATIC_985), i100, matching1) → 996_0_rec4_ConstantStackPush(EOS(STATIC_996), 0, i100) | =(matching1, 0)
996_0_rec4_ConstantStackPush(EOS(STATIC_996), matching1, i100) → 1001_0_rec4_IntArithmetic(EOS(STATIC_1001), 0, i100) | =(matching1, 0)
1001_0_rec4_IntArithmetic(EOS(STATIC_1001), matching1, i100) → 1008_0_rec4_Load(EOS(STATIC_1008), 0) | &&(>=(i100, 0), =(matching1, 0))
1008_0_rec4_Load(EOS(STATIC_1008), matching1) → 1012_0_rec4_InvokeMethod(EOS(STATIC_1012), 0) | =(matching1, 0)
1012_0_rec4_InvokeMethod(EOS(STATIC_1012), matching1) → 1017_1_rec4_InvokeMethod(1017_0_rec4_Load(EOS(STATIC_1017), 0), 0) | =(matching1, 0)
1017_0_rec4_Load(EOS(STATIC_1017), matching1) → 1023_0_rec4_Load(EOS(STATIC_1023), 0) | =(matching1, 0)
1017_1_rec4_InvokeMethod(984_0_rec4_Return(EOS(STATIC_984)), matching1) → 1039_0_rec4_Return(EOS(STATIC_1039), 0) | =(matching1, 0)
1017_1_rec4_InvokeMethod(1070_0_rec4_Return(EOS(STATIC_1070)), matching1) → 1090_0_rec4_Return(EOS(STATIC_1090), 0) | =(matching1, 0)
1039_0_rec4_Return(EOS(STATIC_1039), matching1) → 1063_0_rec4_Return(EOS(STATIC_1063), 0) | =(matching1, 0)
1063_0_rec4_Return(EOS(STATIC_1063), matching1) → 1070_0_rec4_Return(EOS(STATIC_1070)) | =(matching1, 0)
1090_0_rec4_Return(EOS(STATIC_1090), matching1) → 1063_0_rec4_Return(EOS(STATIC_1063), 0) | =(matching1, 0)

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


P rules:
1225_1_rec1_InvokeMethod(1343_0_rec2_Return(EOS(STATIC_1343)), x0, x1, x2, x3, 0, x2, x0) → 1357_1_rec1_InvokeMethod(1225_1_rec1_InvokeMethod(1225_0_rec2_Load(EOS(STATIC_1225), +(x2, +(x0, 1)), 0, x2, +(x0, 1)), +(x0, 1), x1, x2, +(x2, +(x0, 1)), 0, x2, +(x0, 1)), +(x0, 1), x1, x2) | &&(&&(>(+(x2, 1), 0), >=(x1, +(x0, 1))), >(+(x0, 1), 0))
R rules:
1225_0_rec2_Load(EOS(STATIC_1225), x0, 0, x2, x3) → 1238_0_rec2_LT(EOS(STATIC_1238), x0, 0, x2, x3, x0, 0)
1238_0_rec2_LT(EOS(STATIC_1238), x0, 0, x2, x3, x0, 0) → 1245_0_rec2_Return(EOS(STATIC_1245)) | <(x0, 0)
1357_1_rec1_InvokeMethod(1195_0_rec1_Return(EOS(STATIC_1195)), x0, x1, x2) → 1364_0_rec1_Return(EOS(STATIC_1364))
1357_1_rec1_InvokeMethod(1364_0_rec1_Return(EOS(STATIC_1364)), x0, x1, x2) → 1364_0_rec1_Return(EOS(STATIC_1364))
1238_0_rec2_LT(EOS(STATIC_1238), x0, 0, x2, x3, x0, 0) → 1293_1_rec2_InvokeMethod(1198_0_rec3_GT(EOS(STATIC_1198), 0, x5, x2, x3, 0, x5), x0, 0, x2, x3, 0, x2, x3, x0) | >(+(x0, 1), 0)
1198_0_rec3_GT(EOS(STATIC_1198), x0, x1, x2, x3, x0, x1) → 1308_0_rec3_Return(EOS(STATIC_1308)) | <(x1, x0)
1198_0_rec3_GT(EOS(STATIC_1198), x0, x1, x2, x3, x0, x1) → 1257_1_rec3_InvokeMethod(971_0_rec4_LT(EOS(STATIC_971), x4, 0, x4, 0), x0, x1, x2, x3) | &&(>=(x1, x0), >(+(x0, 1), 0))
971_0_rec4_LT(EOS(STATIC_971), x0, 0, x0, 0) → 984_0_rec4_Return(EOS(STATIC_984)) | <(x0, 0)
971_0_rec4_LT(EOS(STATIC_971), x0, 0, x0, 0) → 1017_1_rec4_InvokeMethod(971_0_rec4_LT(EOS(STATIC_971), x3, 0, x3, 0), 0) | >(+(x0, 1), 0)
1017_1_rec4_InvokeMethod(984_0_rec4_Return(EOS(STATIC_984)), 0) → 1070_0_rec4_Return(EOS(STATIC_1070))
1017_1_rec4_InvokeMethod(1070_0_rec4_Return(EOS(STATIC_1070)), 0) → 1070_0_rec4_Return(EOS(STATIC_1070))
1293_1_rec2_InvokeMethod(1207_0_rec3_Return(EOS(STATIC_1207)), x0, 0, x2, x3, 0, x2, x3, x0) → 1324_1_rec2_InvokeMethod(1238_0_rec2_LT(EOS(STATIC_1238), x5, 0, x2, x3, x5, 0), 0, x2, x3) | >(+(x0, 1), 0)
1293_1_rec2_InvokeMethod(1308_0_rec3_Return(EOS(STATIC_1308)), x0, 0, x2, x3, 0, x2, x3, x0) → 1324_1_rec2_InvokeMethod(1238_0_rec2_LT(EOS(STATIC_1238), x5, 0, x2, x3, x5, 0), 0, x2, x3) | >(+(x0, 1), 0)
1324_1_rec2_InvokeMethod(1245_0_rec2_Return(EOS(STATIC_1245)), 0, x1, x2) → 1343_0_rec2_Return(EOS(STATIC_1343))
1324_1_rec2_InvokeMethod(1343_0_rec2_Return(EOS(STATIC_1343)), 0, x1, x2) → 1343_0_rec2_Return(EOS(STATIC_1343))
1257_1_rec3_InvokeMethod(984_0_rec4_Return(EOS(STATIC_984)), x0, x1, x2, x3) → 1295_1_rec3_InvokeMethod(1198_0_rec3_GT(EOS(STATIC_1198), x4, x1, x2, x3, x4, x1), x1, x2, x3) | >(+(x0, 1), 0)
1257_1_rec3_InvokeMethod(1070_0_rec4_Return(EOS(STATIC_1070)), x0, x1, x2, x3) → 1295_1_rec3_InvokeMethod(1198_0_rec3_GT(EOS(STATIC_1198), x4, x1, x2, x3, x4, x1), x1, x2, x3) | >(+(x0, 1), 0)
1295_1_rec3_InvokeMethod(1207_0_rec3_Return(EOS(STATIC_1207)), x0, x1, x2) → 1308_0_rec3_Return(EOS(STATIC_1308))
1295_1_rec3_InvokeMethod(1308_0_rec3_Return(EOS(STATIC_1308)), x0, x1, x2) → 1308_0_rec3_Return(EOS(STATIC_1308))

Filtered ground terms:



1225_0_rec2_Load(x1, x2, x3, x4, x5) → 1225_0_rec2_Load(x2, x4, x5)
1225_1_rec1_InvokeMethod(x1, x2, x3, x4, x5, x6, x7, x8) → 1225_1_rec1_InvokeMethod(x1, x2, x3, x4, x5, x7, x8)
Cond_1225_1_rec1_InvokeMethod(x1, x2, x3, x4, x5, x6, x7, x8, x9) → Cond_1225_1_rec1_InvokeMethod(x1, x3, x4, x5, x6, x8, x9)
1343_0_rec2_Return(x1) → 1343_0_rec2_Return
1308_0_rec3_Return(x1) → 1308_0_rec3_Return
1207_0_rec3_Return(x1) → 1207_0_rec3_Return
1198_0_rec3_GT(x1, x2, x3, x4, x5, x6, x7) → 1198_0_rec3_GT(x2, x3, x4, x5, x6, x7)
Cond_1257_1_rec3_InvokeMethod1(x1, x2, x3, x4, x5, x6, x7) → Cond_1257_1_rec3_InvokeMethod1(x1, x3, x4, x5, x6, x7)
1070_0_rec4_Return(x1) → 1070_0_rec4_Return
Cond_1257_1_rec3_InvokeMethod(x1, x2, x3, x4, x5, x6, x7) → Cond_1257_1_rec3_InvokeMethod(x1, x3, x4, x5, x6, x7)
984_0_rec4_Return(x1) → 984_0_rec4_Return
1324_1_rec2_InvokeMethod(x1, x2, x3, x4) → 1324_1_rec2_InvokeMethod(x1, x3, x4)
1245_0_rec2_Return(x1) → 1245_0_rec2_Return
1238_0_rec2_LT(x1, x2, x3, x4, x5, x6, x7) → 1238_0_rec2_LT(x2, x4, x5, x6)
Cond_1293_1_rec2_InvokeMethod1(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11) → Cond_1293_1_rec2_InvokeMethod1(x1, x3, x5, x6, x8, x9, x10, x11)
1293_1_rec2_InvokeMethod(x1, x2, x3, x4, x5, x6, x7, x8, x9) → 1293_1_rec2_InvokeMethod(x1, x2, x4, x5, x7, x8, x9)
Cond_1293_1_rec2_InvokeMethod(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11) → Cond_1293_1_rec2_InvokeMethod(x1, x3, x5, x6, x8, x9, x10, x11)
1017_1_rec4_InvokeMethod(x1, x2) → 1017_1_rec4_InvokeMethod(x1)
971_0_rec4_LT(x1, x2, x3, x4, x5) → 971_0_rec4_LT(x2, x4)
Cond_971_0_rec4_LT1(x1, x2, x3, x4, x5, x6, x7) → Cond_971_0_rec4_LT1(x1, x3, x5, x7)
Cond_971_0_rec4_LT(x1, x2, x3, x4, x5, x6) → Cond_971_0_rec4_LT(x1, x3, x5)
Cond_1198_0_rec3_GT1(x1, x2, x3, x4, x5, x6, x7, x8, x9) → Cond_1198_0_rec3_GT1(x1, x3, x4, x5, x6, x7, x8, x9)
Cond_1198_0_rec3_GT(x1, x2, x3, x4, x5, x6, x7, x8) → Cond_1198_0_rec3_GT(x1, x3, x4, x5, x6, x7, x8)
Cond_1238_0_rec2_LT1(x1, x2, x3, x4, x5, x6, x7, x8, x9) → Cond_1238_0_rec2_LT1(x1, x3, x5, x6, x7, x9)
1364_0_rec1_Return(x1) → 1364_0_rec1_Return
1195_0_rec1_Return(x1) → 1195_0_rec1_Return
Cond_1238_0_rec2_LT(x1, x2, x3, x4, x5, x6, x7, x8) → Cond_1238_0_rec2_LT(x1, x3, x5, x6, x7)

Filtered duplicate args:



1225_1_rec1_InvokeMethod(x1, x2, x3, x4, x5, x6, x7) → 1225_1_rec1_InvokeMethod(x1, x3, x5, x6, x7)
Cond_1225_1_rec1_InvokeMethod(x1, x2, x3, x4, x5, x6, x7) → Cond_1225_1_rec1_InvokeMethod(x1, x3, x5, x6, x7)
1238_0_rec2_LT(x1, x2, x3, x4) → 1238_0_rec2_LT(x2, x3, x4)
Cond_1238_0_rec2_LT(x1, x2, x3, x4, x5) → Cond_1238_0_rec2_LT(x1, x3, x4, x5)
Cond_1238_0_rec2_LT1(x1, x2, x3, x4, x5, x6) → Cond_1238_0_rec2_LT1(x1, x3, x4, x5, x6)
1293_1_rec2_InvokeMethod(x1, x2, x3, x4, x5, x6, x7) → 1293_1_rec2_InvokeMethod(x1, x5, x6, x7)
1198_0_rec3_GT(x1, x2, x3, x4, x5, x6) → 1198_0_rec3_GT(x3, x4, x5, x6)
Cond_1198_0_rec3_GT(x1, x2, x3, x4, x5, x6, x7) → Cond_1198_0_rec3_GT(x1, x4, x5, x6, x7)
Cond_1198_0_rec3_GT1(x1, x2, x3, x4, x5, x6, x7, x8) → Cond_1198_0_rec3_GT1(x1, x4, x5, x6, x7, x8)
971_0_rec4_LT(x1, x2) → 971_0_rec4_LT(x2)
Cond_971_0_rec4_LT(x1, x2, x3) → Cond_971_0_rec4_LT(x1, x3)
Cond_971_0_rec4_LT1(x1, x2, x3, x4) → Cond_971_0_rec4_LT1(x1, x3, x4)
Cond_1293_1_rec2_InvokeMethod(x1, x2, x3, x4, x5, x6, x7, x8) → Cond_1293_1_rec2_InvokeMethod(x1, x5, x6, x7, x8)
Cond_1293_1_rec2_InvokeMethod1(x1, x2, x3, x4, x5, x6, x7, x8) → Cond_1293_1_rec2_InvokeMethod1(x1, x5, x6, x7, x8)

Filtered unneeded arguments:



1225_1_rec1_InvokeMethod(x1, x2, x3, x4, x5) → 1225_1_rec1_InvokeMethod(x1, x2, x4, x5)
Cond_1225_1_rec1_InvokeMethod(x1, x2, x3, x4, x5) → Cond_1225_1_rec1_InvokeMethod(x1, x2, x4, x5)
1357_1_rec1_InvokeMethod(x1, x2, x3, x4) → 1357_1_rec1_InvokeMethod(x1)
Cond_1238_0_rec2_LT(x1, x2, x3, x4) → Cond_1238_0_rec2_LT(x1)
Cond_1238_0_rec2_LT1(x1, x2, x3, x4, x5) → Cond_1238_0_rec2_LT1(x1, x4, x5)
Cond_1198_0_rec3_GT(x1, x2, x3, x4, x5) → Cond_1198_0_rec3_GT(x1)
Cond_1198_0_rec3_GT1(x1, x2, x3, x4, x5, x6) → Cond_1198_0_rec3_GT1(x1, x4, x5, x6)
Cond_971_0_rec4_LT(x1, x2) → Cond_971_0_rec4_LT(x1)
Cond_971_0_rec4_LT1(x1, x2, x3) → Cond_971_0_rec4_LT1(x1, x3)
1293_1_rec2_InvokeMethod(x1, x2, x3, x4) → 1293_1_rec2_InvokeMethod(x1, x4)
Cond_1293_1_rec2_InvokeMethod(x1, x2, x3, x4, x5) → Cond_1293_1_rec2_InvokeMethod(x1, x5)
1324_1_rec2_InvokeMethod(x1, x2, x3) → 1324_1_rec2_InvokeMethod(x1)
Cond_1293_1_rec2_InvokeMethod1(x1, x2, x3, x4, x5) → Cond_1293_1_rec2_InvokeMethod1(x1, x5)
1257_1_rec3_InvokeMethod(x1, x2, x3, x4, x5) → 1257_1_rec3_InvokeMethod(x1, x2, x3)
Cond_1257_1_rec3_InvokeMethod(x1, x2, x3, x4, x5, x6) → Cond_1257_1_rec3_InvokeMethod(x1, x3, x6)
1295_1_rec3_InvokeMethod(x1, x2, x3, x4) → 1295_1_rec3_InvokeMethod(x1)
Cond_1257_1_rec3_InvokeMethod1(x1, x2, x3, x4, x5, x6) → Cond_1257_1_rec3_InvokeMethod1(x1, x3, x6)
1238_0_rec2_LT(x1, x2, x3) → 1238_0_rec2_LT(x3)
1198_0_rec3_GT(x1, x2, x3, x4) → 1198_0_rec3_GT(x3, x4)
1225_0_rec2_Load(x1, x2, x3) → 1225_0_rec2_Load(x1)

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


P rules:
1225_1_rec1_InvokeMethod(1343_0_rec2_Return, x1, x2, x0) → 1357_1_rec1_InvokeMethod(1225_1_rec1_InvokeMethod(1225_0_rec2_Load(+(x2, +(x0, 1))), x1, x2, +(x0, 1))) | &&(&&(>(x2, -1), >=(x1, +(x0, 1))), >(x0, -1))
R rules:
1225_0_rec2_Load(x0) → 1238_0_rec2_LT(x0)
1238_0_rec2_LT(x0) → 1245_0_rec2_Return | <(x0, 0)
1357_1_rec1_InvokeMethod(1195_0_rec1_Return) → 1364_0_rec1_Return
1357_1_rec1_InvokeMethod(1364_0_rec1_Return) → 1364_0_rec1_Return
1238_0_rec2_LT(x0) → 1293_1_rec2_InvokeMethod(1198_0_rec3_GT(0, x5), x0) | >(x0, -1)
1198_0_rec3_GT(x0, x1) → 1308_0_rec3_Return | <(x1, x0)
1198_0_rec3_GT(x0, x1) → 1257_1_rec3_InvokeMethod(971_0_rec4_LT(x4), x0, x1) | &&(>=(x1, x0), >(x0, -1))
971_0_rec4_LT(x0) → 984_0_rec4_Return | <(x0, 0)
971_0_rec4_LT(x0) → 1017_1_rec4_InvokeMethod(971_0_rec4_LT(x3)) | >(x0, -1)
1017_1_rec4_InvokeMethod(984_0_rec4_Return) → 1070_0_rec4_Return
1017_1_rec4_InvokeMethod(1070_0_rec4_Return) → 1070_0_rec4_Return
1293_1_rec2_InvokeMethod(1207_0_rec3_Return, x0) → 1324_1_rec2_InvokeMethod(1238_0_rec2_LT(x5)) | >(x0, -1)
1293_1_rec2_InvokeMethod(1308_0_rec3_Return, x0) → 1324_1_rec2_InvokeMethod(1238_0_rec2_LT(x5)) | >(x0, -1)
1324_1_rec2_InvokeMethod(1245_0_rec2_Return) → 1343_0_rec2_Return
1324_1_rec2_InvokeMethod(1343_0_rec2_Return) → 1343_0_rec2_Return
1257_1_rec3_InvokeMethod(984_0_rec4_Return, x0, x1) → 1295_1_rec3_InvokeMethod(1198_0_rec3_GT(x4, x1)) | >(x0, -1)
1257_1_rec3_InvokeMethod(1070_0_rec4_Return, x0, x1) → 1295_1_rec3_InvokeMethod(1198_0_rec3_GT(x4, x1)) | >(x0, -1)
1295_1_rec3_InvokeMethod(1207_0_rec3_Return) → 1308_0_rec3_Return
1295_1_rec3_InvokeMethod(1308_0_rec3_Return) → 1308_0_rec3_Return

Performed bisimulation on rules. Used the following equivalence classes: {[Cond_1238_0_rec2_LT_2, Cond_971_0_rec4_LT_2]=Cond_1238_0_rec2_LT_2, [1245_0_rec2_Return, 1195_0_rec1_Return, 1364_0_rec1_Return, 1308_0_rec3_Return, 984_0_rec4_Return, 1070_0_rec4_Return, 1207_0_rec3_Return, 1343_0_rec2_Return]=1245_0_rec2_Return, [Cond_1293_1_rec2_InvokeMethod_4, Cond_1293_1_rec2_InvokeMethod1_4]=Cond_1293_1_rec2_InvokeMethod_4, [Cond_1257_1_rec3_InvokeMethod_5, Cond_1257_1_rec3_InvokeMethod1_5]=Cond_1257_1_rec3_InvokeMethod_5}


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


P rules:
1225_1_REC1_INVOKEMETHOD(1245_0_rec2_Return, x1, x2, x0) → COND_1225_1_REC1_INVOKEMETHOD(&&(&&(>(x2, -1), >=(x1, +(x0, 1))), >(x0, -1)), 1245_0_rec2_Return, x1, x2, x0)
COND_1225_1_REC1_INVOKEMETHOD(TRUE, 1245_0_rec2_Return, x1, x2, x0) → 1225_1_REC1_INVOKEMETHOD(1225_0_rec2_Load(+(x2, +(x0, 1))), x1, x2, +(x0, 1))
R rules:
1225_0_rec2_Load(x0) → 1238_0_rec2_LT(x0)
1238_0_rec2_LT(x0) → Cond_1238_0_rec2_LT(<(x0, 0), x0)
Cond_1238_0_rec2_LT(TRUE, x0) → 1245_0_rec2_Return
1357_1_rec1_InvokeMethod(1245_0_rec2_Return) → 1245_0_rec2_Return
1238_0_rec2_LT(x0) → Cond_1238_0_rec2_LT1(>(x0, -1), x0, x5)
Cond_1238_0_rec2_LT1(TRUE, x0, x5) → 1293_1_rec2_InvokeMethod(1198_0_rec3_GT(0, x5), x0)
1198_0_rec3_GT(x0, x1) → Cond_1198_0_rec3_GT(<(x1, x0), x0, x1)
Cond_1198_0_rec3_GT(TRUE, x0, x1) → 1245_0_rec2_Return
1198_0_rec3_GT(x0, x1) → Cond_1198_0_rec3_GT1(&&(>=(x1, x0), >(x0, -1)), x0, x1, x4)
Cond_1198_0_rec3_GT1(TRUE, x0, x1, x4) → 1257_1_rec3_InvokeMethod(971_0_rec4_LT(x4), x0, x1)
971_0_rec4_LT(x0) → Cond_1238_0_rec2_LT(<(x0, 0), x0)
971_0_rec4_LT(x0) → Cond_971_0_rec4_LT1(>(x0, -1), x0, x3)
Cond_971_0_rec4_LT1(TRUE, x0, x3) → 1017_1_rec4_InvokeMethod(971_0_rec4_LT(x3))
1017_1_rec4_InvokeMethod(1245_0_rec2_Return) → 1245_0_rec2_Return
1293_1_rec2_InvokeMethod(1245_0_rec2_Return, x0) → Cond_1293_1_rec2_InvokeMethod(>(x0, -1), 1245_0_rec2_Return, x0, x5)
Cond_1293_1_rec2_InvokeMethod(TRUE, 1245_0_rec2_Return, x0, x5) → 1324_1_rec2_InvokeMethod(1238_0_rec2_LT(x5))
1324_1_rec2_InvokeMethod(1245_0_rec2_Return) → 1245_0_rec2_Return
1257_1_rec3_InvokeMethod(1245_0_rec2_Return, x0, x1) → Cond_1257_1_rec3_InvokeMethod(>(x0, -1), 1245_0_rec2_Return, x0, x1, x4)
Cond_1257_1_rec3_InvokeMethod(TRUE, 1245_0_rec2_Return, x0, x1, x4) → 1295_1_rec3_InvokeMethod(1198_0_rec3_GT(x4, x1))
1295_1_rec3_InvokeMethod(1245_0_rec2_Return) → 1245_0_rec2_Return

(36) 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:
1225_0_rec2_Load(x0) → 1238_0_rec2_LT(x0)
1238_0_rec2_LT(x0) → Cond_1238_0_rec2_LT(x0 < 0, x0)
Cond_1238_0_rec2_LT(TRUE, x0) → 1245_0_rec2_Return
1357_1_rec1_InvokeMethod(1245_0_rec2_Return) → 1245_0_rec2_Return
1238_0_rec2_LT(x0) → Cond_1238_0_rec2_LT1(x0 > -1, x0, x5)
Cond_1238_0_rec2_LT1(TRUE, x0, x5) → 1293_1_rec2_InvokeMethod(1198_0_rec3_GT(0, x5), x0)
1198_0_rec3_GT(x0, x1) → Cond_1198_0_rec3_GT(x1 < x0, x0, x1)
Cond_1198_0_rec3_GT(TRUE, x0, x1) → 1245_0_rec2_Return
1198_0_rec3_GT(x0, x1) → Cond_1198_0_rec3_GT1(x1 >= x0 && x0 > -1, x0, x1, x4)
Cond_1198_0_rec3_GT1(TRUE, x0, x1, x4) → 1257_1_rec3_InvokeMethod(971_0_rec4_LT(x4), x0, x1)
971_0_rec4_LT(x0) → Cond_1238_0_rec2_LT(x0 < 0, x0)
971_0_rec4_LT(x0) → Cond_971_0_rec4_LT1(x0 > -1, x0, x3)
Cond_971_0_rec4_LT1(TRUE, x0, x3) → 1017_1_rec4_InvokeMethod(971_0_rec4_LT(x3))
1017_1_rec4_InvokeMethod(1245_0_rec2_Return) → 1245_0_rec2_Return
1293_1_rec2_InvokeMethod(1245_0_rec2_Return, x0) → Cond_1293_1_rec2_InvokeMethod(x0 > -1, 1245_0_rec2_Return, x0, x5)
Cond_1293_1_rec2_InvokeMethod(TRUE, 1245_0_rec2_Return, x0, x5) → 1324_1_rec2_InvokeMethod(1238_0_rec2_LT(x5))
1324_1_rec2_InvokeMethod(1245_0_rec2_Return) → 1245_0_rec2_Return
1257_1_rec3_InvokeMethod(1245_0_rec2_Return, x0, x1) → Cond_1257_1_rec3_InvokeMethod(x0 > -1, 1245_0_rec2_Return, x0, x1, x4)
Cond_1257_1_rec3_InvokeMethod(TRUE, 1245_0_rec2_Return, x0, x1, x4) → 1295_1_rec3_InvokeMethod(1198_0_rec3_GT(x4, x1))
1295_1_rec3_InvokeMethod(1245_0_rec2_Return) → 1245_0_rec2_Return

The integer pair graph contains the following rules and edges:
(0): 1225_1_REC1_INVOKEMETHOD(1245_0_rec2_Return, x1[0], x2[0], x0[0]) → COND_1225_1_REC1_INVOKEMETHOD(x2[0] > -1 && x1[0] >= x0[0] + 1 && x0[0] > -1, 1245_0_rec2_Return, x1[0], x2[0], x0[0])
(1): COND_1225_1_REC1_INVOKEMETHOD(TRUE, 1245_0_rec2_Return, x1[1], x2[1], x0[1]) → 1225_1_REC1_INVOKEMETHOD(1225_0_rec2_Load(x2[1] + x0[1] + 1), x1[1], x2[1], x0[1] + 1)

(0) -> (1), if (x2[0] > -1 && x1[0] >= x0[0] + 1 && x0[0] > -1x1[0]* x1[1]x2[0]* x2[1]x0[0]* x0[1])


(1) -> (0), if (1225_0_rec2_Load(x2[1] + x0[1] + 1) →* 1245_0_rec2_Returnx1[1]* x1[0]x2[1]* x2[0]x0[1] + 1* x0[0])



The set Q consists of the following terms:
1225_0_rec2_Load(x0)
1238_0_rec2_LT(x0)
Cond_1238_0_rec2_LT(TRUE, x0)
1357_1_rec1_InvokeMethod(1245_0_rec2_Return)
Cond_1238_0_rec2_LT1(TRUE, x0, x1)
1198_0_rec3_GT(x0, x1)
Cond_1198_0_rec3_GT(TRUE, x0, x1)
Cond_1198_0_rec3_GT1(TRUE, x0, x1, x2)
971_0_rec4_LT(x0)
Cond_971_0_rec4_LT1(TRUE, x0, x1)
1017_1_rec4_InvokeMethod(1245_0_rec2_Return)
1293_1_rec2_InvokeMethod(1245_0_rec2_Return, x0)
Cond_1293_1_rec2_InvokeMethod(TRUE, 1245_0_rec2_Return, x0, x1)
1324_1_rec2_InvokeMethod(1245_0_rec2_Return)
1257_1_rec3_InvokeMethod(1245_0_rec2_Return, x0, x1)
Cond_1257_1_rec3_InvokeMethod(TRUE, 1245_0_rec2_Return, x0, x1, x2)
1295_1_rec3_InvokeMethod(1245_0_rec2_Return)

(37) 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@46ef0a4f 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 1225_1_REC1_INVOKEMETHOD(1245_0_rec2_Return, x1, x2, x0) → COND_1225_1_REC1_INVOKEMETHOD(&&(&&(>(x2, -1), >=(x1, +(x0, 1))), >(x0, -1)), 1245_0_rec2_Return, x1, x2, x0) the following chains were created:
  • We consider the chain 1225_1_REC1_INVOKEMETHOD(1245_0_rec2_Return, x1[0], x2[0], x0[0]) → COND_1225_1_REC1_INVOKEMETHOD(&&(&&(>(x2[0], -1), >=(x1[0], +(x0[0], 1))), >(x0[0], -1)), 1245_0_rec2_Return, x1[0], x2[0], x0[0]), COND_1225_1_REC1_INVOKEMETHOD(TRUE, 1245_0_rec2_Return, x1[1], x2[1], x0[1]) → 1225_1_REC1_INVOKEMETHOD(1225_0_rec2_Load(+(x2[1], +(x0[1], 1))), x1[1], x2[1], +(x0[1], 1)) which results in the following constraint:

    (1)    (&&(&&(>(x2[0], -1), >=(x1[0], +(x0[0], 1))), >(x0[0], -1))=TRUEx1[0]=x1[1]x2[0]=x2[1]x0[0]=x0[1]1225_1_REC1_INVOKEMETHOD(1245_0_rec2_Return, x1[0], x2[0], x0[0])≥NonInfC∧1225_1_REC1_INVOKEMETHOD(1245_0_rec2_Return, x1[0], x2[0], x0[0])≥COND_1225_1_REC1_INVOKEMETHOD(&&(&&(>(x2[0], -1), >=(x1[0], +(x0[0], 1))), >(x0[0], -1)), 1245_0_rec2_Return, x1[0], x2[0], x0[0])∧(UIncreasing(COND_1225_1_REC1_INVOKEMETHOD(&&(&&(>(x2[0], -1), >=(x1[0], +(x0[0], 1))), >(x0[0], -1)), 1245_0_rec2_Return, x1[0], x2[0], x0[0])), ≥))



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

    (2)    (>(x0[0], -1)=TRUE>(x2[0], -1)=TRUE>=(x1[0], +(x0[0], 1))=TRUE1225_1_REC1_INVOKEMETHOD(1245_0_rec2_Return, x1[0], x2[0], x0[0])≥NonInfC∧1225_1_REC1_INVOKEMETHOD(1245_0_rec2_Return, x1[0], x2[0], x0[0])≥COND_1225_1_REC1_INVOKEMETHOD(&&(&&(>(x2[0], -1), >=(x1[0], +(x0[0], 1))), >(x0[0], -1)), 1245_0_rec2_Return, x1[0], x2[0], x0[0])∧(UIncreasing(COND_1225_1_REC1_INVOKEMETHOD(&&(&&(>(x2[0], -1), >=(x1[0], +(x0[0], 1))), >(x0[0], -1)), 1245_0_rec2_Return, x1[0], x2[0], x0[0])), ≥))



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

    (3)    (x0[0] ≥ 0∧x2[0] ≥ 0∧x1[0] + [-1] + [-1]x0[0] ≥ 0 ⇒ (UIncreasing(COND_1225_1_REC1_INVOKEMETHOD(&&(&&(>(x2[0], -1), >=(x1[0], +(x0[0], 1))), >(x0[0], -1)), 1245_0_rec2_Return, x1[0], x2[0], x0[0])), ≥)∧[(-1)Bound*bni_40] + [(-1)bni_40]x0[0] + [bni_40]x2[0] + [(2)bni_40]x1[0] ≥ 0∧[1 + (-1)bso_41] ≥ 0)



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

    (4)    (x0[0] ≥ 0∧x2[0] ≥ 0∧x1[0] + [-1] + [-1]x0[0] ≥ 0 ⇒ (UIncreasing(COND_1225_1_REC1_INVOKEMETHOD(&&(&&(>(x2[0], -1), >=(x1[0], +(x0[0], 1))), >(x0[0], -1)), 1245_0_rec2_Return, x1[0], x2[0], x0[0])), ≥)∧[(-1)Bound*bni_40] + [(-1)bni_40]x0[0] + [bni_40]x2[0] + [(2)bni_40]x1[0] ≥ 0∧[1 + (-1)bso_41] ≥ 0)



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

    (5)    (x0[0] ≥ 0∧x2[0] ≥ 0∧x1[0] + [-1] + [-1]x0[0] ≥ 0 ⇒ (UIncreasing(COND_1225_1_REC1_INVOKEMETHOD(&&(&&(>(x2[0], -1), >=(x1[0], +(x0[0], 1))), >(x0[0], -1)), 1245_0_rec2_Return, x1[0], x2[0], x0[0])), ≥)∧[(-1)Bound*bni_40] + [(-1)bni_40]x0[0] + [bni_40]x2[0] + [(2)bni_40]x1[0] ≥ 0∧[1 + (-1)bso_41] ≥ 0)



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

    (6)    (x0[0] ≥ 0∧x2[0] ≥ 0∧x1[0] ≥ 0 ⇒ (UIncreasing(COND_1225_1_REC1_INVOKEMETHOD(&&(&&(>(x2[0], -1), >=(x1[0], +(x0[0], 1))), >(x0[0], -1)), 1245_0_rec2_Return, x1[0], x2[0], x0[0])), ≥)∧[(-1)Bound*bni_40 + (2)bni_40] + [bni_40]x0[0] + [bni_40]x2[0] + [(2)bni_40]x1[0] ≥ 0∧[1 + (-1)bso_41] ≥ 0)







For Pair COND_1225_1_REC1_INVOKEMETHOD(TRUE, 1245_0_rec2_Return, x1, x2, x0) → 1225_1_REC1_INVOKEMETHOD(1225_0_rec2_Load(+(x2, +(x0, 1))), x1, x2, +(x0, 1)) the following chains were created:
  • We consider the chain COND_1225_1_REC1_INVOKEMETHOD(TRUE, 1245_0_rec2_Return, x1[1], x2[1], x0[1]) → 1225_1_REC1_INVOKEMETHOD(1225_0_rec2_Load(+(x2[1], +(x0[1], 1))), x1[1], x2[1], +(x0[1], 1)) which results in the following constraint:

    (7)    (COND_1225_1_REC1_INVOKEMETHOD(TRUE, 1245_0_rec2_Return, x1[1], x2[1], x0[1])≥NonInfC∧COND_1225_1_REC1_INVOKEMETHOD(TRUE, 1245_0_rec2_Return, x1[1], x2[1], x0[1])≥1225_1_REC1_INVOKEMETHOD(1225_0_rec2_Load(+(x2[1], +(x0[1], 1))), x1[1], x2[1], +(x0[1], 1))∧(UIncreasing(1225_1_REC1_INVOKEMETHOD(1225_0_rec2_Load(+(x2[1], +(x0[1], 1))), x1[1], x2[1], +(x0[1], 1))), ≥))



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

    (8)    ((UIncreasing(1225_1_REC1_INVOKEMETHOD(1225_0_rec2_Load(+(x2[1], +(x0[1], 1))), x1[1], x2[1], +(x0[1], 1))), ≥)∧[bni_42] = 0∧[(-1)bso_43] ≥ 0)



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

    (9)    ((UIncreasing(1225_1_REC1_INVOKEMETHOD(1225_0_rec2_Load(+(x2[1], +(x0[1], 1))), x1[1], x2[1], +(x0[1], 1))), ≥)∧[bni_42] = 0∧[(-1)bso_43] ≥ 0)



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

    (10)    ((UIncreasing(1225_1_REC1_INVOKEMETHOD(1225_0_rec2_Load(+(x2[1], +(x0[1], 1))), x1[1], x2[1], +(x0[1], 1))), ≥)∧[bni_42] = 0∧[(-1)bso_43] ≥ 0)



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

    (11)    ((UIncreasing(1225_1_REC1_INVOKEMETHOD(1225_0_rec2_Load(+(x2[1], +(x0[1], 1))), x1[1], x2[1], +(x0[1], 1))), ≥)∧[bni_42] = 0∧0 = 0∧0 = 0∧0 = 0∧[(-1)bso_43] ≥ 0)







To summarize, we get the following constraints P for the following pairs.
  • 1225_1_REC1_INVOKEMETHOD(1245_0_rec2_Return, x1, x2, x0) → COND_1225_1_REC1_INVOKEMETHOD(&&(&&(>(x2, -1), >=(x1, +(x0, 1))), >(x0, -1)), 1245_0_rec2_Return, x1, x2, x0)
    • (x0[0] ≥ 0∧x2[0] ≥ 0∧x1[0] ≥ 0 ⇒ (UIncreasing(COND_1225_1_REC1_INVOKEMETHOD(&&(&&(>(x2[0], -1), >=(x1[0], +(x0[0], 1))), >(x0[0], -1)), 1245_0_rec2_Return, x1[0], x2[0], x0[0])), ≥)∧[(-1)Bound*bni_40 + (2)bni_40] + [bni_40]x0[0] + [bni_40]x2[0] + [(2)bni_40]x1[0] ≥ 0∧[1 + (-1)bso_41] ≥ 0)

  • COND_1225_1_REC1_INVOKEMETHOD(TRUE, 1245_0_rec2_Return, x1, x2, x0) → 1225_1_REC1_INVOKEMETHOD(1225_0_rec2_Load(+(x2, +(x0, 1))), x1, x2, +(x0, 1))
    • ((UIncreasing(1225_1_REC1_INVOKEMETHOD(1225_0_rec2_Load(+(x2[1], +(x0[1], 1))), x1[1], x2[1], +(x0[1], 1))), ≥)∧[bni_42] = 0∧0 = 0∧0 = 0∧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(1225_0_rec2_Load(x1)) = [-1]   
POL(1238_0_rec2_LT(x1)) = [-1]   
POL(Cond_1238_0_rec2_LT(x1, x2)) = [-1]   
POL(<(x1, x2)) = [-1]   
POL(0) = 0   
POL(1245_0_rec2_Return) = [-1]   
POL(1357_1_rec1_InvokeMethod(x1)) = [-1]   
POL(Cond_1238_0_rec2_LT1(x1, x2, x3)) = [-1]   
POL(>(x1, x2)) = [-1]   
POL(-1) = [-1]   
POL(1293_1_rec2_InvokeMethod(x1, x2)) = [-1]   
POL(1198_0_rec3_GT(x1, x2)) = [-1] + [-1]x2 + [-1]x1   
POL(Cond_1198_0_rec3_GT(x1, x2, x3)) = [-1] + [-1]x3 + [-1]x2   
POL(Cond_1198_0_rec3_GT1(x1, x2, x3, x4)) = [-1] + [-1]x3 + [-1]x2   
POL(&&(x1, x2)) = [-1]   
POL(>=(x1, x2)) = [-1]   
POL(1257_1_rec3_InvokeMethod(x1, x2, x3)) = [-1] + [-1]x3 + [-1]x2   
POL(971_0_rec4_LT(x1)) = [-1]   
POL(Cond_971_0_rec4_LT1(x1, x2, x3)) = [-1] + [-1]x2   
POL(1017_1_rec4_InvokeMethod(x1)) = [-1]   
POL(Cond_1293_1_rec2_InvokeMethod(x1, x2, x3, x4)) = [-1]   
POL(1324_1_rec2_InvokeMethod(x1)) = [-1]   
POL(Cond_1257_1_rec3_InvokeMethod(x1, x2, x3, x4, x5)) = [-1] + [-1]x4 + [-1]x3   
POL(1295_1_rec3_InvokeMethod(x1)) = [-1] + [2]x1   
POL(1225_1_REC1_INVOKEMETHOD(x1, x2, x3, x4)) = [-1] + [-1]x4 + x3 + [2]x2 + [-1]x1   
POL(COND_1225_1_REC1_INVOKEMETHOD(x1, x2, x3, x4, x5)) = [-1] + [-1]x5 + x4 + [2]x3   
POL(+(x1, x2)) = x1 + x2   
POL(1) = [1]   

The following pairs are in P>:

1225_1_REC1_INVOKEMETHOD(1245_0_rec2_Return, x1[0], x2[0], x0[0]) → COND_1225_1_REC1_INVOKEMETHOD(&&(&&(>(x2[0], -1), >=(x1[0], +(x0[0], 1))), >(x0[0], -1)), 1245_0_rec2_Return, x1[0], x2[0], x0[0])

The following pairs are in Pbound:

1225_1_REC1_INVOKEMETHOD(1245_0_rec2_Return, x1[0], x2[0], x0[0]) → COND_1225_1_REC1_INVOKEMETHOD(&&(&&(>(x2[0], -1), >=(x1[0], +(x0[0], 1))), >(x0[0], -1)), 1245_0_rec2_Return, x1[0], x2[0], x0[0])

The following pairs are in P:

COND_1225_1_REC1_INVOKEMETHOD(TRUE, 1245_0_rec2_Return, x1[1], x2[1], x0[1]) → 1225_1_REC1_INVOKEMETHOD(1225_0_rec2_Load(+(x2[1], +(x0[1], 1))), x1[1], x2[1], +(x0[1], 1))

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

1225_0_rec2_Load(x0)11238_0_rec2_LT(x0)1
Cond_1238_0_rec2_LT(<(x0, 0), x0)11238_0_rec2_LT(x0)1
1238_0_rec2_LT(x0)1Cond_1238_0_rec2_LT1(>(x0, -1), x0, x5)1
1293_1_rec2_InvokeMethod(1198_0_rec3_GT(0, x5), x0)1Cond_1238_0_rec2_LT1(TRUE, x0, x5)1
Cond_1293_1_rec2_InvokeMethod(>(x0, -1), 1245_0_rec2_Return, x0, x5)11293_1_rec2_InvokeMethod(1245_0_rec2_Return, x0)1
Cond_1293_1_rec2_InvokeMethod(TRUE, 1245_0_rec2_Return, x0, x5)11324_1_rec2_InvokeMethod(1238_0_rec2_LT(x5))1
1245_0_rec2_Return11324_1_rec2_InvokeMethod(1245_0_rec2_Return)1
Cond_1238_0_rec2_LT(TRUE, x0)11245_0_rec2_Return1

(38) Obligation:

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


The following domains are used:

Integer, Boolean


The ITRS R consists of the following rules:
1225_0_rec2_Load(x0) → 1238_0_rec2_LT(x0)
1238_0_rec2_LT(x0) → Cond_1238_0_rec2_LT(x0 < 0, x0)
Cond_1238_0_rec2_LT(TRUE, x0) → 1245_0_rec2_Return
1357_1_rec1_InvokeMethod(1245_0_rec2_Return) → 1245_0_rec2_Return
1238_0_rec2_LT(x0) → Cond_1238_0_rec2_LT1(x0 > -1, x0, x5)
Cond_1238_0_rec2_LT1(TRUE, x0, x5) → 1293_1_rec2_InvokeMethod(1198_0_rec3_GT(0, x5), x0)
1198_0_rec3_GT(x0, x1) → Cond_1198_0_rec3_GT(x1 < x0, x0, x1)
Cond_1198_0_rec3_GT(TRUE, x0, x1) → 1245_0_rec2_Return
1198_0_rec3_GT(x0, x1) → Cond_1198_0_rec3_GT1(x1 >= x0 && x0 > -1, x0, x1, x4)
Cond_1198_0_rec3_GT1(TRUE, x0, x1, x4) → 1257_1_rec3_InvokeMethod(971_0_rec4_LT(x4), x0, x1)
971_0_rec4_LT(x0) → Cond_1238_0_rec2_LT(x0 < 0, x0)
971_0_rec4_LT(x0) → Cond_971_0_rec4_LT1(x0 > -1, x0, x3)
Cond_971_0_rec4_LT1(TRUE, x0, x3) → 1017_1_rec4_InvokeMethod(971_0_rec4_LT(x3))
1017_1_rec4_InvokeMethod(1245_0_rec2_Return) → 1245_0_rec2_Return
1293_1_rec2_InvokeMethod(1245_0_rec2_Return, x0) → Cond_1293_1_rec2_InvokeMethod(x0 > -1, 1245_0_rec2_Return, x0, x5)
Cond_1293_1_rec2_InvokeMethod(TRUE, 1245_0_rec2_Return, x0, x5) → 1324_1_rec2_InvokeMethod(1238_0_rec2_LT(x5))
1324_1_rec2_InvokeMethod(1245_0_rec2_Return) → 1245_0_rec2_Return
1257_1_rec3_InvokeMethod(1245_0_rec2_Return, x0, x1) → Cond_1257_1_rec3_InvokeMethod(x0 > -1, 1245_0_rec2_Return, x0, x1, x4)
Cond_1257_1_rec3_InvokeMethod(TRUE, 1245_0_rec2_Return, x0, x1, x4) → 1295_1_rec3_InvokeMethod(1198_0_rec3_GT(x4, x1))
1295_1_rec3_InvokeMethod(1245_0_rec2_Return) → 1245_0_rec2_Return

The integer pair graph contains the following rules and edges:
(1): COND_1225_1_REC1_INVOKEMETHOD(TRUE, 1245_0_rec2_Return, x1[1], x2[1], x0[1]) → 1225_1_REC1_INVOKEMETHOD(1225_0_rec2_Load(x2[1] + x0[1] + 1), x1[1], x2[1], x0[1] + 1)


The set Q consists of the following terms:
1225_0_rec2_Load(x0)
1238_0_rec2_LT(x0)
Cond_1238_0_rec2_LT(TRUE, x0)
1357_1_rec1_InvokeMethod(1245_0_rec2_Return)
Cond_1238_0_rec2_LT1(TRUE, x0, x1)
1198_0_rec3_GT(x0, x1)
Cond_1198_0_rec3_GT(TRUE, x0, x1)
Cond_1198_0_rec3_GT1(TRUE, x0, x1, x2)
971_0_rec4_LT(x0)
Cond_971_0_rec4_LT1(TRUE, x0, x1)
1017_1_rec4_InvokeMethod(1245_0_rec2_Return)
1293_1_rec2_InvokeMethod(1245_0_rec2_Return, x0)
Cond_1293_1_rec2_InvokeMethod(TRUE, 1245_0_rec2_Return, x0, x1)
1324_1_rec2_InvokeMethod(1245_0_rec2_Return)
1257_1_rec3_InvokeMethod(1245_0_rec2_Return, x0, x1)
Cond_1257_1_rec3_InvokeMethod(TRUE, 1245_0_rec2_Return, x0, x1, x2)
1295_1_rec3_InvokeMethod(1245_0_rec2_Return)

(39) IDependencyGraphProof (EQUIVALENT transformation)

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

(40) TRUE

(41) Obligation:

SCC of termination graph based on JBC Program.
SCC contains nodes from the following methods: Recursions.rec0(II)V
SCC calls the following helper methods: Recursions.rec1(III)V, Recursions.rec0(II)V, Recursions.rec2(IIII)V, Recursions.rec3(IIIII)V, Recursions.rec4(II)V
Performed SCC analyses: UsedFieldsAnalysis

(42) SCCToIDPv1Proof (SOUND transformation)

Transformed FIGraph SCCs to IDPs. Log:

Generated 22 rules for P and 143 rules for R.


P rules:
824_0_rec0_Load(EOS(STATIC_824), i55, i56, i55) → 828_0_rec0_GT(EOS(STATIC_828), i55, i56, i55, i56)
828_0_rec0_GT(EOS(STATIC_828), i55, i56, i55, i56) → 835_0_rec0_GT(EOS(STATIC_835), i55, i56, i55, i56)
835_0_rec0_GT(EOS(STATIC_835), i55, i56, i55, i56) → 842_0_rec0_ConstantStackPush(EOS(STATIC_842), i55, i56) | <=(i55, i56)
842_0_rec0_ConstantStackPush(EOS(STATIC_842), i55, i56) → 848_0_rec0_ConstantStackPush(EOS(STATIC_848), i55, i56, 0)
848_0_rec0_ConstantStackPush(EOS(STATIC_848), i55, i56, matching1) → 855_0_rec0_Load(EOS(STATIC_855), i55, i56, 0, 2) | =(matching1, 0)
855_0_rec0_Load(EOS(STATIC_855), i55, i56, matching1, matching2) → 861_0_rec0_IntArithmetic(EOS(STATIC_861), i55, i56, 0, 2, i55) | &&(=(matching1, 0), =(matching2, 2))
861_0_rec0_IntArithmetic(EOS(STATIC_861), i55, i56, matching1, matching2, i55) → 867_0_rec0_Load(EOS(STATIC_867), i55, i56, 0, *(2, i55)) | &&(=(matching1, 0), =(matching2, 2))
867_0_rec0_Load(EOS(STATIC_867), i55, i56, matching1, i64) → 874_0_rec0_InvokeMethod(EOS(STATIC_874), i55, i56, 0, i64, i55) | =(matching1, 0)
874_0_rec0_InvokeMethod(EOS(STATIC_874), i55, i56, matching1, i64, i55) → 886_1_rec0_InvokeMethod(886_0_rec1_Load(EOS(STATIC_886), 0, i64, i55), i55, i56, 0, i64, i55) | =(matching1, 0)
886_1_rec0_InvokeMethod(1195_0_rec1_Return(EOS(STATIC_1195)), i199, i56, matching1, i198, i199) → 1210_0_rec1_Return(EOS(STATIC_1210), i199, i56, 0, i198, i199) | =(matching1, 0)
886_1_rec0_InvokeMethod(1364_0_rec1_Return(EOS(STATIC_1364)), i321, i56, matching1, i320, i321) → 1369_0_rec1_Return(EOS(STATIC_1369), i321, i56, 0, i320, i321) | =(matching1, 0)
1210_0_rec1_Return(EOS(STATIC_1210), i199, i56, matching1, i198, i199) → 914_0_rec1_Return(EOS(STATIC_914), i199, i56, 0, i198, i199) | =(matching1, 0)
914_0_rec1_Return(EOS(STATIC_914), i79, i56, matching1, i78, i79) → 921_0_rec0_Load(EOS(STATIC_921), i79, i56) | =(matching1, 0)
921_0_rec0_Load(EOS(STATIC_921), i79, i56) → 928_0_rec0_ConstantStackPush(EOS(STATIC_928), i56, i79)
928_0_rec0_ConstantStackPush(EOS(STATIC_928), i56, i79) → 934_0_rec0_IntArithmetic(EOS(STATIC_934), i56, i79, 1)
934_0_rec0_IntArithmetic(EOS(STATIC_934), i56, i79, matching1) → 940_0_rec0_Load(EOS(STATIC_940), i56, +(i79, 1)) | &&(>=(i79, 0), =(matching1, 1))
940_0_rec0_Load(EOS(STATIC_940), i56, i86) → 945_0_rec0_InvokeMethod(EOS(STATIC_945), i86, i56)
945_0_rec0_InvokeMethod(EOS(STATIC_945), i86, i56) → 951_1_rec0_InvokeMethod(951_0_rec0_Load(EOS(STATIC_951), i86, i56), i86, i56)
951_0_rec0_Load(EOS(STATIC_951), i86, i56) → 955_0_rec0_Load(EOS(STATIC_955), i86, i56)
955_0_rec0_Load(EOS(STATIC_955), i86, i56) → 819_0_rec0_Load(EOS(STATIC_819), i86, i56)
819_0_rec0_Load(EOS(STATIC_819), i55, i56) → 824_0_rec0_Load(EOS(STATIC_824), i55, i56, i55)
1369_0_rec1_Return(EOS(STATIC_1369), i321, i56, matching1, i320, i321) → 914_0_rec1_Return(EOS(STATIC_914), i321, i56, 0, i320, i321) | =(matching1, 0)
R rules:
886_0_rec1_Load(EOS(STATIC_886), matching1, i64, i55) → 893_0_rec1_Load(EOS(STATIC_893), 0, i64, i55) | =(matching1, 0)
893_0_rec1_Load(EOS(STATIC_893), matching1, i64, i55) → 1184_0_rec1_Load(EOS(STATIC_1184), 0, i64, i55) | =(matching1, 0)
1228_0_rec2_Load(EOS(STATIC_1228), matching1, i196, i195) → 1233_0_rec2_Load(EOS(STATIC_1233), i202, 0, i196) | =(matching1, 0)
1359_0_rec1_Load(EOS(STATIC_1359), i43, i284) → 1184_0_rec1_Load(EOS(STATIC_1184), i304, i43, i284)
1296_0_rec3_Load(EOS(STATIC_1296), matching1, i215, i221) → 1190_0_rec3_Load(EOS(STATIC_1190), 0, i233, i215) | =(matching1, 0)
1326_0_rec2_Load(EOS(STATIC_1326), matching1, i240) → 1233_0_rec2_Load(EOS(STATIC_1233), i268, 0, i240) | =(matching1, 0)
1260_0_rec4_Load(EOS(STATIC_1260)) → 958_0_rec4_Load(EOS(STATIC_958), i223, 0)
1298_0_rec3_Load(EOS(STATIC_1298), i115, i116) → 1190_0_rec3_Load(EOS(STATIC_1190), i232, i115, i116)
1023_0_rec4_Load(EOS(STATIC_1023), matching1) → 958_0_rec4_Load(EOS(STATIC_958), i119, 0) | =(matching1, 0)
1184_0_rec1_Load(EOS(STATIC_1184), i195, i43, i196) → 1187_0_rec1_Load(EOS(STATIC_1187), i195, i43, i196, i195)
1187_0_rec1_Load(EOS(STATIC_1187), i195, i43, i196, i195) → 1188_0_rec1_GT(EOS(STATIC_1188), i195, i43, i196, i195, i43)
1188_0_rec1_GT(EOS(STATIC_1188), i195, i43, i196, i195, i43) → 1192_0_rec1_GT(EOS(STATIC_1192), i195, i43, i196, i195, i43)
1188_0_rec1_GT(EOS(STATIC_1188), i195, i43, i196, i195, i43) → 1193_0_rec1_GT(EOS(STATIC_1193), i195, i43, i196, i195, i43)
1192_0_rec1_GT(EOS(STATIC_1192), i195, i43, i196, i195, i43) → 1195_0_rec1_Return(EOS(STATIC_1195)) | >(i195, i43)
1193_0_rec1_GT(EOS(STATIC_1193), i195, i43, i196, i195, i43) → 1196_0_rec1_Load(EOS(STATIC_1196), i195, i43, i196) | <=(i195, i43)
1195_0_rec1_Return(EOS(STATIC_1195)) → 1364_0_rec1_Return(EOS(STATIC_1364))
1196_0_rec1_Load(EOS(STATIC_1196), i195, i43, i196) → 1200_0_rec1_Load(EOS(STATIC_1200), i195, i43, i196, i196)
1200_0_rec1_Load(EOS(STATIC_1200), i195, i43, i196, i196) → 1206_0_rec1_IntArithmetic(EOS(STATIC_1206), i195, i43, i196, i196, i195)
1206_0_rec1_IntArithmetic(EOS(STATIC_1206), i195, i43, i196, i196, i195) → 1211_0_rec1_ConstantStackPush(EOS(STATIC_1211), i195, i43, i196) | &&(>=(i196, 0), >=(i195, 0))
1211_0_rec1_ConstantStackPush(EOS(STATIC_1211), i195, i43, i196) → 1215_0_rec1_Load(EOS(STATIC_1215), i195, i43, i196, 0)
1215_0_rec1_Load(EOS(STATIC_1215), i195, i43, i196, matching1) → 1219_0_rec1_Load(EOS(STATIC_1219), i195, i43, i196, 0, i196) | =(matching1, 0)
1219_0_rec1_Load(EOS(STATIC_1219), i195, i43, i196, matching1, i196) → 1223_0_rec1_InvokeMethod(EOS(STATIC_1223), i195, i43, i196, 0, i196, i195) | =(matching1, 0)
1223_0_rec1_InvokeMethod(EOS(STATIC_1223), i195, i43, i196, matching1, i196, i195) → 1225_1_rec1_InvokeMethod(1225_0_rec2_Load(EOS(STATIC_1225), 0, i196, i195), i195, i43, i196, 0, i196, i195) | =(matching1, 0)
1225_0_rec2_Load(EOS(STATIC_1225), matching1, i196, i195) → 1228_0_rec2_Load(EOS(STATIC_1228), 0, i196, i195) | =(matching1, 0)
1225_1_rec1_InvokeMethod(1343_0_rec2_Return(EOS(STATIC_1343)), i299, i43, i298, matching1, i298, i299) → 1352_0_rec2_Return(EOS(STATIC_1352), i299, i43, i298, 0, i298, i299) | =(matching1, 0)
1336_0_rec2_Return(EOS(STATIC_1336), i285, i43, i284, matching1, i284, i285) → 1341_0_rec1_Load(EOS(STATIC_1341), i285, i43, i284) | =(matching1, 0)
1341_0_rec1_Load(EOS(STATIC_1341), i285, i43, i284) → 1344_0_rec1_ConstantStackPush(EOS(STATIC_1344), i43, i284, i285)
1344_0_rec1_ConstantStackPush(EOS(STATIC_1344), i43, i284, i285) → 1346_0_rec1_IntArithmetic(EOS(STATIC_1346), i43, i284, i285)
1346_0_rec1_IntArithmetic(EOS(STATIC_1346), i43, i284, i285) → 1350_0_rec1_Load(EOS(STATIC_1350), i43, i284) | >=(i285, 0)
1350_0_rec1_Load(EOS(STATIC_1350), i43, i284) → 1355_0_rec1_Load(EOS(STATIC_1355), i284, i43)
1352_0_rec2_Return(EOS(STATIC_1352), i299, i43, i298, matching1, i298, i299) → 1336_0_rec2_Return(EOS(STATIC_1336), i299, i43, i298, 0, i298, i299) | =(matching1, 0)
1355_0_rec1_Load(EOS(STATIC_1355), i284, i43) → 1356_0_rec1_InvokeMethod(EOS(STATIC_1356), i43, i284)
1356_0_rec1_InvokeMethod(EOS(STATIC_1356), i43, i284) → 1357_1_rec1_InvokeMethod(1357_0_rec1_Load(EOS(STATIC_1357), i43, i284), i43, i284)
1357_0_rec1_Load(EOS(STATIC_1357), i43, i284) → 1359_0_rec1_Load(EOS(STATIC_1359), i43, i284)
1357_1_rec1_InvokeMethod(1195_0_rec1_Return(EOS(STATIC_1195)), i315, i316) → 1362_0_rec1_Return(EOS(STATIC_1362), i315, i316)
1357_1_rec1_InvokeMethod(1364_0_rec1_Return(EOS(STATIC_1364)), i324, i325) → 1371_0_rec1_Return(EOS(STATIC_1371), i324, i325)
1362_0_rec1_Return(EOS(STATIC_1362), i315, i316) → 1364_0_rec1_Return(EOS(STATIC_1364))
1371_0_rec1_Return(EOS(STATIC_1371), i324, i325) → 1362_0_rec1_Return(EOS(STATIC_1362), i324, i325)
828_0_rec0_GT(EOS(STATIC_828), i55, i56, i55, i56) → 834_0_rec0_GT(EOS(STATIC_834), i55, i56, i55, i56)
834_0_rec0_GT(EOS(STATIC_834), i55, i56, i55, i56) → 841_0_rec0_Return(EOS(STATIC_841)) | >(i55, i56)
841_0_rec0_Return(EOS(STATIC_841)) → 981_0_rec0_Return(EOS(STATIC_981))
951_1_rec0_InvokeMethod(841_0_rec0_Return(EOS(STATIC_841)), i95, i96) → 973_0_rec0_Return(EOS(STATIC_973), i95, i96)
951_1_rec0_InvokeMethod(981_0_rec0_Return(EOS(STATIC_981)), i110, i111) → 1004_0_rec0_Return(EOS(STATIC_1004), i110, i111)
973_0_rec0_Return(EOS(STATIC_973), i95, i96) → 981_0_rec0_Return(EOS(STATIC_981))
1004_0_rec0_Return(EOS(STATIC_1004), i110, i111) → 973_0_rec0_Return(EOS(STATIC_973), i110, i111)
1233_0_rec2_Load(EOS(STATIC_1233), i214, matching1, i215) → 1236_0_rec2_Load(EOS(STATIC_1236), i214, 0, i215, i214) | =(matching1, 0)
1236_0_rec2_Load(EOS(STATIC_1236), i214, matching1, i215, i214) → 1238_0_rec2_LT(EOS(STATIC_1238), i214, 0, i215, i214, 0) | =(matching1, 0)
1238_0_rec2_LT(EOS(STATIC_1238), i220, matching1, i215, i220, matching2) → 1241_0_rec2_LT(EOS(STATIC_1241), i220, 0, i215, i220, 0) | &&(=(matching1, 0), =(matching2, 0))
1238_0_rec2_LT(EOS(STATIC_1238), i221, matching1, i215, i221, matching2) → 1242_0_rec2_LT(EOS(STATIC_1242), i221, 0, i215, i221, 0) | &&(=(matching1, 0), =(matching2, 0))
1241_0_rec2_LT(EOS(STATIC_1241), i220, matching1, i215, i220, matching2) → 1245_0_rec2_Return(EOS(STATIC_1245)) | &&(&&(<(i220, 0), =(matching1, 0)), =(matching2, 0))
1242_0_rec2_LT(EOS(STATIC_1242), i221, matching1, i215, i221, matching2) → 1246_0_rec2_ConstantStackPush(EOS(STATIC_1246), i221, 0, i215) | &&(&&(>=(i221, 0), =(matching1, 0)), =(matching2, 0))
1246_0_rec2_ConstantStackPush(EOS(STATIC_1246), i221, matching1, i215) → 1250_0_rec2_ConstantStackPush(EOS(STATIC_1250), i221, 0, i215, 0) | =(matching1, 0)
1250_0_rec2_ConstantStackPush(EOS(STATIC_1250), i221, matching1, i215, matching2) → 1252_0_rec2_Load(EOS(STATIC_1252), i221, 0, i215, 0) | &&(=(matching1, 0), =(matching2, 0))
1252_0_rec2_Load(EOS(STATIC_1252), i221, matching1, i215, matching2) → 1256_0_rec2_IntArithmetic(EOS(STATIC_1256), i221, 0, i215, 0, i215) | &&(=(matching1, 0), =(matching2, 0))
1256_0_rec2_IntArithmetic(EOS(STATIC_1256), i221, matching1, i215, matching2, i215) → 1258_0_rec2_ConstantStackPush(EOS(STATIC_1258), i221, 0, i215, 0) | &&(=(matching1, 0), =(matching2, 0))
1258_0_rec2_ConstantStackPush(EOS(STATIC_1258), i221, matching1, i215, matching2) → 1261_0_rec2_Load(EOS(STATIC_1261), i221, 0, i215, 0) | &&(=(matching1, 0), =(matching2, 0))
1261_0_rec2_Load(EOS(STATIC_1261), i221, matching1, i215, matching2) → 1262_0_rec2_IntArithmetic(EOS(STATIC_1262), i221, 0, i215, 0) | &&(=(matching1, 0), =(matching2, 0))
1262_0_rec2_IntArithmetic(EOS(STATIC_1262), i221, matching1, i215, matching2) → 1267_0_rec2_IntArithmetic(EOS(STATIC_1267), i221, 0, i215, 0) | &&(=(matching1, 0), =(matching2, 0))
1267_0_rec2_IntArithmetic(EOS(STATIC_1267), i221, matching1, i215, matching2) → 1273_0_rec2_ConstantStackPush(EOS(STATIC_1273), i221, 0, i215, 0) | &&(=(matching1, 0), =(matching2, 0))
1273_0_rec2_ConstantStackPush(EOS(STATIC_1273), i221, matching1, i215, matching2) → 1276_0_rec2_Load(EOS(STATIC_1276), i221, 0, i215, 0) | &&(=(matching1, 0), =(matching2, 0))
1276_0_rec2_Load(EOS(STATIC_1276), i221, matching1, i215, matching2) → 1278_0_rec2_IntArithmetic(EOS(STATIC_1278), i221, 0, i215, 0, i221) | &&(=(matching1, 0), =(matching2, 0))
1278_0_rec2_IntArithmetic(EOS(STATIC_1278), i221, matching1, i215, matching2, i221) → 1281_0_rec2_IntArithmetic(EOS(STATIC_1281), i221, 0, i215, 0) | &&(=(matching1, 0), =(matching2, 0))
1281_0_rec2_IntArithmetic(EOS(STATIC_1281), i221, matching1, i215, matching2) → 1283_0_rec2_Load(EOS(STATIC_1283), i221, 0, i215, 0) | &&(=(matching1, 0), =(matching2, 0))
1283_0_rec2_Load(EOS(STATIC_1283), i221, matching1, i215, matching2) → 1286_0_rec2_Load(EOS(STATIC_1286), i221, 0, i215, 0, i215) | &&(=(matching1, 0), =(matching2, 0))
1286_0_rec2_Load(EOS(STATIC_1286), i221, matching1, i215, matching2, i215) → 1289_0_rec2_Load(EOS(STATIC_1289), i221, 0, i215, 0, i215) | &&(=(matching1, 0), =(matching2, 0))
1289_0_rec2_Load(EOS(STATIC_1289), i221, matching1, i215, matching2, i215) → 1291_0_rec2_InvokeMethod(EOS(STATIC_1291), i221, 0, i215, 0, i215, i221) | &&(=(matching1, 0), =(matching2, 0))
1291_0_rec2_InvokeMethod(EOS(STATIC_1291), i221, matching1, i215, matching2, i215, i221) → 1293_1_rec2_InvokeMethod(1293_0_rec3_Load(EOS(STATIC_1293), 0, i215, i221), i221, 0, i215, 0, i215, i221) | &&(=(matching1, 0), =(matching2, 0))
1293_0_rec3_Load(EOS(STATIC_1293), matching1, i215, i221) → 1296_0_rec3_Load(EOS(STATIC_1296), 0, i215, i221) | =(matching1, 0)
1293_1_rec2_InvokeMethod(1207_0_rec3_Return(EOS(STATIC_1207)), i242, matching1, i240, matching2, i240, i242) → 1304_0_rec3_Return(EOS(STATIC_1304), i242, 0, i240, 0, i240, i242) | &&(=(matching1, 0), =(matching2, 0))
1293_1_rec2_InvokeMethod(1308_0_rec3_Return(EOS(STATIC_1308)), i261, matching1, i259, matching2, i259, i261) → 1318_0_rec3_Return(EOS(STATIC_1318), i261, 0, i259, 0, i259, i261) | &&(=(matching1, 0), =(matching2, 0))
1304_0_rec3_Return(EOS(STATIC_1304), i242, matching1, i240, matching2, i240, i242) → 1306_0_rec2_Load(EOS(STATIC_1306), i242, 0, i240) | &&(=(matching1, 0), =(matching2, 0))
1306_0_rec2_Load(EOS(STATIC_1306), i242, matching1, i240) → 1309_0_rec2_ConstantStackPush(EOS(STATIC_1309), 0, i240, i242) | =(matching1, 0)
1309_0_rec2_ConstantStackPush(EOS(STATIC_1309), matching1, i240, i242) → 1312_0_rec2_IntArithmetic(EOS(STATIC_1312), 0, i240, i242) | =(matching1, 0)
1312_0_rec2_IntArithmetic(EOS(STATIC_1312), matching1, i240, i242) → 1316_0_rec2_Load(EOS(STATIC_1316), 0, i240) | &&(>=(i242, 0), =(matching1, 0))
1316_0_rec2_Load(EOS(STATIC_1316), matching1, i240) → 1321_0_rec2_Load(EOS(STATIC_1321), i240, 0) | =(matching1, 0)
1318_0_rec3_Return(EOS(STATIC_1318), i261, matching1, i259, matching2, i259, i261) → 1304_0_rec3_Return(EOS(STATIC_1304), i261, 0, i259, 0, i259, i261) | &&(=(matching1, 0), =(matching2, 0))
1321_0_rec2_Load(EOS(STATIC_1321), i240, matching1) → 1322_0_rec2_Load(EOS(STATIC_1322), 0, i240) | =(matching1, 0)
1322_0_rec2_Load(EOS(STATIC_1322), matching1, i240) → 1323_0_rec2_InvokeMethod(EOS(STATIC_1323), 0, i240) | =(matching1, 0)
1323_0_rec2_InvokeMethod(EOS(STATIC_1323), matching1, i240) → 1324_1_rec2_InvokeMethod(1324_0_rec2_Load(EOS(STATIC_1324), 0, i240), 0, i240) | =(matching1, 0)
1324_0_rec2_Load(EOS(STATIC_1324), matching1, i240) → 1326_0_rec2_Load(EOS(STATIC_1326), 0, i240) | =(matching1, 0)
1324_1_rec2_InvokeMethod(1245_0_rec2_Return(EOS(STATIC_1245)), matching1, i281) → 1329_0_rec2_Return(EOS(STATIC_1329), 0, i281) | =(matching1, 0)
1324_1_rec2_InvokeMethod(1343_0_rec2_Return(EOS(STATIC_1343)), matching1, i302) → 1354_0_rec2_Return(EOS(STATIC_1354), 0, i302) | =(matching1, 0)
1329_0_rec2_Return(EOS(STATIC_1329), matching1, i281) → 1339_0_rec2_Return(EOS(STATIC_1339), 0, i281) | =(matching1, 0)
1339_0_rec2_Return(EOS(STATIC_1339), matching1, i290) → 1343_0_rec2_Return(EOS(STATIC_1343)) | =(matching1, 0)
1354_0_rec2_Return(EOS(STATIC_1354), matching1, i302) → 1339_0_rec2_Return(EOS(STATIC_1339), 0, i302) | =(matching1, 0)
1190_0_rec3_Load(EOS(STATIC_1190), i197, i115, i116) → 1194_0_rec3_Load(EOS(STATIC_1194), i197, i115, i116, i197)
1194_0_rec3_Load(EOS(STATIC_1194), i197, i115, i116, i197) → 1198_0_rec3_GT(EOS(STATIC_1198), i197, i115, i116, i197, i115)
1198_0_rec3_GT(EOS(STATIC_1198), i197, i115, i116, i197, i115) → 1201_0_rec3_GT(EOS(STATIC_1201), i197, i115, i116, i197, i115)
1198_0_rec3_GT(EOS(STATIC_1198), i197, i115, i116, i197, i115) → 1202_0_rec3_GT(EOS(STATIC_1202), i197, i115, i116, i197, i115)
1201_0_rec3_GT(EOS(STATIC_1201), i197, i115, i116, i197, i115) → 1207_0_rec3_Return(EOS(STATIC_1207)) | >(i197, i115)
1202_0_rec3_GT(EOS(STATIC_1202), i197, i115, i116, i197, i115) → 1208_0_rec3_ConstantStackPush(EOS(STATIC_1208), i197, i115, i116) | <=(i197, i115)
1207_0_rec3_Return(EOS(STATIC_1207)) → 1308_0_rec3_Return(EOS(STATIC_1308))
1208_0_rec3_ConstantStackPush(EOS(STATIC_1208), i197, i115, i116) → 1213_0_rec3_Load(EOS(STATIC_1213), i197, i115, i116)
1213_0_rec3_Load(EOS(STATIC_1213), i197, i115, i116) → 1218_0_rec3_IntArithmetic(EOS(STATIC_1218), i197, i115, i116, i116)
1218_0_rec3_IntArithmetic(EOS(STATIC_1218), i197, i115, i116, i116) → 1222_0_rec3_ConstantStackPush(EOS(STATIC_1222), i197, i115, i116)
1222_0_rec3_ConstantStackPush(EOS(STATIC_1222), i197, i115, i116) → 1224_0_rec3_Load(EOS(STATIC_1224), i197, i115, i116)
1224_0_rec3_Load(EOS(STATIC_1224), i197, i115, i116) → 1227_0_rec3_IntArithmetic(EOS(STATIC_1227), i197, i115, i116)
1227_0_rec3_IntArithmetic(EOS(STATIC_1227), i197, i115, i116) → 1229_0_rec3_IntArithmetic(EOS(STATIC_1229), i197, i115, i116)
1229_0_rec3_IntArithmetic(EOS(STATIC_1229), i197, i115, i116) → 1231_0_rec3_ConstantStackPush(EOS(STATIC_1231), i197, i115, i116)
1231_0_rec3_ConstantStackPush(EOS(STATIC_1231), i197, i115, i116) → 1235_0_rec3_Load(EOS(STATIC_1235), i197, i115, i116)
1235_0_rec3_Load(EOS(STATIC_1235), i197, i115, i116) → 1237_0_rec3_IntArithmetic(EOS(STATIC_1237), i197, i115, i116)
1237_0_rec3_IntArithmetic(EOS(STATIC_1237), i197, i115, i116) → 1240_0_rec3_IntArithmetic(EOS(STATIC_1240), i197, i115, i116)
1240_0_rec3_IntArithmetic(EOS(STATIC_1240), i197, i115, i116) → 1243_0_rec3_Load(EOS(STATIC_1243), i197, i115, i116)
1243_0_rec3_Load(EOS(STATIC_1243), i197, i115, i116) → 1247_0_rec3_IntArithmetic(EOS(STATIC_1247), i197, i115, i116, i197)
1247_0_rec3_IntArithmetic(EOS(STATIC_1247), i197, i115, i116, i197) → 1251_0_rec3_ConstantStackPush(EOS(STATIC_1251), i197, i115, i116) | >=(i197, 0)
1251_0_rec3_ConstantStackPush(EOS(STATIC_1251), i197, i115, i116) → 1254_0_rec3_InvokeMethod(EOS(STATIC_1254), i197, i115, i116)
1254_0_rec3_InvokeMethod(EOS(STATIC_1254), i197, i115, i116) → 1257_1_rec3_InvokeMethod(1257_0_rec4_Load(EOS(STATIC_1257)), i197, i115, i116)
1257_0_rec4_Load(EOS(STATIC_1257)) → 1260_0_rec4_Load(EOS(STATIC_1260))
1257_1_rec3_InvokeMethod(984_0_rec4_Return(EOS(STATIC_984)), i197, i115, i116) → 1268_0_rec4_Return(EOS(STATIC_1268), i197, i115, i116)
1257_1_rec3_InvokeMethod(1070_0_rec4_Return(EOS(STATIC_1070)), i197, i115, i116) → 1271_0_rec4_Return(EOS(STATIC_1271), i197, i115, i116)
1268_0_rec4_Return(EOS(STATIC_1268), i197, i115, i116) → 1272_0_rec4_Return(EOS(STATIC_1272), i197, i115, i116)
1271_0_rec4_Return(EOS(STATIC_1271), i197, i115, i116) → 1272_0_rec4_Return(EOS(STATIC_1272), i197, i115, i116)
1272_0_rec4_Return(EOS(STATIC_1272), i197, i115, i116) → 1274_0_rec3_Load(EOS(STATIC_1274), i197, i115, i116)
1274_0_rec3_Load(EOS(STATIC_1274), i197, i115, i116) → 1277_0_rec3_ConstantStackPush(EOS(STATIC_1277), i115, i116, i197)
1277_0_rec3_ConstantStackPush(EOS(STATIC_1277), i115, i116, i197) → 1279_0_rec3_IntArithmetic(EOS(STATIC_1279), i115, i116, i197)
1279_0_rec3_IntArithmetic(EOS(STATIC_1279), i115, i116, i197) → 1282_0_rec3_Load(EOS(STATIC_1282), i115, i116) | >=(i197, 0)
1282_0_rec3_Load(EOS(STATIC_1282), i115, i116) → 1284_0_rec3_Load(EOS(STATIC_1284), i116, i115)
1284_0_rec3_Load(EOS(STATIC_1284), i116, i115) → 1287_0_rec3_Load(EOS(STATIC_1287), i115, i116)
1287_0_rec3_Load(EOS(STATIC_1287), i115, i116) → 1290_0_rec3_Load(EOS(STATIC_1290), i115, i116)
1290_0_rec3_Load(EOS(STATIC_1290), i115, i116) → 1292_0_rec3_InvokeMethod(EOS(STATIC_1292), i115, i116)
1292_0_rec3_InvokeMethod(EOS(STATIC_1292), i115, i116) → 1295_1_rec3_InvokeMethod(1295_0_rec3_Load(EOS(STATIC_1295), i115, i116), i115, i116)
1295_0_rec3_Load(EOS(STATIC_1295), i115, i116) → 1298_0_rec3_Load(EOS(STATIC_1298), i115, i116)
1295_1_rec3_InvokeMethod(1207_0_rec3_Return(EOS(STATIC_1207)), i250, i251) → 1305_0_rec3_Return(EOS(STATIC_1305), i250, i251)
1295_1_rec3_InvokeMethod(1308_0_rec3_Return(EOS(STATIC_1308)), i264, i265) → 1319_0_rec3_Return(EOS(STATIC_1319), i264, i265)
1305_0_rec3_Return(EOS(STATIC_1305), i250, i251) → 1308_0_rec3_Return(EOS(STATIC_1308))
1319_0_rec3_Return(EOS(STATIC_1319), i264, i265) → 1305_0_rec3_Return(EOS(STATIC_1305), i264, i265)
958_0_rec4_Load(EOS(STATIC_958), i89, matching1) → 964_0_rec4_Load(EOS(STATIC_964), i89, 0, i89) | =(matching1, 0)
964_0_rec4_Load(EOS(STATIC_964), i89, matching1, i89) → 971_0_rec4_LT(EOS(STATIC_971), i89, 0, i89, 0) | =(matching1, 0)
971_0_rec4_LT(EOS(STATIC_971), i99, matching1, i99, matching2) → 976_0_rec4_LT(EOS(STATIC_976), i99, 0, i99, 0) | &&(=(matching1, 0), =(matching2, 0))
971_0_rec4_LT(EOS(STATIC_971), i100, matching1, i100, matching2) → 977_0_rec4_LT(EOS(STATIC_977), i100, 0, i100, 0) | &&(=(matching1, 0), =(matching2, 0))
976_0_rec4_LT(EOS(STATIC_976), i99, matching1, i99, matching2) → 984_0_rec4_Return(EOS(STATIC_984)) | &&(&&(<(i99, 0), =(matching1, 0)), =(matching2, 0))
977_0_rec4_LT(EOS(STATIC_977), i100, matching1, i100, matching2) → 985_0_rec4_Load(EOS(STATIC_985), i100, 0) | &&(&&(>=(i100, 0), =(matching1, 0)), =(matching2, 0))
985_0_rec4_Load(EOS(STATIC_985), i100, matching1) → 996_0_rec4_ConstantStackPush(EOS(STATIC_996), 0, i100) | =(matching1, 0)
996_0_rec4_ConstantStackPush(EOS(STATIC_996), matching1, i100) → 1001_0_rec4_IntArithmetic(EOS(STATIC_1001), 0, i100) | =(matching1, 0)
1001_0_rec4_IntArithmetic(EOS(STATIC_1001), matching1, i100) → 1008_0_rec4_Load(EOS(STATIC_1008), 0) | &&(>=(i100, 0), =(matching1, 0))
1008_0_rec4_Load(EOS(STATIC_1008), matching1) → 1012_0_rec4_InvokeMethod(EOS(STATIC_1012), 0) | =(matching1, 0)
1012_0_rec4_InvokeMethod(EOS(STATIC_1012), matching1) → 1017_1_rec4_InvokeMethod(1017_0_rec4_Load(EOS(STATIC_1017), 0), 0) | =(matching1, 0)
1017_0_rec4_Load(EOS(STATIC_1017), matching1) → 1023_0_rec4_Load(EOS(STATIC_1023), 0) | =(matching1, 0)
1017_1_rec4_InvokeMethod(984_0_rec4_Return(EOS(STATIC_984)), matching1) → 1039_0_rec4_Return(EOS(STATIC_1039), 0) | =(matching1, 0)
1017_1_rec4_InvokeMethod(1070_0_rec4_Return(EOS(STATIC_1070)), matching1) → 1090_0_rec4_Return(EOS(STATIC_1090), 0) | =(matching1, 0)
1039_0_rec4_Return(EOS(STATIC_1039), matching1) → 1063_0_rec4_Return(EOS(STATIC_1063), 0) | =(matching1, 0)
1063_0_rec4_Return(EOS(STATIC_1063), matching1) → 1070_0_rec4_Return(EOS(STATIC_1070)) | =(matching1, 0)
1090_0_rec4_Return(EOS(STATIC_1090), matching1) → 1063_0_rec4_Return(EOS(STATIC_1063), 0) | =(matching1, 0)

Combined rules. Obtained 2 conditional rules for P and 24 conditional rules for R.


P rules:
886_1_rec0_InvokeMethod(1195_0_rec1_Return(EOS(STATIC_1195)), x0, x1, 0, x3, x0) → 951_1_rec0_InvokeMethod(886_1_rec0_InvokeMethod(886_0_rec1_Load(EOS(STATIC_886), 0, *(2, +(x0, 1)), +(x0, 1)), +(x0, 1), x1, 0, *(2, +(x0, 1)), +(x0, 1)), +(x0, 1), x1) | &&(>=(x1, +(x0, 1)), >(+(x0, 1), 0))
886_1_rec0_InvokeMethod(1364_0_rec1_Return(EOS(STATIC_1364)), x0, x1, 0, x3, x0) → 951_1_rec0_InvokeMethod(886_1_rec0_InvokeMethod(886_0_rec1_Load(EOS(STATIC_886), 0, *(2, +(x0, 1)), +(x0, 1)), +(x0, 1), x1, 0, *(2, +(x0, 1)), +(x0, 1)), +(x0, 1), x1) | &&(>=(x1, +(x0, 1)), >(+(x0, 1), 0))
R rules:
886_0_rec1_Load(EOS(STATIC_886), 0, x1, x2) → 1188_0_rec1_GT(EOS(STATIC_1188), 0, x1, x2, 0, x1)
1188_0_rec1_GT(EOS(STATIC_1188), x0, x1, x2, x0, x1) → 1364_0_rec1_Return(EOS(STATIC_1364)) | <(x1, x0)
951_1_rec0_InvokeMethod(841_0_rec0_Return(EOS(STATIC_841)), x0, x1) → 981_0_rec0_Return(EOS(STATIC_981))
951_1_rec0_InvokeMethod(981_0_rec0_Return(EOS(STATIC_981)), x0, x1) → 981_0_rec0_Return(EOS(STATIC_981))
1188_0_rec1_GT(EOS(STATIC_1188), x0, x1, x2, x0, x1) → 1225_1_rec1_InvokeMethod(1238_0_rec2_LT(EOS(STATIC_1238), x3, 0, x2, x3, 0), x0, x1, x2, 0, x2, x0) | &&(&&(>(+(x2, 1), 0), >=(x1, x0)), >(+(x0, 1), 0))
1238_0_rec2_LT(EOS(STATIC_1238), x0, 0, x2, x0, 0) → 1245_0_rec2_Return(EOS(STATIC_1245)) | <(x0, 0)
1238_0_rec2_LT(EOS(STATIC_1238), x0, 0, x2, x0, 0) → 1293_1_rec2_InvokeMethod(1198_0_rec3_GT(EOS(STATIC_1198), 0, x4, x2, 0, x4), x0, 0, x2, 0, x2, x0) | >(+(x0, 1), 0)
1198_0_rec3_GT(EOS(STATIC_1198), x0, x1, x2, x0, x1) → 1308_0_rec3_Return(EOS(STATIC_1308)) | <(x1, x0)
1198_0_rec3_GT(EOS(STATIC_1198), x0, x1, x2, x0, x1) → 1257_1_rec3_InvokeMethod(971_0_rec4_LT(EOS(STATIC_971), x3, 0, x3, 0), x0, x1, x2) | &&(>=(x1, x0), >(+(x0, 1), 0))
971_0_rec4_LT(EOS(STATIC_971), x0, 0, x0, 0) → 984_0_rec4_Return(EOS(STATIC_984)) | <(x0, 0)
971_0_rec4_LT(EOS(STATIC_971), x0, 0, x0, 0) → 1017_1_rec4_InvokeMethod(971_0_rec4_LT(EOS(STATIC_971), x3, 0, x3, 0), 0) | >(+(x0, 1), 0)
1017_1_rec4_InvokeMethod(984_0_rec4_Return(EOS(STATIC_984)), 0) → 1070_0_rec4_Return(EOS(STATIC_1070))
1017_1_rec4_InvokeMethod(1070_0_rec4_Return(EOS(STATIC_1070)), 0) → 1070_0_rec4_Return(EOS(STATIC_1070))
1225_1_rec1_InvokeMethod(1343_0_rec2_Return(EOS(STATIC_1343)), x0, x1, x2, 0, x2, x0) → 1357_1_rec1_InvokeMethod(1188_0_rec1_GT(EOS(STATIC_1188), x4, x1, x2, x4, x1), x1, x2) | >(+(x0, 1), 0)
1357_1_rec1_InvokeMethod(1195_0_rec1_Return(EOS(STATIC_1195)), x0, x1) → 1364_0_rec1_Return(EOS(STATIC_1364))
1357_1_rec1_InvokeMethod(1364_0_rec1_Return(EOS(STATIC_1364)), x0, x1) → 1364_0_rec1_Return(EOS(STATIC_1364))
1293_1_rec2_InvokeMethod(1207_0_rec3_Return(EOS(STATIC_1207)), x0, 0, x2, 0, x2, x0) → 1324_1_rec2_InvokeMethod(1238_0_rec2_LT(EOS(STATIC_1238), x4, 0, x2, x4, 0), 0, x2) | >(+(x0, 1), 0)
1293_1_rec2_InvokeMethod(1308_0_rec3_Return(EOS(STATIC_1308)), x0, 0, x2, 0, x2, x0) → 1324_1_rec2_InvokeMethod(1238_0_rec2_LT(EOS(STATIC_1238), x4, 0, x2, x4, 0), 0, x2) | >(+(x0, 1), 0)
1324_1_rec2_InvokeMethod(1245_0_rec2_Return(EOS(STATIC_1245)), 0, x1) → 1343_0_rec2_Return(EOS(STATIC_1343))
1324_1_rec2_InvokeMethod(1343_0_rec2_Return(EOS(STATIC_1343)), 0, x1) → 1343_0_rec2_Return(EOS(STATIC_1343))
1257_1_rec3_InvokeMethod(984_0_rec4_Return(EOS(STATIC_984)), x0, x1, x2) → 1295_1_rec3_InvokeMethod(1198_0_rec3_GT(EOS(STATIC_1198), x3, x1, x2, x3, x1), x1, x2) | >(+(x0, 1), 0)
1257_1_rec3_InvokeMethod(1070_0_rec4_Return(EOS(STATIC_1070)), x0, x1, x2) → 1295_1_rec3_InvokeMethod(1198_0_rec3_GT(EOS(STATIC_1198), x3, x1, x2, x3, x1), x1, x2) | >(+(x0, 1), 0)
1295_1_rec3_InvokeMethod(1207_0_rec3_Return(EOS(STATIC_1207)), x0, x1) → 1308_0_rec3_Return(EOS(STATIC_1308))
1295_1_rec3_InvokeMethod(1308_0_rec3_Return(EOS(STATIC_1308)), x0, x1) → 1308_0_rec3_Return(EOS(STATIC_1308))

Filtered ground terms:



886_0_rec1_Load(x1, x2, x3, x4) → 886_0_rec1_Load(x3, x4)
886_1_rec0_InvokeMethod(x1, x2, x3, x4, x5, x6) → 886_1_rec0_InvokeMethod(x1, x2, x3, x5, x6)
Cond_886_1_rec0_InvokeMethod1(x1, x2, x3, x4, x5, x6, x7) → Cond_886_1_rec0_InvokeMethod1(x1, x3, x4, x6, x7)
1364_0_rec1_Return(x1) → 1364_0_rec1_Return
Cond_886_1_rec0_InvokeMethod(x1, x2, x3, x4, x5, x6, x7) → Cond_886_1_rec0_InvokeMethod(x1, x3, x4, x6, x7)
1195_0_rec1_Return(x1) → 1195_0_rec1_Return
1308_0_rec3_Return(x1) → 1308_0_rec3_Return
1207_0_rec3_Return(x1) → 1207_0_rec3_Return
1198_0_rec3_GT(x1, x2, x3, x4, x5, x6) → 1198_0_rec3_GT(x2, x3, x4, x5, x6)
Cond_1257_1_rec3_InvokeMethod1(x1, x2, x3, x4, x5, x6) → Cond_1257_1_rec3_InvokeMethod1(x1, x3, x4, x5, x6)
1070_0_rec4_Return(x1) → 1070_0_rec4_Return
Cond_1257_1_rec3_InvokeMethod(x1, x2, x3, x4, x5, x6) → Cond_1257_1_rec3_InvokeMethod(x1, x3, x4, x5, x6)
984_0_rec4_Return(x1) → 984_0_rec4_Return
1343_0_rec2_Return(x1) → 1343_0_rec2_Return
1324_1_rec2_InvokeMethod(x1, x2, x3) → 1324_1_rec2_InvokeMethod(x1, x3)
1245_0_rec2_Return(x1) → 1245_0_rec2_Return
1238_0_rec2_LT(x1, x2, x3, x4, x5, x6) → 1238_0_rec2_LT(x2, x4, x5)
Cond_1293_1_rec2_InvokeMethod1(x1, x2, x3, x4, x5, x6, x7, x8, x9) → Cond_1293_1_rec2_InvokeMethod1(x1, x3, x5, x7, x8, x9)
1293_1_rec2_InvokeMethod(x1, x2, x3, x4, x5, x6, x7) → 1293_1_rec2_InvokeMethod(x1, x2, x4, x6, x7)
Cond_1293_1_rec2_InvokeMethod(x1, x2, x3, x4, x5, x6, x7, x8, x9) → Cond_1293_1_rec2_InvokeMethod(x1, x3, x5, x7, x8, x9)
1188_0_rec1_GT(x1, x2, x3, x4, x5, x6) → 1188_0_rec1_GT(x2, x3, x4, x5, x6)
Cond_1225_1_rec1_InvokeMethod(x1, x2, x3, x4, x5, x6, x7, x8, x9) → Cond_1225_1_rec1_InvokeMethod(x1, x3, x4, x5, x7, x8, x9)
1225_1_rec1_InvokeMethod(x1, x2, x3, x4, x5, x6, x7) → 1225_1_rec1_InvokeMethod(x1, x2, x3, x4, x6, x7)
1017_1_rec4_InvokeMethod(x1, x2) → 1017_1_rec4_InvokeMethod(x1)
971_0_rec4_LT(x1, x2, x3, x4, x5) → 971_0_rec4_LT(x2, x4)
Cond_971_0_rec4_LT1(x1, x2, x3, x4, x5, x6, x7) → Cond_971_0_rec4_LT1(x1, x3, x5, x7)
Cond_971_0_rec4_LT(x1, x2, x3, x4, x5, x6) → Cond_971_0_rec4_LT(x1, x3, x5)
Cond_1198_0_rec3_GT1(x1, x2, x3, x4, x5, x6, x7, x8) → Cond_1198_0_rec3_GT1(x1, x3, x4, x5, x6, x7, x8)
Cond_1198_0_rec3_GT(x1, x2, x3, x4, x5, x6, x7) → Cond_1198_0_rec3_GT(x1, x3, x4, x5, x6, x7)
Cond_1238_0_rec2_LT1(x1, x2, x3, x4, x5, x6, x7, x8) → Cond_1238_0_rec2_LT1(x1, x3, x5, x6, x8)
Cond_1238_0_rec2_LT(x1, x2, x3, x4, x5, x6, x7) → Cond_1238_0_rec2_LT(x1, x3, x5, x6)
Cond_1188_0_rec1_GT1(x1, x2, x3, x4, x5, x6, x7, x8) → Cond_1188_0_rec1_GT1(x1, x3, x4, x5, x6, x7, x8)
981_0_rec0_Return(x1) → 981_0_rec0_Return
841_0_rec0_Return(x1) → 841_0_rec0_Return
Cond_1188_0_rec1_GT(x1, x2, x3, x4, x5, x6, x7) → Cond_1188_0_rec1_GT(x1, x3, x4, x5, x6, x7)

Filtered duplicate args:



886_1_rec0_InvokeMethod(x1, x2, x3, x4, x5) → 886_1_rec0_InvokeMethod(x1, x3, x4, x5)
Cond_886_1_rec0_InvokeMethod(x1, x2, x3, x4, x5) → Cond_886_1_rec0_InvokeMethod(x1, x3, x4, x5)
Cond_886_1_rec0_InvokeMethod1(x1, x2, x3, x4, x5) → Cond_886_1_rec0_InvokeMethod1(x1, x3, x4, x5)
1188_0_rec1_GT(x1, x2, x3, x4, x5) → 1188_0_rec1_GT(x3, x4, x5)
Cond_1188_0_rec1_GT(x1, x2, x3, x4, x5, x6) → Cond_1188_0_rec1_GT(x1, x4, x5, x6)
Cond_1188_0_rec1_GT1(x1, x2, x3, x4, x5, x6, x7) → Cond_1188_0_rec1_GT1(x1, x4, x5, x6, x7)
1225_1_rec1_InvokeMethod(x1, x2, x3, x4, x5, x6) → 1225_1_rec1_InvokeMethod(x1, x3, x5, x6)
1238_0_rec2_LT(x1, x2, x3) → 1238_0_rec2_LT(x2, x3)
Cond_1238_0_rec2_LT(x1, x2, x3, x4) → Cond_1238_0_rec2_LT(x1, x3, x4)
Cond_1238_0_rec2_LT1(x1, x2, x3, x4, x5) → Cond_1238_0_rec2_LT1(x1, x3, x4, x5)
1293_1_rec2_InvokeMethod(x1, x2, x3, x4, x5) → 1293_1_rec2_InvokeMethod(x1, x4, x5)
1198_0_rec3_GT(x1, x2, x3, x4, x5) → 1198_0_rec3_GT(x3, x4, x5)
Cond_1198_0_rec3_GT(x1, x2, x3, x4, x5, x6) → Cond_1198_0_rec3_GT(x1, x4, x5, x6)
Cond_1198_0_rec3_GT1(x1, x2, x3, x4, x5, x6, x7) → Cond_1198_0_rec3_GT1(x1, x4, x5, x6, x7)
971_0_rec4_LT(x1, x2) → 971_0_rec4_LT(x2)
Cond_971_0_rec4_LT(x1, x2, x3) → Cond_971_0_rec4_LT(x1, x3)
Cond_971_0_rec4_LT1(x1, x2, x3, x4) → Cond_971_0_rec4_LT1(x1, x3, x4)
Cond_1225_1_rec1_InvokeMethod(x1, x2, x3, x4, x5, x6, x7) → Cond_1225_1_rec1_InvokeMethod(x1, x3, x5, x6, x7)
Cond_1293_1_rec2_InvokeMethod(x1, x2, x3, x4, x5, x6) → Cond_1293_1_rec2_InvokeMethod(x1, x4, x5, x6)
Cond_1293_1_rec2_InvokeMethod1(x1, x2, x3, x4, x5, x6) → Cond_1293_1_rec2_InvokeMethod1(x1, x4, x5, x6)

Filtered unneeded arguments:



886_1_rec0_InvokeMethod(x1, x2, x3, x4) → 886_1_rec0_InvokeMethod(x1, x2, x4)
Cond_886_1_rec0_InvokeMethod(x1, x2, x3, x4) → Cond_886_1_rec0_InvokeMethod(x1, x2, x4)
951_1_rec0_InvokeMethod(x1, x2, x3) → 951_1_rec0_InvokeMethod(x1)
Cond_886_1_rec0_InvokeMethod1(x1, x2, x3, x4) → Cond_886_1_rec0_InvokeMethod1(x1, x2, x4)
Cond_1188_0_rec1_GT(x1, x2, x3, x4) → Cond_1188_0_rec1_GT(x1)
Cond_1238_0_rec2_LT(x1, x2, x3) → Cond_1238_0_rec2_LT(x1)
Cond_1238_0_rec2_LT1(x1, x2, x3, x4) → Cond_1238_0_rec2_LT1(x1, x3, x4)
Cond_1198_0_rec3_GT(x1, x2, x3, x4) → Cond_1198_0_rec3_GT(x1)
Cond_1198_0_rec3_GT1(x1, x2, x3, x4, x5) → Cond_1198_0_rec3_GT1(x1, x3, x4, x5)
Cond_971_0_rec4_LT(x1, x2) → Cond_971_0_rec4_LT(x1)
Cond_971_0_rec4_LT1(x1, x2, x3) → Cond_971_0_rec4_LT1(x1, x3)
Cond_1225_1_rec1_InvokeMethod(x1, x2, x3, x4, x5) → Cond_1225_1_rec1_InvokeMethod(x1, x2, x3, x5)
1357_1_rec1_InvokeMethod(x1, x2, x3) → 1357_1_rec1_InvokeMethod(x1)
1293_1_rec2_InvokeMethod(x1, x2, x3) → 1293_1_rec2_InvokeMethod(x1, x3)
Cond_1293_1_rec2_InvokeMethod(x1, x2, x3, x4) → Cond_1293_1_rec2_InvokeMethod(x1, x4)
1324_1_rec2_InvokeMethod(x1, x2) → 1324_1_rec2_InvokeMethod(x1)
Cond_1293_1_rec2_InvokeMethod1(x1, x2, x3, x4) → Cond_1293_1_rec2_InvokeMethod1(x1, x4)
1257_1_rec3_InvokeMethod(x1, x2, x3, x4) → 1257_1_rec3_InvokeMethod(x1, x2, x3)
Cond_1257_1_rec3_InvokeMethod(x1, x2, x3, x4, x5) → Cond_1257_1_rec3_InvokeMethod(x1, x3, x5)
1295_1_rec3_InvokeMethod(x1, x2, x3) → 1295_1_rec3_InvokeMethod(x1)
Cond_1257_1_rec3_InvokeMethod1(x1, x2, x3, x4, x5) → Cond_1257_1_rec3_InvokeMethod1(x1, x3, x5)
1238_0_rec2_LT(x1, x2) → 1238_0_rec2_LT(x2)
1198_0_rec3_GT(x1, x2, x3) → 1198_0_rec3_GT(x2, x3)

Combined rules. Obtained 2 conditional rules for P and 24 conditional rules for R.


P rules:
886_1_rec0_InvokeMethod(1195_0_rec1_Return, x1, x0) → 951_1_rec0_InvokeMethod(886_1_rec0_InvokeMethod(886_0_rec1_Load(*(2, +(x0, 1)), +(x0, 1)), x1, +(x0, 1))) | &&(>=(x1, +(x0, 1)), >(x0, -1))
886_1_rec0_InvokeMethod(1364_0_rec1_Return, x1, x0) → 951_1_rec0_InvokeMethod(886_1_rec0_InvokeMethod(886_0_rec1_Load(*(2, +(x0, 1)), +(x0, 1)), x1, +(x0, 1))) | &&(>=(x1, +(x0, 1)), >(x0, -1))
R rules:
886_0_rec1_Load(x1, x2) → 1188_0_rec1_GT(x2, 0, x1)
1188_0_rec1_GT(x2, x0, x1) → 1364_0_rec1_Return | <(x1, x0)
951_1_rec0_InvokeMethod(841_0_rec0_Return) → 981_0_rec0_Return
951_1_rec0_InvokeMethod(981_0_rec0_Return) → 981_0_rec0_Return
1188_0_rec1_GT(x2, x0, x1) → 1225_1_rec1_InvokeMethod(1238_0_rec2_LT(x3), x1, x2, x0) | &&(&&(>(x2, -1), >=(x1, x0)), >(x0, -1))
1238_0_rec2_LT(x0) → 1245_0_rec2_Return | <(x0, 0)
1238_0_rec2_LT(x0) → 1293_1_rec2_InvokeMethod(1198_0_rec3_GT(0, x4), x0) | >(x0, -1)
1198_0_rec3_GT(x0, x1) → 1308_0_rec3_Return | <(x1, x0)
1198_0_rec3_GT(x0, x1) → 1257_1_rec3_InvokeMethod(971_0_rec4_LT(x3), x0, x1) | &&(>=(x1, x0), >(x0, -1))
971_0_rec4_LT(x0) → 984_0_rec4_Return | <(x0, 0)
971_0_rec4_LT(x0) → 1017_1_rec4_InvokeMethod(971_0_rec4_LT(x3)) | >(x0, -1)
1017_1_rec4_InvokeMethod(984_0_rec4_Return) → 1070_0_rec4_Return
1017_1_rec4_InvokeMethod(1070_0_rec4_Return) → 1070_0_rec4_Return
1225_1_rec1_InvokeMethod(1343_0_rec2_Return, x1, x2, x0) → 1357_1_rec1_InvokeMethod(1188_0_rec1_GT(x2, x4, x1)) | >(x0, -1)
1357_1_rec1_InvokeMethod(1195_0_rec1_Return) → 1364_0_rec1_Return
1357_1_rec1_InvokeMethod(1364_0_rec1_Return) → 1364_0_rec1_Return
1293_1_rec2_InvokeMethod(1207_0_rec3_Return, x0) → 1324_1_rec2_InvokeMethod(1238_0_rec2_LT(x4)) | >(x0, -1)
1293_1_rec2_InvokeMethod(1308_0_rec3_Return, x0) → 1324_1_rec2_InvokeMethod(1238_0_rec2_LT(x4)) | >(x0, -1)
1324_1_rec2_InvokeMethod(1245_0_rec2_Return) → 1343_0_rec2_Return
1324_1_rec2_InvokeMethod(1343_0_rec2_Return) → 1343_0_rec2_Return
1257_1_rec3_InvokeMethod(984_0_rec4_Return, x0, x1) → 1295_1_rec3_InvokeMethod(1198_0_rec3_GT(x3, x1)) | >(x0, -1)
1257_1_rec3_InvokeMethod(1070_0_rec4_Return, x0, x1) → 1295_1_rec3_InvokeMethod(1198_0_rec3_GT(x3, x1)) | >(x0, -1)
1295_1_rec3_InvokeMethod(1207_0_rec3_Return) → 1308_0_rec3_Return
1295_1_rec3_InvokeMethod(1308_0_rec3_Return) → 1308_0_rec3_Return

Performed bisimulation on rules. Used the following equivalence classes: {[Cond_1238_0_rec2_LT_2, Cond_971_0_rec4_LT_2]=Cond_1238_0_rec2_LT_2, [Cond_886_1_rec0_InvokeMethod_4, Cond_886_1_rec0_InvokeMethod1_4]=Cond_886_1_rec0_InvokeMethod_4, [Cond_1293_1_rec2_InvokeMethod_4, Cond_1293_1_rec2_InvokeMethod1_4]=Cond_1293_1_rec2_InvokeMethod_4, [1364_0_rec1_Return, 841_0_rec0_Return, 981_0_rec0_Return, 1245_0_rec2_Return, 1308_0_rec3_Return, 984_0_rec4_Return, 1070_0_rec4_Return, 1343_0_rec2_Return, 1195_0_rec1_Return, 1207_0_rec3_Return]=1364_0_rec1_Return, [Cond_1257_1_rec3_InvokeMethod_5, Cond_1257_1_rec3_InvokeMethod1_5]=Cond_1257_1_rec3_InvokeMethod_5}


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


P rules:
886_1_REC0_INVOKEMETHOD(1364_0_rec1_Return, x1, x0) → COND_886_1_REC0_INVOKEMETHOD(&&(>=(x1, +(x0, 1)), >(x0, -1)), 1364_0_rec1_Return, x1, x0)
COND_886_1_REC0_INVOKEMETHOD(TRUE, 1364_0_rec1_Return, x1, x0) → 886_1_REC0_INVOKEMETHOD(886_0_rec1_Load(*(2, +(x0, 1)), +(x0, 1)), x1, +(x0, 1))
R rules:
886_0_rec1_Load(x1, x2) → 1188_0_rec1_GT(x2, 0, x1)
1188_0_rec1_GT(x2, x0, x1) → Cond_1188_0_rec1_GT(<(x1, x0), x2, x0, x1)
Cond_1188_0_rec1_GT(TRUE, x2, x0, x1) → 1364_0_rec1_Return
951_1_rec0_InvokeMethod(1364_0_rec1_Return) → 1364_0_rec1_Return
1188_0_rec1_GT(x2, x0, x1) → Cond_1188_0_rec1_GT1(&&(&&(>(x2, -1), >=(x1, x0)), >(x0, -1)), x2, x0, x1, x3)
Cond_1188_0_rec1_GT1(TRUE, x2, x0, x1, x3) → 1225_1_rec1_InvokeMethod(1238_0_rec2_LT(x3), x1, x2, x0)
1238_0_rec2_LT(x0) → Cond_1238_0_rec2_LT(<(x0, 0), x0)
Cond_1238_0_rec2_LT(TRUE, x0) → 1364_0_rec1_Return
1238_0_rec2_LT(x0) → Cond_1238_0_rec2_LT1(>(x0, -1), x0, x4)
Cond_1238_0_rec2_LT1(TRUE, x0, x4) → 1293_1_rec2_InvokeMethod(1198_0_rec3_GT(0, x4), x0)
1198_0_rec3_GT(x0, x1) → Cond_1198_0_rec3_GT(<(x1, x0), x0, x1)
Cond_1198_0_rec3_GT(TRUE, x0, x1) → 1364_0_rec1_Return
1198_0_rec3_GT(x0, x1) → Cond_1198_0_rec3_GT1(&&(>=(x1, x0), >(x0, -1)), x0, x1, x3)
Cond_1198_0_rec3_GT1(TRUE, x0, x1, x3) → 1257_1_rec3_InvokeMethod(971_0_rec4_LT(x3), x0, x1)
971_0_rec4_LT(x0) → Cond_1238_0_rec2_LT(<(x0, 0), x0)
971_0_rec4_LT(x0) → Cond_971_0_rec4_LT1(>(x0, -1), x0, x3)
Cond_971_0_rec4_LT1(TRUE, x0, x3) → 1017_1_rec4_InvokeMethod(971_0_rec4_LT(x3))
1017_1_rec4_InvokeMethod(1364_0_rec1_Return) → 1364_0_rec1_Return
1225_1_rec1_InvokeMethod(1364_0_rec1_Return, x1, x2, x0) → Cond_1225_1_rec1_InvokeMethod(>(x0, -1), 1364_0_rec1_Return, x1, x2, x0, x4)
Cond_1225_1_rec1_InvokeMethod(TRUE, 1364_0_rec1_Return, x1, x2, x0, x4) → 1357_1_rec1_InvokeMethod(1188_0_rec1_GT(x2, x4, x1))
1357_1_rec1_InvokeMethod(1364_0_rec1_Return) → 1364_0_rec1_Return
1293_1_rec2_InvokeMethod(1364_0_rec1_Return, x0) → Cond_1293_1_rec2_InvokeMethod(>(x0, -1), 1364_0_rec1_Return, x0, x4)
Cond_1293_1_rec2_InvokeMethod(TRUE, 1364_0_rec1_Return, x0, x4) → 1324_1_rec2_InvokeMethod(1238_0_rec2_LT(x4))
1324_1_rec2_InvokeMethod(1364_0_rec1_Return) → 1364_0_rec1_Return
1257_1_rec3_InvokeMethod(1364_0_rec1_Return, x0, x1) → Cond_1257_1_rec3_InvokeMethod(>(x0, -1), 1364_0_rec1_Return, x0, x1, x3)
Cond_1257_1_rec3_InvokeMethod(TRUE, 1364_0_rec1_Return, x0, x1, x3) → 1295_1_rec3_InvokeMethod(1198_0_rec3_GT(x3, x1))
1295_1_rec3_InvokeMethod(1364_0_rec1_Return) → 1364_0_rec1_Return

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


The ITRS R consists of the following rules:
886_0_rec1_Load(x1, x2) → 1188_0_rec1_GT(x2, 0, x1)
1188_0_rec1_GT(x2, x0, x1) → Cond_1188_0_rec1_GT(x1 < x0, x2, x0, x1)
Cond_1188_0_rec1_GT(TRUE, x2, x0, x1) → 1364_0_rec1_Return
951_1_rec0_InvokeMethod(1364_0_rec1_Return) → 1364_0_rec1_Return
1188_0_rec1_GT(x2, x0, x1) → Cond_1188_0_rec1_GT1(x2 > -1 && x1 >= x0 && x0 > -1, x2, x0, x1, x3)
Cond_1188_0_rec1_GT1(TRUE, x2, x0, x1, x3) → 1225_1_rec1_InvokeMethod(1238_0_rec2_LT(x3), x1, x2, x0)
1238_0_rec2_LT(x0) → Cond_1238_0_rec2_LT(x0 < 0, x0)
Cond_1238_0_rec2_LT(TRUE, x0) → 1364_0_rec1_Return
1238_0_rec2_LT(x0) → Cond_1238_0_rec2_LT1(x0 > -1, x0, x4)
Cond_1238_0_rec2_LT1(TRUE, x0, x4) → 1293_1_rec2_InvokeMethod(1198_0_rec3_GT(0, x4), x0)
1198_0_rec3_GT(x0, x1) → Cond_1198_0_rec3_GT(x1 < x0, x0, x1)
Cond_1198_0_rec3_GT(TRUE, x0, x1) → 1364_0_rec1_Return
1198_0_rec3_GT(x0, x1) → Cond_1198_0_rec3_GT1(x1 >= x0 && x0 > -1, x0, x1, x3)
Cond_1198_0_rec3_GT1(TRUE, x0, x1, x3) → 1257_1_rec3_InvokeMethod(971_0_rec4_LT(x3), x0, x1)
971_0_rec4_LT(x0) → Cond_1238_0_rec2_LT(x0 < 0, x0)
971_0_rec4_LT(x0) → Cond_971_0_rec4_LT1(x0 > -1, x0, x3)
Cond_971_0_rec4_LT1(TRUE, x0, x3) → 1017_1_rec4_InvokeMethod(971_0_rec4_LT(x3))
1017_1_rec4_InvokeMethod(1364_0_rec1_Return) → 1364_0_rec1_Return
1225_1_rec1_InvokeMethod(1364_0_rec1_Return, x1, x2, x0) → Cond_1225_1_rec1_InvokeMethod(x0 > -1, 1364_0_rec1_Return, x1, x2, x0, x4)
Cond_1225_1_rec1_InvokeMethod(TRUE, 1364_0_rec1_Return, x1, x2, x0, x4) → 1357_1_rec1_InvokeMethod(1188_0_rec1_GT(x2, x4, x1))
1357_1_rec1_InvokeMethod(1364_0_rec1_Return) → 1364_0_rec1_Return
1293_1_rec2_InvokeMethod(1364_0_rec1_Return, x0) → Cond_1293_1_rec2_InvokeMethod(x0 > -1, 1364_0_rec1_Return, x0, x4)
Cond_1293_1_rec2_InvokeMethod(TRUE, 1364_0_rec1_Return, x0, x4) → 1324_1_rec2_InvokeMethod(1238_0_rec2_LT(x4))
1324_1_rec2_InvokeMethod(1364_0_rec1_Return) → 1364_0_rec1_Return
1257_1_rec3_InvokeMethod(1364_0_rec1_Return, x0, x1) → Cond_1257_1_rec3_InvokeMethod(x0 > -1, 1364_0_rec1_Return, x0, x1, x3)
Cond_1257_1_rec3_InvokeMethod(TRUE, 1364_0_rec1_Return, x0, x1, x3) → 1295_1_rec3_InvokeMethod(1198_0_rec3_GT(x3, x1))
1295_1_rec3_InvokeMethod(1364_0_rec1_Return) → 1364_0_rec1_Return

The integer pair graph contains the following rules and edges:
(0): 886_1_REC0_INVOKEMETHOD(1364_0_rec1_Return, x1[0], x0[0]) → COND_886_1_REC0_INVOKEMETHOD(x1[0] >= x0[0] + 1 && x0[0] > -1, 1364_0_rec1_Return, x1[0], x0[0])
(1): COND_886_1_REC0_INVOKEMETHOD(TRUE, 1364_0_rec1_Return, x1[1], x0[1]) → 886_1_REC0_INVOKEMETHOD(886_0_rec1_Load(2 * x0[1] + 1, x0[1] + 1), x1[1], x0[1] + 1)

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


(1) -> (0), if (886_0_rec1_Load(2 * x0[1] + 1, x0[1] + 1) →* 1364_0_rec1_Returnx1[1]* x1[0]x0[1] + 1* x0[0])



The set Q consists of the following terms:
886_0_rec1_Load(x0, x1)
1188_0_rec1_GT(x0, x1, x2)
Cond_1188_0_rec1_GT(TRUE, x0, x1, x2)
951_1_rec0_InvokeMethod(1364_0_rec1_Return)
Cond_1188_0_rec1_GT1(TRUE, x0, x1, x2, x3)
1238_0_rec2_LT(x0)
Cond_1238_0_rec2_LT(TRUE, x0)
Cond_1238_0_rec2_LT1(TRUE, x0, x1)
1198_0_rec3_GT(x0, x1)
Cond_1198_0_rec3_GT(TRUE, x0, x1)
Cond_1198_0_rec3_GT1(TRUE, x0, x1, x2)
971_0_rec4_LT(x0)
Cond_971_0_rec4_LT1(TRUE, x0, x1)
1017_1_rec4_InvokeMethod(1364_0_rec1_Return)
1225_1_rec1_InvokeMethod(1364_0_rec1_Return, x0, x1, x2)
Cond_1225_1_rec1_InvokeMethod(TRUE, 1364_0_rec1_Return, x0, x1, x2, x3)
1357_1_rec1_InvokeMethod(1364_0_rec1_Return)
1293_1_rec2_InvokeMethod(1364_0_rec1_Return, x0)
Cond_1293_1_rec2_InvokeMethod(TRUE, 1364_0_rec1_Return, x0, x1)
1324_1_rec2_InvokeMethod(1364_0_rec1_Return)
1257_1_rec3_InvokeMethod(1364_0_rec1_Return, x0, x1)
Cond_1257_1_rec3_InvokeMethod(TRUE, 1364_0_rec1_Return, x0, x1, x2)
1295_1_rec3_InvokeMethod(1364_0_rec1_Return)

(44) 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@46ef0a4f 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 886_1_REC0_INVOKEMETHOD(1364_0_rec1_Return, x1, x0) → COND_886_1_REC0_INVOKEMETHOD(&&(>=(x1, +(x0, 1)), >(x0, -1)), 1364_0_rec1_Return, x1, x0) the following chains were created:
  • We consider the chain 886_1_REC0_INVOKEMETHOD(1364_0_rec1_Return, x1[0], x0[0]) → COND_886_1_REC0_INVOKEMETHOD(&&(>=(x1[0], +(x0[0], 1)), >(x0[0], -1)), 1364_0_rec1_Return, x1[0], x0[0]), COND_886_1_REC0_INVOKEMETHOD(TRUE, 1364_0_rec1_Return, x1[1], x0[1]) → 886_1_REC0_INVOKEMETHOD(886_0_rec1_Load(*(2, +(x0[1], 1)), +(x0[1], 1)), x1[1], +(x0[1], 1)) which results in the following constraint:

    (1)    (&&(>=(x1[0], +(x0[0], 1)), >(x0[0], -1))=TRUEx1[0]=x1[1]x0[0]=x0[1]886_1_REC0_INVOKEMETHOD(1364_0_rec1_Return, x1[0], x0[0])≥NonInfC∧886_1_REC0_INVOKEMETHOD(1364_0_rec1_Return, x1[0], x0[0])≥COND_886_1_REC0_INVOKEMETHOD(&&(>=(x1[0], +(x0[0], 1)), >(x0[0], -1)), 1364_0_rec1_Return, x1[0], x0[0])∧(UIncreasing(COND_886_1_REC0_INVOKEMETHOD(&&(>=(x1[0], +(x0[0], 1)), >(x0[0], -1)), 1364_0_rec1_Return, x1[0], x0[0])), ≥))



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

    (2)    (>=(x1[0], +(x0[0], 1))=TRUE>(x0[0], -1)=TRUE886_1_REC0_INVOKEMETHOD(1364_0_rec1_Return, x1[0], x0[0])≥NonInfC∧886_1_REC0_INVOKEMETHOD(1364_0_rec1_Return, x1[0], x0[0])≥COND_886_1_REC0_INVOKEMETHOD(&&(>=(x1[0], +(x0[0], 1)), >(x0[0], -1)), 1364_0_rec1_Return, x1[0], x0[0])∧(UIncreasing(COND_886_1_REC0_INVOKEMETHOD(&&(>=(x1[0], +(x0[0], 1)), >(x0[0], -1)), 1364_0_rec1_Return, x1[0], x0[0])), ≥))



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

    (3)    (x1[0] + [-1] + [-1]x0[0] ≥ 0∧x0[0] ≥ 0 ⇒ (UIncreasing(COND_886_1_REC0_INVOKEMETHOD(&&(>=(x1[0], +(x0[0], 1)), >(x0[0], -1)), 1364_0_rec1_Return, x1[0], x0[0])), ≥)∧[(-1)Bound*bni_42] + [(-1)bni_42]x0[0] + [bni_42]x1[0] ≥ 0∧[1 + (-1)bso_43] ≥ 0)



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

    (4)    (x1[0] + [-1] + [-1]x0[0] ≥ 0∧x0[0] ≥ 0 ⇒ (UIncreasing(COND_886_1_REC0_INVOKEMETHOD(&&(>=(x1[0], +(x0[0], 1)), >(x0[0], -1)), 1364_0_rec1_Return, x1[0], x0[0])), ≥)∧[(-1)Bound*bni_42] + [(-1)bni_42]x0[0] + [bni_42]x1[0] ≥ 0∧[1 + (-1)bso_43] ≥ 0)



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

    (5)    (x1[0] + [-1] + [-1]x0[0] ≥ 0∧x0[0] ≥ 0 ⇒ (UIncreasing(COND_886_1_REC0_INVOKEMETHOD(&&(>=(x1[0], +(x0[0], 1)), >(x0[0], -1)), 1364_0_rec1_Return, x1[0], x0[0])), ≥)∧[(-1)Bound*bni_42] + [(-1)bni_42]x0[0] + [bni_42]x1[0] ≥ 0∧[1 + (-1)bso_43] ≥ 0)



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

    (6)    (x1[0] ≥ 0∧x0[0] ≥ 0 ⇒ (UIncreasing(COND_886_1_REC0_INVOKEMETHOD(&&(>=(x1[0], +(x0[0], 1)), >(x0[0], -1)), 1364_0_rec1_Return, x1[0], x0[0])), ≥)∧[(-1)Bound*bni_42 + bni_42] + [bni_42]x1[0] ≥ 0∧[1 + (-1)bso_43] ≥ 0)







For Pair COND_886_1_REC0_INVOKEMETHOD(TRUE, 1364_0_rec1_Return, x1, x0) → 886_1_REC0_INVOKEMETHOD(886_0_rec1_Load(*(2, +(x0, 1)), +(x0, 1)), x1, +(x0, 1)) the following chains were created:
  • We consider the chain COND_886_1_REC0_INVOKEMETHOD(TRUE, 1364_0_rec1_Return, x1[1], x0[1]) → 886_1_REC0_INVOKEMETHOD(886_0_rec1_Load(*(2, +(x0[1], 1)), +(x0[1], 1)), x1[1], +(x0[1], 1)) which results in the following constraint:

    (7)    (COND_886_1_REC0_INVOKEMETHOD(TRUE, 1364_0_rec1_Return, x1[1], x0[1])≥NonInfC∧COND_886_1_REC0_INVOKEMETHOD(TRUE, 1364_0_rec1_Return, x1[1], x0[1])≥886_1_REC0_INVOKEMETHOD(886_0_rec1_Load(*(2, +(x0[1], 1)), +(x0[1], 1)), x1[1], +(x0[1], 1))∧(UIncreasing(886_1_REC0_INVOKEMETHOD(886_0_rec1_Load(*(2, +(x0[1], 1)), +(x0[1], 1)), x1[1], +(x0[1], 1))), ≥))



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

    (8)    ((UIncreasing(886_1_REC0_INVOKEMETHOD(886_0_rec1_Load(*(2, +(x0[1], 1)), +(x0[1], 1)), x1[1], +(x0[1], 1))), ≥)∧[bni_44] = 0∧[(-1)bso_45] ≥ 0)



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

    (9)    ((UIncreasing(886_1_REC0_INVOKEMETHOD(886_0_rec1_Load(*(2, +(x0[1], 1)), +(x0[1], 1)), x1[1], +(x0[1], 1))), ≥)∧[bni_44] = 0∧[(-1)bso_45] ≥ 0)



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

    (10)    ((UIncreasing(886_1_REC0_INVOKEMETHOD(886_0_rec1_Load(*(2, +(x0[1], 1)), +(x0[1], 1)), x1[1], +(x0[1], 1))), ≥)∧[bni_44] = 0∧[(-1)bso_45] ≥ 0)



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

    (11)    ((UIncreasing(886_1_REC0_INVOKEMETHOD(886_0_rec1_Load(*(2, +(x0[1], 1)), +(x0[1], 1)), x1[1], +(x0[1], 1))), ≥)∧[bni_44] = 0∧0 = 0∧0 = 0∧[(-1)bso_45] ≥ 0)







To summarize, we get the following constraints P for the following pairs.
  • 886_1_REC0_INVOKEMETHOD(1364_0_rec1_Return, x1, x0) → COND_886_1_REC0_INVOKEMETHOD(&&(>=(x1, +(x0, 1)), >(x0, -1)), 1364_0_rec1_Return, x1, x0)
    • (x1[0] ≥ 0∧x0[0] ≥ 0 ⇒ (UIncreasing(COND_886_1_REC0_INVOKEMETHOD(&&(>=(x1[0], +(x0[0], 1)), >(x0[0], -1)), 1364_0_rec1_Return, x1[0], x0[0])), ≥)∧[(-1)Bound*bni_42 + bni_42] + [bni_42]x1[0] ≥ 0∧[1 + (-1)bso_43] ≥ 0)

  • COND_886_1_REC0_INVOKEMETHOD(TRUE, 1364_0_rec1_Return, x1, x0) → 886_1_REC0_INVOKEMETHOD(886_0_rec1_Load(*(2, +(x0, 1)), +(x0, 1)), x1, +(x0, 1))
    • ((UIncreasing(886_1_REC0_INVOKEMETHOD(886_0_rec1_Load(*(2, +(x0[1], 1)), +(x0[1], 1)), x1[1], +(x0[1], 1))), ≥)∧[bni_44] = 0∧0 = 0∧0 = 0∧[(-1)bso_45] ≥ 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(886_0_rec1_Load(x1, x2)) = [-1]   
POL(1188_0_rec1_GT(x1, x2, x3)) = [-1]   
POL(0) = 0   
POL(Cond_1188_0_rec1_GT(x1, x2, x3, x4)) = [-1]   
POL(<(x1, x2)) = [-1]   
POL(1364_0_rec1_Return) = [-1]   
POL(951_1_rec0_InvokeMethod(x1)) = [-1]   
POL(Cond_1188_0_rec1_GT1(x1, x2, x3, x4, x5)) = [-1]   
POL(&&(x1, x2)) = [-1]   
POL(>(x1, x2)) = [-1]   
POL(-1) = [-1]   
POL(>=(x1, x2)) = [-1]   
POL(1225_1_rec1_InvokeMethod(x1, x2, x3, x4)) = [-1]   
POL(1238_0_rec2_LT(x1)) = [-1] + [-1]x1   
POL(Cond_1238_0_rec2_LT(x1, x2)) = [-1]   
POL(Cond_1238_0_rec2_LT1(x1, x2, x3)) = [-1] + [-1]x2   
POL(1293_1_rec2_InvokeMethod(x1, x2)) = [-1] + [-1]x2   
POL(1198_0_rec3_GT(x1, x2)) = [-1] + [-1]x1   
POL(Cond_1198_0_rec3_GT(x1, x2, x3)) = [-1] + [-1]x2   
POL(Cond_1198_0_rec3_GT1(x1, x2, x3, x4)) = [-1] + [-1]x2   
POL(1257_1_rec3_InvokeMethod(x1, x2, x3)) = [-1] + [-1]x2   
POL(971_0_rec4_LT(x1)) = [-1] + [-1]x1   
POL(Cond_971_0_rec4_LT1(x1, x2, x3)) = [-1] + [-1]x2   
POL(1017_1_rec4_InvokeMethod(x1)) = [-1]   
POL(Cond_1225_1_rec1_InvokeMethod(x1, x2, x3, x4, x5, x6)) = [-1]   
POL(1357_1_rec1_InvokeMethod(x1)) = [-1]   
POL(Cond_1293_1_rec2_InvokeMethod(x1, x2, x3, x4)) = [1] + [-1]x3   
POL(1324_1_rec2_InvokeMethod(x1)) = [-1]   
POL(Cond_1257_1_rec3_InvokeMethod(x1, x2, x3, x4, x5)) = [-1] + [-1]x3   
POL(1295_1_rec3_InvokeMethod(x1)) = [-1] + x1   
POL(886_1_REC0_INVOKEMETHOD(x1, x2, x3)) = [-1] + [-1]x3 + x2 + [-1]x1   
POL(COND_886_1_REC0_INVOKEMETHOD(x1, x2, x3, x4)) = [-1] + [-1]x4 + x3   
POL(+(x1, x2)) = x1 + x2   
POL(1) = [1]   
POL(*(x1, x2)) = x1·x2   
POL(2) = [2]   

The following pairs are in P>:

886_1_REC0_INVOKEMETHOD(1364_0_rec1_Return, x1[0], x0[0]) → COND_886_1_REC0_INVOKEMETHOD(&&(>=(x1[0], +(x0[0], 1)), >(x0[0], -1)), 1364_0_rec1_Return, x1[0], x0[0])

The following pairs are in Pbound:

886_1_REC0_INVOKEMETHOD(1364_0_rec1_Return, x1[0], x0[0]) → COND_886_1_REC0_INVOKEMETHOD(&&(>=(x1[0], +(x0[0], 1)), >(x0[0], -1)), 1364_0_rec1_Return, x1[0], x0[0])

The following pairs are in P:

COND_886_1_REC0_INVOKEMETHOD(TRUE, 1364_0_rec1_Return, x1[1], x0[1]) → 886_1_REC0_INVOKEMETHOD(886_0_rec1_Load(*(2, +(x0[1], 1)), +(x0[1], 1)), x1[1], +(x0[1], 1))

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

886_0_rec1_Load(x1, x2)11188_0_rec1_GT(x2, 0, x1)1
1188_0_rec1_GT(x2, x0, x1)1Cond_1188_0_rec1_GT(<(x1, x0), x2, x0, x1)1
1188_0_rec1_GT(x2, x0, x1)1Cond_1188_0_rec1_GT1(&&(&&(>(x2, -1), >=(x1, x0)), >(x0, -1)), x2, x0, x1, x3)1
Cond_1188_0_rec1_GT1(TRUE, x2, x0, x1, x3)11225_1_rec1_InvokeMethod(1238_0_rec2_LT(x3), x1, x2, x0)1
1225_1_rec1_InvokeMethod(1364_0_rec1_Return, x1, x2, x0)1Cond_1225_1_rec1_InvokeMethod(>(x0, -1), 1364_0_rec1_Return, x1, x2, x0, x4)1
Cond_1225_1_rec1_InvokeMethod(TRUE, 1364_0_rec1_Return, x1, x2, x0, x4)11357_1_rec1_InvokeMethod(1188_0_rec1_GT(x2, x4, x1))1
1357_1_rec1_InvokeMethod(1364_0_rec1_Return)11364_0_rec1_Return1
Cond_1188_0_rec1_GT(TRUE, x2, x0, x1)11364_0_rec1_Return1

(45) Obligation:

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


The following domains are used:

Integer, Boolean


The ITRS R consists of the following rules:
886_0_rec1_Load(x1, x2) → 1188_0_rec1_GT(x2, 0, x1)
1188_0_rec1_GT(x2, x0, x1) → Cond_1188_0_rec1_GT(x1 < x0, x2, x0, x1)
Cond_1188_0_rec1_GT(TRUE, x2, x0, x1) → 1364_0_rec1_Return
951_1_rec0_InvokeMethod(1364_0_rec1_Return) → 1364_0_rec1_Return
1188_0_rec1_GT(x2, x0, x1) → Cond_1188_0_rec1_GT1(x2 > -1 && x1 >= x0 && x0 > -1, x2, x0, x1, x3)
Cond_1188_0_rec1_GT1(TRUE, x2, x0, x1, x3) → 1225_1_rec1_InvokeMethod(1238_0_rec2_LT(x3), x1, x2, x0)
1238_0_rec2_LT(x0) → Cond_1238_0_rec2_LT(x0 < 0, x0)
Cond_1238_0_rec2_LT(TRUE, x0) → 1364_0_rec1_Return
1238_0_rec2_LT(x0) → Cond_1238_0_rec2_LT1(x0 > -1, x0, x4)
Cond_1238_0_rec2_LT1(TRUE, x0, x4) → 1293_1_rec2_InvokeMethod(1198_0_rec3_GT(0, x4), x0)
1198_0_rec3_GT(x0, x1) → Cond_1198_0_rec3_GT(x1 < x0, x0, x1)
Cond_1198_0_rec3_GT(TRUE, x0, x1) → 1364_0_rec1_Return
1198_0_rec3_GT(x0, x1) → Cond_1198_0_rec3_GT1(x1 >= x0 && x0 > -1, x0, x1, x3)
Cond_1198_0_rec3_GT1(TRUE, x0, x1, x3) → 1257_1_rec3_InvokeMethod(971_0_rec4_LT(x3), x0, x1)
971_0_rec4_LT(x0) → Cond_1238_0_rec2_LT(x0 < 0, x0)
971_0_rec4_LT(x0) → Cond_971_0_rec4_LT1(x0 > -1, x0, x3)
Cond_971_0_rec4_LT1(TRUE, x0, x3) → 1017_1_rec4_InvokeMethod(971_0_rec4_LT(x3))
1017_1_rec4_InvokeMethod(1364_0_rec1_Return) → 1364_0_rec1_Return
1225_1_rec1_InvokeMethod(1364_0_rec1_Return, x1, x2, x0) → Cond_1225_1_rec1_InvokeMethod(x0 > -1, 1364_0_rec1_Return, x1, x2, x0, x4)
Cond_1225_1_rec1_InvokeMethod(TRUE, 1364_0_rec1_Return, x1, x2, x0, x4) → 1357_1_rec1_InvokeMethod(1188_0_rec1_GT(x2, x4, x1))
1357_1_rec1_InvokeMethod(1364_0_rec1_Return) → 1364_0_rec1_Return
1293_1_rec2_InvokeMethod(1364_0_rec1_Return, x0) → Cond_1293_1_rec2_InvokeMethod(x0 > -1, 1364_0_rec1_Return, x0, x4)
Cond_1293_1_rec2_InvokeMethod(TRUE, 1364_0_rec1_Return, x0, x4) → 1324_1_rec2_InvokeMethod(1238_0_rec2_LT(x4))
1324_1_rec2_InvokeMethod(1364_0_rec1_Return) → 1364_0_rec1_Return
1257_1_rec3_InvokeMethod(1364_0_rec1_Return, x0, x1) → Cond_1257_1_rec3_InvokeMethod(x0 > -1, 1364_0_rec1_Return, x0, x1, x3)
Cond_1257_1_rec3_InvokeMethod(TRUE, 1364_0_rec1_Return, x0, x1, x3) → 1295_1_rec3_InvokeMethod(1198_0_rec3_GT(x3, x1))
1295_1_rec3_InvokeMethod(1364_0_rec1_Return) → 1364_0_rec1_Return

The integer pair graph contains the following rules and edges:
(1): COND_886_1_REC0_INVOKEMETHOD(TRUE, 1364_0_rec1_Return, x1[1], x0[1]) → 886_1_REC0_INVOKEMETHOD(886_0_rec1_Load(2 * x0[1] + 1, x0[1] + 1), x1[1], x0[1] + 1)


The set Q consists of the following terms:
886_0_rec1_Load(x0, x1)
1188_0_rec1_GT(x0, x1, x2)
Cond_1188_0_rec1_GT(TRUE, x0, x1, x2)
951_1_rec0_InvokeMethod(1364_0_rec1_Return)
Cond_1188_0_rec1_GT1(TRUE, x0, x1, x2, x3)
1238_0_rec2_LT(x0)
Cond_1238_0_rec2_LT(TRUE, x0)
Cond_1238_0_rec2_LT1(TRUE, x0, x1)
1198_0_rec3_GT(x0, x1)
Cond_1198_0_rec3_GT(TRUE, x0, x1)
Cond_1198_0_rec3_GT1(TRUE, x0, x1, x2)
971_0_rec4_LT(x0)
Cond_971_0_rec4_LT1(TRUE, x0, x1)
1017_1_rec4_InvokeMethod(1364_0_rec1_Return)
1225_1_rec1_InvokeMethod(1364_0_rec1_Return, x0, x1, x2)
Cond_1225_1_rec1_InvokeMethod(TRUE, 1364_0_rec1_Return, x0, x1, x2, x3)
1357_1_rec1_InvokeMethod(1364_0_rec1_Return)
1293_1_rec2_InvokeMethod(1364_0_rec1_Return, x0)
Cond_1293_1_rec2_InvokeMethod(TRUE, 1364_0_rec1_Return, x0, x1)
1324_1_rec2_InvokeMethod(1364_0_rec1_Return)
1257_1_rec3_InvokeMethod(1364_0_rec1_Return, x0, x1)
Cond_1257_1_rec3_InvokeMethod(TRUE, 1364_0_rec1_Return, x0, x1, x2)
1295_1_rec3_InvokeMethod(1364_0_rec1_Return)

(46) IDependencyGraphProof (EQUIVALENT transformation)

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

(47) TRUE

(48) Obligation:

SCC of termination graph based on JBC Program.
SCC contains nodes from the following methods: Recursions.main([Ljava/lang/String;)V
SCC calls the following helper methods: Recursions.rec0(II)V, Recursions.rec1(III)V, Recursions.rec2(IIII)V, Recursions.rec3(IIIII)V, Recursions.rec4(II)V
Performed SCC analyses: UsedFieldsAnalysis

(49) SCCToIDPv1Proof (SOUND transformation)

Transformed FIGraph SCCs to IDPs. Log:

Generated 16 rules for P and 167 rules for R.


P rules:
1091_0_main_Load(EOS(STATIC_1091), java.lang.Object(ARRAY(i140)), i141, i141) → 1095_0_main_ArrayLength(EOS(STATIC_1095), java.lang.Object(ARRAY(i140)), i141, i141, java.lang.Object(ARRAY(i140)))
1095_0_main_ArrayLength(EOS(STATIC_1095), java.lang.Object(ARRAY(i140)), i141, i141, java.lang.Object(ARRAY(i140))) → 1099_0_main_GE(EOS(STATIC_1099), java.lang.Object(ARRAY(i140)), i141, i141, i140) | >=(i140, 0)
1099_0_main_GE(EOS(STATIC_1099), java.lang.Object(ARRAY(i140)), i141, i141, i140) → 1103_0_main_GE(EOS(STATIC_1103), java.lang.Object(ARRAY(i140)), i141, i141, i140)
1103_0_main_GE(EOS(STATIC_1103), java.lang.Object(ARRAY(i140)), i141, i141, i140) → 1109_0_main_ConstantStackPush(EOS(STATIC_1109), java.lang.Object(ARRAY(i140)), i141) | <(i141, i140)
1109_0_main_ConstantStackPush(EOS(STATIC_1109), java.lang.Object(ARRAY(i140)), i141) → 1114_0_main_Load(EOS(STATIC_1114), java.lang.Object(ARRAY(i140)), i141, 0)
1114_0_main_Load(EOS(STATIC_1114), java.lang.Object(ARRAY(i140)), i141, matching1) → 1118_0_main_ArrayLength(EOS(STATIC_1118), java.lang.Object(ARRAY(i140)), i141, 0, java.lang.Object(ARRAY(i140))) | =(matching1, 0)
1118_0_main_ArrayLength(EOS(STATIC_1118), java.lang.Object(ARRAY(i140)), i141, matching1, java.lang.Object(ARRAY(i140))) → 1121_0_main_InvokeMethod(EOS(STATIC_1121), java.lang.Object(ARRAY(i140)), i141, 0, i140) | &&(>=(i140, 0), =(matching1, 0))
1121_0_main_InvokeMethod(EOS(STATIC_1121), java.lang.Object(ARRAY(i140)), i141, matching1, i140) → 1128_1_main_InvokeMethod(1128_0_rec0_Load(EOS(STATIC_1128), 0, i140), java.lang.Object(ARRAY(i140)), i141, 0, i140) | =(matching1, 0)
1128_1_main_InvokeMethod(841_0_rec0_Return(EOS(STATIC_841)), java.lang.Object(ARRAY(i140)), i141, matching1, i174) → 1158_0_rec0_Return(EOS(STATIC_1158), java.lang.Object(ARRAY(i174)), i141, 0, i174) | =(matching1, 0)
1128_1_main_InvokeMethod(981_0_rec0_Return(EOS(STATIC_981)), java.lang.Object(ARRAY(i140)), i141, matching1, i175) → 1160_0_rec0_Return(EOS(STATIC_1160), java.lang.Object(ARRAY(i175)), i141, 0, i175) | =(matching1, 0)
1158_0_rec0_Return(EOS(STATIC_1158), java.lang.Object(ARRAY(i174)), i141, matching1, i174) → 1167_0_main_Inc(EOS(STATIC_1167), java.lang.Object(ARRAY(i174)), i141) | =(matching1, 0)
1167_0_main_Inc(EOS(STATIC_1167), java.lang.Object(ARRAY(i174)), i141) → 1171_0_main_JMP(EOS(STATIC_1171), java.lang.Object(ARRAY(i174)), +(i141, 1)) | >=(i141, 0)
1171_0_main_JMP(EOS(STATIC_1171), java.lang.Object(ARRAY(i174)), i192) → 1175_0_main_Load(EOS(STATIC_1175), java.lang.Object(ARRAY(i174)), i192)
1175_0_main_Load(EOS(STATIC_1175), java.lang.Object(ARRAY(i174)), i192) → 1085_0_main_Load(EOS(STATIC_1085), java.lang.Object(ARRAY(i174)), i192)
1085_0_main_Load(EOS(STATIC_1085), java.lang.Object(ARRAY(i140)), i141) → 1091_0_main_Load(EOS(STATIC_1091), java.lang.Object(ARRAY(i140)), i141, i141)
1160_0_rec0_Return(EOS(STATIC_1160), java.lang.Object(ARRAY(i175)), i141, matching1, i175) → 1158_0_rec0_Return(EOS(STATIC_1158), java.lang.Object(ARRAY(i175)), i141, 0, i175) | =(matching1, 0)
R rules:
1128_0_rec0_Load(EOS(STATIC_1128), matching1, i140) → 1140_0_rec0_Load(EOS(STATIC_1140), 0, i140) | =(matching1, 0)
1140_0_rec0_Load(EOS(STATIC_1140), matching1, i140) → 819_0_rec0_Load(EOS(STATIC_819), 0, i140) | =(matching1, 0)
893_0_rec1_Load(EOS(STATIC_893), matching1, i55) → 1184_0_rec1_Load(EOS(STATIC_1184), 0, i64) | =(matching1, 0)
955_0_rec0_Load(EOS(STATIC_955), i56) → 819_0_rec0_Load(EOS(STATIC_819), i86, i56)
1228_0_rec2_Load(EOS(STATIC_1228), matching1, i195) → 1233_0_rec2_Load(EOS(STATIC_1233), i202, 0) | =(matching1, 0)
1359_0_rec1_Load(EOS(STATIC_1359), i43) → 1184_0_rec1_Load(EOS(STATIC_1184), i304, i43)
1296_0_rec3_Load(EOS(STATIC_1296), matching1, i221) → 1190_0_rec3_Load(EOS(STATIC_1190), 0, i233) | =(matching1, 0)
1326_0_rec2_Load(EOS(STATIC_1326), matching1) → 1233_0_rec2_Load(EOS(STATIC_1233), i268, 0) | =(matching1, 0)
1260_0_rec4_Load(EOS(STATIC_1260)) → 958_0_rec4_Load(EOS(STATIC_958), i223, 0)
1298_0_rec3_Load(EOS(STATIC_1298), i115) → 1190_0_rec3_Load(EOS(STATIC_1190), i232, i115)
1023_0_rec4_Load(EOS(STATIC_1023), matching1) → 958_0_rec4_Load(EOS(STATIC_958), i119, 0) | =(matching1, 0)
819_0_rec0_Load(EOS(STATIC_819), i55, i56) → 824_0_rec0_Load(EOS(STATIC_824), i55, i56, i55)
824_0_rec0_Load(EOS(STATIC_824), i55, i56, i55) → 828_0_rec0_GT(EOS(STATIC_828), i55, i56, i55, i56)
828_0_rec0_GT(EOS(STATIC_828), i55, i56, i55, i56) → 834_0_rec0_GT(EOS(STATIC_834), i55, i56, i55, i56)
828_0_rec0_GT(EOS(STATIC_828), i55, i56, i55, i56) → 835_0_rec0_GT(EOS(STATIC_835), i55, i56, i55, i56)
834_0_rec0_GT(EOS(STATIC_834), i55, i56, i55, i56) → 841_0_rec0_Return(EOS(STATIC_841)) | >(i55, i56)
835_0_rec0_GT(EOS(STATIC_835), i55, i56, i55, i56) → 842_0_rec0_ConstantStackPush(EOS(STATIC_842), i55, i56) | <=(i55, i56)
841_0_rec0_Return(EOS(STATIC_841)) → 981_0_rec0_Return(EOS(STATIC_981))
842_0_rec0_ConstantStackPush(EOS(STATIC_842), i55, i56) → 848_0_rec0_ConstantStackPush(EOS(STATIC_848), i55, i56, 0)
848_0_rec0_ConstantStackPush(EOS(STATIC_848), i55, i56, matching1) → 855_0_rec0_Load(EOS(STATIC_855), i55, i56, 0) | =(matching1, 0)
855_0_rec0_Load(EOS(STATIC_855), i55, i56, matching1) → 861_0_rec0_IntArithmetic(EOS(STATIC_861), i55, i56, 0, i55) | =(matching1, 0)
861_0_rec0_IntArithmetic(EOS(STATIC_861), i55, i56, matching1, i55) → 867_0_rec0_Load(EOS(STATIC_867), i55, i56, 0) | =(matching1, 0)
867_0_rec0_Load(EOS(STATIC_867), i55, i56, matching1) → 874_0_rec0_InvokeMethod(EOS(STATIC_874), i55, i56, 0, i55) | =(matching1, 0)
874_0_rec0_InvokeMethod(EOS(STATIC_874), i55, i56, matching1, i55) → 886_1_rec0_InvokeMethod(886_0_rec1_Load(EOS(STATIC_886), 0, i55), i55, i56, 0, i55) | =(matching1, 0)
886_0_rec1_Load(EOS(STATIC_886), matching1, i55) → 893_0_rec1_Load(EOS(STATIC_893), 0, i55) | =(matching1, 0)
886_1_rec0_InvokeMethod(1195_0_rec1_Return(EOS(STATIC_1195)), i199, i56, matching1, i199) → 1210_0_rec1_Return(EOS(STATIC_1210), i199, i56, 0, i199) | =(matching1, 0)
886_1_rec0_InvokeMethod(1364_0_rec1_Return(EOS(STATIC_1364)), i321, i56, matching1, i321) → 1369_0_rec1_Return(EOS(STATIC_1369), i321, i56, 0, i321) | =(matching1, 0)
914_0_rec1_Return(EOS(STATIC_914), i79, i56, matching1, i79) → 921_0_rec0_Load(EOS(STATIC_921), i79, i56) | =(matching1, 0)
921_0_rec0_Load(EOS(STATIC_921), i79, i56) → 928_0_rec0_ConstantStackPush(EOS(STATIC_928), i56, i79)
928_0_rec0_ConstantStackPush(EOS(STATIC_928), i56, i79) → 934_0_rec0_IntArithmetic(EOS(STATIC_934), i56, i79)
934_0_rec0_IntArithmetic(EOS(STATIC_934), i56, i79) → 940_0_rec0_Load(EOS(STATIC_940), i56) | >=(i79, 0)
940_0_rec0_Load(EOS(STATIC_940), i56) → 945_0_rec0_InvokeMethod(EOS(STATIC_945), i56)
945_0_rec0_InvokeMethod(EOS(STATIC_945), i56) → 951_1_rec0_InvokeMethod(951_0_rec0_Load(EOS(STATIC_951), i56), i56)
951_0_rec0_Load(EOS(STATIC_951), i56) → 955_0_rec0_Load(EOS(STATIC_955), i56)
951_1_rec0_InvokeMethod(841_0_rec0_Return(EOS(STATIC_841)), i96) → 973_0_rec0_Return(EOS(STATIC_973), i96)
951_1_rec0_InvokeMethod(981_0_rec0_Return(EOS(STATIC_981)), i111) → 1004_0_rec0_Return(EOS(STATIC_1004), i111)
973_0_rec0_Return(EOS(STATIC_973), i96) → 981_0_rec0_Return(EOS(STATIC_981))
1004_0_rec0_Return(EOS(STATIC_1004), i111) → 973_0_rec0_Return(EOS(STATIC_973), i111)
1210_0_rec1_Return(EOS(STATIC_1210), i199, i56, matching1, i199) → 914_0_rec1_Return(EOS(STATIC_914), i199, i56, 0, i199) | =(matching1, 0)
1369_0_rec1_Return(EOS(STATIC_1369), i321, i56, matching1, i321) → 914_0_rec1_Return(EOS(STATIC_914), i321, i56, 0, i321) | =(matching1, 0)
1184_0_rec1_Load(EOS(STATIC_1184), i195, i43) → 1187_0_rec1_Load(EOS(STATIC_1187), i195, i43, i195)
1187_0_rec1_Load(EOS(STATIC_1187), i195, i43, i195) → 1188_0_rec1_GT(EOS(STATIC_1188), i195, i43, i195, i43)
1188_0_rec1_GT(EOS(STATIC_1188), i195, i43, i195, i43) → 1192_0_rec1_GT(EOS(STATIC_1192), i195, i43, i195, i43)
1188_0_rec1_GT(EOS(STATIC_1188), i195, i43, i195, i43) → 1193_0_rec1_GT(EOS(STATIC_1193), i195, i43, i195, i43)
1192_0_rec1_GT(EOS(STATIC_1192), i195, i43, i195, i43) → 1195_0_rec1_Return(EOS(STATIC_1195)) | >(i195, i43)
1193_0_rec1_GT(EOS(STATIC_1193), i195, i43, i195, i43) → 1196_0_rec1_Load(EOS(STATIC_1196), i195, i43) | <=(i195, i43)
1195_0_rec1_Return(EOS(STATIC_1195)) → 1364_0_rec1_Return(EOS(STATIC_1364))
1196_0_rec1_Load(EOS(STATIC_1196), i195, i43) → 1200_0_rec1_Load(EOS(STATIC_1200), i195, i43)
1200_0_rec1_Load(EOS(STATIC_1200), i195, i43) → 1206_0_rec1_IntArithmetic(EOS(STATIC_1206), i195, i43, i195)
1206_0_rec1_IntArithmetic(EOS(STATIC_1206), i195, i43, i195) → 1211_0_rec1_ConstantStackPush(EOS(STATIC_1211), i195, i43) | >=(i195, 0)
1211_0_rec1_ConstantStackPush(EOS(STATIC_1211), i195, i43) → 1215_0_rec1_Load(EOS(STATIC_1215), i195, i43, 0)
1215_0_rec1_Load(EOS(STATIC_1215), i195, i43, matching1) → 1219_0_rec1_Load(EOS(STATIC_1219), i195, i43, 0) | =(matching1, 0)
1219_0_rec1_Load(EOS(STATIC_1219), i195, i43, matching1) → 1223_0_rec1_InvokeMethod(EOS(STATIC_1223), i195, i43, 0, i195) | =(matching1, 0)
1223_0_rec1_InvokeMethod(EOS(STATIC_1223), i195, i43, matching1, i195) → 1225_1_rec1_InvokeMethod(1225_0_rec2_Load(EOS(STATIC_1225), 0, i195), i195, i43, 0, i195) | =(matching1, 0)
1225_0_rec2_Load(EOS(STATIC_1225), matching1, i195) → 1228_0_rec2_Load(EOS(STATIC_1228), 0, i195) | =(matching1, 0)
1225_1_rec1_InvokeMethod(1343_0_rec2_Return(EOS(STATIC_1343)), i299, i43, matching1, i299) → 1352_0_rec2_Return(EOS(STATIC_1352), i299, i43, 0, i299) | =(matching1, 0)
1336_0_rec2_Return(EOS(STATIC_1336), i285, i43, matching1, i285) → 1341_0_rec1_Load(EOS(STATIC_1341), i285, i43) | =(matching1, 0)
1341_0_rec1_Load(EOS(STATIC_1341), i285, i43) → 1344_0_rec1_ConstantStackPush(EOS(STATIC_1344), i43, i285)
1344_0_rec1_ConstantStackPush(EOS(STATIC_1344), i43, i285) → 1346_0_rec1_IntArithmetic(EOS(STATIC_1346), i43, i285)
1346_0_rec1_IntArithmetic(EOS(STATIC_1346), i43, i285) → 1350_0_rec1_Load(EOS(STATIC_1350), i43) | >=(i285, 0)
1350_0_rec1_Load(EOS(STATIC_1350), i43) → 1355_0_rec1_Load(EOS(STATIC_1355), i43)
1352_0_rec2_Return(EOS(STATIC_1352), i299, i43, matching1, i299) → 1336_0_rec2_Return(EOS(STATIC_1336), i299, i43, 0, i299) | =(matching1, 0)
1355_0_rec1_Load(EOS(STATIC_1355), i43) → 1356_0_rec1_InvokeMethod(EOS(STATIC_1356), i43)
1356_0_rec1_InvokeMethod(EOS(STATIC_1356), i43) → 1357_1_rec1_InvokeMethod(1357_0_rec1_Load(EOS(STATIC_1357), i43), i43)
1357_0_rec1_Load(EOS(STATIC_1357), i43) → 1359_0_rec1_Load(EOS(STATIC_1359), i43)
1357_1_rec1_InvokeMethod(1195_0_rec1_Return(EOS(STATIC_1195)), i315) → 1362_0_rec1_Return(EOS(STATIC_1362), i315)
1357_1_rec1_InvokeMethod(1364_0_rec1_Return(EOS(STATIC_1364)), i324) → 1371_0_rec1_Return(EOS(STATIC_1371), i324)
1362_0_rec1_Return(EOS(STATIC_1362), i315) → 1364_0_rec1_Return(EOS(STATIC_1364))
1371_0_rec1_Return(EOS(STATIC_1371), i324) → 1362_0_rec1_Return(EOS(STATIC_1362), i324)
1233_0_rec2_Load(EOS(STATIC_1233), i214, matching1) → 1236_0_rec2_Load(EOS(STATIC_1236), i214, 0, i214) | =(matching1, 0)
1236_0_rec2_Load(EOS(STATIC_1236), i214, matching1, i214) → 1238_0_rec2_LT(EOS(STATIC_1238), i214, 0, i214, 0) | =(matching1, 0)
1238_0_rec2_LT(EOS(STATIC_1238), i220, matching1, i220, matching2) → 1241_0_rec2_LT(EOS(STATIC_1241), i220, 0, i220, 0) | &&(=(matching1, 0), =(matching2, 0))
1238_0_rec2_LT(EOS(STATIC_1238), i221, matching1, i221, matching2) → 1242_0_rec2_LT(EOS(STATIC_1242), i221, 0, i221, 0) | &&(=(matching1, 0), =(matching2, 0))
1241_0_rec2_LT(EOS(STATIC_1241), i220, matching1, i220, matching2) → 1245_0_rec2_Return(EOS(STATIC_1245)) | &&(&&(<(i220, 0), =(matching1, 0)), =(matching2, 0))
1242_0_rec2_LT(EOS(STATIC_1242), i221, matching1, i221, matching2) → 1246_0_rec2_ConstantStackPush(EOS(STATIC_1246), i221, 0) | &&(&&(>=(i221, 0), =(matching1, 0)), =(matching2, 0))
1246_0_rec2_ConstantStackPush(EOS(STATIC_1246), i221, matching1) → 1250_0_rec2_ConstantStackPush(EOS(STATIC_1250), i221, 0, 0) | =(matching1, 0)
1250_0_rec2_ConstantStackPush(EOS(STATIC_1250), i221, matching1, matching2) → 1252_0_rec2_Load(EOS(STATIC_1252), i221, 0, 0) | &&(=(matching1, 0), =(matching2, 0))
1252_0_rec2_Load(EOS(STATIC_1252), i221, matching1, matching2) → 1256_0_rec2_IntArithmetic(EOS(STATIC_1256), i221, 0, 0) | &&(=(matching1, 0), =(matching2, 0))
1256_0_rec2_IntArithmetic(EOS(STATIC_1256), i221, matching1, matching2) → 1258_0_rec2_ConstantStackPush(EOS(STATIC_1258), i221, 0, 0) | &&(=(matching1, 0), =(matching2, 0))
1258_0_rec2_ConstantStackPush(EOS(STATIC_1258), i221, matching1, matching2) → 1261_0_rec2_Load(EOS(STATIC_1261), i221, 0, 0) | &&(=(matching1, 0), =(matching2, 0))
1261_0_rec2_Load(EOS(STATIC_1261), i221, matching1, matching2) → 1262_0_rec2_IntArithmetic(EOS(STATIC_1262), i221, 0, 0) | &&(=(matching1, 0), =(matching2, 0))
1262_0_rec2_IntArithmetic(EOS(STATIC_1262), i221, matching1, matching2) → 1267_0_rec2_IntArithmetic(EOS(STATIC_1267), i221, 0, 0) | &&(=(matching1, 0), =(matching2, 0))
1267_0_rec2_IntArithmetic(EOS(STATIC_1267), i221, matching1, matching2) → 1273_0_rec2_ConstantStackPush(EOS(STATIC_1273), i221, 0, 0) | &&(=(matching1, 0), =(matching2, 0))
1273_0_rec2_ConstantStackPush(EOS(STATIC_1273), i221, matching1, matching2) → 1276_0_rec2_Load(EOS(STATIC_1276), i221, 0, 0) | &&(=(matching1, 0), =(matching2, 0))
1276_0_rec2_Load(EOS(STATIC_1276), i221, matching1, matching2) → 1278_0_rec2_IntArithmetic(EOS(STATIC_1278), i221, 0, 0, i221) | &&(=(matching1, 0), =(matching2, 0))
1278_0_rec2_IntArithmetic(EOS(STATIC_1278), i221, matching1, matching2, i221) → 1281_0_rec2_IntArithmetic(EOS(STATIC_1281), i221, 0, 0) | &&(=(matching1, 0), =(matching2, 0))
1281_0_rec2_IntArithmetic(EOS(STATIC_1281), i221, matching1, matching2) → 1283_0_rec2_Load(EOS(STATIC_1283), i221, 0, 0) | &&(=(matching1, 0), =(matching2, 0))
1283_0_rec2_Load(EOS(STATIC_1283), i221, matching1, matching2) → 1286_0_rec2_Load(EOS(STATIC_1286), i221, 0, 0) | &&(=(matching1, 0), =(matching2, 0))
1286_0_rec2_Load(EOS(STATIC_1286), i221, matching1, matching2) → 1289_0_rec2_Load(EOS(STATIC_1289), i221, 0, 0) | &&(=(matching1, 0), =(matching2, 0))
1289_0_rec2_Load(EOS(STATIC_1289), i221, matching1, matching2) → 1291_0_rec2_InvokeMethod(EOS(STATIC_1291), i221, 0, 0, i221) | &&(=(matching1, 0), =(matching2, 0))
1291_0_rec2_InvokeMethod(EOS(STATIC_1291), i221, matching1, matching2, i221) → 1293_1_rec2_InvokeMethod(1293_0_rec3_Load(EOS(STATIC_1293), 0, i221), i221, 0, 0, i221) | &&(=(matching1, 0), =(matching2, 0))
1293_0_rec3_Load(EOS(STATIC_1293), matching1, i221) → 1296_0_rec3_Load(EOS(STATIC_1296), 0, i221) | =(matching1, 0)
1293_1_rec2_InvokeMethod(1207_0_rec3_Return(EOS(STATIC_1207)), i242, matching1, matching2, i242) → 1304_0_rec3_Return(EOS(STATIC_1304), i242, 0, 0, i242) | &&(=(matching1, 0), =(matching2, 0))
1293_1_rec2_InvokeMethod(1308_0_rec3_Return(EOS(STATIC_1308)), i261, matching1, matching2, i261) → 1318_0_rec3_Return(EOS(STATIC_1318), i261, 0, 0, i261) | &&(=(matching1, 0), =(matching2, 0))
1304_0_rec3_Return(EOS(STATIC_1304), i242, matching1, matching2, i242) → 1306_0_rec2_Load(EOS(STATIC_1306), i242, 0) | &&(=(matching1, 0), =(matching2, 0))
1306_0_rec2_Load(EOS(STATIC_1306), i242, matching1) → 1309_0_rec2_ConstantStackPush(EOS(STATIC_1309), 0, i242) | =(matching1, 0)
1309_0_rec2_ConstantStackPush(EOS(STATIC_1309), matching1, i242) → 1312_0_rec2_IntArithmetic(EOS(STATIC_1312), 0, i242) | =(matching1, 0)
1312_0_rec2_IntArithmetic(EOS(STATIC_1312), matching1, i242) → 1316_0_rec2_Load(EOS(STATIC_1316), 0) | &&(>=(i242, 0), =(matching1, 0))
1316_0_rec2_Load(EOS(STATIC_1316), matching1) → 1321_0_rec2_Load(EOS(STATIC_1321), 0) | =(matching1, 0)
1318_0_rec3_Return(EOS(STATIC_1318), i261, matching1, matching2, i261) → 1304_0_rec3_Return(EOS(STATIC_1304), i261, 0, 0, i261) | &&(=(matching1, 0), =(matching2, 0))
1321_0_rec2_Load(EOS(STATIC_1321), matching1) → 1322_0_rec2_Load(EOS(STATIC_1322), 0) | =(matching1, 0)
1322_0_rec2_Load(EOS(STATIC_1322), matching1) → 1323_0_rec2_InvokeMethod(EOS(STATIC_1323), 0) | =(matching1, 0)
1323_0_rec2_InvokeMethod(EOS(STATIC_1323), matching1) → 1324_1_rec2_InvokeMethod(1324_0_rec2_Load(EOS(STATIC_1324), 0), 0) | =(matching1, 0)
1324_0_rec2_Load(EOS(STATIC_1324), matching1) → 1326_0_rec2_Load(EOS(STATIC_1326), 0) | =(matching1, 0)
1324_1_rec2_InvokeMethod(1245_0_rec2_Return(EOS(STATIC_1245)), matching1) → 1329_0_rec2_Return(EOS(STATIC_1329), 0) | =(matching1, 0)
1324_1_rec2_InvokeMethod(1343_0_rec2_Return(EOS(STATIC_1343)), matching1) → 1354_0_rec2_Return(EOS(STATIC_1354), 0) | =(matching1, 0)
1329_0_rec2_Return(EOS(STATIC_1329), matching1) → 1339_0_rec2_Return(EOS(STATIC_1339), 0) | =(matching1, 0)
1339_0_rec2_Return(EOS(STATIC_1339), matching1) → 1343_0_rec2_Return(EOS(STATIC_1343)) | =(matching1, 0)
1354_0_rec2_Return(EOS(STATIC_1354), matching1) → 1339_0_rec2_Return(EOS(STATIC_1339), 0) | =(matching1, 0)
1190_0_rec3_Load(EOS(STATIC_1190), i197, i115) → 1194_0_rec3_Load(EOS(STATIC_1194), i197, i115, i197)
1194_0_rec3_Load(EOS(STATIC_1194), i197, i115, i197) → 1198_0_rec3_GT(EOS(STATIC_1198), i197, i115, i197, i115)
1198_0_rec3_GT(EOS(STATIC_1198), i197, i115, i197, i115) → 1201_0_rec3_GT(EOS(STATIC_1201), i197, i115, i197, i115)
1198_0_rec3_GT(EOS(STATIC_1198), i197, i115, i197, i115) → 1202_0_rec3_GT(EOS(STATIC_1202), i197, i115, i197, i115)
1201_0_rec3_GT(EOS(STATIC_1201), i197, i115, i197, i115) → 1207_0_rec3_Return(EOS(STATIC_1207)) | >(i197, i115)
1202_0_rec3_GT(EOS(STATIC_1202), i197, i115, i197, i115) → 1208_0_rec3_ConstantStackPush(EOS(STATIC_1208), i197, i115) | <=(i197, i115)
1207_0_rec3_Return(EOS(STATIC_1207)) → 1308_0_rec3_Return(EOS(STATIC_1308))
1208_0_rec3_ConstantStackPush(EOS(STATIC_1208), i197, i115) → 1213_0_rec3_Load(EOS(STATIC_1213), i197, i115)
1213_0_rec3_Load(EOS(STATIC_1213), i197, i115) → 1218_0_rec3_IntArithmetic(EOS(STATIC_1218), i197, i115)
1218_0_rec3_IntArithmetic(EOS(STATIC_1218), i197, i115) → 1222_0_rec3_ConstantStackPush(EOS(STATIC_1222), i197, i115)
1222_0_rec3_ConstantStackPush(EOS(STATIC_1222), i197, i115) → 1224_0_rec3_Load(EOS(STATIC_1224), i197, i115)
1224_0_rec3_Load(EOS(STATIC_1224), i197, i115) → 1227_0_rec3_IntArithmetic(EOS(STATIC_1227), i197, i115)
1227_0_rec3_IntArithmetic(EOS(STATIC_1227), i197, i115) → 1229_0_rec3_IntArithmetic(EOS(STATIC_1229), i197, i115)
1229_0_rec3_IntArithmetic(EOS(STATIC_1229), i197, i115) → 1231_0_rec3_ConstantStackPush(EOS(STATIC_1231), i197, i115)
1231_0_rec3_ConstantStackPush(EOS(STATIC_1231), i197, i115) → 1235_0_rec3_Load(EOS(STATIC_1235), i197, i115)
1235_0_rec3_Load(EOS(STATIC_1235), i197, i115) → 1237_0_rec3_IntArithmetic(EOS(STATIC_1237), i197, i115)
1237_0_rec3_IntArithmetic(EOS(STATIC_1237), i197, i115) → 1240_0_rec3_IntArithmetic(EOS(STATIC_1240), i197, i115)
1240_0_rec3_IntArithmetic(EOS(STATIC_1240), i197, i115) → 1243_0_rec3_Load(EOS(STATIC_1243), i197, i115)
1243_0_rec3_Load(EOS(STATIC_1243), i197, i115) → 1247_0_rec3_IntArithmetic(EOS(STATIC_1247), i197, i115, i197)
1247_0_rec3_IntArithmetic(EOS(STATIC_1247), i197, i115, i197) → 1251_0_rec3_ConstantStackPush(EOS(STATIC_1251), i197, i115) | >=(i197, 0)
1251_0_rec3_ConstantStackPush(EOS(STATIC_1251), i197, i115) → 1254_0_rec3_InvokeMethod(EOS(STATIC_1254), i197, i115)
1254_0_rec3_InvokeMethod(EOS(STATIC_1254), i197, i115) → 1257_1_rec3_InvokeMethod(1257_0_rec4_Load(EOS(STATIC_1257)), i197, i115)
1257_0_rec4_Load(EOS(STATIC_1257)) → 1260_0_rec4_Load(EOS(STATIC_1260))
1257_1_rec3_InvokeMethod(984_0_rec4_Return(EOS(STATIC_984)), i197, i115) → 1268_0_rec4_Return(EOS(STATIC_1268), i197, i115)
1257_1_rec3_InvokeMethod(1070_0_rec4_Return(EOS(STATIC_1070)), i197, i115) → 1271_0_rec4_Return(EOS(STATIC_1271), i197, i115)
1268_0_rec4_Return(EOS(STATIC_1268), i197, i115) → 1272_0_rec4_Return(EOS(STATIC_1272), i197, i115)
1271_0_rec4_Return(EOS(STATIC_1271), i197, i115) → 1272_0_rec4_Return(EOS(STATIC_1272), i197, i115)
1272_0_rec4_Return(EOS(STATIC_1272), i197, i115) → 1274_0_rec3_Load(EOS(STATIC_1274), i197, i115)
1274_0_rec3_Load(EOS(STATIC_1274), i197, i115) → 1277_0_rec3_ConstantStackPush(EOS(STATIC_1277), i115, i197)
1277_0_rec3_ConstantStackPush(EOS(STATIC_1277), i115, i197) → 1279_0_rec3_IntArithmetic(EOS(STATIC_1279), i115, i197)
1279_0_rec3_IntArithmetic(EOS(STATIC_1279), i115, i197) → 1282_0_rec3_Load(EOS(STATIC_1282), i115) | >=(i197, 0)
1282_0_rec3_Load(EOS(STATIC_1282), i115) → 1284_0_rec3_Load(EOS(STATIC_1284), i115)
1284_0_rec3_Load(EOS(STATIC_1284), i115) → 1287_0_rec3_Load(EOS(STATIC_1287), i115)
1287_0_rec3_Load(EOS(STATIC_1287), i115) → 1290_0_rec3_Load(EOS(STATIC_1290), i115)
1290_0_rec3_Load(EOS(STATIC_1290), i115) → 1292_0_rec3_InvokeMethod(EOS(STATIC_1292), i115)
1292_0_rec3_InvokeMethod(EOS(STATIC_1292), i115) → 1295_1_rec3_InvokeMethod(1295_0_rec3_Load(EOS(STATIC_1295), i115), i115)
1295_0_rec3_Load(EOS(STATIC_1295), i115) → 1298_0_rec3_Load(EOS(STATIC_1298), i115)
1295_1_rec3_InvokeMethod(1207_0_rec3_Return(EOS(STATIC_1207)), i250) → 1305_0_rec3_Return(EOS(STATIC_1305), i250)
1295_1_rec3_InvokeMethod(1308_0_rec3_Return(EOS(STATIC_1308)), i264) → 1319_0_rec3_Return(EOS(STATIC_1319), i264)
1305_0_rec3_Return(EOS(STATIC_1305), i250) → 1308_0_rec3_Return(EOS(STATIC_1308))
1319_0_rec3_Return(EOS(STATIC_1319), i264) → 1305_0_rec3_Return(EOS(STATIC_1305), i264)
958_0_rec4_Load(EOS(STATIC_958), i89, matching1) → 964_0_rec4_Load(EOS(STATIC_964), i89, 0, i89) | =(matching1, 0)
964_0_rec4_Load(EOS(STATIC_964), i89, matching1, i89) → 971_0_rec4_LT(EOS(STATIC_971), i89, 0, i89, 0) | =(matching1, 0)
971_0_rec4_LT(EOS(STATIC_971), i99, matching1, i99, matching2) → 976_0_rec4_LT(EOS(STATIC_976), i99, 0, i99, 0) | &&(=(matching1, 0), =(matching2, 0))
971_0_rec4_LT(EOS(STATIC_971), i100, matching1, i100, matching2) → 977_0_rec4_LT(EOS(STATIC_977), i100, 0, i100, 0) | &&(=(matching1, 0), =(matching2, 0))
976_0_rec4_LT(EOS(STATIC_976), i99, matching1, i99, matching2) → 984_0_rec4_Return(EOS(STATIC_984)) | &&(&&(<(i99, 0), =(matching1, 0)), =(matching2, 0))
977_0_rec4_LT(EOS(STATIC_977), i100, matching1, i100, matching2) → 985_0_rec4_Load(EOS(STATIC_985), i100, 0) | &&(&&(>=(i100, 0), =(matching1, 0)), =(matching2, 0))
985_0_rec4_Load(EOS(STATIC_985), i100, matching1) → 996_0_rec4_ConstantStackPush(EOS(STATIC_996), 0, i100) | =(matching1, 0)
996_0_rec4_ConstantStackPush(EOS(STATIC_996), matching1, i100) → 1001_0_rec4_IntArithmetic(EOS(STATIC_1001), 0, i100) | =(matching1, 0)
1001_0_rec4_IntArithmetic(EOS(STATIC_1001), matching1, i100) → 1008_0_rec4_Load(EOS(STATIC_1008), 0) | &&(>=(i100, 0), =(matching1, 0))
1008_0_rec4_Load(EOS(STATIC_1008), matching1) → 1012_0_rec4_InvokeMethod(EOS(STATIC_1012), 0) | =(matching1, 0)
1012_0_rec4_InvokeMethod(EOS(STATIC_1012), matching1) → 1017_1_rec4_InvokeMethod(1017_0_rec4_Load(EOS(STATIC_1017), 0), 0) | =(matching1, 0)
1017_0_rec4_Load(EOS(STATIC_1017), matching1) → 1023_0_rec4_Load(EOS(STATIC_1023), 0) | =(matching1, 0)
1017_1_rec4_InvokeMethod(984_0_rec4_Return(EOS(STATIC_984)), matching1) → 1039_0_rec4_Return(EOS(STATIC_1039), 0) | =(matching1, 0)
1017_1_rec4_InvokeMethod(1070_0_rec4_Return(EOS(STATIC_1070)), matching1) → 1090_0_rec4_Return(EOS(STATIC_1090), 0) | =(matching1, 0)
1039_0_rec4_Return(EOS(STATIC_1039), matching1) → 1063_0_rec4_Return(EOS(STATIC_1063), 0) | =(matching1, 0)
1063_0_rec4_Return(EOS(STATIC_1063), matching1) → 1070_0_rec4_Return(EOS(STATIC_1070)) | =(matching1, 0)
1090_0_rec4_Return(EOS(STATIC_1090), matching1) → 1063_0_rec4_Return(EOS(STATIC_1063), 0) | =(matching1, 0)

Combined rules. Obtained 2 conditional rules for P and 28 conditional rules for R.


P rules:
1128_1_main_InvokeMethod(841_0_rec0_Return(EOS(STATIC_841)), java.lang.Object(ARRAY(x0)), x1, 0, x3) → 1128_1_main_InvokeMethod(1128_0_rec0_Load(EOS(STATIC_1128), 0, x3), java.lang.Object(ARRAY(x3)), +(x1, 1), 0, x3) | &&(&&(>(+(x3, 1), 0), >(x3, +(x1, 1))), >(+(x1, 1), 0))
1128_1_main_InvokeMethod(981_0_rec0_Return(EOS(STATIC_981)), java.lang.Object(ARRAY(x0)), x1, 0, x3) → 1128_1_main_InvokeMethod(1128_0_rec0_Load(EOS(STATIC_1128), 0, x3), java.lang.Object(ARRAY(x3)), +(x1, 1), 0, x3) | &&(&&(>(+(x3, 1), 0), >(x3, +(x1, 1))), >(+(x1, 1), 0))
R rules:
1128_0_rec0_Load(EOS(STATIC_1128), 0, x1) → 828_0_rec0_GT(EOS(STATIC_828), 0, x1, 0, x1)
828_0_rec0_GT(EOS(STATIC_828), x0, x1, x0, x1) → 981_0_rec0_Return(EOS(STATIC_981)) | <(x1, x0)
828_0_rec0_GT(EOS(STATIC_828), x0, x1, x0, x1) → 886_1_rec0_InvokeMethod(1188_0_rec1_GT(EOS(STATIC_1188), 0, x2, 0, x2), x0, x1, 0, x0) | >=(x1, x0)
1188_0_rec1_GT(EOS(STATIC_1188), x0, x1, x0, x1) → 1364_0_rec1_Return(EOS(STATIC_1364)) | <(x1, x0)
1188_0_rec1_GT(EOS(STATIC_1188), x0, x1, x0, x1) → 1225_1_rec1_InvokeMethod(1238_0_rec2_LT(EOS(STATIC_1238), x2, 0, x2, 0), x0, x1, 0, x0) | &&(>=(x1, x0), >(+(x0, 1), 0))
1238_0_rec2_LT(EOS(STATIC_1238), x0, 0, x0, 0) → 1245_0_rec2_Return(EOS(STATIC_1245)) | <(x0, 0)
1238_0_rec2_LT(EOS(STATIC_1238), x0, 0, x0, 0) → 1293_1_rec2_InvokeMethod(1198_0_rec3_GT(EOS(STATIC_1198), 0, x3, 0, x3), x0, 0, 0, x0) | >(+(x0, 1), 0)
1198_0_rec3_GT(EOS(STATIC_1198), x0, x1, x0, x1) → 1308_0_rec3_Return(EOS(STATIC_1308)) | <(x1, x0)
1198_0_rec3_GT(EOS(STATIC_1198), x0, x1, x0, x1) → 1257_1_rec3_InvokeMethod(971_0_rec4_LT(EOS(STATIC_971), x2, 0, x2, 0), x0, x1) | &&(>=(x1, x0), >(+(x0, 1), 0))
971_0_rec4_LT(EOS(STATIC_971), x0, 0, x0, 0) → 984_0_rec4_Return(EOS(STATIC_984)) | <(x0, 0)
971_0_rec4_LT(EOS(STATIC_971), x0, 0, x0, 0) → 1017_1_rec4_InvokeMethod(971_0_rec4_LT(EOS(STATIC_971), x3, 0, x3, 0), 0) | >(+(x0, 1), 0)
1017_1_rec4_InvokeMethod(984_0_rec4_Return(EOS(STATIC_984)), 0) → 1070_0_rec4_Return(EOS(STATIC_1070))
1017_1_rec4_InvokeMethod(1070_0_rec4_Return(EOS(STATIC_1070)), 0) → 1070_0_rec4_Return(EOS(STATIC_1070))
886_1_rec0_InvokeMethod(1195_0_rec1_Return(EOS(STATIC_1195)), x0, x1, 0, x0) → 951_1_rec0_InvokeMethod(828_0_rec0_GT(EOS(STATIC_828), x3, x1, x3, x1), x1) | >(+(x0, 1), 0)
886_1_rec0_InvokeMethod(1364_0_rec1_Return(EOS(STATIC_1364)), x0, x1, 0, x0) → 951_1_rec0_InvokeMethod(828_0_rec0_GT(EOS(STATIC_828), x3, x1, x3, x1), x1) | >(+(x0, 1), 0)
1225_1_rec1_InvokeMethod(1343_0_rec2_Return(EOS(STATIC_1343)), x0, x1, 0, x0) → 1357_1_rec1_InvokeMethod(1188_0_rec1_GT(EOS(STATIC_1188), x3, x1, x3, x1), x1) | >(+(x0, 1), 0)
1357_1_rec1_InvokeMethod(1195_0_rec1_Return(EOS(STATIC_1195)), x0) → 1364_0_rec1_Return(EOS(STATIC_1364))
1357_1_rec1_InvokeMethod(1364_0_rec1_Return(EOS(STATIC_1364)), x0) → 1364_0_rec1_Return(EOS(STATIC_1364))
1293_1_rec2_InvokeMethod(1207_0_rec3_Return(EOS(STATIC_1207)), x0, 0, 0, x0) → 1324_1_rec2_InvokeMethod(1238_0_rec2_LT(EOS(STATIC_1238), x3, 0, x3, 0), 0) | >(+(x0, 1), 0)
1293_1_rec2_InvokeMethod(1308_0_rec3_Return(EOS(STATIC_1308)), x0, 0, 0, x0) → 1324_1_rec2_InvokeMethod(1238_0_rec2_LT(EOS(STATIC_1238), x3, 0, x3, 0), 0) | >(+(x0, 1), 0)
1324_1_rec2_InvokeMethod(1245_0_rec2_Return(EOS(STATIC_1245)), 0) → 1343_0_rec2_Return(EOS(STATIC_1343))
1324_1_rec2_InvokeMethod(1343_0_rec2_Return(EOS(STATIC_1343)), 0) → 1343_0_rec2_Return(EOS(STATIC_1343))
1257_1_rec3_InvokeMethod(984_0_rec4_Return(EOS(STATIC_984)), x0, x1) → 1295_1_rec3_InvokeMethod(1198_0_rec3_GT(EOS(STATIC_1198), x2, x1, x2, x1), x1) | >(+(x0, 1), 0)
1257_1_rec3_InvokeMethod(1070_0_rec4_Return(EOS(STATIC_1070)), x0, x1) → 1295_1_rec3_InvokeMethod(1198_0_rec3_GT(EOS(STATIC_1198), x2, x1, x2, x1), x1) | >(+(x0, 1), 0)
1295_1_rec3_InvokeMethod(1207_0_rec3_Return(EOS(STATIC_1207)), x0) → 1308_0_rec3_Return(EOS(STATIC_1308))
1295_1_rec3_InvokeMethod(1308_0_rec3_Return(EOS(STATIC_1308)), x0) → 1308_0_rec3_Return(EOS(STATIC_1308))
951_1_rec0_InvokeMethod(841_0_rec0_Return(EOS(STATIC_841)), x0) → 981_0_rec0_Return(EOS(STATIC_981))
951_1_rec0_InvokeMethod(981_0_rec0_Return(EOS(STATIC_981)), x0) → 981_0_rec0_Return(EOS(STATIC_981))

Filtered ground terms:



1128_1_main_InvokeMethod(x1, x2, x3, x4, x5) → 1128_1_main_InvokeMethod(x1, x2, x3, x5)
1128_0_rec0_Load(x1, x2, x3) → 1128_0_rec0_Load(x3)
Cond_1128_1_main_InvokeMethod1(x1, x2, x3, x4, x5, x6) → Cond_1128_1_main_InvokeMethod1(x1, x3, x4, x6)
981_0_rec0_Return(x1) → 981_0_rec0_Return
Cond_1128_1_main_InvokeMethod(x1, x2, x3, x4, x5, x6) → Cond_1128_1_main_InvokeMethod(x1, x3, x4, x6)
841_0_rec0_Return(x1) → 841_0_rec0_Return
1308_0_rec3_Return(x1) → 1308_0_rec3_Return
1207_0_rec3_Return(x1) → 1207_0_rec3_Return
1198_0_rec3_GT(x1, x2, x3, x4, x5) → 1198_0_rec3_GT(x2, x3, x4, x5)
Cond_1257_1_rec3_InvokeMethod1(x1, x2, x3, x4, x5) → Cond_1257_1_rec3_InvokeMethod1(x1, x3, x4, x5)
1070_0_rec4_Return(x1) → 1070_0_rec4_Return
Cond_1257_1_rec3_InvokeMethod(x1, x2, x3, x4, x5) → Cond_1257_1_rec3_InvokeMethod(x1, x3, x4, x5)
984_0_rec4_Return(x1) → 984_0_rec4_Return
1343_0_rec2_Return(x1) → 1343_0_rec2_Return
1324_1_rec2_InvokeMethod(x1, x2) → 1324_1_rec2_InvokeMethod(x1)
1245_0_rec2_Return(x1) → 1245_0_rec2_Return
1238_0_rec2_LT(x1, x2, x3, x4, x5) → 1238_0_rec2_LT(x2, x4)
Cond_1293_1_rec2_InvokeMethod1(x1, x2, x3, x4, x5, x6, x7) → Cond_1293_1_rec2_InvokeMethod1(x1, x3, x6, x7)
1293_1_rec2_InvokeMethod(x1, x2, x3, x4, x5) → 1293_1_rec2_InvokeMethod(x1, x2, x5)
Cond_1293_1_rec2_InvokeMethod(x1, x2, x3, x4, x5, x6, x7) → Cond_1293_1_rec2_InvokeMethod(x1, x3, x6, x7)
1364_0_rec1_Return(x1) → 1364_0_rec1_Return
1195_0_rec1_Return(x1) → 1195_0_rec1_Return
1188_0_rec1_GT(x1, x2, x3, x4, x5) → 1188_0_rec1_GT(x2, x3, x4, x5)
Cond_1225_1_rec1_InvokeMethod(x1, x2, x3, x4, x5, x6, x7) → Cond_1225_1_rec1_InvokeMethod(x1, x3, x4, x6, x7)
1225_1_rec1_InvokeMethod(x1, x2, x3, x4, x5) → 1225_1_rec1_InvokeMethod(x1, x2, x3, x5)
828_0_rec0_GT(x1, x2, x3, x4, x5) → 828_0_rec0_GT(x2, x3, x4, x5)
Cond_886_1_rec0_InvokeMethod1(x1, x2, x3, x4, x5, x6, x7) → Cond_886_1_rec0_InvokeMethod1(x1, x3, x4, x6, x7)
886_1_rec0_InvokeMethod(x1, x2, x3, x4, x5) → 886_1_rec0_InvokeMethod(x1, x2, x3, x5)
Cond_886_1_rec0_InvokeMethod(x1, x2, x3, x4, x5, x6, x7) → Cond_886_1_rec0_InvokeMethod(x1, x3, x4, x6, x7)
1017_1_rec4_InvokeMethod(x1, x2) → 1017_1_rec4_InvokeMethod(x1)
971_0_rec4_LT(x1, x2, x3, x4, x5) → 971_0_rec4_LT(x2, x4)
Cond_971_0_rec4_LT1(x1, x2, x3, x4, x5, x6, x7) → Cond_971_0_rec4_LT1(x1, x3, x5, x7)
Cond_971_0_rec4_LT(x1, x2, x3, x4, x5, x6) → Cond_971_0_rec4_LT(x1, x3, x5)
Cond_1198_0_rec3_GT1(x1, x2, x3, x4, x5, x6, x7) → Cond_1198_0_rec3_GT1(x1, x3, x4, x5, x6, x7)
Cond_1198_0_rec3_GT(x1, x2, x3, x4, x5, x6) → Cond_1198_0_rec3_GT(x1, x3, x4, x5, x6)
Cond_1238_0_rec2_LT1(x1, x2, x3, x4, x5, x6, x7) → Cond_1238_0_rec2_LT1(x1, x3, x5, x7)
Cond_1238_0_rec2_LT(x1, x2, x3, x4, x5, x6) → Cond_1238_0_rec2_LT(x1, x3, x5)
Cond_1188_0_rec1_GT1(x1, x2, x3, x4, x5, x6, x7) → Cond_1188_0_rec1_GT1(x1, x3, x4, x5, x6, x7)
Cond_1188_0_rec1_GT(x1, x2, x3, x4, x5, x6) → Cond_1188_0_rec1_GT(x1, x3, x4, x5, x6)
Cond_828_0_rec0_GT1(x1, x2, x3, x4, x5, x6, x7) → Cond_828_0_rec0_GT1(x1, x3, x4, x5, x6, x7)
Cond_828_0_rec0_GT(x1, x2, x3, x4, x5, x6) → Cond_828_0_rec0_GT(x1, x3, x4, x5, x6)

Filtered duplicate args:



828_0_rec0_GT(x1, x2, x3, x4) → 828_0_rec0_GT(x3, x4)
Cond_828_0_rec0_GT(x1, x2, x3, x4, x5) → Cond_828_0_rec0_GT(x1, x4, x5)
Cond_828_0_rec0_GT1(x1, x2, x3, x4, x5, x6) → Cond_828_0_rec0_GT1(x1, x4, x5, x6)
886_1_rec0_InvokeMethod(x1, x2, x3, x4) → 886_1_rec0_InvokeMethod(x1, x3, x4)
1188_0_rec1_GT(x1, x2, x3, x4) → 1188_0_rec1_GT(x3, x4)
Cond_1188_0_rec1_GT(x1, x2, x3, x4, x5) → Cond_1188_0_rec1_GT(x1, x4, x5)
Cond_1188_0_rec1_GT1(x1, x2, x3, x4, x5, x6) → Cond_1188_0_rec1_GT1(x1, x4, x5, x6)
1225_1_rec1_InvokeMethod(x1, x2, x3, x4) → 1225_1_rec1_InvokeMethod(x1, x3, x4)
1238_0_rec2_LT(x1, x2) → 1238_0_rec2_LT(x2)
Cond_1238_0_rec2_LT(x1, x2, x3) → Cond_1238_0_rec2_LT(x1, x3)
Cond_1238_0_rec2_LT1(x1, x2, x3, x4) → Cond_1238_0_rec2_LT1(x1, x3, x4)
1293_1_rec2_InvokeMethod(x1, x2, x3) → 1293_1_rec2_InvokeMethod(x1, x3)
1198_0_rec3_GT(x1, x2, x3, x4) → 1198_0_rec3_GT(x3, x4)
Cond_1198_0_rec3_GT(x1, x2, x3, x4, x5) → Cond_1198_0_rec3_GT(x1, x4, x5)
Cond_1198_0_rec3_GT1(x1, x2, x3, x4, x5, x6) → Cond_1198_0_rec3_GT1(x1, x4, x5, x6)
971_0_rec4_LT(x1, x2) → 971_0_rec4_LT(x2)
Cond_971_0_rec4_LT(x1, x2, x3) → Cond_971_0_rec4_LT(x1, x3)
Cond_971_0_rec4_LT1(x1, x2, x3, x4) → Cond_971_0_rec4_LT1(x1, x3, x4)
Cond_886_1_rec0_InvokeMethod(x1, x2, x3, x4, x5) → Cond_886_1_rec0_InvokeMethod(x1, x3, x4, x5)
Cond_886_1_rec0_InvokeMethod1(x1, x2, x3, x4, x5) → Cond_886_1_rec0_InvokeMethod1(x1, x3, x4, x5)
Cond_1225_1_rec1_InvokeMethod(x1, x2, x3, x4, x5) → Cond_1225_1_rec1_InvokeMethod(x1, x3, x4, x5)
Cond_1293_1_rec2_InvokeMethod(x1, x2, x3, x4) → Cond_1293_1_rec2_InvokeMethod(x1, x3, x4)
Cond_1293_1_rec2_InvokeMethod1(x1, x2, x3, x4) → Cond_1293_1_rec2_InvokeMethod1(x1, x3, x4)

Filtered unneeded arguments:



1128_1_main_InvokeMethod(x1, x2, x3, x4) → 1128_1_main_InvokeMethod(x1, x3, x4)
Cond_1128_1_main_InvokeMethod(x1, x2, x3, x4) → Cond_1128_1_main_InvokeMethod(x1, x3, x4)
Cond_1128_1_main_InvokeMethod1(x1, x2, x3, x4) → Cond_1128_1_main_InvokeMethod1(x1, x3, x4)
Cond_828_0_rec0_GT(x1, x2, x3) → Cond_828_0_rec0_GT(x1)
Cond_1188_0_rec1_GT(x1, x2, x3) → Cond_1188_0_rec1_GT(x1)
Cond_1238_0_rec2_LT(x1, x2) → Cond_1238_0_rec2_LT(x1)
Cond_1198_0_rec3_GT(x1, x2, x3) → Cond_1198_0_rec3_GT(x1)
Cond_971_0_rec4_LT(x1, x2) → Cond_971_0_rec4_LT(x1)
Cond_971_0_rec4_LT1(x1, x2, x3) → Cond_971_0_rec4_LT1(x1, x3)
Cond_886_1_rec0_InvokeMethod(x1, x2, x3, x4) → Cond_886_1_rec0_InvokeMethod(x1, x2, x4)
951_1_rec0_InvokeMethod(x1, x2) → 951_1_rec0_InvokeMethod(x1)
Cond_886_1_rec0_InvokeMethod1(x1, x2, x3, x4) → Cond_886_1_rec0_InvokeMethod1(x1, x2, x4)
Cond_1225_1_rec1_InvokeMethod(x1, x2, x3, x4) → Cond_1225_1_rec1_InvokeMethod(x1, x2, x4)
1357_1_rec1_InvokeMethod(x1, x2) → 1357_1_rec1_InvokeMethod(x1)
Cond_1293_1_rec2_InvokeMethod(x1, x2, x3) → Cond_1293_1_rec2_InvokeMethod(x1, x3)
Cond_1293_1_rec2_InvokeMethod1(x1, x2, x3) → Cond_1293_1_rec2_InvokeMethod1(x1, x3)
Cond_1257_1_rec3_InvokeMethod(x1, x2, x3, x4) → Cond_1257_1_rec3_InvokeMethod(x1, x3, x4)
1295_1_rec3_InvokeMethod(x1, x2) → 1295_1_rec3_InvokeMethod(x1)
Cond_1257_1_rec3_InvokeMethod1(x1, x2, x3, x4) → Cond_1257_1_rec3_InvokeMethod1(x1, x3, x4)

Combined rules. Obtained 2 conditional rules for P and 28 conditional rules for R.


P rules:
1128_1_main_InvokeMethod(841_0_rec0_Return, x1, x3) → 1128_1_main_InvokeMethod(1128_0_rec0_Load(x3), +(x1, 1), x3) | &&(&&(>(x3, -1), >(x3, +(x1, 1))), >(x1, -1))
1128_1_main_InvokeMethod(981_0_rec0_Return, x1, x3) → 1128_1_main_InvokeMethod(1128_0_rec0_Load(x3), +(x1, 1), x3) | &&(&&(>(x3, -1), >(x3, +(x1, 1))), >(x1, -1))
R rules:
1128_0_rec0_Load(x1) → 828_0_rec0_GT(0, x1)
828_0_rec0_GT(x0, x1) → 981_0_rec0_Return | <(x1, x0)
828_0_rec0_GT(x0, x1) → 886_1_rec0_InvokeMethod(1188_0_rec1_GT(0, x2), x1, x0) | >=(x1, x0)
1188_0_rec1_GT(x0, x1) → 1364_0_rec1_Return | <(x1, x0)
1188_0_rec1_GT(x0, x1) → 1225_1_rec1_InvokeMethod(1238_0_rec2_LT(x2), x1, x0) | &&(>=(x1, x0), >(x0, -1))
1238_0_rec2_LT(x0) → 1245_0_rec2_Return | <(x0, 0)
1238_0_rec2_LT(x0) → 1293_1_rec2_InvokeMethod(1198_0_rec3_GT(0, x3), x0) | >(x0, -1)
1198_0_rec3_GT(x0, x1) → 1308_0_rec3_Return | <(x1, x0)
1198_0_rec3_GT(x0, x1) → 1257_1_rec3_InvokeMethod(971_0_rec4_LT(x2), x0, x1) | &&(>=(x1, x0), >(x0, -1))
971_0_rec4_LT(x0) → 984_0_rec4_Return | <(x0, 0)
971_0_rec4_LT(x0) → 1017_1_rec4_InvokeMethod(971_0_rec4_LT(x3)) | >(x0, -1)
1017_1_rec4_InvokeMethod(984_0_rec4_Return) → 1070_0_rec4_Return
1017_1_rec4_InvokeMethod(1070_0_rec4_Return) → 1070_0_rec4_Return
886_1_rec0_InvokeMethod(1195_0_rec1_Return, x1, x0) → 951_1_rec0_InvokeMethod(828_0_rec0_GT(x3, x1)) | >(x0, -1)
886_1_rec0_InvokeMethod(1364_0_rec1_Return, x1, x0) → 951_1_rec0_InvokeMethod(828_0_rec0_GT(x3, x1)) | >(x0, -1)
1225_1_rec1_InvokeMethod(1343_0_rec2_Return, x1, x0) → 1357_1_rec1_InvokeMethod(1188_0_rec1_GT(x3, x1)) | >(x0, -1)
1357_1_rec1_InvokeMethod(1195_0_rec1_Return) → 1364_0_rec1_Return
1357_1_rec1_InvokeMethod(1364_0_rec1_Return) → 1364_0_rec1_Return
1293_1_rec2_InvokeMethod(1207_0_rec3_Return, x0) → 1324_1_rec2_InvokeMethod(1238_0_rec2_LT(x3)) | >(x0, -1)
1293_1_rec2_InvokeMethod(1308_0_rec3_Return, x0) → 1324_1_rec2_InvokeMethod(1238_0_rec2_LT(x3)) | >(x0, -1)
1324_1_rec2_InvokeMethod(1245_0_rec2_Return) → 1343_0_rec2_Return
1324_1_rec2_InvokeMethod(1343_0_rec2_Return) → 1343_0_rec2_Return
1257_1_rec3_InvokeMethod(984_0_rec4_Return, x0, x1) → 1295_1_rec3_InvokeMethod(1198_0_rec3_GT(x2, x1)) | >(x0, -1)
1257_1_rec3_InvokeMethod(1070_0_rec4_Return, x0, x1) → 1295_1_rec3_InvokeMethod(1198_0_rec3_GT(x2, x1)) | >(x0, -1)
1295_1_rec3_InvokeMethod(1207_0_rec3_Return) → 1308_0_rec3_Return
1295_1_rec3_InvokeMethod(1308_0_rec3_Return) → 1308_0_rec3_Return
951_1_rec0_InvokeMethod(841_0_rec0_Return) → 981_0_rec0_Return
951_1_rec0_InvokeMethod(981_0_rec0_Return) → 981_0_rec0_Return

Performed bisimulation on rules. Used the following equivalence classes: {[Cond_1238_0_rec2_LT_2, Cond_971_0_rec4_LT_2]=Cond_1238_0_rec2_LT_2, [Cond_828_0_rec0_GT_3, Cond_1188_0_rec1_GT_3, Cond_1198_0_rec3_GT_3]=Cond_828_0_rec0_GT_3, [981_0_rec0_Return, 1364_0_rec1_Return, 1245_0_rec2_Return, 1308_0_rec3_Return, 984_0_rec4_Return, 1070_0_rec4_Return, 1195_0_rec1_Return, 1343_0_rec2_Return, 1207_0_rec3_Return, 841_0_rec0_Return]=981_0_rec0_Return, [Cond_1128_1_main_InvokeMethod_4, Cond_1128_1_main_InvokeMethod1_4]=Cond_1128_1_main_InvokeMethod_4, [Cond_1293_1_rec2_InvokeMethod_4, Cond_1293_1_rec2_InvokeMethod1_4]=Cond_1293_1_rec2_InvokeMethod_4, [Cond_886_1_rec0_InvokeMethod_5, Cond_886_1_rec0_InvokeMethod1_5]=Cond_886_1_rec0_InvokeMethod_5, [Cond_1257_1_rec3_InvokeMethod_5, Cond_1257_1_rec3_InvokeMethod1_5]=Cond_1257_1_rec3_InvokeMethod_5}


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


P rules:
1128_1_MAIN_INVOKEMETHOD(981_0_rec0_Return, x1, x3) → COND_1128_1_MAIN_INVOKEMETHOD(&&(&&(>(x3, -1), >(x3, +(x1, 1))), >(x1, -1)), 981_0_rec0_Return, x1, x3)
COND_1128_1_MAIN_INVOKEMETHOD(TRUE, 981_0_rec0_Return, x1, x3) → 1128_1_MAIN_INVOKEMETHOD(1128_0_rec0_Load(x3), +(x1, 1), x3)
R rules:
1128_0_rec0_Load(x1) → 828_0_rec0_GT(0, x1)
828_0_rec0_GT(x0, x1) → Cond_828_0_rec0_GT(<(x1, x0), x0, x1)
Cond_828_0_rec0_GT(TRUE, x0, x1) → 981_0_rec0_Return
828_0_rec0_GT(x0, x1) → Cond_828_0_rec0_GT1(>=(x1, x0), x0, x1, x2)
Cond_828_0_rec0_GT1(TRUE, x0, x1, x2) → 886_1_rec0_InvokeMethod(1188_0_rec1_GT(0, x2), x1, x0)
1188_0_rec1_GT(x0, x1) → Cond_828_0_rec0_GT(<(x1, x0), x0, x1)
1188_0_rec1_GT(x0, x1) → Cond_1188_0_rec1_GT1(&&(>=(x1, x0), >(x0, -1)), x0, x1, x2)
Cond_1188_0_rec1_GT1(TRUE, x0, x1, x2) → 1225_1_rec1_InvokeMethod(1238_0_rec2_LT(x2), x1, x0)
1238_0_rec2_LT(x0) → Cond_1238_0_rec2_LT(<(x0, 0), x0)
Cond_1238_0_rec2_LT(TRUE, x0) → 981_0_rec0_Return
1238_0_rec2_LT(x0) → Cond_1238_0_rec2_LT1(>(x0, -1), x0, x3)
Cond_1238_0_rec2_LT1(TRUE, x0, x3) → 1293_1_rec2_InvokeMethod(1198_0_rec3_GT(0, x3), x0)
1198_0_rec3_GT(x0, x1) → Cond_828_0_rec0_GT(<(x1, x0), x0, x1)
1198_0_rec3_GT(x0, x1) → Cond_1198_0_rec3_GT1(&&(>=(x1, x0), >(x0, -1)), x0, x1, x2)
Cond_1198_0_rec3_GT1(TRUE, x0, x1, x2) → 1257_1_rec3_InvokeMethod(971_0_rec4_LT(x2), x0, x1)
971_0_rec4_LT(x0) → Cond_1238_0_rec2_LT(<(x0, 0), x0)
971_0_rec4_LT(x0) → Cond_971_0_rec4_LT1(>(x0, -1), x0, x3)
Cond_971_0_rec4_LT1(TRUE, x0, x3) → 1017_1_rec4_InvokeMethod(971_0_rec4_LT(x3))
1017_1_rec4_InvokeMethod(981_0_rec0_Return) → 981_0_rec0_Return
886_1_rec0_InvokeMethod(981_0_rec0_Return, x1, x0) → Cond_886_1_rec0_InvokeMethod(>(x0, -1), 981_0_rec0_Return, x1, x0, x3)
Cond_886_1_rec0_InvokeMethod(TRUE, 981_0_rec0_Return, x1, x0, x3) → 951_1_rec0_InvokeMethod(828_0_rec0_GT(x3, x1))
1225_1_rec1_InvokeMethod(981_0_rec0_Return, x1, x0) → Cond_1225_1_rec1_InvokeMethod(>(x0, -1), 981_0_rec0_Return, x1, x0, x3)
Cond_1225_1_rec1_InvokeMethod(TRUE, 981_0_rec0_Return, x1, x0, x3) → 1357_1_rec1_InvokeMethod(1188_0_rec1_GT(x3, x1))
1357_1_rec1_InvokeMethod(981_0_rec0_Return) → 981_0_rec0_Return
1293_1_rec2_InvokeMethod(981_0_rec0_Return, x0) → Cond_1293_1_rec2_InvokeMethod(>(x0, -1), 981_0_rec0_Return, x0, x3)
Cond_1293_1_rec2_InvokeMethod(TRUE, 981_0_rec0_Return, x0, x3) → 1324_1_rec2_InvokeMethod(1238_0_rec2_LT(x3))
1324_1_rec2_InvokeMethod(981_0_rec0_Return) → 981_0_rec0_Return
1257_1_rec3_InvokeMethod(981_0_rec0_Return, x0, x1) → Cond_1257_1_rec3_InvokeMethod(>(x0, -1), 981_0_rec0_Return, x0, x1, x2)
Cond_1257_1_rec3_InvokeMethod(TRUE, 981_0_rec0_Return, x0, x1, x2) → 1295_1_rec3_InvokeMethod(1198_0_rec3_GT(x2, x1))
1295_1_rec3_InvokeMethod(981_0_rec0_Return) → 981_0_rec0_Return
951_1_rec0_InvokeMethod(981_0_rec0_Return) → 981_0_rec0_Return

(50) 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:
1128_0_rec0_Load(x1) → 828_0_rec0_GT(0, x1)
828_0_rec0_GT(x0, x1) → Cond_828_0_rec0_GT(x1 < x0, x0, x1)
Cond_828_0_rec0_GT(TRUE, x0, x1) → 981_0_rec0_Return
828_0_rec0_GT(x0, x1) → Cond_828_0_rec0_GT1(x1 >= x0, x0, x1, x2)
Cond_828_0_rec0_GT1(TRUE, x0, x1, x2) → 886_1_rec0_InvokeMethod(1188_0_rec1_GT(0, x2), x1, x0)
1188_0_rec1_GT(x0, x1) → Cond_828_0_rec0_GT(x1 < x0, x0, x1)
1188_0_rec1_GT(x0, x1) → Cond_1188_0_rec1_GT1(x1 >= x0 && x0 > -1, x0, x1, x2)
Cond_1188_0_rec1_GT1(TRUE, x0, x1, x2) → 1225_1_rec1_InvokeMethod(1238_0_rec2_LT(x2), x1, x0)
1238_0_rec2_LT(x0) → Cond_1238_0_rec2_LT(x0 < 0, x0)
Cond_1238_0_rec2_LT(TRUE, x0) → 981_0_rec0_Return
1238_0_rec2_LT(x0) → Cond_1238_0_rec2_LT1(x0 > -1, x0, x3)
Cond_1238_0_rec2_LT1(TRUE, x0, x3) → 1293_1_rec2_InvokeMethod(1198_0_rec3_GT(0, x3), x0)
1198_0_rec3_GT(x0, x1) → Cond_828_0_rec0_GT(x1 < x0, x0, x1)
1198_0_rec3_GT(x0, x1) → Cond_1198_0_rec3_GT1(x1 >= x0 && x0 > -1, x0, x1, x2)
Cond_1198_0_rec3_GT1(TRUE, x0, x1, x2) → 1257_1_rec3_InvokeMethod(971_0_rec4_LT(x2), x0, x1)
971_0_rec4_LT(x0) → Cond_1238_0_rec2_LT(x0 < 0, x0)
971_0_rec4_LT(x0) → Cond_971_0_rec4_LT1(x0 > -1, x0, x3)
Cond_971_0_rec4_LT1(TRUE, x0, x3) → 1017_1_rec4_InvokeMethod(971_0_rec4_LT(x3))
1017_1_rec4_InvokeMethod(981_0_rec0_Return) → 981_0_rec0_Return
886_1_rec0_InvokeMethod(981_0_rec0_Return, x1, x0) → Cond_886_1_rec0_InvokeMethod(x0 > -1, 981_0_rec0_Return, x1, x0, x3)
Cond_886_1_rec0_InvokeMethod(TRUE, 981_0_rec0_Return, x1, x0, x3) → 951_1_rec0_InvokeMethod(828_0_rec0_GT(x3, x1))
1225_1_rec1_InvokeMethod(981_0_rec0_Return, x1, x0) → Cond_1225_1_rec1_InvokeMethod(x0 > -1, 981_0_rec0_Return, x1, x0, x3)
Cond_1225_1_rec1_InvokeMethod(TRUE, 981_0_rec0_Return, x1, x0, x3) → 1357_1_rec1_InvokeMethod(1188_0_rec1_GT(x3, x1))
1357_1_rec1_InvokeMethod(981_0_rec0_Return) → 981_0_rec0_Return
1293_1_rec2_InvokeMethod(981_0_rec0_Return, x0) → Cond_1293_1_rec2_InvokeMethod(x0 > -1, 981_0_rec0_Return, x0, x3)
Cond_1293_1_rec2_InvokeMethod(TRUE, 981_0_rec0_Return, x0, x3) → 1324_1_rec2_InvokeMethod(1238_0_rec2_LT(x3))
1324_1_rec2_InvokeMethod(981_0_rec0_Return) → 981_0_rec0_Return
1257_1_rec3_InvokeMethod(981_0_rec0_Return, x0, x1) → Cond_1257_1_rec3_InvokeMethod(x0 > -1, 981_0_rec0_Return, x0, x1, x2)
Cond_1257_1_rec3_InvokeMethod(TRUE, 981_0_rec0_Return, x0, x1, x2) → 1295_1_rec3_InvokeMethod(1198_0_rec3_GT(x2, x1))
1295_1_rec3_InvokeMethod(981_0_rec0_Return) → 981_0_rec0_Return
951_1_rec0_InvokeMethod(981_0_rec0_Return) → 981_0_rec0_Return

The integer pair graph contains the following rules and edges:
(0): 1128_1_MAIN_INVOKEMETHOD(981_0_rec0_Return, x1[0], x3[0]) → COND_1128_1_MAIN_INVOKEMETHOD(x3[0] > -1 && x3[0] > x1[0] + 1 && x1[0] > -1, 981_0_rec0_Return, x1[0], x3[0])
(1): COND_1128_1_MAIN_INVOKEMETHOD(TRUE, 981_0_rec0_Return, x1[1], x3[1]) → 1128_1_MAIN_INVOKEMETHOD(1128_0_rec0_Load(x3[1]), x1[1] + 1, x3[1])

(0) -> (1), if (x3[0] > -1 && x3[0] > x1[0] + 1 && x1[0] > -1x1[0]* x1[1]x3[0]* x3[1])


(1) -> (0), if (1128_0_rec0_Load(x3[1]) →* 981_0_rec0_Returnx1[1] + 1* x1[0]x3[1]* x3[0])



The set Q consists of the following terms:
1128_0_rec0_Load(x0)
828_0_rec0_GT(x0, x1)
Cond_828_0_rec0_GT(TRUE, x0, x1)
Cond_828_0_rec0_GT1(TRUE, x0, x1, x2)
1188_0_rec1_GT(x0, x1)
Cond_1188_0_rec1_GT1(TRUE, x0, x1, x2)
1238_0_rec2_LT(x0)
Cond_1238_0_rec2_LT(TRUE, x0)
Cond_1238_0_rec2_LT1(TRUE, x0, x1)
1198_0_rec3_GT(x0, x1)
Cond_1198_0_rec3_GT1(TRUE, x0, x1, x2)
971_0_rec4_LT(x0)
Cond_971_0_rec4_LT1(TRUE, x0, x1)
1017_1_rec4_InvokeMethod(981_0_rec0_Return)
886_1_rec0_InvokeMethod(981_0_rec0_Return, x0, x1)
Cond_886_1_rec0_InvokeMethod(TRUE, 981_0_rec0_Return, x0, x1, x2)
1225_1_rec1_InvokeMethod(981_0_rec0_Return, x0, x1)
Cond_1225_1_rec1_InvokeMethod(TRUE, 981_0_rec0_Return, x0, x1, x2)
1357_1_rec1_InvokeMethod(981_0_rec0_Return)
1293_1_rec2_InvokeMethod(981_0_rec0_Return, x0)
Cond_1293_1_rec2_InvokeMethod(TRUE, 981_0_rec0_Return, x0, x1)
1324_1_rec2_InvokeMethod(981_0_rec0_Return)
1257_1_rec3_InvokeMethod(981_0_rec0_Return, x0, x1)
Cond_1257_1_rec3_InvokeMethod(TRUE, 981_0_rec0_Return, x0, x1, x2)
1295_1_rec3_InvokeMethod(981_0_rec0_Return)
951_1_rec0_InvokeMethod(981_0_rec0_Return)

(51) 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@46ef0a4f 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 1128_1_MAIN_INVOKEMETHOD(981_0_rec0_Return, x1, x3) → COND_1128_1_MAIN_INVOKEMETHOD(&&(&&(>(x3, -1), >(x3, +(x1, 1))), >(x1, -1)), 981_0_rec0_Return, x1, x3) the following chains were created:
  • We consider the chain 1128_1_MAIN_INVOKEMETHOD(981_0_rec0_Return, x1[0], x3[0]) → COND_1128_1_MAIN_INVOKEMETHOD(&&(&&(>(x3[0], -1), >(x3[0], +(x1[0], 1))), >(x1[0], -1)), 981_0_rec0_Return, x1[0], x3[0]), COND_1128_1_MAIN_INVOKEMETHOD(TRUE, 981_0_rec0_Return, x1[1], x3[1]) → 1128_1_MAIN_INVOKEMETHOD(1128_0_rec0_Load(x3[1]), +(x1[1], 1), x3[1]) which results in the following constraint:

    (1)    (&&(&&(>(x3[0], -1), >(x3[0], +(x1[0], 1))), >(x1[0], -1))=TRUEx1[0]=x1[1]x3[0]=x3[1]1128_1_MAIN_INVOKEMETHOD(981_0_rec0_Return, x1[0], x3[0])≥NonInfC∧1128_1_MAIN_INVOKEMETHOD(981_0_rec0_Return, x1[0], x3[0])≥COND_1128_1_MAIN_INVOKEMETHOD(&&(&&(>(x3[0], -1), >(x3[0], +(x1[0], 1))), >(x1[0], -1)), 981_0_rec0_Return, x1[0], x3[0])∧(UIncreasing(COND_1128_1_MAIN_INVOKEMETHOD(&&(&&(>(x3[0], -1), >(x3[0], +(x1[0], 1))), >(x1[0], -1)), 981_0_rec0_Return, x1[0], x3[0])), ≥))



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

    (2)    (>(x1[0], -1)=TRUE>(x3[0], -1)=TRUE>(x3[0], +(x1[0], 1))=TRUE1128_1_MAIN_INVOKEMETHOD(981_0_rec0_Return, x1[0], x3[0])≥NonInfC∧1128_1_MAIN_INVOKEMETHOD(981_0_rec0_Return, x1[0], x3[0])≥COND_1128_1_MAIN_INVOKEMETHOD(&&(&&(>(x3[0], -1), >(x3[0], +(x1[0], 1))), >(x1[0], -1)), 981_0_rec0_Return, x1[0], x3[0])∧(UIncreasing(COND_1128_1_MAIN_INVOKEMETHOD(&&(&&(>(x3[0], -1), >(x3[0], +(x1[0], 1))), >(x1[0], -1)), 981_0_rec0_Return, x1[0], x3[0])), ≥))



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

    (3)    (x1[0] ≥ 0∧x3[0] ≥ 0∧x3[0] + [-2] + [-1]x1[0] ≥ 0 ⇒ (UIncreasing(COND_1128_1_MAIN_INVOKEMETHOD(&&(&&(>(x3[0], -1), >(x3[0], +(x1[0], 1))), >(x1[0], -1)), 981_0_rec0_Return, x1[0], x3[0])), ≥)∧[(-1)bni_40 + (-1)Bound*bni_40] + [bni_40]x3[0] + [(-1)bni_40]x1[0] ≥ 0∧[(-1)bso_41] ≥ 0)



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

    (4)    (x1[0] ≥ 0∧x3[0] ≥ 0∧x3[0] + [-2] + [-1]x1[0] ≥ 0 ⇒ (UIncreasing(COND_1128_1_MAIN_INVOKEMETHOD(&&(&&(>(x3[0], -1), >(x3[0], +(x1[0], 1))), >(x1[0], -1)), 981_0_rec0_Return, x1[0], x3[0])), ≥)∧[(-1)bni_40 + (-1)Bound*bni_40] + [bni_40]x3[0] + [(-1)bni_40]x1[0] ≥ 0∧[(-1)bso_41] ≥ 0)



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

    (5)    (x1[0] ≥ 0∧x3[0] ≥ 0∧x3[0] + [-2] + [-1]x1[0] ≥ 0 ⇒ (UIncreasing(COND_1128_1_MAIN_INVOKEMETHOD(&&(&&(>(x3[0], -1), >(x3[0], +(x1[0], 1))), >(x1[0], -1)), 981_0_rec0_Return, x1[0], x3[0])), ≥)∧[(-1)bni_40 + (-1)Bound*bni_40] + [bni_40]x3[0] + [(-1)bni_40]x1[0] ≥ 0∧[(-1)bso_41] ≥ 0)



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

    (6)    (x1[0] ≥ 0∧[2] + x1[0] + x3[0] ≥ 0∧x3[0] ≥ 0 ⇒ (UIncreasing(COND_1128_1_MAIN_INVOKEMETHOD(&&(&&(>(x3[0], -1), >(x3[0], +(x1[0], 1))), >(x1[0], -1)), 981_0_rec0_Return, x1[0], x3[0])), ≥)∧[bni_40 + (-1)Bound*bni_40] + [bni_40]x3[0] ≥ 0∧[(-1)bso_41] ≥ 0)







For Pair COND_1128_1_MAIN_INVOKEMETHOD(TRUE, 981_0_rec0_Return, x1, x3) → 1128_1_MAIN_INVOKEMETHOD(1128_0_rec0_Load(x3), +(x1, 1), x3) the following chains were created:
  • We consider the chain COND_1128_1_MAIN_INVOKEMETHOD(TRUE, 981_0_rec0_Return, x1[1], x3[1]) → 1128_1_MAIN_INVOKEMETHOD(1128_0_rec0_Load(x3[1]), +(x1[1], 1), x3[1]) which results in the following constraint:

    (7)    (COND_1128_1_MAIN_INVOKEMETHOD(TRUE, 981_0_rec0_Return, x1[1], x3[1])≥NonInfC∧COND_1128_1_MAIN_INVOKEMETHOD(TRUE, 981_0_rec0_Return, x1[1], x3[1])≥1128_1_MAIN_INVOKEMETHOD(1128_0_rec0_Load(x3[1]), +(x1[1], 1), x3[1])∧(UIncreasing(1128_1_MAIN_INVOKEMETHOD(1128_0_rec0_Load(x3[1]), +(x1[1], 1), x3[1])), ≥))



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

    (8)    ((UIncreasing(1128_1_MAIN_INVOKEMETHOD(1128_0_rec0_Load(x3[1]), +(x1[1], 1), x3[1])), ≥)∧[bni_42] = 0∧[1 + (-1)bso_43] ≥ 0)



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

    (9)    ((UIncreasing(1128_1_MAIN_INVOKEMETHOD(1128_0_rec0_Load(x3[1]), +(x1[1], 1), x3[1])), ≥)∧[bni_42] = 0∧[1 + (-1)bso_43] ≥ 0)



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

    (10)    ((UIncreasing(1128_1_MAIN_INVOKEMETHOD(1128_0_rec0_Load(x3[1]), +(x1[1], 1), x3[1])), ≥)∧[bni_42] = 0∧[1 + (-1)bso_43] ≥ 0)



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

    (11)    ((UIncreasing(1128_1_MAIN_INVOKEMETHOD(1128_0_rec0_Load(x3[1]), +(x1[1], 1), x3[1])), ≥)∧[bni_42] = 0∧0 = 0∧0 = 0∧[1 + (-1)bso_43] ≥ 0)







To summarize, we get the following constraints P for the following pairs.
  • 1128_1_MAIN_INVOKEMETHOD(981_0_rec0_Return, x1, x3) → COND_1128_1_MAIN_INVOKEMETHOD(&&(&&(>(x3, -1), >(x3, +(x1, 1))), >(x1, -1)), 981_0_rec0_Return, x1, x3)
    • (x1[0] ≥ 0∧[2] + x1[0] + x3[0] ≥ 0∧x3[0] ≥ 0 ⇒ (UIncreasing(COND_1128_1_MAIN_INVOKEMETHOD(&&(&&(>(x3[0], -1), >(x3[0], +(x1[0], 1))), >(x1[0], -1)), 981_0_rec0_Return, x1[0], x3[0])), ≥)∧[bni_40 + (-1)Bound*bni_40] + [bni_40]x3[0] ≥ 0∧[(-1)bso_41] ≥ 0)

  • COND_1128_1_MAIN_INVOKEMETHOD(TRUE, 981_0_rec0_Return, x1, x3) → 1128_1_MAIN_INVOKEMETHOD(1128_0_rec0_Load(x3), +(x1, 1), x3)
    • ((UIncreasing(1128_1_MAIN_INVOKEMETHOD(1128_0_rec0_Load(x3[1]), +(x1[1], 1), x3[1])), ≥)∧[bni_42] = 0∧0 = 0∧0 = 0∧[1 + (-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(1128_0_rec0_Load(x1)) = [-1]   
POL(828_0_rec0_GT(x1, x2)) = [-1]   
POL(0) = 0   
POL(Cond_828_0_rec0_GT(x1, x2, x3)) = [-1]   
POL(<(x1, x2)) = [-1]   
POL(981_0_rec0_Return) = [-1]   
POL(Cond_828_0_rec0_GT1(x1, x2, x3, x4)) = [-1]   
POL(>=(x1, x2)) = [-1]   
POL(886_1_rec0_InvokeMethod(x1, x2, x3)) = [-1]   
POL(1188_0_rec1_GT(x1, x2)) = [-1]   
POL(Cond_1188_0_rec1_GT1(x1, x2, x3, x4)) = [-1]   
POL(&&(x1, x2)) = [-1]   
POL(>(x1, x2)) = [-1]   
POL(-1) = [-1]   
POL(1225_1_rec1_InvokeMethod(x1, x2, x3)) = [-1]   
POL(1238_0_rec2_LT(x1)) = [-1] + [-1]x1   
POL(Cond_1238_0_rec2_LT(x1, x2)) = [-1] + [-1]x2   
POL(Cond_1238_0_rec2_LT1(x1, x2, x3)) = [-1]x2   
POL(1293_1_rec2_InvokeMethod(x1, x2)) = [-1]x2   
POL(1198_0_rec3_GT(x1, x2)) = [-1]   
POL(Cond_1198_0_rec3_GT1(x1, x2, x3, x4)) = [-1]   
POL(1257_1_rec3_InvokeMethod(x1, x2, x3)) = [-1]   
POL(971_0_rec4_LT(x1)) = [-1] + [-1]x1   
POL(Cond_971_0_rec4_LT1(x1, x2, x3)) = [-1] + [-1]x2   
POL(1017_1_rec4_InvokeMethod(x1)) = [-1]   
POL(Cond_886_1_rec0_InvokeMethod(x1, x2, x3, x4, x5)) = [-1]   
POL(951_1_rec0_InvokeMethod(x1)) = x1   
POL(Cond_1225_1_rec1_InvokeMethod(x1, x2, x3, x4, x5)) = [-1]   
POL(1357_1_rec1_InvokeMethod(x1)) = [-1] + [2]x1   
POL(Cond_1293_1_rec2_InvokeMethod(x1, x2, x3, x4)) = [-1] + [-1]x3   
POL(1324_1_rec2_InvokeMethod(x1)) = [2]   
POL(Cond_1257_1_rec3_InvokeMethod(x1, x2, x3, x4, x5)) = [2]   
POL(1295_1_rec3_InvokeMethod(x1)) = [-1] + [2]x1   
POL(1128_1_MAIN_INVOKEMETHOD(x1, x2, x3)) = x3 + [-1]x2 + x1   
POL(COND_1128_1_MAIN_INVOKEMETHOD(x1, x2, x3, x4)) = [-1] + x4 + [-1]x3   
POL(+(x1, x2)) = x1 + x2   
POL(1) = [1]   

The following pairs are in P>:

COND_1128_1_MAIN_INVOKEMETHOD(TRUE, 981_0_rec0_Return, x1[1], x3[1]) → 1128_1_MAIN_INVOKEMETHOD(1128_0_rec0_Load(x3[1]), +(x1[1], 1), x3[1])

The following pairs are in Pbound:

1128_1_MAIN_INVOKEMETHOD(981_0_rec0_Return, x1[0], x3[0]) → COND_1128_1_MAIN_INVOKEMETHOD(&&(&&(>(x3[0], -1), >(x3[0], +(x1[0], 1))), >(x1[0], -1)), 981_0_rec0_Return, x1[0], x3[0])

The following pairs are in P:

1128_1_MAIN_INVOKEMETHOD(981_0_rec0_Return, x1[0], x3[0]) → COND_1128_1_MAIN_INVOKEMETHOD(&&(&&(>(x3[0], -1), >(x3[0], +(x1[0], 1))), >(x1[0], -1)), 981_0_rec0_Return, x1[0], x3[0])

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

1128_0_rec0_Load(x1)1828_0_rec0_GT(0, x1)1
828_0_rec0_GT(x0, x1)1Cond_828_0_rec0_GT(<(x1, x0), x0, x1)1
828_0_rec0_GT(x0, x1)1Cond_828_0_rec0_GT1(>=(x1, x0), x0, x1, x2)1
Cond_828_0_rec0_GT1(TRUE, x0, x1, x2)1886_1_rec0_InvokeMethod(1188_0_rec1_GT(0, x2), x1, x0)1
886_1_rec0_InvokeMethod(981_0_rec0_Return, x1, x0)1Cond_886_1_rec0_InvokeMethod(>(x0, -1), 981_0_rec0_Return, x1, x0, x3)1
Cond_886_1_rec0_InvokeMethod(TRUE, 981_0_rec0_Return, x1, x0, x3)1951_1_rec0_InvokeMethod(828_0_rec0_GT(x3, x1))1
951_1_rec0_InvokeMethod(981_0_rec0_Return)1981_0_rec0_Return1
Cond_828_0_rec0_GT(TRUE, x0, x1)1981_0_rec0_Return1

(52) Complex Obligation (AND)

(53) 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:
1128_0_rec0_Load(x1) → 828_0_rec0_GT(0, x1)
828_0_rec0_GT(x0, x1) → Cond_828_0_rec0_GT(x1 < x0, x0, x1)
Cond_828_0_rec0_GT(TRUE, x0, x1) → 981_0_rec0_Return
828_0_rec0_GT(x0, x1) → Cond_828_0_rec0_GT1(x1 >= x0, x0, x1, x2)
Cond_828_0_rec0_GT1(TRUE, x0, x1, x2) → 886_1_rec0_InvokeMethod(1188_0_rec1_GT(0, x2), x1, x0)
1188_0_rec1_GT(x0, x1) → Cond_828_0_rec0_GT(x1 < x0, x0, x1)
1188_0_rec1_GT(x0, x1) → Cond_1188_0_rec1_GT1(x1 >= x0 && x0 > -1, x0, x1, x2)
Cond_1188_0_rec1_GT1(TRUE, x0, x1, x2) → 1225_1_rec1_InvokeMethod(1238_0_rec2_LT(x2), x1, x0)
1238_0_rec2_LT(x0) → Cond_1238_0_rec2_LT(x0 < 0, x0)
Cond_1238_0_rec2_LT(TRUE, x0) → 981_0_rec0_Return
1238_0_rec2_LT(x0) → Cond_1238_0_rec2_LT1(x0 > -1, x0, x3)
Cond_1238_0_rec2_LT1(TRUE, x0, x3) → 1293_1_rec2_InvokeMethod(1198_0_rec3_GT(0, x3), x0)
1198_0_rec3_GT(x0, x1) → Cond_828_0_rec0_GT(x1 < x0, x0, x1)
1198_0_rec3_GT(x0, x1) → Cond_1198_0_rec3_GT1(x1 >= x0 && x0 > -1, x0, x1, x2)
Cond_1198_0_rec3_GT1(TRUE, x0, x1, x2) → 1257_1_rec3_InvokeMethod(971_0_rec4_LT(x2), x0, x1)
971_0_rec4_LT(x0) → Cond_1238_0_rec2_LT(x0 < 0, x0)
971_0_rec4_LT(x0) → Cond_971_0_rec4_LT1(x0 > -1, x0, x3)
Cond_971_0_rec4_LT1(TRUE, x0, x3) → 1017_1_rec4_InvokeMethod(971_0_rec4_LT(x3))
1017_1_rec4_InvokeMethod(981_0_rec0_Return) → 981_0_rec0_Return
886_1_rec0_InvokeMethod(981_0_rec0_Return, x1, x0) → Cond_886_1_rec0_InvokeMethod(x0 > -1, 981_0_rec0_Return, x1, x0, x3)
Cond_886_1_rec0_InvokeMethod(TRUE, 981_0_rec0_Return, x1, x0, x3) → 951_1_rec0_InvokeMethod(828_0_rec0_GT(x3, x1))
1225_1_rec1_InvokeMethod(981_0_rec0_Return, x1, x0) → Cond_1225_1_rec1_InvokeMethod(x0 > -1, 981_0_rec0_Return, x1, x0, x3)
Cond_1225_1_rec1_InvokeMethod(TRUE, 981_0_rec0_Return, x1, x0, x3) → 1357_1_rec1_InvokeMethod(1188_0_rec1_GT(x3, x1))
1357_1_rec1_InvokeMethod(981_0_rec0_Return) → 981_0_rec0_Return
1293_1_rec2_InvokeMethod(981_0_rec0_Return, x0) → Cond_1293_1_rec2_InvokeMethod(x0 > -1, 981_0_rec0_Return, x0, x3)
Cond_1293_1_rec2_InvokeMethod(TRUE, 981_0_rec0_Return, x0, x3) → 1324_1_rec2_InvokeMethod(1238_0_rec2_LT(x3))
1324_1_rec2_InvokeMethod(981_0_rec0_Return) → 981_0_rec0_Return
1257_1_rec3_InvokeMethod(981_0_rec0_Return, x0, x1) → Cond_1257_1_rec3_InvokeMethod(x0 > -1, 981_0_rec0_Return, x0, x1, x2)
Cond_1257_1_rec3_InvokeMethod(TRUE, 981_0_rec0_Return, x0, x1, x2) → 1295_1_rec3_InvokeMethod(1198_0_rec3_GT(x2, x1))
1295_1_rec3_InvokeMethod(981_0_rec0_Return) → 981_0_rec0_Return
951_1_rec0_InvokeMethod(981_0_rec0_Return) → 981_0_rec0_Return

The integer pair graph contains the following rules and edges:
(0): 1128_1_MAIN_INVOKEMETHOD(981_0_rec0_Return, x1[0], x3[0]) → COND_1128_1_MAIN_INVOKEMETHOD(x3[0] > -1 && x3[0] > x1[0] + 1 && x1[0] > -1, 981_0_rec0_Return, x1[0], x3[0])


The set Q consists of the following terms:
1128_0_rec0_Load(x0)
828_0_rec0_GT(x0, x1)
Cond_828_0_rec0_GT(TRUE, x0, x1)
Cond_828_0_rec0_GT1(TRUE, x0, x1, x2)
1188_0_rec1_GT(x0, x1)
Cond_1188_0_rec1_GT1(TRUE, x0, x1, x2)
1238_0_rec2_LT(x0)
Cond_1238_0_rec2_LT(TRUE, x0)
Cond_1238_0_rec2_LT1(TRUE, x0, x1)
1198_0_rec3_GT(x0, x1)
Cond_1198_0_rec3_GT1(TRUE, x0, x1, x2)
971_0_rec4_LT(x0)
Cond_971_0_rec4_LT1(TRUE, x0, x1)
1017_1_rec4_InvokeMethod(981_0_rec0_Return)
886_1_rec0_InvokeMethod(981_0_rec0_Return, x0, x1)
Cond_886_1_rec0_InvokeMethod(TRUE, 981_0_rec0_Return, x0, x1, x2)
1225_1_rec1_InvokeMethod(981_0_rec0_Return, x0, x1)
Cond_1225_1_rec1_InvokeMethod(TRUE, 981_0_rec0_Return, x0, x1, x2)
1357_1_rec1_InvokeMethod(981_0_rec0_Return)
1293_1_rec2_InvokeMethod(981_0_rec0_Return, x0)
Cond_1293_1_rec2_InvokeMethod(TRUE, 981_0_rec0_Return, x0, x1)
1324_1_rec2_InvokeMethod(981_0_rec0_Return)
1257_1_rec3_InvokeMethod(981_0_rec0_Return, x0, x1)
Cond_1257_1_rec3_InvokeMethod(TRUE, 981_0_rec0_Return, x0, x1, x2)
1295_1_rec3_InvokeMethod(981_0_rec0_Return)
951_1_rec0_InvokeMethod(981_0_rec0_Return)

(54) IDependencyGraphProof (EQUIVALENT transformation)

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

(55) TRUE

(56) 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:
1128_0_rec0_Load(x1) → 828_0_rec0_GT(0, x1)
828_0_rec0_GT(x0, x1) → Cond_828_0_rec0_GT(x1 < x0, x0, x1)
Cond_828_0_rec0_GT(TRUE, x0, x1) → 981_0_rec0_Return
828_0_rec0_GT(x0, x1) → Cond_828_0_rec0_GT1(x1 >= x0, x0, x1, x2)
Cond_828_0_rec0_GT1(TRUE, x0, x1, x2) → 886_1_rec0_InvokeMethod(1188_0_rec1_GT(0, x2), x1, x0)
1188_0_rec1_GT(x0, x1) → Cond_828_0_rec0_GT(x1 < x0, x0, x1)
1188_0_rec1_GT(x0, x1) → Cond_1188_0_rec1_GT1(x1 >= x0 && x0 > -1, x0, x1, x2)
Cond_1188_0_rec1_GT1(TRUE, x0, x1, x2) → 1225_1_rec1_InvokeMethod(1238_0_rec2_LT(x2), x1, x0)
1238_0_rec2_LT(x0) → Cond_1238_0_rec2_LT(x0 < 0, x0)
Cond_1238_0_rec2_LT(TRUE, x0) → 981_0_rec0_Return
1238_0_rec2_LT(x0) → Cond_1238_0_rec2_LT1(x0 > -1, x0, x3)
Cond_1238_0_rec2_LT1(TRUE, x0, x3) → 1293_1_rec2_InvokeMethod(1198_0_rec3_GT(0, x3), x0)
1198_0_rec3_GT(x0, x1) → Cond_828_0_rec0_GT(x1 < x0, x0, x1)
1198_0_rec3_GT(x0, x1) → Cond_1198_0_rec3_GT1(x1 >= x0 && x0 > -1, x0, x1, x2)
Cond_1198_0_rec3_GT1(TRUE, x0, x1, x2) → 1257_1_rec3_InvokeMethod(971_0_rec4_LT(x2), x0, x1)
971_0_rec4_LT(x0) → Cond_1238_0_rec2_LT(x0 < 0, x0)
971_0_rec4_LT(x0) → Cond_971_0_rec4_LT1(x0 > -1, x0, x3)
Cond_971_0_rec4_LT1(TRUE, x0, x3) → 1017_1_rec4_InvokeMethod(971_0_rec4_LT(x3))
1017_1_rec4_InvokeMethod(981_0_rec0_Return) → 981_0_rec0_Return
886_1_rec0_InvokeMethod(981_0_rec0_Return, x1, x0) → Cond_886_1_rec0_InvokeMethod(x0 > -1, 981_0_rec0_Return, x1, x0, x3)
Cond_886_1_rec0_InvokeMethod(TRUE, 981_0_rec0_Return, x1, x0, x3) → 951_1_rec0_InvokeMethod(828_0_rec0_GT(x3, x1))
1225_1_rec1_InvokeMethod(981_0_rec0_Return, x1, x0) → Cond_1225_1_rec1_InvokeMethod(x0 > -1, 981_0_rec0_Return, x1, x0, x3)
Cond_1225_1_rec1_InvokeMethod(TRUE, 981_0_rec0_Return, x1, x0, x3) → 1357_1_rec1_InvokeMethod(1188_0_rec1_GT(x3, x1))
1357_1_rec1_InvokeMethod(981_0_rec0_Return) → 981_0_rec0_Return
1293_1_rec2_InvokeMethod(981_0_rec0_Return, x0) → Cond_1293_1_rec2_InvokeMethod(x0 > -1, 981_0_rec0_Return, x0, x3)
Cond_1293_1_rec2_InvokeMethod(TRUE, 981_0_rec0_Return, x0, x3) → 1324_1_rec2_InvokeMethod(1238_0_rec2_LT(x3))
1324_1_rec2_InvokeMethod(981_0_rec0_Return) → 981_0_rec0_Return
1257_1_rec3_InvokeMethod(981_0_rec0_Return, x0, x1) → Cond_1257_1_rec3_InvokeMethod(x0 > -1, 981_0_rec0_Return, x0, x1, x2)
Cond_1257_1_rec3_InvokeMethod(TRUE, 981_0_rec0_Return, x0, x1, x2) → 1295_1_rec3_InvokeMethod(1198_0_rec3_GT(x2, x1))
1295_1_rec3_InvokeMethod(981_0_rec0_Return) → 981_0_rec0_Return
951_1_rec0_InvokeMethod(981_0_rec0_Return) → 981_0_rec0_Return

The integer pair graph contains the following rules and edges:
(1): COND_1128_1_MAIN_INVOKEMETHOD(TRUE, 981_0_rec0_Return, x1[1], x3[1]) → 1128_1_MAIN_INVOKEMETHOD(1128_0_rec0_Load(x3[1]), x1[1] + 1, x3[1])


The set Q consists of the following terms:
1128_0_rec0_Load(x0)
828_0_rec0_GT(x0, x1)
Cond_828_0_rec0_GT(TRUE, x0, x1)
Cond_828_0_rec0_GT1(TRUE, x0, x1, x2)
1188_0_rec1_GT(x0, x1)
Cond_1188_0_rec1_GT1(TRUE, x0, x1, x2)
1238_0_rec2_LT(x0)
Cond_1238_0_rec2_LT(TRUE, x0)
Cond_1238_0_rec2_LT1(TRUE, x0, x1)
1198_0_rec3_GT(x0, x1)
Cond_1198_0_rec3_GT1(TRUE, x0, x1, x2)
971_0_rec4_LT(x0)
Cond_971_0_rec4_LT1(TRUE, x0, x1)
1017_1_rec4_InvokeMethod(981_0_rec0_Return)
886_1_rec0_InvokeMethod(981_0_rec0_Return, x0, x1)
Cond_886_1_rec0_InvokeMethod(TRUE, 981_0_rec0_Return, x0, x1, x2)
1225_1_rec1_InvokeMethod(981_0_rec0_Return, x0, x1)
Cond_1225_1_rec1_InvokeMethod(TRUE, 981_0_rec0_Return, x0, x1, x2)
1357_1_rec1_InvokeMethod(981_0_rec0_Return)
1293_1_rec2_InvokeMethod(981_0_rec0_Return, x0)
Cond_1293_1_rec2_InvokeMethod(TRUE, 981_0_rec0_Return, x0, x1)
1324_1_rec2_InvokeMethod(981_0_rec0_Return)
1257_1_rec3_InvokeMethod(981_0_rec0_Return, x0, x1)
Cond_1257_1_rec3_InvokeMethod(TRUE, 981_0_rec0_Return, x0, x1, x2)
1295_1_rec3_InvokeMethod(981_0_rec0_Return)
951_1_rec0_InvokeMethod(981_0_rec0_Return)

(57) IDependencyGraphProof (EQUIVALENT transformation)

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

(58) TRUE