(0) Obligation:

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

public static int power(int a, int n) {
if (n <= 0) return 1;
else if (n == 1) return a;
else {
int r = power(a * a, n/2);
if (n % 2 == 0) return r;
else return a * r;
}
}

public static boolean even(int n) {
if (n <= 0) return true;
else if (n == 1) return false;
else return odd(n - 1);
}

public static boolean odd(int n) {
if (n <= 0) return false;
else if (n == 1) return true;
else return even(n - 1);
}
}

(1) JBCToGraph (SOUND transformation)

Constructed TerminationGraph.

(2) Obligation:

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

Power.power(II)I: Graph of 46 nodes with 0 SCCs.

Power.even(I)Z: Graph of 28 nodes with 0 SCCs.

Power.odd(I)Z: Graph of 26 nodes with 0 SCCs.


(3) TerminationGraphToSCCProof (SOUND transformation)

Splitted TerminationGraph to 3 SCCss.

(4) Complex Obligation (AND)

(5) Obligation:

SCC of termination graph based on JBC Program.
SCC contains nodes from the following methods: Power.even(I)Z, Power.odd(I)Z
SCC calls the following helper methods: Power.even(I)Z, Power.odd(I)Z
Performed SCC analyses: UsedFieldsAnalysis

(6) SCCToIDPv1Proof (SOUND transformation)

Transformed FIGraph SCCs to IDPs. Log:

Generated 26 rules for P and 24 rules for R.


P rules:
1052_0_even_GT(EOS(STATIC_1052), i285, i285) → 1060_0_even_GT(EOS(STATIC_1060), i285, i285)
1060_0_even_GT(EOS(STATIC_1060), i285, i285) → 1067_0_even_Load(EOS(STATIC_1067), i285) | >(i285, 0)
1067_0_even_Load(EOS(STATIC_1067), i285) → 1075_0_even_ConstantStackPush(EOS(STATIC_1075), i285, i285)
1075_0_even_ConstantStackPush(EOS(STATIC_1075), i285, i285) → 1085_0_even_NE(EOS(STATIC_1085), i285, i285, 1)
1085_0_even_NE(EOS(STATIC_1085), i288, i288, matching1) → 1098_0_even_NE(EOS(STATIC_1098), i288, i288, 1) | =(matching1, 1)
1098_0_even_NE(EOS(STATIC_1098), i288, i288, matching1) → 1115_0_even_Load(EOS(STATIC_1115), i288) | &&(!(=(i288, 1)), =(matching1, 1))
1115_0_even_Load(EOS(STATIC_1115), i288) → 1126_0_even_ConstantStackPush(EOS(STATIC_1126), i288)
1126_0_even_ConstantStackPush(EOS(STATIC_1126), i288) → 1138_0_even_IntArithmetic(EOS(STATIC_1138), i288, 1)
1138_0_even_IntArithmetic(EOS(STATIC_1138), i288, matching1) → 1159_0_even_InvokeMethod(EOS(STATIC_1159), -(i288, 1)) | &&(>(i288, 0), =(matching1, 1))
1159_0_even_InvokeMethod(EOS(STATIC_1159), i305) → 1178_1_even_InvokeMethod(1178_0_odd_Load(EOS(STATIC_1178), i305), i305)
1178_0_odd_Load(EOS(STATIC_1178), i305) → 1190_0_odd_Load(EOS(STATIC_1190), i305)
1190_0_odd_Load(EOS(STATIC_1190), i305) → 1476_0_odd_Load(EOS(STATIC_1476), i305)
1476_0_odd_Load(EOS(STATIC_1476), i447) → 1484_0_odd_GT(EOS(STATIC_1484), i447, i447)
1484_0_odd_GT(EOS(STATIC_1484), i458, i458) → 1501_0_odd_GT(EOS(STATIC_1501), i458, i458)
1501_0_odd_GT(EOS(STATIC_1501), i458, i458) → 1511_0_odd_Load(EOS(STATIC_1511), i458) | >(i458, 0)
1511_0_odd_Load(EOS(STATIC_1511), i458) → 1522_0_odd_ConstantStackPush(EOS(STATIC_1522), i458, i458)
1522_0_odd_ConstantStackPush(EOS(STATIC_1522), i458, i458) → 1532_0_odd_NE(EOS(STATIC_1532), i458, i458, 1)
1532_0_odd_NE(EOS(STATIC_1532), i479, i479, matching1) → 1544_0_odd_NE(EOS(STATIC_1544), i479, i479, 1) | =(matching1, 1)
1544_0_odd_NE(EOS(STATIC_1544), i479, i479, matching1) → 1556_0_odd_Load(EOS(STATIC_1556), i479) | &&(!(=(i479, 1)), =(matching1, 1))
1556_0_odd_Load(EOS(STATIC_1556), i479) → 1566_0_odd_ConstantStackPush(EOS(STATIC_1566), i479)
1566_0_odd_ConstantStackPush(EOS(STATIC_1566), i479) → 1576_0_odd_IntArithmetic(EOS(STATIC_1576), i479, 1)
1576_0_odd_IntArithmetic(EOS(STATIC_1576), i479, matching1) → 1588_0_odd_InvokeMethod(EOS(STATIC_1588), -(i479, 1)) | &&(>(i479, 0), =(matching1, 1))
1588_0_odd_InvokeMethod(EOS(STATIC_1588), i496) → 1604_1_odd_InvokeMethod(1604_0_even_Load(EOS(STATIC_1604), i496), i496)
1604_0_even_Load(EOS(STATIC_1604), i496) → 1607_0_even_Load(EOS(STATIC_1607), i496)
1607_0_even_Load(EOS(STATIC_1607), i496) → 1047_0_even_Load(EOS(STATIC_1047), i496)
1047_0_even_Load(EOS(STATIC_1047), i276) → 1052_0_even_GT(EOS(STATIC_1052), i276, i276)
R rules:
1052_0_even_GT(EOS(STATIC_1052), matching1, matching2) → 1059_0_even_GT(EOS(STATIC_1059), 0, 0) | &&(=(matching1, 0), =(matching2, 0))
1059_0_even_GT(EOS(STATIC_1059), matching1, matching2) → 1066_0_even_ConstantStackPush(EOS(STATIC_1066), 0) | &&(&&(<=(0, 0), =(matching1, 0)), =(matching2, 0))
1066_0_even_ConstantStackPush(EOS(STATIC_1066), matching1) → 1073_0_even_Return(EOS(STATIC_1073), 0) | =(matching1, 0)
1085_0_even_NE(EOS(STATIC_1085), matching1, matching2, matching3) → 1097_0_even_NE(EOS(STATIC_1097), 1, 1, 1) | &&(&&(=(matching1, 1), =(matching2, 1)), =(matching3, 1))
1097_0_even_NE(EOS(STATIC_1097), matching1, matching2, matching3) → 1113_0_even_ConstantStackPush(EOS(STATIC_1113), 1) | &&(&&(=(matching1, 1), =(matching2, 1)), =(matching3, 1))
1113_0_even_ConstantStackPush(EOS(STATIC_1113), matching1) → 1124_0_even_Return(EOS(STATIC_1124), 1, 0) | =(matching1, 1)
1178_1_even_InvokeMethod(1565_0_odd_Return(EOS(STATIC_1565), matching1, matching2), matching3) → 1603_0_odd_Return(EOS(STATIC_1603), 1, 1, 1) | &&(&&(=(matching1, 1), =(matching2, 1)), =(matching3, 1))
1178_1_even_InvokeMethod(1629_0_odd_Return(EOS(STATIC_1629), i335), i506) → 1638_0_odd_Return(EOS(STATIC_1638), i506, i335)
1247_0_odd_Return(EOS(STATIC_1247), matching1, matching2, matching3) → 1261_0_even_Return(EOS(STATIC_1261), 1) | &&(&&(=(matching1, 1), =(matching2, 1)), =(matching3, 1))
1253_0_odd_Return(EOS(STATIC_1253), i336, i335) → 1265_0_even_Return(EOS(STATIC_1265), i335)
1261_0_even_Return(EOS(STATIC_1261), matching1) → 1265_0_even_Return(EOS(STATIC_1265), 1) | =(matching1, 1)
1603_0_odd_Return(EOS(STATIC_1603), matching1, matching2, matching3) → 1247_0_odd_Return(EOS(STATIC_1247), 1, 1, 1) | &&(&&(=(matching1, 1), =(matching2, 1)), =(matching3, 1))
1638_0_odd_Return(EOS(STATIC_1638), i506, i335) → 1253_0_odd_Return(EOS(STATIC_1253), i506, i335)
1484_0_odd_GT(EOS(STATIC_1484), matching1, matching2) → 1500_0_odd_GT(EOS(STATIC_1500), 0, 0) | &&(=(matching1, 0), =(matching2, 0))
1500_0_odd_GT(EOS(STATIC_1500), matching1, matching2) → 1509_0_odd_ConstantStackPush(EOS(STATIC_1509), 0) | &&(&&(<=(0, 0), =(matching1, 0)), =(matching2, 0))
1509_0_odd_ConstantStackPush(EOS(STATIC_1509), matching1) → 1520_0_odd_Return(EOS(STATIC_1520), 0, 0) | =(matching1, 0)
1532_0_odd_NE(EOS(STATIC_1532), matching1, matching2, matching3) → 1543_0_odd_NE(EOS(STATIC_1543), 1, 1, 1) | &&(&&(=(matching1, 1), =(matching2, 1)), =(matching3, 1))
1543_0_odd_NE(EOS(STATIC_1543), matching1, matching2, matching3) → 1555_0_odd_ConstantStackPush(EOS(STATIC_1555), 1) | &&(&&(=(matching1, 1), =(matching2, 1)), =(matching3, 1))
1555_0_odd_ConstantStackPush(EOS(STATIC_1555), matching1) → 1565_0_odd_Return(EOS(STATIC_1565), 1, 1) | =(matching1, 1)
1604_1_odd_InvokeMethod(1124_0_even_Return(EOS(STATIC_1124), matching1, matching2), matching3) → 1621_0_even_Return(EOS(STATIC_1621), 1, 1, 0) | &&(&&(=(matching1, 1), =(matching2, 0)), =(matching3, 1))
1604_1_odd_InvokeMethod(1265_0_even_Return(EOS(STATIC_1265), i335), i504) → 1622_0_even_Return(EOS(STATIC_1622), i504, i335)
1621_0_even_Return(EOS(STATIC_1621), matching1, matching2, matching3) → 1627_0_odd_Return(EOS(STATIC_1627), 0) | &&(&&(=(matching1, 1), =(matching2, 1)), =(matching3, 0))
1622_0_even_Return(EOS(STATIC_1622), i504, i335) → 1629_0_odd_Return(EOS(STATIC_1629), i335)
1627_0_odd_Return(EOS(STATIC_1627), matching1) → 1629_0_odd_Return(EOS(STATIC_1629), 0) | =(matching1, 0)

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


P rules:
1052_0_even_GT(EOS(STATIC_1052), x0, x0) → 1178_1_even_InvokeMethod(1604_1_odd_InvokeMethod(1052_0_even_GT(EOS(STATIC_1052), -(-(x0, 1), 1), -(-(x0, 1), 1)), -(-(x0, 1), 1)), -(x0, 1)) | &&(>(x0, 1), !(=(-(x0, 1), 1)))
R rules:
1052_0_even_GT(EOS(STATIC_1052), 0, 0) → 1073_0_even_Return(EOS(STATIC_1073), 0)
1178_1_even_InvokeMethod(1565_0_odd_Return(EOS(STATIC_1565), 1, 1), 1) → 1265_0_even_Return(EOS(STATIC_1265), 1)
1178_1_even_InvokeMethod(1629_0_odd_Return(EOS(STATIC_1629), x0), x1) → 1265_0_even_Return(EOS(STATIC_1265), x0)
1604_1_odd_InvokeMethod(1265_0_even_Return(EOS(STATIC_1265), x0), x1) → 1629_0_odd_Return(EOS(STATIC_1629), x0)
1604_1_odd_InvokeMethod(1124_0_even_Return(EOS(STATIC_1124), 1, 0), 1) → 1629_0_odd_Return(EOS(STATIC_1629), 0)

Filtered ground terms:



1052_0_even_GT(x1, x2, x3) → 1052_0_even_GT(x2, x3)
Cond_1052_0_even_GT(x1, x2, x3, x4) → Cond_1052_0_even_GT(x1, x3, x4)
1629_0_odd_Return(x1, x2) → 1629_0_odd_Return(x2)
1124_0_even_Return(x1, x2, x3) → 1124_0_even_Return
1265_0_even_Return(x1, x2) → 1265_0_even_Return(x2)
1565_0_odd_Return(x1, x2, x3) → 1565_0_odd_Return
1073_0_even_Return(x1, x2) → 1073_0_even_Return

Filtered duplicate args:



1052_0_even_GT(x1, x2) → 1052_0_even_GT(x2)
Cond_1052_0_even_GT(x1, x2, x3) → Cond_1052_0_even_GT(x1, x3)

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


P rules:
1052_0_even_GT(x0) → 1178_1_even_InvokeMethod(1604_1_odd_InvokeMethod(1052_0_even_GT(-(-(x0, 1), 1)), -(-(x0, 1), 1)), -(x0, 1)) | &&(>(x0, 1), !(=(-(x0, 1), 1)))
R rules:
1052_0_even_GT(0) → 1073_0_even_Return
1178_1_even_InvokeMethod(1565_0_odd_Return, 1) → 1265_0_even_Return(1)
1178_1_even_InvokeMethod(1629_0_odd_Return(x0), x1) → 1265_0_even_Return(x0)
1604_1_odd_InvokeMethod(1265_0_even_Return(x0), x1) → 1629_0_odd_Return(x0)
1604_1_odd_InvokeMethod(1124_0_even_Return, 1) → 1629_0_odd_Return(0)

Performed bisimulation on rules. Used the following equivalence classes: {[1073_0_even_Return, 1565_0_odd_Return, 1124_0_even_Return]=1073_0_even_Return}


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


P rules:
1052_0_EVEN_GT(x0) → COND_1052_0_EVEN_GT(&&(>(x0, 1), !(=(-(x0, 1), 1))), x0)
COND_1052_0_EVEN_GT(TRUE, x0) → 1052_0_EVEN_GT(-(-(x0, 1), 1))
R rules:
1052_0_even_GT(0) → 1073_0_even_Return
1178_1_even_InvokeMethod(1073_0_even_Return, 1) → 1265_0_even_Return(1)
1178_1_even_InvokeMethod(1629_0_odd_Return(x0), x1) → 1265_0_even_Return(x0)
1604_1_odd_InvokeMethod(1265_0_even_Return(x0), x1) → 1629_0_odd_Return(x0)
1604_1_odd_InvokeMethod(1073_0_even_Return, 1) → 1629_0_odd_Return(0)

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

Boolean, Integer


The ITRS R consists of the following rules:
1052_0_even_GT(0) → 1073_0_even_Return
1178_1_even_InvokeMethod(1073_0_even_Return, 1) → 1265_0_even_Return(1)
1178_1_even_InvokeMethod(1629_0_odd_Return(x0), x1) → 1265_0_even_Return(x0)
1604_1_odd_InvokeMethod(1265_0_even_Return(x0), x1) → 1629_0_odd_Return(x0)
1604_1_odd_InvokeMethod(1073_0_even_Return, 1) → 1629_0_odd_Return(0)

The integer pair graph contains the following rules and edges:
(0): 1052_0_EVEN_GT(x0[0]) → COND_1052_0_EVEN_GT(x0[0] > 1 && !(x0[0] - 1 = 1), x0[0])
(1): COND_1052_0_EVEN_GT(TRUE, x0[1]) → 1052_0_EVEN_GT(x0[1] - 1 - 1)

(0) -> (1), if (x0[0] > 1 && !(x0[0] - 1 = 1) ∧x0[0]* x0[1])


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



The set Q consists of the following terms:
1052_0_even_GT(0)
1178_1_even_InvokeMethod(1073_0_even_Return, 1)
1178_1_even_InvokeMethod(1629_0_odd_Return(x0), x1)
1604_1_odd_InvokeMethod(1265_0_even_Return(x0), x1)
1604_1_odd_InvokeMethod(1073_0_even_Return, 1)

(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@715c057c 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 1052_0_EVEN_GT(x0) → COND_1052_0_EVEN_GT(&&(>(x0, 1), !(=(-(x0, 1), 1))), x0) the following chains were created:
  • We consider the chain 1052_0_EVEN_GT(x0[0]) → COND_1052_0_EVEN_GT(&&(>(x0[0], 1), !(=(-(x0[0], 1), 1))), x0[0]), COND_1052_0_EVEN_GT(TRUE, x0[1]) → 1052_0_EVEN_GT(-(-(x0[1], 1), 1)) which results in the following constraint:

    (1)    (&&(>(x0[0], 1), !(=(-(x0[0], 1), 1)))=TRUEx0[0]=x0[1]1052_0_EVEN_GT(x0[0])≥NonInfC∧1052_0_EVEN_GT(x0[0])≥COND_1052_0_EVEN_GT(&&(>(x0[0], 1), !(=(-(x0[0], 1), 1))), x0[0])∧(UIncreasing(COND_1052_0_EVEN_GT(&&(>(x0[0], 1), !(=(-(x0[0], 1), 1))), x0[0])), ≥))



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

    (2)    (>(x0[0], 1)=TRUE<(-(x0[0], 1), 1)=TRUE1052_0_EVEN_GT(x0[0])≥NonInfC∧1052_0_EVEN_GT(x0[0])≥COND_1052_0_EVEN_GT(&&(>(x0[0], 1), !(=(-(x0[0], 1), 1))), x0[0])∧(UIncreasing(COND_1052_0_EVEN_GT(&&(>(x0[0], 1), !(=(-(x0[0], 1), 1))), x0[0])), ≥))


    (3)    (>(x0[0], 1)=TRUE>(-(x0[0], 1), 1)=TRUE1052_0_EVEN_GT(x0[0])≥NonInfC∧1052_0_EVEN_GT(x0[0])≥COND_1052_0_EVEN_GT(&&(>(x0[0], 1), !(=(-(x0[0], 1), 1))), x0[0])∧(UIncreasing(COND_1052_0_EVEN_GT(&&(>(x0[0], 1), !(=(-(x0[0], 1), 1))), x0[0])), ≥))



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

    (4)    (x0[0] + [-2] ≥ 0∧[1] + [-1]x0[0] ≥ 0 ⇒ (UIncreasing(COND_1052_0_EVEN_GT(&&(>(x0[0], 1), !(=(-(x0[0], 1), 1))), x0[0])), ≥)∧[bni_17 + (-1)Bound*bni_17] + [(2)bni_17]x0[0] ≥ 0∧[1 + (-1)bso_18] ≥ 0)



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

    (5)    (x0[0] + [-2] ≥ 0∧x0[0] + [-3] ≥ 0 ⇒ (UIncreasing(COND_1052_0_EVEN_GT(&&(>(x0[0], 1), !(=(-(x0[0], 1), 1))), x0[0])), ≥)∧[bni_17 + (-1)Bound*bni_17] + [(2)bni_17]x0[0] ≥ 0∧[1 + (-1)bso_18] ≥ 0)



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

    (6)    (x0[0] + [-2] ≥ 0∧[1] + [-1]x0[0] ≥ 0 ⇒ (UIncreasing(COND_1052_0_EVEN_GT(&&(>(x0[0], 1), !(=(-(x0[0], 1), 1))), x0[0])), ≥)∧[bni_17 + (-1)Bound*bni_17] + [(2)bni_17]x0[0] ≥ 0∧[1 + (-1)bso_18] ≥ 0)



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

    (7)    (x0[0] + [-2] ≥ 0∧x0[0] + [-3] ≥ 0 ⇒ (UIncreasing(COND_1052_0_EVEN_GT(&&(>(x0[0], 1), !(=(-(x0[0], 1), 1))), x0[0])), ≥)∧[bni_17 + (-1)Bound*bni_17] + [(2)bni_17]x0[0] ≥ 0∧[1 + (-1)bso_18] ≥ 0)



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

    (8)    (x0[0] + [-2] ≥ 0∧[1] + [-1]x0[0] ≥ 0 ⇒ (UIncreasing(COND_1052_0_EVEN_GT(&&(>(x0[0], 1), !(=(-(x0[0], 1), 1))), x0[0])), ≥)∧[bni_17 + (-1)Bound*bni_17] + [(2)bni_17]x0[0] ≥ 0∧[1 + (-1)bso_18] ≥ 0)



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

    (9)    (x0[0] + [-2] ≥ 0∧x0[0] + [-3] ≥ 0 ⇒ (UIncreasing(COND_1052_0_EVEN_GT(&&(>(x0[0], 1), !(=(-(x0[0], 1), 1))), x0[0])), ≥)∧[bni_17 + (-1)Bound*bni_17] + [(2)bni_17]x0[0] ≥ 0∧[1 + (-1)bso_18] ≥ 0)



    We solved constraint (8) using rule (IDP_SMT_SPLIT).We simplified constraint (9) using rule (IDP_SMT_SPLIT) which results in the following new constraint:

    (10)    (x0[0] ≥ 0∧[-1] + x0[0] ≥ 0 ⇒ (UIncreasing(COND_1052_0_EVEN_GT(&&(>(x0[0], 1), !(=(-(x0[0], 1), 1))), x0[0])), ≥)∧[(5)bni_17 + (-1)Bound*bni_17] + [(2)bni_17]x0[0] ≥ 0∧[1 + (-1)bso_18] ≥ 0)



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

    (11)    ([1] + x0[0] ≥ 0∧x0[0] ≥ 0 ⇒ (UIncreasing(COND_1052_0_EVEN_GT(&&(>(x0[0], 1), !(=(-(x0[0], 1), 1))), x0[0])), ≥)∧[(7)bni_17 + (-1)Bound*bni_17] + [(2)bni_17]x0[0] ≥ 0∧[1 + (-1)bso_18] ≥ 0)







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

    (12)    (COND_1052_0_EVEN_GT(TRUE, x0[1])≥NonInfC∧COND_1052_0_EVEN_GT(TRUE, x0[1])≥1052_0_EVEN_GT(-(-(x0[1], 1), 1))∧(UIncreasing(1052_0_EVEN_GT(-(-(x0[1], 1), 1))), ≥))



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

    (13)    ((UIncreasing(1052_0_EVEN_GT(-(-(x0[1], 1), 1))), ≥)∧[bni_19] = 0∧[3 + (-1)bso_20] ≥ 0)



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

    (14)    ((UIncreasing(1052_0_EVEN_GT(-(-(x0[1], 1), 1))), ≥)∧[bni_19] = 0∧[3 + (-1)bso_20] ≥ 0)



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

    (15)    ((UIncreasing(1052_0_EVEN_GT(-(-(x0[1], 1), 1))), ≥)∧[bni_19] = 0∧[3 + (-1)bso_20] ≥ 0)



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

    (16)    ((UIncreasing(1052_0_EVEN_GT(-(-(x0[1], 1), 1))), ≥)∧[bni_19] = 0∧0 = 0∧[3 + (-1)bso_20] ≥ 0)







To summarize, we get the following constraints P for the following pairs.
  • 1052_0_EVEN_GT(x0) → COND_1052_0_EVEN_GT(&&(>(x0, 1), !(=(-(x0, 1), 1))), x0)
    • ([1] + x0[0] ≥ 0∧x0[0] ≥ 0 ⇒ (UIncreasing(COND_1052_0_EVEN_GT(&&(>(x0[0], 1), !(=(-(x0[0], 1), 1))), x0[0])), ≥)∧[(7)bni_17 + (-1)Bound*bni_17] + [(2)bni_17]x0[0] ≥ 0∧[1 + (-1)bso_18] ≥ 0)

  • COND_1052_0_EVEN_GT(TRUE, x0) → 1052_0_EVEN_GT(-(-(x0, 1), 1))
    • ((UIncreasing(1052_0_EVEN_GT(-(-(x0[1], 1), 1))), ≥)∧[bni_19] = 0∧0 = 0∧[3 + (-1)bso_20] ≥ 0)




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

POL(TRUE) = 0   
POL(FALSE) = 0   
POL(1052_0_even_GT(x1)) = [-1]   
POL(0) = 0   
POL(1073_0_even_Return) = [-1]   
POL(1178_1_even_InvokeMethod(x1, x2)) = [-1]   
POL(1) = [1]   
POL(1265_0_even_Return(x1)) = [-1]   
POL(1629_0_odd_Return(x1)) = [-1]   
POL(1604_1_odd_InvokeMethod(x1, x2)) = [-1]   
POL(1052_0_EVEN_GT(x1)) = [1] + [2]x1   
POL(COND_1052_0_EVEN_GT(x1, x2)) = [2]x2   
POL(&&(x1, x2)) = [-1]   
POL(>(x1, x2)) = [-1]   
POL(!(x1)) = [-1]   
POL(=(x1, x2)) = [-1]   
POL(-(x1, x2)) = x1 + [-1]x2   

The following pairs are in P>:

1052_0_EVEN_GT(x0[0]) → COND_1052_0_EVEN_GT(&&(>(x0[0], 1), !(=(-(x0[0], 1), 1))), x0[0])
COND_1052_0_EVEN_GT(TRUE, x0[1]) → 1052_0_EVEN_GT(-(-(x0[1], 1), 1))

The following pairs are in Pbound:

1052_0_EVEN_GT(x0[0]) → COND_1052_0_EVEN_GT(&&(>(x0[0], 1), !(=(-(x0[0], 1), 1))), x0[0])

The following pairs are in P:
none

There are no usable rules.

(9) Obligation:

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


The following domains are used:

Integer


The ITRS R consists of the following rules:
1052_0_even_GT(0) → 1073_0_even_Return
1178_1_even_InvokeMethod(1073_0_even_Return, 1) → 1265_0_even_Return(1)
1178_1_even_InvokeMethod(1629_0_odd_Return(x0), x1) → 1265_0_even_Return(x0)
1604_1_odd_InvokeMethod(1265_0_even_Return(x0), x1) → 1629_0_odd_Return(x0)
1604_1_odd_InvokeMethod(1073_0_even_Return, 1) → 1629_0_odd_Return(0)

The integer pair graph contains the following rules and edges:
(1): COND_1052_0_EVEN_GT(TRUE, x0[1]) → 1052_0_EVEN_GT(x0[1] - 1 - 1)


The set Q consists of the following terms:
1052_0_even_GT(0)
1178_1_even_InvokeMethod(1073_0_even_Return, 1)
1178_1_even_InvokeMethod(1629_0_odd_Return(x0), x1)
1604_1_odd_InvokeMethod(1265_0_even_Return(x0), x1)
1604_1_odd_InvokeMethod(1073_0_even_Return, 1)

(10) IDependencyGraphProof (EQUIVALENT transformation)

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

(11) TRUE

(12) Obligation:

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

(13) SCCToIDPv1Proof (SOUND transformation)

Transformed FIGraph SCCs to IDPs. Log:

Generated 16 rules for P and 28 rules for R.


P rules:
914_0_power_GT(EOS(STATIC_914), i248, i248) → 921_0_power_GT(EOS(STATIC_921), i248, i248)
921_0_power_GT(EOS(STATIC_921), i248, i248) → 925_0_power_Load(EOS(STATIC_925), i248) | >(i248, 0)
925_0_power_Load(EOS(STATIC_925), i248) → 932_0_power_ConstantStackPush(EOS(STATIC_932), i248, i248)
932_0_power_ConstantStackPush(EOS(STATIC_932), i248, i248) → 942_0_power_NE(EOS(STATIC_942), i248, i248, 1)
942_0_power_NE(EOS(STATIC_942), i262, i262, matching1) → 953_0_power_NE(EOS(STATIC_953), i262, i262, 1) | =(matching1, 1)
953_0_power_NE(EOS(STATIC_953), i262, i262, matching1) → 962_0_power_Load(EOS(STATIC_962), i262) | &&(!(=(i262, 1)), =(matching1, 1))
962_0_power_Load(EOS(STATIC_962), i262) → 978_0_power_Load(EOS(STATIC_978), i262)
978_0_power_Load(EOS(STATIC_978), i262) → 988_0_power_IntArithmetic(EOS(STATIC_988), i262)
988_0_power_IntArithmetic(EOS(STATIC_988), i262) → 995_0_power_Load(EOS(STATIC_995), i262)
995_0_power_Load(EOS(STATIC_995), i262) → 1001_0_power_ConstantStackPush(EOS(STATIC_1001), i262, i262)
1001_0_power_ConstantStackPush(EOS(STATIC_1001), i262, i262) → 1012_0_power_IntArithmetic(EOS(STATIC_1012), i262, i262, 2)
1012_0_power_IntArithmetic(EOS(STATIC_1012), i262, i262, matching1) → 1022_0_power_InvokeMethod(EOS(STATIC_1022), i262, /(i262, 2)) | &&(>(i262, 1), =(matching1, 2))
1022_0_power_InvokeMethod(EOS(STATIC_1022), i262, i270) → 1030_1_power_InvokeMethod(1030_0_power_Load(EOS(STATIC_1030), i270), i262, i270)
1030_0_power_Load(EOS(STATIC_1030), i270) → 1038_0_power_Load(EOS(STATIC_1038), i270)
1038_0_power_Load(EOS(STATIC_1038), i270) → 907_0_power_Load(EOS(STATIC_907), i270)
907_0_power_Load(EOS(STATIC_907), i245) → 914_0_power_GT(EOS(STATIC_914), i245, i245)
R rules:
914_0_power_GT(EOS(STATIC_914), matching1, matching2) → 920_0_power_GT(EOS(STATIC_920), 0, 0) | &&(=(matching1, 0), =(matching2, 0))
920_0_power_GT(EOS(STATIC_920), matching1, matching2) → 923_0_power_ConstantStackPush(EOS(STATIC_923), 0) | &&(&&(<=(0, 0), =(matching1, 0)), =(matching2, 0))
923_0_power_ConstantStackPush(EOS(STATIC_923), matching1) → 931_0_power_Return(EOS(STATIC_931), 0) | =(matching1, 0)
942_0_power_NE(EOS(STATIC_942), matching1, matching2, matching3) → 951_0_power_NE(EOS(STATIC_951), 1, 1, 1) | &&(&&(=(matching1, 1), =(matching2, 1)), =(matching3, 1))
951_0_power_NE(EOS(STATIC_951), matching1, matching2, matching3) → 960_0_power_Load(EOS(STATIC_960), 1) | &&(&&(=(matching1, 1), =(matching2, 1)), =(matching3, 1))
960_0_power_Load(EOS(STATIC_960), matching1) → 977_0_power_Return(EOS(STATIC_977), 1) | =(matching1, 1)
1030_1_power_InvokeMethod(977_0_power_Return(EOS(STATIC_977), matching1), i262, matching2) → 1063_0_power_Return(EOS(STATIC_1063), i262, 1, 1) | &&(=(matching1, 1), =(matching2, 1))
1030_1_power_InvokeMethod(1322_0_power_Return(EOS(STATIC_1322)), i262, i369) → 1344_0_power_Return(EOS(STATIC_1344), i262, i369)
1030_1_power_InvokeMethod(1330_0_power_Return(EOS(STATIC_1330)), i262, i381) → 1360_0_power_Return(EOS(STATIC_1360), i262, i381)
1063_0_power_Return(EOS(STATIC_1063), i262, matching1, matching2) → 1069_0_power_Store(EOS(STATIC_1069), i262) | &&(=(matching1, 1), =(matching2, 1))
1069_0_power_Store(EOS(STATIC_1069), i262) → 1244_0_power_Store(EOS(STATIC_1244), i262)
1215_0_power_Return(EOS(STATIC_1215), i262, i315) → 1244_0_power_Store(EOS(STATIC_1244), i262)
1244_0_power_Store(EOS(STATIC_1244), i262) → 1271_0_power_Store(EOS(STATIC_1271), i262)
1256_0_power_Return(EOS(STATIC_1256), i262, i329) → 1271_0_power_Store(EOS(STATIC_1271), i262)
1271_0_power_Store(EOS(STATIC_1271), i262) → 1277_0_power_Load(EOS(STATIC_1277), i262)
1277_0_power_Load(EOS(STATIC_1277), i262) → 1283_0_power_ConstantStackPush(EOS(STATIC_1283), i262)
1283_0_power_ConstantStackPush(EOS(STATIC_1283), i262) → 1287_0_power_IntArithmetic(EOS(STATIC_1287), i262, 2)
1287_0_power_IntArithmetic(EOS(STATIC_1287), i262, matching1) → 1298_0_power_NE(EOS(STATIC_1298), %(i262, 2)) | =(matching1, 2)
1298_0_power_NE(EOS(STATIC_1298), matching1) → 1303_0_power_NE(EOS(STATIC_1303), 1) | =(matching1, 1)
1298_0_power_NE(EOS(STATIC_1298), matching1) → 1304_0_power_NE(EOS(STATIC_1304), 0) | =(matching1, 0)
1303_0_power_NE(EOS(STATIC_1303), matching1) → 1315_0_power_Load(EOS(STATIC_1315)) | &&(>(1, 0), =(matching1, 1))
1304_0_power_NE(EOS(STATIC_1304), matching1) → 1316_0_power_Load(EOS(STATIC_1316)) | =(matching1, 0)
1315_0_power_Load(EOS(STATIC_1315)) → 1321_0_power_Load(EOS(STATIC_1321))
1316_0_power_Load(EOS(STATIC_1316)) → 1322_0_power_Return(EOS(STATIC_1322))
1321_0_power_Load(EOS(STATIC_1321)) → 1326_0_power_IntArithmetic(EOS(STATIC_1326))
1326_0_power_IntArithmetic(EOS(STATIC_1326)) → 1330_0_power_Return(EOS(STATIC_1330))
1344_0_power_Return(EOS(STATIC_1344), i262, i369) → 1215_0_power_Return(EOS(STATIC_1215), i262, i369)
1360_0_power_Return(EOS(STATIC_1360), i262, i381) → 1256_0_power_Return(EOS(STATIC_1256), i262, i381)

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


P rules:
914_0_power_GT(EOS(STATIC_914), x0, x0) → 1030_1_power_InvokeMethod(914_0_power_GT(EOS(STATIC_914), /(x0, 2), /(x0, 2)), x0, /(x0, 2)) | >(x0, 1)
R rules:
914_0_power_GT(EOS(STATIC_914), 0, 0) → 931_0_power_Return(EOS(STATIC_931), 0)
1030_1_power_InvokeMethod(977_0_power_Return(EOS(STATIC_977), 1), x1, 1) → 1298_0_power_NE(EOS(STATIC_1298), %(x1, 2))
1298_0_power_NE(EOS(STATIC_1298), 0) → 1322_0_power_Return(EOS(STATIC_1322))
1298_0_power_NE(EOS(STATIC_1298), 1) → 1330_0_power_Return(EOS(STATIC_1330))
1030_1_power_InvokeMethod(1322_0_power_Return(EOS(STATIC_1322)), x0, x1) → 1298_0_power_NE(EOS(STATIC_1298), %(x0, 2))
1030_1_power_InvokeMethod(1330_0_power_Return(EOS(STATIC_1330)), x0, x1) → 1298_0_power_NE(EOS(STATIC_1298), %(x0, 2))

Filtered ground terms:



914_0_power_GT(x1, x2, x3) → 914_0_power_GT(x2, x3)
Cond_914_0_power_GT(x1, x2, x3, x4) → Cond_914_0_power_GT(x1, x3, x4)
1298_0_power_NE(x1, x2) → 1298_0_power_NE(x2)
1330_0_power_Return(x1) → 1330_0_power_Return
1322_0_power_Return(x1) → 1322_0_power_Return
977_0_power_Return(x1, x2) → 977_0_power_Return
931_0_power_Return(x1, x2) → 931_0_power_Return

Filtered duplicate args:



914_0_power_GT(x1, x2) → 914_0_power_GT(x2)
Cond_914_0_power_GT(x1, x2, x3) → Cond_914_0_power_GT(x1, x3)

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


P rules:
914_0_power_GT(x0) → 1030_1_power_InvokeMethod(914_0_power_GT(/(x0, 2)), x0, /(x0, 2)) | >(x0, 1)
R rules:
914_0_power_GT(0) → 931_0_power_Return
1030_1_power_InvokeMethod(977_0_power_Return, x1, 1) → 1298_0_power_NE(%(x1, 2))
1298_0_power_NE(0) → 1322_0_power_Return
1298_0_power_NE(1) → 1330_0_power_Return
1030_1_power_InvokeMethod(1322_0_power_Return, x0, x1) → 1298_0_power_NE(%(x0, 2))
1030_1_power_InvokeMethod(1330_0_power_Return, x0, x1) → 1298_0_power_NE(%(x0, 2))

Performed bisimulation on rules. Used the following equivalence classes: {[931_0_power_Return, 977_0_power_Return, 1322_0_power_Return, 1330_0_power_Return]=931_0_power_Return}


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


P rules:
914_0_POWER_GT(x0) → COND_914_0_POWER_GT(>(x0, 1), x0)
COND_914_0_POWER_GT(TRUE, x0) → 914_0_POWER_GT(/(x0, 2))
R rules:
914_0_power_GT(0) → 931_0_power_Return
1030_1_power_InvokeMethod(931_0_power_Return, x1, 1) → 1298_0_power_NE(%(x1, 2))
1298_0_power_NE(0) → 931_0_power_Return
1298_0_power_NE(1) → 931_0_power_Return
1030_1_power_InvokeMethod(931_0_power_Return, x0, x1) → 1298_0_power_NE(%(x0, 2))

(14) Obligation:

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


The following domains are used:

Integer


The ITRS R consists of the following rules:
914_0_power_GT(0) → 931_0_power_Return
1030_1_power_InvokeMethod(931_0_power_Return, x1, 1) → 1298_0_power_NE(x1 % 2)
1298_0_power_NE(0) → 931_0_power_Return
1298_0_power_NE(1) → 931_0_power_Return
1030_1_power_InvokeMethod(931_0_power_Return, x0, x1) → 1298_0_power_NE(x0 % 2)

The integer pair graph contains the following rules and edges:
(0): 914_0_POWER_GT(x0[0]) → COND_914_0_POWER_GT(x0[0] > 1, x0[0])
(1): COND_914_0_POWER_GT(TRUE, x0[1]) → 914_0_POWER_GT(x0[1] / 2)

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


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



The set Q consists of the following terms:
914_0_power_GT(0)
1298_0_power_NE(0)
1298_0_power_NE(1)
1030_1_power_InvokeMethod(931_0_power_Return, x0, x1)

(15) 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.IdpDefaultShapeHeuristic@75707c77 Constraint Generator: NonInfConstraintGenerator: PathGenerator: MetricPathGenerator: Max Left Steps: 1 Max Right Steps: 1

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 914_0_POWER_GT(x0) → COND_914_0_POWER_GT(>(x0, 1), x0) the following chains were created:
  • We consider the chain 914_0_POWER_GT(x0[0]) → COND_914_0_POWER_GT(>(x0[0], 1), x0[0]), COND_914_0_POWER_GT(TRUE, x0[1]) → 914_0_POWER_GT(/(x0[1], 2)) which results in the following constraint:

    (1)    (>(x0[0], 1)=TRUEx0[0]=x0[1]914_0_POWER_GT(x0[0])≥NonInfC∧914_0_POWER_GT(x0[0])≥COND_914_0_POWER_GT(>(x0[0], 1), x0[0])∧(UIncreasing(COND_914_0_POWER_GT(>(x0[0], 1), x0[0])), ≥))



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

    (2)    (>(x0[0], 1)=TRUE914_0_POWER_GT(x0[0])≥NonInfC∧914_0_POWER_GT(x0[0])≥COND_914_0_POWER_GT(>(x0[0], 1), x0[0])∧(UIncreasing(COND_914_0_POWER_GT(>(x0[0], 1), x0[0])), ≥))



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

    (3)    (x0[0] + [-2] ≥ 0 ⇒ (UIncreasing(COND_914_0_POWER_GT(>(x0[0], 1), x0[0])), ≥)∧[(-1)bni_18 + (-1)Bound*bni_18] + [bni_18]x0[0] ≥ 0∧[(-1)bso_19] ≥ 0)



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

    (4)    (x0[0] + [-2] ≥ 0 ⇒ (UIncreasing(COND_914_0_POWER_GT(>(x0[0], 1), x0[0])), ≥)∧[(-1)bni_18 + (-1)Bound*bni_18] + [bni_18]x0[0] ≥ 0∧[(-1)bso_19] ≥ 0)



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

    (5)    (x0[0] + [-2] ≥ 0 ⇒ (UIncreasing(COND_914_0_POWER_GT(>(x0[0], 1), x0[0])), ≥)∧[(-1)bni_18 + (-1)Bound*bni_18] + [bni_18]x0[0] ≥ 0∧[(-1)bso_19] ≥ 0)



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

    (6)    (x0[0] ≥ 0 ⇒ (UIncreasing(COND_914_0_POWER_GT(>(x0[0], 1), x0[0])), ≥)∧[bni_18 + (-1)Bound*bni_18] + [bni_18]x0[0] ≥ 0∧[(-1)bso_19] ≥ 0)







For Pair COND_914_0_POWER_GT(TRUE, x0) → 914_0_POWER_GT(/(x0, 2)) the following chains were created:
  • We consider the chain 914_0_POWER_GT(x0[0]) → COND_914_0_POWER_GT(>(x0[0], 1), x0[0]), COND_914_0_POWER_GT(TRUE, x0[1]) → 914_0_POWER_GT(/(x0[1], 2)), 914_0_POWER_GT(x0[0]) → COND_914_0_POWER_GT(>(x0[0], 1), x0[0]) which results in the following constraint:

    (7)    (>(x0[0], 1)=TRUEx0[0]=x0[1]/(x0[1], 2)=x0[0]1COND_914_0_POWER_GT(TRUE, x0[1])≥NonInfC∧COND_914_0_POWER_GT(TRUE, x0[1])≥914_0_POWER_GT(/(x0[1], 2))∧(UIncreasing(914_0_POWER_GT(/(x0[1], 2))), ≥))



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

    (8)    (>(x0[0], 1)=TRUECOND_914_0_POWER_GT(TRUE, x0[0])≥NonInfC∧COND_914_0_POWER_GT(TRUE, x0[0])≥914_0_POWER_GT(/(x0[0], 2))∧(UIncreasing(914_0_POWER_GT(/(x0[1], 2))), ≥))



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

    (9)    (x0[0] + [-2] ≥ 0 ⇒ (UIncreasing(914_0_POWER_GT(/(x0[1], 2))), ≥)∧[(-1)bni_20 + (-1)Bound*bni_20] + [bni_20]x0[0] ≥ 0∧[1 + (-1)bso_24] + x0[0] + [-1]max{x0[0], [-1]x0[0]} ≥ 0)



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

    (10)    (x0[0] + [-2] ≥ 0 ⇒ (UIncreasing(914_0_POWER_GT(/(x0[1], 2))), ≥)∧[(-1)bni_20 + (-1)Bound*bni_20] + [bni_20]x0[0] ≥ 0∧[1 + (-1)bso_24] + x0[0] + [-1]max{x0[0], [-1]x0[0]} ≥ 0)



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

    (11)    (x0[0] + [-2] ≥ 0∧[2]x0[0] ≥ 0 ⇒ (UIncreasing(914_0_POWER_GT(/(x0[1], 2))), ≥)∧[(-1)bni_20 + (-1)Bound*bni_20] + [bni_20]x0[0] ≥ 0∧[1 + (-1)bso_24] ≥ 0)



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

    (12)    (x0[0] ≥ 0∧[4] + [2]x0[0] ≥ 0 ⇒ (UIncreasing(914_0_POWER_GT(/(x0[1], 2))), ≥)∧[bni_20 + (-1)Bound*bni_20] + [bni_20]x0[0] ≥ 0∧[1 + (-1)bso_24] ≥ 0)



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

    (13)    (x0[0] ≥ 0∧[2] + x0[0] ≥ 0 ⇒ (UIncreasing(914_0_POWER_GT(/(x0[1], 2))), ≥)∧[bni_20 + (-1)Bound*bni_20] + [bni_20]x0[0] ≥ 0∧[1 + (-1)bso_24] ≥ 0)







To summarize, we get the following constraints P for the following pairs.
  • 914_0_POWER_GT(x0) → COND_914_0_POWER_GT(>(x0, 1), x0)
    • (x0[0] ≥ 0 ⇒ (UIncreasing(COND_914_0_POWER_GT(>(x0[0], 1), x0[0])), ≥)∧[bni_18 + (-1)Bound*bni_18] + [bni_18]x0[0] ≥ 0∧[(-1)bso_19] ≥ 0)

  • COND_914_0_POWER_GT(TRUE, x0) → 914_0_POWER_GT(/(x0, 2))
    • (x0[0] ≥ 0∧[2] + x0[0] ≥ 0 ⇒ (UIncreasing(914_0_POWER_GT(/(x0[1], 2))), ≥)∧[bni_20 + (-1)Bound*bni_20] + [bni_20]x0[0] ≥ 0∧[1 + (-1)bso_24] ≥ 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) = [1]   
POL(FALSE) = 0   
POL(914_0_power_GT(x1)) = [-1] + [-1]x1   
POL(0) = 0   
POL(931_0_power_Return) = [-1]   
POL(1030_1_power_InvokeMethod(x1, x2, x3)) = [-1] + [-1]x3 + [-1]x2 + [-1]x1   
POL(1) = [1]   
POL(1298_0_power_NE(x1)) = [-1] + [-1]x1   
POL(2) = [2]   
POL(914_0_POWER_GT(x1)) = [-1] + x1   
POL(COND_914_0_POWER_GT(x1, x2)) = [-1] + x2   
POL(>(x1, x2)) = [-1]   

Polynomial Interpretations with Context Sensitive Arithemetic Replacement
POL(TermCSAR-Mode @ Context)

POL(/(x1, 2)1 @ {914_0_POWER_GT_1/0}) = max{x1, [-1]x1} + [-1]   

The following pairs are in P>:

COND_914_0_POWER_GT(TRUE, x0[1]) → 914_0_POWER_GT(/(x0[1], 2))

The following pairs are in Pbound:

914_0_POWER_GT(x0[0]) → COND_914_0_POWER_GT(>(x0[0], 1), x0[0])
COND_914_0_POWER_GT(TRUE, x0[1]) → 914_0_POWER_GT(/(x0[1], 2))

The following pairs are in P:

914_0_POWER_GT(x0[0]) → COND_914_0_POWER_GT(>(x0[0], 1), x0[0])

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

/1

(16) Obligation:

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


The following domains are used:

Integer


The ITRS R consists of the following rules:
914_0_power_GT(0) → 931_0_power_Return
1030_1_power_InvokeMethod(931_0_power_Return, x1, 1) → 1298_0_power_NE(x1 % 2)
1298_0_power_NE(0) → 931_0_power_Return
1298_0_power_NE(1) → 931_0_power_Return
1030_1_power_InvokeMethod(931_0_power_Return, x0, x1) → 1298_0_power_NE(x0 % 2)

The integer pair graph contains the following rules and edges:
(0): 914_0_POWER_GT(x0[0]) → COND_914_0_POWER_GT(x0[0] > 1, x0[0])


The set Q consists of the following terms:
914_0_power_GT(0)
1298_0_power_NE(0)
1298_0_power_NE(1)
1030_1_power_InvokeMethod(931_0_power_Return, x0, x1)

(17) IDependencyGraphProof (EQUIVALENT transformation)

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

(18) TRUE

(19) Obligation:

SCC of termination graph based on JBC Program.
SCC contains nodes from the following methods: Power.main([Ljava/lang/String;)V
SCC calls the following helper methods: Power.power(II)I, Power.even(I)Z, Power.odd(I)Z
Performed SCC analyses: UsedFieldsAnalysis

(20) SCCToIDPv1Proof (SOUND transformation)

Transformed FIGraph SCCs to IDPs. Log:

Generated 76 rules for P and 102 rules for R.


P rules:
2302_0_main_Load(EOS(STATIC_2302), java.lang.Object(ARRAY(i774)), i775, i775) → 2303_0_main_ArrayLength(EOS(STATIC_2303), java.lang.Object(ARRAY(i774)), i775, i775, java.lang.Object(ARRAY(i774)))
2303_0_main_ArrayLength(EOS(STATIC_2303), java.lang.Object(ARRAY(i774)), i775, i775, java.lang.Object(ARRAY(i774))) → 2305_0_main_GE(EOS(STATIC_2305), java.lang.Object(ARRAY(i774)), i775, i775, i774) | >=(i774, 0)
2305_0_main_GE(EOS(STATIC_2305), java.lang.Object(ARRAY(i774)), i775, i775, i774) → 2307_0_main_GE(EOS(STATIC_2307), java.lang.Object(ARRAY(i774)), i775, i775, i774)
2307_0_main_GE(EOS(STATIC_2307), java.lang.Object(ARRAY(i774)), i775, i775, i774) → 2310_0_main_Load(EOS(STATIC_2310), java.lang.Object(ARRAY(i774)), i775) | <(i775, i774)
2310_0_main_Load(EOS(STATIC_2310), java.lang.Object(ARRAY(i774)), i775) → 2312_0_main_ArrayLength(EOS(STATIC_2312), java.lang.Object(ARRAY(i774)), i775, java.lang.Object(ARRAY(i774)))
2312_0_main_ArrayLength(EOS(STATIC_2312), java.lang.Object(ARRAY(i774)), i775, java.lang.Object(ARRAY(i774))) → 2314_0_main_Load(EOS(STATIC_2314), java.lang.Object(ARRAY(i774)), i775, i774) | >=(i774, 0)
2314_0_main_Load(EOS(STATIC_2314), java.lang.Object(ARRAY(i774)), i775, i774) → 2316_0_main_Load(EOS(STATIC_2316), java.lang.Object(ARRAY(i774)), i775, i774, java.lang.Object(ARRAY(i774)))
2316_0_main_Load(EOS(STATIC_2316), java.lang.Object(ARRAY(i774)), i775, i774, java.lang.Object(ARRAY(i774))) → 2317_0_main_ArrayAccess(EOS(STATIC_2317), java.lang.Object(ARRAY(i774)), i775, i774, java.lang.Object(ARRAY(i774)), i775)
2317_0_main_ArrayAccess(EOS(STATIC_2317), java.lang.Object(ARRAY(i774)), i775, i774, java.lang.Object(ARRAY(i774)), i775) → 2318_0_main_ArrayAccess(EOS(STATIC_2318), java.lang.Object(ARRAY(i774)), i775, i774, java.lang.Object(ARRAY(i774)), i775)
2318_0_main_ArrayAccess(EOS(STATIC_2318), java.lang.Object(ARRAY(i774)), i775, i774, java.lang.Object(ARRAY(i774)), i775) → 2321_0_main_InvokeMethod(EOS(STATIC_2321), java.lang.Object(ARRAY(i774)), i775, i774, o724) | <(i775, i774)
2321_0_main_InvokeMethod(EOS(STATIC_2321), java.lang.Object(ARRAY(i774)), i775, i774, java.lang.Object(o727sub)) → 2324_0_main_InvokeMethod(EOS(STATIC_2324), java.lang.Object(ARRAY(i774)), i775, i774, java.lang.Object(o727sub))
2324_0_main_InvokeMethod(EOS(STATIC_2324), java.lang.Object(ARRAY(i774)), i775, i774, java.lang.Object(o727sub)) → 2327_0_length_Load(EOS(STATIC_2327), java.lang.Object(ARRAY(i774)), i775, i774, java.lang.Object(o727sub), java.lang.Object(o727sub))
2327_0_length_Load(EOS(STATIC_2327), java.lang.Object(ARRAY(i774)), i775, i774, java.lang.Object(o727sub), java.lang.Object(o727sub)) → 2334_0_length_FieldAccess(EOS(STATIC_2334), java.lang.Object(ARRAY(i774)), i775, i774, java.lang.Object(o727sub), java.lang.Object(o727sub))
2334_0_length_FieldAccess(EOS(STATIC_2334), java.lang.Object(ARRAY(i774)), i775, i774, java.lang.Object(java.lang.String(o731sub, i788)), java.lang.Object(java.lang.String(o731sub, i788))) → 2336_0_length_FieldAccess(EOS(STATIC_2336), java.lang.Object(ARRAY(i774)), i775, i774, java.lang.Object(java.lang.String(o731sub, i788)), java.lang.Object(java.lang.String(o731sub, i788))) | &&(>=(i788, 0), >=(i789, 0))
2336_0_length_FieldAccess(EOS(STATIC_2336), java.lang.Object(ARRAY(i774)), i775, i774, java.lang.Object(java.lang.String(o731sub, i788)), java.lang.Object(java.lang.String(o731sub, i788))) → 2340_0_length_Return(EOS(STATIC_2340), java.lang.Object(ARRAY(i774)), i775, i774, java.lang.Object(java.lang.String(o731sub, i788)), i788)
2340_0_length_Return(EOS(STATIC_2340), java.lang.Object(ARRAY(i774)), i775, i774, java.lang.Object(java.lang.String(o731sub, i788)), i788) → 2344_0_main_InvokeMethod(EOS(STATIC_2344), java.lang.Object(ARRAY(i774)), i775, i774, i788)
2344_0_main_InvokeMethod(EOS(STATIC_2344), java.lang.Object(ARRAY(i774)), i775, i774, i788) → 2346_1_main_InvokeMethod(2346_0_power_Load(EOS(STATIC_2346), i774, i788), java.lang.Object(ARRAY(i774)), i775, i774, i788)
2346_1_main_InvokeMethod(931_0_power_Return(EOS(STATIC_931), i793, matching1, matching2), java.lang.Object(ARRAY(i774)), i775, i793, matching3) → 2365_0_power_Return(EOS(STATIC_2365), java.lang.Object(ARRAY(i793)), i775, i793, 0, i793, 0, 1) | &&(&&(=(matching1, 0), =(matching2, 1)), =(matching3, 0))
2346_1_main_InvokeMethod(977_0_power_Return(EOS(STATIC_977), i795, matching1, i795), java.lang.Object(ARRAY(i774)), i775, i795, matching2) → 2366_0_power_Return(EOS(STATIC_2366), java.lang.Object(ARRAY(i795)), i775, i795, 1, i795, 1, i795) | &&(=(matching1, 1), =(matching2, 1))
2346_1_main_InvokeMethod(1322_0_power_Return(EOS(STATIC_1322), i796, i309, i309), java.lang.Object(ARRAY(i774)), i775, i796, i797) → 2367_0_power_Return(EOS(STATIC_2367), java.lang.Object(ARRAY(i796)), i775, i796, i797, i796, i309, i309)
2346_1_main_InvokeMethod(1330_0_power_Return(EOS(STATIC_1330), i363), java.lang.Object(ARRAY(i774)), i775, i798, i799) → 2368_0_power_Return(EOS(STATIC_2368), java.lang.Object(ARRAY(i798)), i775, i798, i799, i363)
2365_0_power_Return(EOS(STATIC_2365), java.lang.Object(ARRAY(i793)), i775, i793, matching1, i793, matching2, matching3) → 2373_0_main_InvokeMethod(EOS(STATIC_2373), java.lang.Object(ARRAY(i793)), i775, 1) | &&(&&(=(matching1, 0), =(matching2, 0)), =(matching3, 1))
2373_0_main_InvokeMethod(EOS(STATIC_2373), java.lang.Object(ARRAY(i793)), i775, matching1) → 2377_0_main_InvokeMethod(EOS(STATIC_2377), java.lang.Object(ARRAY(i793)), i775, 1) | =(matching1, 1)
2377_0_main_InvokeMethod(EOS(STATIC_2377), java.lang.Object(ARRAY(i796)), i775, i309) → 2379_0_main_InvokeMethod(EOS(STATIC_2379), java.lang.Object(ARRAY(i796)), i775, i309)
2379_0_main_InvokeMethod(EOS(STATIC_2379), java.lang.Object(ARRAY(i798)), i775, i363) → 2382_1_main_InvokeMethod(2382_0_even_Load(EOS(STATIC_2382), i363), java.lang.Object(ARRAY(i798)), i775, i363)
2382_1_main_InvokeMethod(1073_0_even_Return(EOS(STATIC_1073), matching1, matching2), java.lang.Object(ARRAY(i798)), i775, matching3) → 2402_0_even_Return(EOS(STATIC_2402), java.lang.Object(ARRAY(i798)), i775, 0, 0, 1) | &&(&&(=(matching1, 0), =(matching2, 1)), =(matching3, 0))
2382_1_main_InvokeMethod(1124_0_even_Return(EOS(STATIC_1124), matching1, matching2), java.lang.Object(ARRAY(i798)), i775, matching3) → 2403_0_even_Return(EOS(STATIC_2403), java.lang.Object(ARRAY(i798)), i775, 1, 1, 0) | &&(&&(=(matching1, 1), =(matching2, 0)), =(matching3, 1))
2382_1_main_InvokeMethod(1265_0_even_Return(EOS(STATIC_1265), i335), java.lang.Object(ARRAY(i798)), i775, i809) → 2404_0_even_Return(EOS(STATIC_2404), java.lang.Object(ARRAY(i798)), i775, i809, i335)
2402_0_even_Return(EOS(STATIC_2402), java.lang.Object(ARRAY(i798)), i775, matching1, matching2, matching3) → 2414_0_main_StackPop(EOS(STATIC_2414), java.lang.Object(ARRAY(i798)), i775, 1) | &&(&&(=(matching1, 0), =(matching2, 0)), =(matching3, 1))
2414_0_main_StackPop(EOS(STATIC_2414), java.lang.Object(ARRAY(i798)), i775, matching1) → 2419_0_main_StackPop(EOS(STATIC_2419), java.lang.Object(ARRAY(i798)), i775, 1) | =(matching1, 1)
2419_0_main_StackPop(EOS(STATIC_2419), java.lang.Object(ARRAY(i798)), i775, i335) → 2425_0_main_Load(EOS(STATIC_2425), java.lang.Object(ARRAY(i798)), i775)
2425_0_main_Load(EOS(STATIC_2425), java.lang.Object(ARRAY(i798)), i775) → 2430_0_main_ArrayLength(EOS(STATIC_2430), java.lang.Object(ARRAY(i798)), i775, java.lang.Object(ARRAY(i798)))
2430_0_main_ArrayLength(EOS(STATIC_2430), java.lang.Object(ARRAY(i798)), i775, java.lang.Object(ARRAY(i798))) → 2434_0_main_Load(EOS(STATIC_2434), java.lang.Object(ARRAY(i798)), i775, i798) | >=(i798, 0)
2434_0_main_Load(EOS(STATIC_2434), java.lang.Object(ARRAY(i798)), i775, i798) → 2439_0_main_Load(EOS(STATIC_2439), java.lang.Object(ARRAY(i798)), i775, i798, java.lang.Object(ARRAY(i798)))
2439_0_main_Load(EOS(STATIC_2439), java.lang.Object(ARRAY(i798)), i775, i798, java.lang.Object(ARRAY(i798))) → 2443_0_main_ArrayAccess(EOS(STATIC_2443), java.lang.Object(ARRAY(i798)), i775, i798, java.lang.Object(ARRAY(i798)), i775)
2443_0_main_ArrayAccess(EOS(STATIC_2443), java.lang.Object(ARRAY(i798)), i775, i798, java.lang.Object(ARRAY(i798)), i775) → 2447_0_main_ArrayAccess(EOS(STATIC_2447), java.lang.Object(ARRAY(i798)), i775, i798, java.lang.Object(ARRAY(i798)), i775)
2447_0_main_ArrayAccess(EOS(STATIC_2447), java.lang.Object(ARRAY(i798)), i775, i798, java.lang.Object(ARRAY(i798)), i775) → 2453_0_main_InvokeMethod(EOS(STATIC_2453), java.lang.Object(ARRAY(i798)), i775, i798, o767) | <(i775, i798)
2453_0_main_InvokeMethod(EOS(STATIC_2453), java.lang.Object(ARRAY(i798)), i775, i798, java.lang.Object(o773sub)) → 2460_0_main_InvokeMethod(EOS(STATIC_2460), java.lang.Object(ARRAY(i798)), i775, i798, java.lang.Object(o773sub))
2460_0_main_InvokeMethod(EOS(STATIC_2460), java.lang.Object(ARRAY(i798)), i775, i798, java.lang.Object(o773sub)) → 2464_0_length_Load(EOS(STATIC_2464), java.lang.Object(ARRAY(i798)), i775, i798, java.lang.Object(o773sub), java.lang.Object(o773sub))
2464_0_length_Load(EOS(STATIC_2464), java.lang.Object(ARRAY(i798)), i775, i798, java.lang.Object(o773sub), java.lang.Object(o773sub)) → 2473_0_length_FieldAccess(EOS(STATIC_2473), java.lang.Object(ARRAY(i798)), i775, i798, java.lang.Object(o773sub), java.lang.Object(o773sub))
2473_0_length_FieldAccess(EOS(STATIC_2473), java.lang.Object(ARRAY(i798)), i775, i798, java.lang.Object(java.lang.String(o783sub, i826)), java.lang.Object(java.lang.String(o783sub, i826))) → 2475_0_length_FieldAccess(EOS(STATIC_2475), java.lang.Object(ARRAY(i798)), i775, i798, java.lang.Object(java.lang.String(o783sub, i826)), java.lang.Object(java.lang.String(o783sub, i826))) | &&(>=(i826, 0), >=(i827, 0))
2475_0_length_FieldAccess(EOS(STATIC_2475), java.lang.Object(ARRAY(i798)), i775, i798, java.lang.Object(java.lang.String(o783sub, i826)), java.lang.Object(java.lang.String(o783sub, i826))) → 2480_0_length_Return(EOS(STATIC_2480), java.lang.Object(ARRAY(i798)), i775, i798, java.lang.Object(java.lang.String(o783sub, i826)), i826)
2480_0_length_Return(EOS(STATIC_2480), java.lang.Object(ARRAY(i798)), i775, i798, java.lang.Object(java.lang.String(o783sub, i826)), i826) → 2485_0_main_InvokeMethod(EOS(STATIC_2485), java.lang.Object(ARRAY(i798)), i775, i798, i826)
2485_0_main_InvokeMethod(EOS(STATIC_2485), java.lang.Object(ARRAY(i798)), i775, i798, i826) → 2486_1_main_InvokeMethod(2486_0_power_Load(EOS(STATIC_2486), i798, i826), java.lang.Object(ARRAY(i798)), i775, i798, i826)
2486_1_main_InvokeMethod(931_0_power_Return(EOS(STATIC_931), i838, matching1, matching2), java.lang.Object(ARRAY(i798)), i775, i838, matching3) → 2507_0_power_Return(EOS(STATIC_2507), java.lang.Object(ARRAY(i838)), i775, i838, 0, i838, 0, 1) | &&(&&(=(matching1, 0), =(matching2, 1)), =(matching3, 0))
2486_1_main_InvokeMethod(977_0_power_Return(EOS(STATIC_977), i839, matching1, i839), java.lang.Object(ARRAY(i798)), i775, i839, matching2) → 2508_0_power_Return(EOS(STATIC_2508), java.lang.Object(ARRAY(i839)), i775, i839, 1, i839, 1, i839) | &&(=(matching1, 1), =(matching2, 1))
2486_1_main_InvokeMethod(1322_0_power_Return(EOS(STATIC_1322), i840, i309, i309), java.lang.Object(ARRAY(i798)), i775, i840, i841) → 2509_0_power_Return(EOS(STATIC_2509), java.lang.Object(ARRAY(i840)), i775, i840, i841, i840, i309, i309)
2486_1_main_InvokeMethod(1330_0_power_Return(EOS(STATIC_1330), i363), java.lang.Object(ARRAY(i798)), i775, i842, i843) → 2510_0_power_Return(EOS(STATIC_2510), java.lang.Object(ARRAY(i842)), i775, i842, i843, i363)
2507_0_power_Return(EOS(STATIC_2507), java.lang.Object(ARRAY(i838)), i775, i838, matching1, i838, matching2, matching3) → 2514_0_main_InvokeMethod(EOS(STATIC_2514), java.lang.Object(ARRAY(i838)), i775, 1) | &&(&&(=(matching1, 0), =(matching2, 0)), =(matching3, 1))
2514_0_main_InvokeMethod(EOS(STATIC_2514), java.lang.Object(ARRAY(i838)), i775, matching1) → 2519_0_main_InvokeMethod(EOS(STATIC_2519), java.lang.Object(ARRAY(i838)), i775, 1) | =(matching1, 1)
2519_0_main_InvokeMethod(EOS(STATIC_2519), java.lang.Object(ARRAY(i840)), i775, i309) → 2521_0_main_InvokeMethod(EOS(STATIC_2521), java.lang.Object(ARRAY(i840)), i775, i309)
2521_0_main_InvokeMethod(EOS(STATIC_2521), java.lang.Object(ARRAY(i842)), i775, i363) → 2524_1_main_InvokeMethod(2524_0_odd_Load(EOS(STATIC_2524), i363), java.lang.Object(ARRAY(i842)), i775, i363)
2524_1_main_InvokeMethod(1520_0_odd_Return(EOS(STATIC_1520), matching1, matching2), java.lang.Object(ARRAY(i842)), i775, matching3) → 2551_0_odd_Return(EOS(STATIC_2551), java.lang.Object(ARRAY(i842)), i775, 0, 0, 0) | &&(&&(=(matching1, 0), =(matching2, 0)), =(matching3, 0))
2524_1_main_InvokeMethod(1565_0_odd_Return(EOS(STATIC_1565), matching1, matching2), java.lang.Object(ARRAY(i842)), i775, matching3) → 2552_0_odd_Return(EOS(STATIC_2552), java.lang.Object(ARRAY(i842)), i775, 1, 1, 1) | &&(&&(=(matching1, 1), =(matching2, 1)), =(matching3, 1))
2524_1_main_InvokeMethod(1629_0_odd_Return(EOS(STATIC_1629), i335), java.lang.Object(ARRAY(i842)), i775, i872) → 2553_0_odd_Return(EOS(STATIC_2553), java.lang.Object(ARRAY(i842)), i775, i872, i335)
2551_0_odd_Return(EOS(STATIC_2551), java.lang.Object(ARRAY(i842)), i775, matching1, matching2, matching3) → 2564_0_main_StackPop(EOS(STATIC_2564), java.lang.Object(ARRAY(i842)), i775, 0) | &&(&&(=(matching1, 0), =(matching2, 0)), =(matching3, 0))
2564_0_main_StackPop(EOS(STATIC_2564), java.lang.Object(ARRAY(i842)), i775, matching1) → 2568_0_main_StackPop(EOS(STATIC_2568), java.lang.Object(ARRAY(i842)), i775, 0) | =(matching1, 0)
2568_0_main_StackPop(EOS(STATIC_2568), java.lang.Object(ARRAY(i842)), i775, i335) → 2575_0_main_Inc(EOS(STATIC_2575), java.lang.Object(ARRAY(i842)), i775)
2575_0_main_Inc(EOS(STATIC_2575), java.lang.Object(ARRAY(i842)), i775) → 2582_0_main_JMP(EOS(STATIC_2582), java.lang.Object(ARRAY(i842)), +(i775, 1)) | >=(i775, 0)
2582_0_main_JMP(EOS(STATIC_2582), java.lang.Object(ARRAY(i842)), i893) → 2589_0_main_Load(EOS(STATIC_2589), java.lang.Object(ARRAY(i842)), i893)
2589_0_main_Load(EOS(STATIC_2589), java.lang.Object(ARRAY(i842)), i893) → 2298_0_main_Load(EOS(STATIC_2298), java.lang.Object(ARRAY(i842)), i893)
2298_0_main_Load(EOS(STATIC_2298), java.lang.Object(ARRAY(i774)), i775) → 2302_0_main_Load(EOS(STATIC_2302), java.lang.Object(ARRAY(i774)), i775, i775)
2552_0_odd_Return(EOS(STATIC_2552), java.lang.Object(ARRAY(i842)), i775, matching1, matching2, matching3) → 2566_0_main_StackPop(EOS(STATIC_2566), java.lang.Object(ARRAY(i842)), i775, 1) | &&(&&(=(matching1, 1), =(matching2, 1)), =(matching3, 1))
2566_0_main_StackPop(EOS(STATIC_2566), java.lang.Object(ARRAY(i842)), i775, matching1) → 2568_0_main_StackPop(EOS(STATIC_2568), java.lang.Object(ARRAY(i842)), i775, 1) | =(matching1, 1)
2553_0_odd_Return(EOS(STATIC_2553), java.lang.Object(ARRAY(i842)), i775, i872, i335) → 2568_0_main_StackPop(EOS(STATIC_2568), java.lang.Object(ARRAY(i842)), i775, i335)
2508_0_power_Return(EOS(STATIC_2508), java.lang.Object(ARRAY(i839)), i775, i839, matching1, i839, matching2, i839) → 2516_0_main_InvokeMethod(EOS(STATIC_2516), java.lang.Object(ARRAY(i839)), i775, i839) | &&(=(matching1, 1), =(matching2, 1))
2516_0_main_InvokeMethod(EOS(STATIC_2516), java.lang.Object(ARRAY(i839)), i775, i839) → 2519_0_main_InvokeMethod(EOS(STATIC_2519), java.lang.Object(ARRAY(i839)), i775, i839)
2509_0_power_Return(EOS(STATIC_2509), java.lang.Object(ARRAY(i840)), i775, i840, i841, i840, i309, i309) → 2519_0_main_InvokeMethod(EOS(STATIC_2519), java.lang.Object(ARRAY(i840)), i775, i309)
2510_0_power_Return(EOS(STATIC_2510), java.lang.Object(ARRAY(i842)), i775, i842, i843, i363) → 2521_0_main_InvokeMethod(EOS(STATIC_2521), java.lang.Object(ARRAY(i842)), i775, i363)
2403_0_even_Return(EOS(STATIC_2403), java.lang.Object(ARRAY(i798)), i775, matching1, matching2, matching3) → 2416_0_main_StackPop(EOS(STATIC_2416), java.lang.Object(ARRAY(i798)), i775, 0) | &&(&&(=(matching1, 1), =(matching2, 1)), =(matching3, 0))
2416_0_main_StackPop(EOS(STATIC_2416), java.lang.Object(ARRAY(i798)), i775, matching1) → 2419_0_main_StackPop(EOS(STATIC_2419), java.lang.Object(ARRAY(i798)), i775, 0) | =(matching1, 0)
2404_0_even_Return(EOS(STATIC_2404), java.lang.Object(ARRAY(i798)), i775, i809, i335) → 2419_0_main_StackPop(EOS(STATIC_2419), java.lang.Object(ARRAY(i798)), i775, i335)
2366_0_power_Return(EOS(STATIC_2366), java.lang.Object(ARRAY(i795)), i775, i795, matching1, i795, matching2, i795) → 2374_0_main_InvokeMethod(EOS(STATIC_2374), java.lang.Object(ARRAY(i795)), i775, i795) | &&(=(matching1, 1), =(matching2, 1))
2374_0_main_InvokeMethod(EOS(STATIC_2374), java.lang.Object(ARRAY(i795)), i775, i795) → 2377_0_main_InvokeMethod(EOS(STATIC_2377), java.lang.Object(ARRAY(i795)), i775, i795)
2367_0_power_Return(EOS(STATIC_2367), java.lang.Object(ARRAY(i796)), i775, i796, i797, i796, i309, i309) → 2377_0_main_InvokeMethod(EOS(STATIC_2377), java.lang.Object(ARRAY(i796)), i775, i309)
2368_0_power_Return(EOS(STATIC_2368), java.lang.Object(ARRAY(i798)), i775, i798, i799, i363) → 2379_0_main_InvokeMethod(EOS(STATIC_2379), java.lang.Object(ARRAY(i798)), i775, i363)
R rules:
2346_0_power_Load(EOS(STATIC_2346), i774, i788) → 2351_0_power_Load(EOS(STATIC_2351), i774, i788)
2351_0_power_Load(EOS(STATIC_2351), i774, i788) → 907_0_power_Load(EOS(STATIC_907), i774, i788)
2382_0_even_Load(EOS(STATIC_2382), i363) → 2387_0_even_Load(EOS(STATIC_2387), i363)
2387_0_even_Load(EOS(STATIC_2387), i363) → 1047_0_even_Load(EOS(STATIC_1047), i363)
2486_0_power_Load(EOS(STATIC_2486), i798, i826) → 2492_0_power_Load(EOS(STATIC_2492), i798, i826)
2492_0_power_Load(EOS(STATIC_2492), i798, i826) → 907_0_power_Load(EOS(STATIC_907), i798, i826)
2524_0_odd_Load(EOS(STATIC_2524), i363) → 2530_0_odd_Load(EOS(STATIC_2530), i363)
2530_0_odd_Load(EOS(STATIC_2530), i363) → 1476_0_odd_Load(EOS(STATIC_1476), i363)
1038_0_power_Load(EOS(STATIC_1038), i265) → 907_0_power_Load(EOS(STATIC_907), i265, i270)
1190_0_odd_Load(EOS(STATIC_1190), i305) → 1476_0_odd_Load(EOS(STATIC_1476), i305)
1607_0_even_Load(EOS(STATIC_1607)) → 1047_0_even_Load(EOS(STATIC_1047), i496)
907_0_power_Load(EOS(STATIC_907), i244, i245) → 914_0_power_GT(EOS(STATIC_914), i244, i245, i245)
914_0_power_GT(EOS(STATIC_914), i244, matching1, matching2) → 920_0_power_GT(EOS(STATIC_920), i244, 0, 0) | &&(=(matching1, 0), =(matching2, 0))
914_0_power_GT(EOS(STATIC_914), i244, i248, i248) → 921_0_power_GT(EOS(STATIC_921), i244, i248, i248)
920_0_power_GT(EOS(STATIC_920), i244, matching1, matching2) → 923_0_power_ConstantStackPush(EOS(STATIC_923), i244, 0) | &&(&&(<=(0, 0), =(matching1, 0)), =(matching2, 0))
921_0_power_GT(EOS(STATIC_921), i244, i248, i248) → 925_0_power_Load(EOS(STATIC_925), i244, i248) | >(i248, 0)
923_0_power_ConstantStackPush(EOS(STATIC_923), i244, matching1) → 931_0_power_Return(EOS(STATIC_931), i244, 0, 1) | =(matching1, 0)
925_0_power_Load(EOS(STATIC_925), i244, i248) → 932_0_power_ConstantStackPush(EOS(STATIC_932), i244, i248, i248)
932_0_power_ConstantStackPush(EOS(STATIC_932), i244, i248, i248) → 942_0_power_NE(EOS(STATIC_942), i244, i248, i248, 1)
942_0_power_NE(EOS(STATIC_942), i244, matching1, matching2, matching3) → 951_0_power_NE(EOS(STATIC_951), i244, 1, 1, 1) | &&(&&(=(matching1, 1), =(matching2, 1)), =(matching3, 1))
942_0_power_NE(EOS(STATIC_942), i244, i262, i262, matching1) → 953_0_power_NE(EOS(STATIC_953), i244, i262, i262, 1) | =(matching1, 1)
951_0_power_NE(EOS(STATIC_951), i244, matching1, matching2, matching3) → 960_0_power_Load(EOS(STATIC_960), i244, 1) | &&(&&(=(matching1, 1), =(matching2, 1)), =(matching3, 1))
953_0_power_NE(EOS(STATIC_953), i244, i262, i262, matching1) → 962_0_power_Load(EOS(STATIC_962), i244, i262) | &&(!(=(i262, 1)), =(matching1, 1))
960_0_power_Load(EOS(STATIC_960), i244, matching1) → 977_0_power_Return(EOS(STATIC_977), i244, 1, i244) | =(matching1, 1)
962_0_power_Load(EOS(STATIC_962), i244, i262) → 978_0_power_Load(EOS(STATIC_978), i244, i262, i244)
978_0_power_Load(EOS(STATIC_978), i244, i262, i244) → 988_0_power_IntArithmetic(EOS(STATIC_988), i244, i262, i244, i244)
988_0_power_IntArithmetic(EOS(STATIC_988), i244, i262, i244, i244) → 995_0_power_Load(EOS(STATIC_995), i244, i262, *(i244, i244))
995_0_power_Load(EOS(STATIC_995), i244, i262, i265) → 1001_0_power_ConstantStackPush(EOS(STATIC_1001), i244, i262, i265, i262)
1001_0_power_ConstantStackPush(EOS(STATIC_1001), i244, i262, i265, i262) → 1012_0_power_IntArithmetic(EOS(STATIC_1012), i244, i262, i265, i262)
1012_0_power_IntArithmetic(EOS(STATIC_1012), i244, i262, i265, i262) → 1022_0_power_InvokeMethod(EOS(STATIC_1022), i244, i262, i265) | >(i262, 1)
1022_0_power_InvokeMethod(EOS(STATIC_1022), i244, i262, i265) → 1030_1_power_InvokeMethod(1030_0_power_Load(EOS(STATIC_1030), i265), i244, i262, i265)
1030_0_power_Load(EOS(STATIC_1030), i265) → 1038_0_power_Load(EOS(STATIC_1038), i265)
1030_1_power_InvokeMethod(977_0_power_Return(EOS(STATIC_977), i284, matching1, i284), i244, i262, i284) → 1063_0_power_Return(EOS(STATIC_1063), i244, i262, i284, i284, i284) | =(matching1, 1)
1030_1_power_InvokeMethod(1322_0_power_Return(EOS(STATIC_1322), i368, i309, i309), i244, i262, i368) → 1344_0_power_Return(EOS(STATIC_1344), i244, i262, i368, i368, i309, i309)
1030_1_power_InvokeMethod(1330_0_power_Return(EOS(STATIC_1330), i363), i244, i262, i380) → 1360_0_power_Return(EOS(STATIC_1360), i244, i262, i380, i363)
1063_0_power_Return(EOS(STATIC_1063), i244, i262, i284, i284, i284) → 1069_0_power_Store(EOS(STATIC_1069), i244, i262, i284)
1069_0_power_Store(EOS(STATIC_1069), i244, i262, i284) → 1244_0_power_Store(EOS(STATIC_1244), i244, i262, i284)
1215_0_power_Return(EOS(STATIC_1215), i244, i262, i314, i314, i284, i284) → 1244_0_power_Store(EOS(STATIC_1244), i244, i262, i284)
1244_0_power_Store(EOS(STATIC_1244), i244, i262, i284) → 1271_0_power_Store(EOS(STATIC_1271), i244, i262, i284)
1256_0_power_Return(EOS(STATIC_1256), i244, i262, i328, i309) → 1271_0_power_Store(EOS(STATIC_1271), i244, i262, i309)
1271_0_power_Store(EOS(STATIC_1271), i244, i262, i309) → 1277_0_power_Load(EOS(STATIC_1277), i244, i262, i309)
1277_0_power_Load(EOS(STATIC_1277), i244, i262, i309) → 1283_0_power_ConstantStackPush(EOS(STATIC_1283), i244, i309, i262)
1283_0_power_ConstantStackPush(EOS(STATIC_1283), i244, i309, i262) → 1287_0_power_IntArithmetic(EOS(STATIC_1287), i244, i309, i262, 2)
1287_0_power_IntArithmetic(EOS(STATIC_1287), i244, i309, i262, matching1) → 1298_0_power_NE(EOS(STATIC_1298), i244, i309, %(i262, 2)) | =(matching1, 2)
1298_0_power_NE(EOS(STATIC_1298), i244, i309, matching1) → 1303_0_power_NE(EOS(STATIC_1303), i244, i309, 1) | =(matching1, 1)
1298_0_power_NE(EOS(STATIC_1298), i244, i309, matching1) → 1304_0_power_NE(EOS(STATIC_1304), i244, i309, 0) | =(matching1, 0)
1303_0_power_NE(EOS(STATIC_1303), i244, i309, matching1) → 1315_0_power_Load(EOS(STATIC_1315), i244, i309) | &&(>(1, 0), =(matching1, 1))
1304_0_power_NE(EOS(STATIC_1304), i244, i309, matching1) → 1316_0_power_Load(EOS(STATIC_1316), i244, i309) | =(matching1, 0)
1315_0_power_Load(EOS(STATIC_1315), i244, i309) → 1321_0_power_Load(EOS(STATIC_1321), i309, i244)
1316_0_power_Load(EOS(STATIC_1316), i244, i309) → 1322_0_power_Return(EOS(STATIC_1322), i244, i309, i309)
1321_0_power_Load(EOS(STATIC_1321), i309, i244) → 1326_0_power_IntArithmetic(EOS(STATIC_1326), i244, i309)
1326_0_power_IntArithmetic(EOS(STATIC_1326), i244, i309) → 1330_0_power_Return(EOS(STATIC_1330), *(i244, i309))
1344_0_power_Return(EOS(STATIC_1344), i244, i262, i368, i368, i309, i309) → 1215_0_power_Return(EOS(STATIC_1215), i244, i262, i368, i368, i309, i309)
1360_0_power_Return(EOS(STATIC_1360), i244, i262, i380, i363) → 1256_0_power_Return(EOS(STATIC_1256), i244, i262, i380, i363)
1047_0_even_Load(EOS(STATIC_1047), i276) → 1052_0_even_GT(EOS(STATIC_1052), i276, i276)
1052_0_even_GT(EOS(STATIC_1052), matching1, matching2) → 1059_0_even_GT(EOS(STATIC_1059), 0, 0) | &&(=(matching1, 0), =(matching2, 0))
1052_0_even_GT(EOS(STATIC_1052), i285, i285) → 1060_0_even_GT(EOS(STATIC_1060), i285, i285)
1059_0_even_GT(EOS(STATIC_1059), matching1, matching2) → 1066_0_even_ConstantStackPush(EOS(STATIC_1066), 0) | &&(&&(<=(0, 0), =(matching1, 0)), =(matching2, 0))
1060_0_even_GT(EOS(STATIC_1060), i285, i285) → 1067_0_even_Load(EOS(STATIC_1067), i285) | >(i285, 0)
1066_0_even_ConstantStackPush(EOS(STATIC_1066), matching1) → 1073_0_even_Return(EOS(STATIC_1073), 0, 1) | =(matching1, 0)
1067_0_even_Load(EOS(STATIC_1067), i285) → 1075_0_even_ConstantStackPush(EOS(STATIC_1075), i285, i285)
1075_0_even_ConstantStackPush(EOS(STATIC_1075), i285, i285) → 1085_0_even_NE(EOS(STATIC_1085), i285, i285, 1)
1085_0_even_NE(EOS(STATIC_1085), matching1, matching2, matching3) → 1097_0_even_NE(EOS(STATIC_1097), 1, 1, 1) | &&(&&(=(matching1, 1), =(matching2, 1)), =(matching3, 1))
1085_0_even_NE(EOS(STATIC_1085), i288, i288, matching1) → 1098_0_even_NE(EOS(STATIC_1098), i288, i288, 1) | =(matching1, 1)
1097_0_even_NE(EOS(STATIC_1097), matching1, matching2, matching3) → 1113_0_even_ConstantStackPush(EOS(STATIC_1113), 1) | &&(&&(=(matching1, 1), =(matching2, 1)), =(matching3, 1))
1098_0_even_NE(EOS(STATIC_1098), i288, i288, matching1) → 1115_0_even_Load(EOS(STATIC_1115), i288) | &&(!(=(i288, 1)), =(matching1, 1))
1113_0_even_ConstantStackPush(EOS(STATIC_1113), matching1) → 1124_0_even_Return(EOS(STATIC_1124), 1, 0) | =(matching1, 1)
1115_0_even_Load(EOS(STATIC_1115), i288) → 1126_0_even_ConstantStackPush(EOS(STATIC_1126), i288)
1126_0_even_ConstantStackPush(EOS(STATIC_1126), i288) → 1138_0_even_IntArithmetic(EOS(STATIC_1138), i288, 1)
1138_0_even_IntArithmetic(EOS(STATIC_1138), i288, matching1) → 1159_0_even_InvokeMethod(EOS(STATIC_1159), -(i288, 1)) | &&(>(i288, 0), =(matching1, 1))
1159_0_even_InvokeMethod(EOS(STATIC_1159), i305) → 1178_1_even_InvokeMethod(1178_0_odd_Load(EOS(STATIC_1178), i305), i305)
1178_0_odd_Load(EOS(STATIC_1178), i305) → 1190_0_odd_Load(EOS(STATIC_1190), i305)
1178_1_even_InvokeMethod(1565_0_odd_Return(EOS(STATIC_1565), matching1, matching2), matching3) → 1603_0_odd_Return(EOS(STATIC_1603), 1, 1, 1) | &&(&&(=(matching1, 1), =(matching2, 1)), =(matching3, 1))
1178_1_even_InvokeMethod(1629_0_odd_Return(EOS(STATIC_1629), i335), i506) → 1638_0_odd_Return(EOS(STATIC_1638), i506, i335)
1247_0_odd_Return(EOS(STATIC_1247), matching1, matching2, matching3) → 1261_0_even_Return(EOS(STATIC_1261), 1) | &&(&&(=(matching1, 1), =(matching2, 1)), =(matching3, 1))
1253_0_odd_Return(EOS(STATIC_1253), i336, i335) → 1265_0_even_Return(EOS(STATIC_1265), i335)
1261_0_even_Return(EOS(STATIC_1261), matching1) → 1265_0_even_Return(EOS(STATIC_1265), 1) | =(matching1, 1)
1603_0_odd_Return(EOS(STATIC_1603), matching1, matching2, matching3) → 1247_0_odd_Return(EOS(STATIC_1247), 1, 1, 1) | &&(&&(=(matching1, 1), =(matching2, 1)), =(matching3, 1))
1638_0_odd_Return(EOS(STATIC_1638), i506, i335) → 1253_0_odd_Return(EOS(STATIC_1253), i506, i335)
1476_0_odd_Load(EOS(STATIC_1476), i447) → 1484_0_odd_GT(EOS(STATIC_1484), i447, i447)
1484_0_odd_GT(EOS(STATIC_1484), matching1, matching2) → 1500_0_odd_GT(EOS(STATIC_1500), 0, 0) | &&(=(matching1, 0), =(matching2, 0))
1484_0_odd_GT(EOS(STATIC_1484), i458, i458) → 1501_0_odd_GT(EOS(STATIC_1501), i458, i458)
1500_0_odd_GT(EOS(STATIC_1500), matching1, matching2) → 1509_0_odd_ConstantStackPush(EOS(STATIC_1509), 0) | &&(&&(<=(0, 0), =(matching1, 0)), =(matching2, 0))
1501_0_odd_GT(EOS(STATIC_1501), i458, i458) → 1511_0_odd_Load(EOS(STATIC_1511), i458) | >(i458, 0)
1509_0_odd_ConstantStackPush(EOS(STATIC_1509), matching1) → 1520_0_odd_Return(EOS(STATIC_1520), 0, 0) | =(matching1, 0)
1511_0_odd_Load(EOS(STATIC_1511), i458) → 1522_0_odd_ConstantStackPush(EOS(STATIC_1522), i458, i458)
1522_0_odd_ConstantStackPush(EOS(STATIC_1522), i458, i458) → 1532_0_odd_NE(EOS(STATIC_1532), i458, i458, 1)
1532_0_odd_NE(EOS(STATIC_1532), matching1, matching2, matching3) → 1543_0_odd_NE(EOS(STATIC_1543), 1, 1, 1) | &&(&&(=(matching1, 1), =(matching2, 1)), =(matching3, 1))
1532_0_odd_NE(EOS(STATIC_1532), i479, i479, matching1) → 1544_0_odd_NE(EOS(STATIC_1544), i479, i479, 1) | =(matching1, 1)
1543_0_odd_NE(EOS(STATIC_1543), matching1, matching2, matching3) → 1555_0_odd_ConstantStackPush(EOS(STATIC_1555), 1) | &&(&&(=(matching1, 1), =(matching2, 1)), =(matching3, 1))
1544_0_odd_NE(EOS(STATIC_1544), i479, i479, matching1) → 1556_0_odd_Load(EOS(STATIC_1556), i479) | &&(!(=(i479, 1)), =(matching1, 1))
1555_0_odd_ConstantStackPush(EOS(STATIC_1555), matching1) → 1565_0_odd_Return(EOS(STATIC_1565), 1, 1) | =(matching1, 1)
1556_0_odd_Load(EOS(STATIC_1556), i479) → 1566_0_odd_ConstantStackPush(EOS(STATIC_1566), i479)
1566_0_odd_ConstantStackPush(EOS(STATIC_1566), i479) → 1576_0_odd_IntArithmetic(EOS(STATIC_1576), i479, 1)
1576_0_odd_IntArithmetic(EOS(STATIC_1576), i479, matching1) → 1588_0_odd_InvokeMethod(EOS(STATIC_1588)) | &&(>(i479, 0), =(matching1, 1))
1588_0_odd_InvokeMethod(EOS(STATIC_1588)) → 1604_1_odd_InvokeMethod(1604_0_even_Load(EOS(STATIC_1604)))
1604_0_even_Load(EOS(STATIC_1604)) → 1607_0_even_Load(EOS(STATIC_1607))
1604_1_odd_InvokeMethod(1124_0_even_Return(EOS(STATIC_1124), matching1, matching2)) → 1621_0_even_Return(EOS(STATIC_1621), 0) | &&(=(matching1, 1), =(matching2, 0))
1604_1_odd_InvokeMethod(1265_0_even_Return(EOS(STATIC_1265), i335)) → 1622_0_even_Return(EOS(STATIC_1622), i335)
1621_0_even_Return(EOS(STATIC_1621), matching1) → 1627_0_odd_Return(EOS(STATIC_1627), 0) | =(matching1, 0)
1622_0_even_Return(EOS(STATIC_1622), i335) → 1629_0_odd_Return(EOS(STATIC_1629), i335)
1627_0_odd_Return(EOS(STATIC_1627), matching1) → 1629_0_odd_Return(EOS(STATIC_1629), 0) | =(matching1, 0)

Combined rules. Obtained 14 conditional rules for P and 22 conditional rules for R.


P rules:
2346_1_main_InvokeMethod(1330_0_power_Return(EOS(STATIC_1330), x0), java.lang.Object(ARRAY(x1)), x2, x3, x4) → 2382_1_main_InvokeMethod(2382_0_even_Load(EOS(STATIC_2382), x0), java.lang.Object(ARRAY(x3)), x2, x0)
2346_1_main_InvokeMethod(1322_0_power_Return(EOS(STATIC_1322), x0, x1, x1), java.lang.Object(ARRAY(x2)), x3, x0, x4) → 2382_1_main_InvokeMethod(2382_0_even_Load(EOS(STATIC_2382), x1), java.lang.Object(ARRAY(x0)), x3, x1)
2346_1_main_InvokeMethod(931_0_power_Return(EOS(STATIC_931), x0, 0, 1), java.lang.Object(ARRAY(x3)), x4, x0, 0) → 2382_1_main_InvokeMethod(2382_0_even_Load(EOS(STATIC_2382), 1), java.lang.Object(ARRAY(x0)), x4, 1)
2382_1_main_InvokeMethod(1265_0_even_Return(EOS(STATIC_1265), x0), java.lang.Object(ARRAY(x1)), x2, x3) → 2486_1_main_InvokeMethod(2486_0_power_Load(EOS(STATIC_2486), x1, x4), java.lang.Object(ARRAY(x1)), x2, x1, x4) | &&(&&(>(+(x4, 1), 0), <(x2, x1)), >(+(x1, 1), 0))
2382_1_main_InvokeMethod(1073_0_even_Return(EOS(STATIC_1073), 0, 1), java.lang.Object(ARRAY(x2)), x3, 0) → 2486_1_main_InvokeMethod(2486_0_power_Load(EOS(STATIC_2486), x2, x5), java.lang.Object(ARRAY(x2)), x3, x2, x5) | &&(&&(>(+(x5, 1), 0), <(x3, x2)), >(+(x2, 1), 0))
2486_1_main_InvokeMethod(1330_0_power_Return(EOS(STATIC_1330), x0), java.lang.Object(ARRAY(x1)), x2, x3, x4) → 2524_1_main_InvokeMethod(2524_0_odd_Load(EOS(STATIC_2524), x0), java.lang.Object(ARRAY(x3)), x2, x0)
2486_1_main_InvokeMethod(1322_0_power_Return(EOS(STATIC_1322), x0, x1, x1), java.lang.Object(ARRAY(x2)), x3, x0, x4) → 2524_1_main_InvokeMethod(2524_0_odd_Load(EOS(STATIC_2524), x1), java.lang.Object(ARRAY(x0)), x3, x1)
2486_1_main_InvokeMethod(931_0_power_Return(EOS(STATIC_931), x0, 0, 1), java.lang.Object(ARRAY(x3)), x4, x0, 0) → 2524_1_main_InvokeMethod(2524_0_odd_Load(EOS(STATIC_2524), 1), java.lang.Object(ARRAY(x0)), x4, 1)
2524_1_main_InvokeMethod(1629_0_odd_Return(EOS(STATIC_1629), x0), java.lang.Object(ARRAY(x1)), x2, x3) → 2346_1_main_InvokeMethod(2346_0_power_Load(EOS(STATIC_2346), x1, x4), java.lang.Object(ARRAY(x1)), +(x2, 1), x1, x4) | &&(&&(&&(>(+(x4, 1), 0), >(+(x2, 1), 0)), >(+(x1, 1), 0)), >(x1, +(x2, 1)))
2524_1_main_InvokeMethod(1520_0_odd_Return(EOS(STATIC_1520), 0, 0), java.lang.Object(ARRAY(x2)), x3, 0) → 2346_1_main_InvokeMethod(2346_0_power_Load(EOS(STATIC_2346), x2, x5), java.lang.Object(ARRAY(x2)), +(x3, 1), x2, x5) | &&(&&(&&(>(+(x5, 1), 0), >(+(x3, 1), 0)), >(+(x2, 1), 0)), >(x2, +(x3, 1)))
2524_1_main_InvokeMethod(1565_0_odd_Return(EOS(STATIC_1565), 1, 1), java.lang.Object(ARRAY(x2)), x3, 1) → 2346_1_main_InvokeMethod(2346_0_power_Load(EOS(STATIC_2346), x2, x5), java.lang.Object(ARRAY(x2)), +(x3, 1), x2, x5) | &&(&&(&&(>(+(x5, 1), 0), >(+(x3, 1), 0)), >(+(x2, 1), 0)), >(x2, +(x3, 1)))
2486_1_main_InvokeMethod(977_0_power_Return(EOS(STATIC_977), x0, 1, x0), java.lang.Object(ARRAY(x2)), x3, x0, 1) → 2524_1_main_InvokeMethod(2524_0_odd_Load(EOS(STATIC_2524), x0), java.lang.Object(ARRAY(x0)), x3, x0)
2382_1_main_InvokeMethod(1124_0_even_Return(EOS(STATIC_1124), 1, 0), java.lang.Object(ARRAY(x2)), x3, 1) → 2486_1_main_InvokeMethod(2486_0_power_Load(EOS(STATIC_2486), x2, x5), java.lang.Object(ARRAY(x2)), x3, x2, x5) | &&(&&(>(+(x5, 1), 0), <(x3, x2)), >(+(x2, 1), 0))
2346_1_main_InvokeMethod(977_0_power_Return(EOS(STATIC_977), x0, 1, x0), java.lang.Object(ARRAY(x2)), x3, x0, 1) → 2382_1_main_InvokeMethod(2382_0_even_Load(EOS(STATIC_2382), x0), java.lang.Object(ARRAY(x0)), x3, x0)
R rules:
2346_0_power_Load(EOS(STATIC_2346), x0, x1) → 914_0_power_GT(EOS(STATIC_914), x0, x1, x1)
2382_0_even_Load(EOS(STATIC_2382), x0) → 1052_0_even_GT(EOS(STATIC_1052), x0, x0)
2486_0_power_Load(EOS(STATIC_2486), x0, x1) → 914_0_power_GT(EOS(STATIC_914), x0, x1, x1)
2524_0_odd_Load(EOS(STATIC_2524), x0) → 1484_0_odd_GT(EOS(STATIC_1484), x0, x0)
914_0_power_GT(EOS(STATIC_914), x0, 0, 0) → 931_0_power_Return(EOS(STATIC_931), x0, 0, 1)
914_0_power_GT(EOS(STATIC_914), x0, 1, 1) → 977_0_power_Return(EOS(STATIC_977), x0, 1, x0)
914_0_power_GT(EOS(STATIC_914), x0, x1, x1) → 1030_1_power_InvokeMethod(914_0_power_GT(EOS(STATIC_914), *(x0, x0), x2, x2), x0, x1, *(x0, x0)) | >(x1, 1)
1030_1_power_InvokeMethod(977_0_power_Return(EOS(STATIC_977), x0, 1, x0), x2, x3, x0) → 1298_0_power_NE(EOS(STATIC_1298), x2, x0, %(x3, 2))
1298_0_power_NE(EOS(STATIC_1298), x0, x1, 0) → 1322_0_power_Return(EOS(STATIC_1322), x0, x1, x1)
1298_0_power_NE(EOS(STATIC_1298), x0, x1, 1) → 1330_0_power_Return(EOS(STATIC_1330), *(x0, x1))
1030_1_power_InvokeMethod(1322_0_power_Return(EOS(STATIC_1322), x0, x1, x1), x2, x3, x0) → 1298_0_power_NE(EOS(STATIC_1298), x2, x1, %(x3, 2))
1030_1_power_InvokeMethod(1330_0_power_Return(EOS(STATIC_1330), x0), x1, x2, x3) → 1298_0_power_NE(EOS(STATIC_1298), x1, x0, %(x2, 2))
1052_0_even_GT(EOS(STATIC_1052), 0, 0) → 1073_0_even_Return(EOS(STATIC_1073), 0, 1)
1052_0_even_GT(EOS(STATIC_1052), 1, 1) → 1124_0_even_Return(EOS(STATIC_1124), 1, 0)
1052_0_even_GT(EOS(STATIC_1052), x0, x0) → 1178_1_even_InvokeMethod(1484_0_odd_GT(EOS(STATIC_1484), -(x0, 1), -(x0, 1)), -(x0, 1)) | &&(>(x0, 0), !(=(x0, 1)))
1178_1_even_InvokeMethod(1565_0_odd_Return(EOS(STATIC_1565), 1, 1), 1) → 1265_0_even_Return(EOS(STATIC_1265), 1)
1178_1_even_InvokeMethod(1629_0_odd_Return(EOS(STATIC_1629), x0), x1) → 1265_0_even_Return(EOS(STATIC_1265), x0)
1484_0_odd_GT(EOS(STATIC_1484), 0, 0) → 1520_0_odd_Return(EOS(STATIC_1520), 0, 0)
1484_0_odd_GT(EOS(STATIC_1484), 1, 1) → 1565_0_odd_Return(EOS(STATIC_1565), 1, 1)
1484_0_odd_GT(EOS(STATIC_1484), x0, x0) → 1604_1_odd_InvokeMethod(1052_0_even_GT(EOS(STATIC_1052), x1, x1)) | &&(>(x0, 0), !(=(x0, 1)))
1604_1_odd_InvokeMethod(1265_0_even_Return(EOS(STATIC_1265), x0)) → 1629_0_odd_Return(EOS(STATIC_1629), x0)
1604_1_odd_InvokeMethod(1124_0_even_Return(EOS(STATIC_1124), 1, 0)) → 1629_0_odd_Return(EOS(STATIC_1629), 0)

Filtered ground terms:



2382_0_even_Load(x1, x2) → 2382_0_even_Load(x2)
977_0_power_Return(x1, x2, x3, x4) → 977_0_power_Return(x2, x4)
2486_0_power_Load(x1, x2, x3) → 2486_0_power_Load(x2, x3)
Cond_2382_1_main_InvokeMethod2(x1, x2, x3, x4, x5, x6) → Cond_2382_1_main_InvokeMethod2(x1, x3, x4, x6)
1124_0_even_Return(x1, x2, x3) → 1124_0_even_Return
2524_0_odd_Load(x1, x2) → 2524_0_odd_Load(x2)
2346_0_power_Load(x1, x2, x3) → 2346_0_power_Load(x2, x3)
Cond_2524_1_main_InvokeMethod2(x1, x2, x3, x4, x5, x6) → Cond_2524_1_main_InvokeMethod2(x1, x3, x4, x6)
1565_0_odd_Return(x1, x2, x3) → 1565_0_odd_Return
Cond_2524_1_main_InvokeMethod1(x1, x2, x3, x4, x5, x6) → Cond_2524_1_main_InvokeMethod1(x1, x3, x4, x6)
1520_0_odd_Return(x1, x2, x3) → 1520_0_odd_Return
1629_0_odd_Return(x1, x2) → 1629_0_odd_Return(x2)
931_0_power_Return(x1, x2, x3, x4) → 931_0_power_Return(x2)
1322_0_power_Return(x1, x2, x3, x4) → 1322_0_power_Return(x2, x3, x4)
1330_0_power_Return(x1, x2) → 1330_0_power_Return(x2)
Cond_2382_1_main_InvokeMethod1(x1, x2, x3, x4, x5, x6) → Cond_2382_1_main_InvokeMethod1(x1, x3, x4, x6)
1073_0_even_Return(x1, x2, x3) → 1073_0_even_Return
1265_0_even_Return(x1, x2) → 1265_0_even_Return(x2)
1052_0_even_GT(x1, x2, x3) → 1052_0_even_GT(x2, x3)
Cond_1484_0_odd_GT(x1, x2, x3, x4, x5) → Cond_1484_0_odd_GT(x1, x3, x4, x5)
1484_0_odd_GT(x1, x2, x3) → 1484_0_odd_GT(x2, x3)
Cond_1052_0_even_GT(x1, x2, x3, x4) → Cond_1052_0_even_GT(x1, x3, x4)
1298_0_power_NE(x1, x2, x3, x4) → 1298_0_power_NE(x2, x3, x4)
914_0_power_GT(x1, x2, x3, x4) → 914_0_power_GT(x2, x3, x4)
Cond_914_0_power_GT(x1, x2, x3, x4, x5, x6) → Cond_914_0_power_GT(x1, x3, x4, x5, x6)

Filtered duplicate args:



1322_0_power_Return(x1, x2, x3) → 1322_0_power_Return(x1, x3)
977_0_power_Return(x1, x2) → 977_0_power_Return(x2)
914_0_power_GT(x1, x2, x3) → 914_0_power_GT(x1, x3)
1052_0_even_GT(x1, x2) → 1052_0_even_GT(x2)
1484_0_odd_GT(x1, x2) → 1484_0_odd_GT(x2)
Cond_914_0_power_GT(x1, x2, x3, x4, x5) → Cond_914_0_power_GT(x1, x2, x4, x5)
Cond_1052_0_even_GT(x1, x2, x3) → Cond_1052_0_even_GT(x1, x3)
Cond_1484_0_odd_GT(x1, x2, x3, x4) → Cond_1484_0_odd_GT(x1, x3, x4)

Filtered unneeded arguments:



2346_1_main_InvokeMethod(x1, x2, x3, x4, x5) → 2346_1_main_InvokeMethod(x1, x3, x4, x5)
Cond_2382_1_main_InvokeMethod(x1, x2, x3, x4, x5, x6) → Cond_2382_1_main_InvokeMethod(x1, x3, x4, x6)
2486_1_main_InvokeMethod(x1, x2, x3, x4, x5) → 2486_1_main_InvokeMethod(x1, x3, x4, x5)
Cond_2524_1_main_InvokeMethod(x1, x2, x3, x4, x5, x6) → Cond_2524_1_main_InvokeMethod(x1, x3, x4, x6)
Cond_1484_0_odd_GT(x1, x2, x3) → Cond_1484_0_odd_GT(x1, x3)

Filtered all free variables in P and R:



Cond_2382_1_main_InvokeMethod(x1, x2, x3, x4) → Cond_2382_1_main_InvokeMethod(x1, x2, x3)
2486_1_main_InvokeMethod(x1, x2, x3, x4) → 2486_1_main_InvokeMethod(x2, x3)
Cond_2382_1_main_InvokeMethod1(x1, x2, x3, x4) → Cond_2382_1_main_InvokeMethod1(x1, x2, x3)
2524_1_main_InvokeMethod(x1, x2, x3, x4) → 2524_1_main_InvokeMethod(x2, x3)
Cond_2524_1_main_InvokeMethod(x1, x2, x3, x4) → Cond_2524_1_main_InvokeMethod(x1, x2, x3)
2346_1_main_InvokeMethod(x1, x2, x3, x4) → 2346_1_main_InvokeMethod(x2, x3)
Cond_2524_1_main_InvokeMethod1(x1, x2, x3, x4) → Cond_2524_1_main_InvokeMethod1(x1, x2, x3)
Cond_2524_1_main_InvokeMethod2(x1, x2, x3, x4) → Cond_2524_1_main_InvokeMethod2(x1, x2, x3)
Cond_2382_1_main_InvokeMethod2(x1, x2, x3, x4) → Cond_2382_1_main_InvokeMethod2(x1, x2, x3)
Cond_914_0_power_GT(x1, x2, x3, x4) → Cond_914_0_power_GT(x1, x2, x3)
1030_1_power_InvokeMethod(x1, x2, x3, x4) → 1030_1_power_InvokeMethod(x2, x3, x4)
1298_0_power_NE(x1, x2, x3) → 1298_0_power_NE(x1, x3)
Cond_1484_0_odd_GT(x1, x2) → Cond_1484_0_odd_GT(x1)
1604_1_odd_InvokeMethod(x1) → 1604_1_odd_InvokeMethod
1629_0_odd_Return(x1) → 1629_0_odd_Return
2382_1_main_InvokeMethod(x1, x2, x3, x4) → 2382_1_main_InvokeMethod(x2, x3)
1322_0_power_Return(x1, x2) → 1322_0_power_Return(x1)
1265_0_even_Return(x1) → 1265_0_even_Return

Current set of rules:


P rules:
2346_1_main_InvokeMethod(x2, x3) → 2382_1_main_InvokeMethod(java.lang.Object(ARRAY(x3)), x2)
2382_1_main_InvokeMethod(java.lang.Object(ARRAY(x1)), x2) → Cond_2382_1_main_InvokeMethod(&&(<(x2, x1), >(+(x1, 1), 0)), java.lang.Object(ARRAY(x1)), x2)
Cond_2382_1_main_InvokeMethod(TRUE, java.lang.Object(ARRAY(x1)), x2) → 2486_1_main_InvokeMethod(x2, x1)
2382_1_main_InvokeMethod(java.lang.Object(ARRAY(x2)), x3) → Cond_2382_1_main_InvokeMethod1(&&(<(x3, x2), >(+(x2, 1), 0)), java.lang.Object(ARRAY(x2)), x3)
Cond_2382_1_main_InvokeMethod1(TRUE, java.lang.Object(ARRAY(x2)), x3) → 2486_1_main_InvokeMethod(x3, x2)
2486_1_main_InvokeMethod(x2, x3) → 2524_1_main_InvokeMethod(java.lang.Object(ARRAY(x3)), x2)
2524_1_main_InvokeMethod(java.lang.Object(ARRAY(x1)), x2) → Cond_2524_1_main_InvokeMethod(&&(&&(>(+(x2, 1), 0), >(+(x1, 1), 0)), >(x1, +(x2, 1))), java.lang.Object(ARRAY(x1)), x2)
Cond_2524_1_main_InvokeMethod(TRUE, java.lang.Object(ARRAY(x1)), x2) → 2346_1_main_InvokeMethod(+(x2, 1), x1)
2524_1_main_InvokeMethod(java.lang.Object(ARRAY(x2)), x3) → Cond_2524_1_main_InvokeMethod1(&&(&&(>(+(x3, 1), 0), >(+(x2, 1), 0)), >(x2, +(x3, 1))), java.lang.Object(ARRAY(x2)), x3)
Cond_2524_1_main_InvokeMethod1(TRUE, java.lang.Object(ARRAY(x2)), x3) → 2346_1_main_InvokeMethod(+(x3, 1), x2)
2524_1_main_InvokeMethod(java.lang.Object(ARRAY(x2)), x3) → Cond_2524_1_main_InvokeMethod2(&&(&&(>(+(x3, 1), 0), >(+(x2, 1), 0)), >(x2, +(x3, 1))), java.lang.Object(ARRAY(x2)), x3)
Cond_2524_1_main_InvokeMethod2(TRUE, java.lang.Object(ARRAY(x2)), x3) → 2346_1_main_InvokeMethod(+(x3, 1), x2)
2382_1_main_InvokeMethod(java.lang.Object(ARRAY(x2)), x3) → Cond_2382_1_main_InvokeMethod2(&&(<(x3, x2), >(+(x2, 1), 0)), java.lang.Object(ARRAY(x2)), x3)
Cond_2382_1_main_InvokeMethod2(TRUE, java.lang.Object(ARRAY(x2)), x3) → 2486_1_main_InvokeMethod(x3, x2)
R rules:
2346_0_power_Load(x0, x1) → 914_0_power_GT(x0, x1)
2382_0_even_Load(x0) → 1052_0_even_GT(x0)
2486_0_power_Load(x0, x1) → 914_0_power_GT(x0, x1)
2524_0_odd_Load(x0) → 1484_0_odd_GT(x0)
914_0_power_GT(x0, 0) → 931_0_power_Return(x0)
914_0_power_GT(x0, 1) → 977_0_power_Return(x0)
914_0_power_GT(x0, x1) → Cond_914_0_power_GT(>(x1, 1), x0, x1)
Cond_914_0_power_GT(TRUE, x0, x1) → 1030_1_power_InvokeMethod(x0, x1, *(x0, x0))
1030_1_power_InvokeMethod(x2, x3, x0) → 1298_0_power_NE(x2, %(x3, 2))
1298_0_power_NE(x0, 0) → 1322_0_power_Return(x0)
1298_0_power_NE(x0, 1) → 1330_0_power_Return(x1_[0])
1052_0_even_GT(0) → 1073_0_even_Return
1052_0_even_GT(1) → 1124_0_even_Return
1052_0_even_GT(x0) → Cond_1052_0_even_GT(&&(>(x0, 0), !(=(x0, 1))), x0)
Cond_1052_0_even_GT(TRUE, x0) → 1178_1_even_InvokeMethod(1484_0_odd_GT(-(x0, 1)), -(x0, 1))
1178_1_even_InvokeMethod(1565_0_odd_Return, 1) → 1265_0_even_Return
1178_1_even_InvokeMethod(1629_0_odd_Return, x1) → 1265_0_even_Return
1484_0_odd_GT(0) → 1520_0_odd_Return
1484_0_odd_GT(1) → 1565_0_odd_Return
1484_0_odd_GT(x0) → Cond_1484_0_odd_GT(&&(>(x0, 0), !(=(x0, 1))))
Cond_1484_0_odd_GT(TRUE) → 1604_1_odd_InvokeMethod
1604_1_odd_InvokeMethod1629_0_odd_Return

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


P rules:
2346_1_main_InvokeMethod(x0, x1) → 2346_1_main_InvokeMethod(+(x0, 1), x1) | &&(&&(>(x1, -1), >(x1, +(x0, 1))), >(x0, -1))
R rules:
2346_0_power_Load(x0, x1) → 914_0_power_GT(x0, x1)
2486_0_power_Load(x0, x1) → 914_0_power_GT(x0, x1)
2524_0_odd_Load(x0) → 1484_0_odd_GT(x0)
914_0_power_GT(x0, 0) → 931_0_power_Return(x0)
914_0_power_GT(x0, 1) → 977_0_power_Return(x0)
1298_0_power_NE(x0, 0) → 1322_0_power_Return(x0)
1298_0_power_NE(x0, 1) → 1330_0_power_Return(x1_[0])
1178_1_even_InvokeMethod(1565_0_odd_Return, 1) → 1265_0_even_Return
1178_1_even_InvokeMethod(1629_0_odd_Return, x1) → 1265_0_even_Return
1484_0_odd_GT(0) → 1520_0_odd_Return
1484_0_odd_GT(1) → 1565_0_odd_Return
2382_0_even_Load(0) → 1073_0_even_Return
2382_0_even_Load(1) → 1124_0_even_Return
2382_0_even_Load(x0) → 1178_1_even_InvokeMethod(1484_0_odd_GT(-(x0, 1)), -(x0, 1)) | &&(>(x0, 0), !(=(x0, 1)))
914_0_power_GT(x0, x1) → 1298_0_power_NE(x0, %(x1, 2)) | >(x1, 1)
1484_0_odd_GT(x0) → 1629_0_odd_Return | &&(>(x0, 0), !(=(x0, 1)))

Performed bisimulation on rules. Used the following equivalence classes: {[2346_0_power_Load_2, 2486_0_power_Load_2]=2346_0_power_Load_2, [931_0_power_Return_1, 977_0_power_Return_1, 1322_0_power_Return_1, 1330_0_power_Return_1]=931_0_power_Return_1, [1565_0_odd_Return, 1265_0_even_Return, 1629_0_odd_Return, 1520_0_odd_Return, 1073_0_even_Return, 1124_0_even_Return]=1565_0_odd_Return}


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


P rules:
2346_1_MAIN_INVOKEMETHOD(x0, x1) → COND_2346_1_MAIN_INVOKEMETHOD(&&(&&(>(x1, -1), >(x1, +(x0, 1))), >(x0, -1)), x0, x1)
COND_2346_1_MAIN_INVOKEMETHOD(TRUE, x0, x1) → 2346_1_MAIN_INVOKEMETHOD(+(x0, 1), x1)
R rules:
2346_0_power_Load(x0, x1) → 914_0_power_GT(x0, x1)
2524_0_odd_Load(x0) → 1484_0_odd_GT(x0)
914_0_power_GT(x0, 0) → 931_0_power_Return(x0)
914_0_power_GT(x0, 1) → 931_0_power_Return(x0)
1298_0_power_NE(x0, 0) → 931_0_power_Return(x0)
1298_0_power_NE(x0, 1) → 931_0_power_Return(x1_[0])
1178_1_even_InvokeMethod(1565_0_odd_Return, 1) → 1565_0_odd_Return
1178_1_even_InvokeMethod(1565_0_odd_Return, x1) → 1565_0_odd_Return
1484_0_odd_GT(0) → 1565_0_odd_Return
1484_0_odd_GT(1) → 1565_0_odd_Return
2382_0_even_Load(0) → 1565_0_odd_Return
2382_0_even_Load(1) → 1565_0_odd_Return
2382_0_even_Load(x0) → Cond_2382_0_even_Load(&&(>(x0, 0), !(=(x0, 1))), x0)
Cond_2382_0_even_Load(TRUE, x0) → 1178_1_even_InvokeMethod(1484_0_odd_GT(-(x0, 1)), -(x0, 1))
914_0_power_GT(x0, x1) → Cond_914_0_power_GT(>(x1, 1), x0, x1)
Cond_914_0_power_GT(TRUE, x0, x1) → 1298_0_power_NE(x0, %(x1, 2))
1484_0_odd_GT(x0) → Cond_1484_0_odd_GT(&&(>(x0, 0), !(=(x0, 1))), x0)
Cond_1484_0_odd_GT(TRUE, x0) → 1565_0_odd_Return

(21) Obligation:

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


The following domains are used:

Boolean, Integer


The ITRS R consists of the following rules:
2346_0_power_Load(x0, x1) → 914_0_power_GT(x0, x1)
2524_0_odd_Load(x0) → 1484_0_odd_GT(x0)
914_0_power_GT(x0, 0) → 931_0_power_Return(x0)
914_0_power_GT(x0, 1) → 931_0_power_Return(x0)
1298_0_power_NE(x0, 0) → 931_0_power_Return(x0)
1298_0_power_NE(x0, 1) → 931_0_power_Return(x1_[0])
1178_1_even_InvokeMethod(1565_0_odd_Return, 1) → 1565_0_odd_Return
1178_1_even_InvokeMethod(1565_0_odd_Return, x1) → 1565_0_odd_Return
1484_0_odd_GT(0) → 1565_0_odd_Return
1484_0_odd_GT(1) → 1565_0_odd_Return
2382_0_even_Load(0) → 1565_0_odd_Return
2382_0_even_Load(1) → 1565_0_odd_Return
2382_0_even_Load(x0) → Cond_2382_0_even_Load(x0 > 0 && !(x0 = 1), x0)
Cond_2382_0_even_Load(TRUE, x0) → 1178_1_even_InvokeMethod(1484_0_odd_GT(x0 - 1), x0 - 1)
914_0_power_GT(x0, x1) → Cond_914_0_power_GT(x1 > 1, x0, x1)
Cond_914_0_power_GT(TRUE, x0, x1) → 1298_0_power_NE(x0, x1 % 2)
1484_0_odd_GT(x0) → Cond_1484_0_odd_GT(x0 > 0 && !(x0 = 1), x0)
Cond_1484_0_odd_GT(TRUE, x0) → 1565_0_odd_Return

The integer pair graph contains the following rules and edges:
(0): 2346_1_MAIN_INVOKEMETHOD(x0[0], x1[0]) → COND_2346_1_MAIN_INVOKEMETHOD(x1[0] > -1 && x1[0] > x0[0] + 1 && x0[0] > -1, x0[0], x1[0])
(1): COND_2346_1_MAIN_INVOKEMETHOD(TRUE, x0[1], x1[1]) → 2346_1_MAIN_INVOKEMETHOD(x0[1] + 1, x1[1])

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


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



The set Q consists of the following terms:
2346_0_power_Load(x0, x1)
2524_0_odd_Load(x0)
1298_0_power_NE(x0, 0)
1298_0_power_NE(x0, 1)
1178_1_even_InvokeMethod(1565_0_odd_Return, x0)
2382_0_even_Load(x0)
Cond_2382_0_even_Load(TRUE, x0)
914_0_power_GT(x0, x1)
Cond_914_0_power_GT(TRUE, x0, x1)
1484_0_odd_GT(x0)
Cond_1484_0_odd_GT(TRUE, x0)

(22) 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@715c057c 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 2346_1_MAIN_INVOKEMETHOD(x0, x1) → COND_2346_1_MAIN_INVOKEMETHOD(&&(&&(>(x1, -1), >(x1, +(x0, 1))), >(x0, -1)), x0, x1) the following chains were created:
  • We consider the chain 2346_1_MAIN_INVOKEMETHOD(x0[0], x1[0]) → COND_2346_1_MAIN_INVOKEMETHOD(&&(&&(>(x1[0], -1), >(x1[0], +(x0[0], 1))), >(x0[0], -1)), x0[0], x1[0]), COND_2346_1_MAIN_INVOKEMETHOD(TRUE, x0[1], x1[1]) → 2346_1_MAIN_INVOKEMETHOD(+(x0[1], 1), x1[1]) which results in the following constraint:

    (1)    (&&(&&(>(x1[0], -1), >(x1[0], +(x0[0], 1))), >(x0[0], -1))=TRUEx0[0]=x0[1]x1[0]=x1[1]2346_1_MAIN_INVOKEMETHOD(x0[0], x1[0])≥NonInfC∧2346_1_MAIN_INVOKEMETHOD(x0[0], x1[0])≥COND_2346_1_MAIN_INVOKEMETHOD(&&(&&(>(x1[0], -1), >(x1[0], +(x0[0], 1))), >(x0[0], -1)), x0[0], x1[0])∧(UIncreasing(COND_2346_1_MAIN_INVOKEMETHOD(&&(&&(>(x1[0], -1), >(x1[0], +(x0[0], 1))), >(x0[0], -1)), x0[0], x1[0])), ≥))



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

    (2)    (>(x0[0], -1)=TRUE>(x1[0], -1)=TRUE>(x1[0], +(x0[0], 1))=TRUE2346_1_MAIN_INVOKEMETHOD(x0[0], x1[0])≥NonInfC∧2346_1_MAIN_INVOKEMETHOD(x0[0], x1[0])≥COND_2346_1_MAIN_INVOKEMETHOD(&&(&&(>(x1[0], -1), >(x1[0], +(x0[0], 1))), >(x0[0], -1)), x0[0], x1[0])∧(UIncreasing(COND_2346_1_MAIN_INVOKEMETHOD(&&(&&(>(x1[0], -1), >(x1[0], +(x0[0], 1))), >(x0[0], -1)), x0[0], x1[0])), ≥))



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

    (3)    (x0[0] ≥ 0∧x1[0] ≥ 0∧x1[0] + [-2] + [-1]x0[0] ≥ 0 ⇒ (UIncreasing(COND_2346_1_MAIN_INVOKEMETHOD(&&(&&(>(x1[0], -1), >(x1[0], +(x0[0], 1))), >(x0[0], -1)), x0[0], x1[0])), ≥)∧[(-1)Bound*bni_32] + [(2)bni_32]x1[0] + [(-1)bni_32]x0[0] ≥ 0∧[(-1)bso_33] ≥ 0)



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

    (4)    (x0[0] ≥ 0∧x1[0] ≥ 0∧x1[0] + [-2] + [-1]x0[0] ≥ 0 ⇒ (UIncreasing(COND_2346_1_MAIN_INVOKEMETHOD(&&(&&(>(x1[0], -1), >(x1[0], +(x0[0], 1))), >(x0[0], -1)), x0[0], x1[0])), ≥)∧[(-1)Bound*bni_32] + [(2)bni_32]x1[0] + [(-1)bni_32]x0[0] ≥ 0∧[(-1)bso_33] ≥ 0)



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

    (5)    (x0[0] ≥ 0∧x1[0] ≥ 0∧x1[0] + [-2] + [-1]x0[0] ≥ 0 ⇒ (UIncreasing(COND_2346_1_MAIN_INVOKEMETHOD(&&(&&(>(x1[0], -1), >(x1[0], +(x0[0], 1))), >(x0[0], -1)), x0[0], x1[0])), ≥)∧[(-1)Bound*bni_32] + [(2)bni_32]x1[0] + [(-1)bni_32]x0[0] ≥ 0∧[(-1)bso_33] ≥ 0)



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

    (6)    (x0[0] ≥ 0∧[2] + x0[0] + x1[0] ≥ 0∧x1[0] ≥ 0 ⇒ (UIncreasing(COND_2346_1_MAIN_INVOKEMETHOD(&&(&&(>(x1[0], -1), >(x1[0], +(x0[0], 1))), >(x0[0], -1)), x0[0], x1[0])), ≥)∧[(-1)Bound*bni_32 + (4)bni_32] + [bni_32]x0[0] + [(2)bni_32]x1[0] ≥ 0∧[(-1)bso_33] ≥ 0)







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

    (7)    (COND_2346_1_MAIN_INVOKEMETHOD(TRUE, x0[1], x1[1])≥NonInfC∧COND_2346_1_MAIN_INVOKEMETHOD(TRUE, x0[1], x1[1])≥2346_1_MAIN_INVOKEMETHOD(+(x0[1], 1), x1[1])∧(UIncreasing(2346_1_MAIN_INVOKEMETHOD(+(x0[1], 1), x1[1])), ≥))



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

    (8)    ((UIncreasing(2346_1_MAIN_INVOKEMETHOD(+(x0[1], 1), x1[1])), ≥)∧[bni_34] = 0∧[1 + (-1)bso_35] ≥ 0)



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

    (9)    ((UIncreasing(2346_1_MAIN_INVOKEMETHOD(+(x0[1], 1), x1[1])), ≥)∧[bni_34] = 0∧[1 + (-1)bso_35] ≥ 0)



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

    (10)    ((UIncreasing(2346_1_MAIN_INVOKEMETHOD(+(x0[1], 1), x1[1])), ≥)∧[bni_34] = 0∧[1 + (-1)bso_35] ≥ 0)



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

    (11)    ((UIncreasing(2346_1_MAIN_INVOKEMETHOD(+(x0[1], 1), x1[1])), ≥)∧[bni_34] = 0∧0 = 0∧0 = 0∧[1 + (-1)bso_35] ≥ 0)







To summarize, we get the following constraints P for the following pairs.
  • 2346_1_MAIN_INVOKEMETHOD(x0, x1) → COND_2346_1_MAIN_INVOKEMETHOD(&&(&&(>(x1, -1), >(x1, +(x0, 1))), >(x0, -1)), x0, x1)
    • (x0[0] ≥ 0∧[2] + x0[0] + x1[0] ≥ 0∧x1[0] ≥ 0 ⇒ (UIncreasing(COND_2346_1_MAIN_INVOKEMETHOD(&&(&&(>(x1[0], -1), >(x1[0], +(x0[0], 1))), >(x0[0], -1)), x0[0], x1[0])), ≥)∧[(-1)Bound*bni_32 + (4)bni_32] + [bni_32]x0[0] + [(2)bni_32]x1[0] ≥ 0∧[(-1)bso_33] ≥ 0)

  • COND_2346_1_MAIN_INVOKEMETHOD(TRUE, x0, x1) → 2346_1_MAIN_INVOKEMETHOD(+(x0, 1), x1)
    • ((UIncreasing(2346_1_MAIN_INVOKEMETHOD(+(x0[1], 1), x1[1])), ≥)∧[bni_34] = 0∧0 = 0∧0 = 0∧[1 + (-1)bso_35] ≥ 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(2346_0_power_Load(x1, x2)) = [-1]   
POL(914_0_power_GT(x1, x2)) = [-1] + [-1]x2   
POL(2524_0_odd_Load(x1)) = [-1]   
POL(1484_0_odd_GT(x1)) = [-1] + [-1]x1   
POL(0) = 0   
POL(931_0_power_Return(x1)) = [-1]   
POL(1) = [1]   
POL(1298_0_power_NE(x1, x2)) = [-1] + [-1]x2   
POL(1178_1_even_InvokeMethod(x1, x2)) = [-1] + [-1]x2 + [-1]x1   
POL(1565_0_odd_Return) = [-1]   
POL(2382_0_even_Load(x1)) = [-1] + [-1]x1   
POL(Cond_2382_0_even_Load(x1, x2)) = [-1] + [-1]x2   
POL(&&(x1, x2)) = [-1]   
POL(>(x1, x2)) = [-1]   
POL(!(x1)) = [-1]   
POL(=(x1, x2)) = [-1]   
POL(-(x1, x2)) = x1 + [-1]x2   
POL(Cond_914_0_power_GT(x1, x2, x3)) = [-1] + [-1]x3   
POL(2) = [2]   
POL(Cond_1484_0_odd_GT(x1, x2)) = [-1] + [-1]x2   
POL(2346_1_MAIN_INVOKEMETHOD(x1, x2)) = [2]x2 + [-1]x1   
POL(COND_2346_1_MAIN_INVOKEMETHOD(x1, x2, x3)) = [2]x3 + [-1]x2   
POL(-1) = [-1]   
POL(+(x1, x2)) = x1 + x2   

The following pairs are in P>:

COND_2346_1_MAIN_INVOKEMETHOD(TRUE, x0[1], x1[1]) → 2346_1_MAIN_INVOKEMETHOD(+(x0[1], 1), x1[1])

The following pairs are in Pbound:

2346_1_MAIN_INVOKEMETHOD(x0[0], x1[0]) → COND_2346_1_MAIN_INVOKEMETHOD(&&(&&(>(x1[0], -1), >(x1[0], +(x0[0], 1))), >(x0[0], -1)), x0[0], x1[0])

The following pairs are in P:

2346_1_MAIN_INVOKEMETHOD(x0[0], x1[0]) → COND_2346_1_MAIN_INVOKEMETHOD(&&(&&(>(x1[0], -1), >(x1[0], +(x0[0], 1))), >(x0[0], -1)), x0[0], x1[0])

There are no usable rules.

(23) Complex Obligation (AND)

(24) Obligation:

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


The following domains are used:

Boolean, Integer


The ITRS R consists of the following rules:
2346_0_power_Load(x0, x1) → 914_0_power_GT(x0, x1)
2524_0_odd_Load(x0) → 1484_0_odd_GT(x0)
914_0_power_GT(x0, 0) → 931_0_power_Return(x0)
914_0_power_GT(x0, 1) → 931_0_power_Return(x0)
1298_0_power_NE(x0, 0) → 931_0_power_Return(x0)
1298_0_power_NE(x0, 1) → 931_0_power_Return(x1_[0])
1178_1_even_InvokeMethod(1565_0_odd_Return, 1) → 1565_0_odd_Return
1178_1_even_InvokeMethod(1565_0_odd_Return, x1) → 1565_0_odd_Return
1484_0_odd_GT(0) → 1565_0_odd_Return
1484_0_odd_GT(1) → 1565_0_odd_Return
2382_0_even_Load(0) → 1565_0_odd_Return
2382_0_even_Load(1) → 1565_0_odd_Return
2382_0_even_Load(x0) → Cond_2382_0_even_Load(x0 > 0 && !(x0 = 1), x0)
Cond_2382_0_even_Load(TRUE, x0) → 1178_1_even_InvokeMethod(1484_0_odd_GT(x0 - 1), x0 - 1)
914_0_power_GT(x0, x1) → Cond_914_0_power_GT(x1 > 1, x0, x1)
Cond_914_0_power_GT(TRUE, x0, x1) → 1298_0_power_NE(x0, x1 % 2)
1484_0_odd_GT(x0) → Cond_1484_0_odd_GT(x0 > 0 && !(x0 = 1), x0)
Cond_1484_0_odd_GT(TRUE, x0) → 1565_0_odd_Return

The integer pair graph contains the following rules and edges:
(0): 2346_1_MAIN_INVOKEMETHOD(x0[0], x1[0]) → COND_2346_1_MAIN_INVOKEMETHOD(x1[0] > -1 && x1[0] > x0[0] + 1 && x0[0] > -1, x0[0], x1[0])


The set Q consists of the following terms:
2346_0_power_Load(x0, x1)
2524_0_odd_Load(x0)
1298_0_power_NE(x0, 0)
1298_0_power_NE(x0, 1)
1178_1_even_InvokeMethod(1565_0_odd_Return, x0)
2382_0_even_Load(x0)
Cond_2382_0_even_Load(TRUE, x0)
914_0_power_GT(x0, x1)
Cond_914_0_power_GT(TRUE, x0, x1)
1484_0_odd_GT(x0)
Cond_1484_0_odd_GT(TRUE, x0)

(25) IDependencyGraphProof (EQUIVALENT transformation)

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

(26) TRUE

(27) Obligation:

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


The following domains are used:

Boolean, Integer


The ITRS R consists of the following rules:
2346_0_power_Load(x0, x1) → 914_0_power_GT(x0, x1)
2524_0_odd_Load(x0) → 1484_0_odd_GT(x0)
914_0_power_GT(x0, 0) → 931_0_power_Return(x0)
914_0_power_GT(x0, 1) → 931_0_power_Return(x0)
1298_0_power_NE(x0, 0) → 931_0_power_Return(x0)
1298_0_power_NE(x0, 1) → 931_0_power_Return(x1_[0])
1178_1_even_InvokeMethod(1565_0_odd_Return, 1) → 1565_0_odd_Return
1178_1_even_InvokeMethod(1565_0_odd_Return, x1) → 1565_0_odd_Return
1484_0_odd_GT(0) → 1565_0_odd_Return
1484_0_odd_GT(1) → 1565_0_odd_Return
2382_0_even_Load(0) → 1565_0_odd_Return
2382_0_even_Load(1) → 1565_0_odd_Return
2382_0_even_Load(x0) → Cond_2382_0_even_Load(x0 > 0 && !(x0 = 1), x0)
Cond_2382_0_even_Load(TRUE, x0) → 1178_1_even_InvokeMethod(1484_0_odd_GT(x0 - 1), x0 - 1)
914_0_power_GT(x0, x1) → Cond_914_0_power_GT(x1 > 1, x0, x1)
Cond_914_0_power_GT(TRUE, x0, x1) → 1298_0_power_NE(x0, x1 % 2)
1484_0_odd_GT(x0) → Cond_1484_0_odd_GT(x0 > 0 && !(x0 = 1), x0)
Cond_1484_0_odd_GT(TRUE, x0) → 1565_0_odd_Return

The integer pair graph contains the following rules and edges:
(1): COND_2346_1_MAIN_INVOKEMETHOD(TRUE, x0[1], x1[1]) → 2346_1_MAIN_INVOKEMETHOD(x0[1] + 1, x1[1])


The set Q consists of the following terms:
2346_0_power_Load(x0, x1)
2524_0_odd_Load(x0)
1298_0_power_NE(x0, 0)
1298_0_power_NE(x0, 1)
1178_1_even_InvokeMethod(1565_0_odd_Return, x0)
2382_0_even_Load(x0)
Cond_2382_0_even_Load(TRUE, x0)
914_0_power_GT(x0, x1)
Cond_914_0_power_GT(TRUE, x0, x1)
1484_0_odd_GT(x0)
Cond_1484_0_odd_GT(TRUE, x0)

(28) IDependencyGraphProof (EQUIVALENT transformation)

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

(29) TRUE