(0) Obligation:

JBC Problem based on JBC Program:
`No human-readable program information known.`

Manifest-Version: 1.0 Created-By: 1.6.0_16 (Sun Microsystems Inc.) Main-Class: CountUpRound

(1) JBC2FIG (SOUND transformation)

Constructed FIGraph.

(2) Obligation:

FIGraph based on JBC Program:
Graph of 178 nodes with 1 SCC.

(3) FIGtoITRSProof (SOUND transformation)

Transformed FIGraph to ITRS rules

(4) Obligation:

ITRS problem:

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

The TRS R consists of the following rules:
Load346(i7, i31) → Cond_Load346(i31 >= 0 && i7 > i31, i7, i31)
Cond_Load346(TRUE, i7, i31) → Store528(i7, i31 + 1 + 1)
Load346(i7, i31) → Cond_Load3461(i31 >= 0 && i7 > i31 && 0 = i31 + 1 % 2, i7, i31)
The set Q consists of the following terms:
Store528(x0, x1)

(6) 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:
Load346(i7, i31) → Cond_Load346(i31 >= 0 && i7 > i31, i7, i31)
Cond_Load346(TRUE, i7, i31) → Store528(i7, i31 + 1 + 1)
Load346(i7, i31) → Cond_Load3461(i31 >= 0 && i7 > i31 && 0 = i31 + 1 % 2, i7, i31)

The integer pair graph contains the following rules and edges:
(0): LOAD346(i7[0], i31[0]) → COND_LOAD346(i31[0] >= 0 && i7[0] > i31[0], i7[0], i31[0])
(1): COND_LOAD346(TRUE, i7[1], i31[1]) → STORE528(i7[1], i31[1] + 1 + 1)
(2): STORE528(i7[2], i47[2]) → LOAD346(i7[2], i47[2])
(3): LOAD346(i7[3], i31[3]) → COND_LOAD3461(i31[3] >= 0 && i7[3] > i31[3] && 0 = i31[3] + 1 % 2, i7[3], i31[3])

(0) -> (1), if ((i31[0] >= 0 && i7[0] > i31[0]* TRUE)∧(i7[0]* i7[1])∧(i31[0]* i31[1]))

(1) -> (2), if ((i31[1] + 1 + 1* i47[2])∧(i7[1]* i7[2]))

(2) -> (0), if ((i7[2]* i7[0])∧(i47[2]* i31[0]))

(2) -> (3), if ((i7[2]* i7[3])∧(i47[2]* i31[3]))

(3) -> (4), if ((i31[3] >= 0 && i7[3] > i31[3] && 0 = i31[3] + 1 % 2* TRUE)∧(i7[3]* i7[4])∧(i31[3]* i31[4]))

(4) -> (0), if ((i31[4] + 1* i31[0])∧(i7[4]* i7[0]))

(4) -> (3), if ((i31[4] + 1* i31[3])∧(i7[4]* i7[3]))

The set Q consists of the following terms:
Store528(x0, x1)

(7) UsableRulesProof (EQUIVALENT transformation)

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

(8) Obligation:

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

The following domains are used:

Boolean, Integer

R is empty.

The integer pair graph contains the following rules and edges:
(0): LOAD346(i7[0], i31[0]) → COND_LOAD346(i31[0] >= 0 && i7[0] > i31[0], i7[0], i31[0])
(1): COND_LOAD346(TRUE, i7[1], i31[1]) → STORE528(i7[1], i31[1] + 1 + 1)
(2): STORE528(i7[2], i47[2]) → LOAD346(i7[2], i47[2])
(3): LOAD346(i7[3], i31[3]) → COND_LOAD3461(i31[3] >= 0 && i7[3] > i31[3] && 0 = i31[3] + 1 % 2, i7[3], i31[3])

(0) -> (1), if ((i31[0] >= 0 && i7[0] > i31[0]* TRUE)∧(i7[0]* i7[1])∧(i31[0]* i31[1]))

(1) -> (2), if ((i31[1] + 1 + 1* i47[2])∧(i7[1]* i7[2]))

(2) -> (0), if ((i7[2]* i7[0])∧(i47[2]* i31[0]))

(2) -> (3), if ((i7[2]* i7[3])∧(i47[2]* i31[3]))

(3) -> (4), if ((i31[3] >= 0 && i7[3] > i31[3] && 0 = i31[3] + 1 % 2* TRUE)∧(i7[3]* i7[4])∧(i31[3]* i31[4]))

(4) -> (0), if ((i31[4] + 1* i31[0])∧(i7[4]* i7[0]))

(4) -> (3), if ((i31[4] + 1* i31[3])∧(i7[4]* i7[3]))

The set Q consists of the following terms:
Store528(x0, x1)

(9) IDPNonInfProof (SOUND transformation)

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

For Pair LOAD346(i7, i31) → COND_LOAD346(&&(>=(i31, 0), >(i7, i31)), i7, i31) the following chains were created:
• We consider the chain LOAD346(i7[0], i31[0]) → COND_LOAD346(&&(>=(i31[0], 0), >(i7[0], i31[0])), i7[0], i31[0]), COND_LOAD346(TRUE, i7[1], i31[1]) → STORE528(i7[1], +(+(i31[1], 1), 1)) which results in the following constraint:

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

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

(3)    (i31[0] ≥ 0∧i7[0] + [-1] + [-1]i31[0] ≥ 0 ⇒ (UIncreasing(COND_LOAD346(&&(>=(i31[0], 0), >(i7[0], i31[0])), i7[0], i31[0])), ≥)∧[(2)bni_14 + (-1)Bound*bni_14] + [bni_14]i7[0] + [(-1)bni_14]i31[0] ≥ 0∧[1 + (-1)bso_15] ≥ 0)

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

(4)    (i31[0] ≥ 0∧i7[0] + [-1] + [-1]i31[0] ≥ 0 ⇒ (UIncreasing(COND_LOAD346(&&(>=(i31[0], 0), >(i7[0], i31[0])), i7[0], i31[0])), ≥)∧[(2)bni_14 + (-1)Bound*bni_14] + [bni_14]i7[0] + [(-1)bni_14]i31[0] ≥ 0∧[1 + (-1)bso_15] ≥ 0)

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

(5)    (i31[0] ≥ 0∧i7[0] + [-1] + [-1]i31[0] ≥ 0 ⇒ (UIncreasing(COND_LOAD346(&&(>=(i31[0], 0), >(i7[0], i31[0])), i7[0], i31[0])), ≥)∧[(2)bni_14 + (-1)Bound*bni_14] + [bni_14]i7[0] + [(-1)bni_14]i31[0] ≥ 0∧[1 + (-1)bso_15] ≥ 0)

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

(6)    (i31[0] ≥ 0∧i7[0] ≥ 0 ⇒ (UIncreasing(COND_LOAD346(&&(>=(i31[0], 0), >(i7[0], i31[0])), i7[0], i31[0])), ≥)∧[(3)bni_14 + (-1)Bound*bni_14] + [bni_14]i7[0] ≥ 0∧[1 + (-1)bso_15] ≥ 0)

For Pair COND_LOAD346(TRUE, i7, i31) → STORE528(i7, +(+(i31, 1), 1)) the following chains were created:
• We consider the chain COND_LOAD346(TRUE, i7[1], i31[1]) → STORE528(i7[1], +(+(i31[1], 1), 1)) which results in the following constraint:

(7)    (COND_LOAD346(TRUE, i7[1], i31[1])≥NonInfC∧COND_LOAD346(TRUE, i7[1], i31[1])≥STORE528(i7[1], +(+(i31[1], 1), 1))∧(UIncreasing(STORE528(i7[1], +(+(i31[1], 1), 1))), ≥))

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

(8)    ((UIncreasing(STORE528(i7[1], +(+(i31[1], 1), 1))), ≥)∧[1 + (-1)bso_17] ≥ 0)

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

(9)    ((UIncreasing(STORE528(i7[1], +(+(i31[1], 1), 1))), ≥)∧[1 + (-1)bso_17] ≥ 0)

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

(10)    ((UIncreasing(STORE528(i7[1], +(+(i31[1], 1), 1))), ≥)∧[1 + (-1)bso_17] ≥ 0)

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

(11)    ((UIncreasing(STORE528(i7[1], +(+(i31[1], 1), 1))), ≥)∧0 = 0∧0 = 0∧[1 + (-1)bso_17] ≥ 0)

For Pair STORE528(i7, i47) → LOAD346(i7, i47) the following chains were created:
• We consider the chain STORE528(i7[2], i47[2]) → LOAD346(i7[2], i47[2]), LOAD346(i7[0], i31[0]) → COND_LOAD346(&&(>=(i31[0], 0), >(i7[0], i31[0])), i7[0], i31[0]) which results in the following constraint:

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

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

(14)    ((UIncreasing(LOAD346(i7[2], i47[2])), ≥)∧[(-1)bso_19] ≥ 0)

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

(15)    ((UIncreasing(LOAD346(i7[2], i47[2])), ≥)∧[(-1)bso_19] ≥ 0)

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

(16)    ((UIncreasing(LOAD346(i7[2], i47[2])), ≥)∧[(-1)bso_19] ≥ 0)

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

(17)    ((UIncreasing(LOAD346(i7[2], i47[2])), ≥)∧0 = 0∧0 = 0∧[(-1)bso_19] ≥ 0)

• We consider the chain STORE528(i7[2], i47[2]) → LOAD346(i7[2], i47[2]), LOAD346(i7[3], i31[3]) → COND_LOAD3461(&&(&&(>=(i31[3], 0), >(i7[3], i31[3])), =(0, %(+(i31[3], 1), 2))), i7[3], i31[3]) which results in the following constraint:

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

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

(20)    ((UIncreasing(LOAD346(i7[2], i47[2])), ≥)∧[(-1)bso_19] ≥ 0)

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

(21)    ((UIncreasing(LOAD346(i7[2], i47[2])), ≥)∧[(-1)bso_19] ≥ 0)

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

(22)    ((UIncreasing(LOAD346(i7[2], i47[2])), ≥)∧[(-1)bso_19] ≥ 0)

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

(23)    ((UIncreasing(LOAD346(i7[2], i47[2])), ≥)∧0 = 0∧0 = 0∧[(-1)bso_19] ≥ 0)

For Pair LOAD346(i7, i31) → COND_LOAD3461(&&(&&(>=(i31, 0), >(i7, i31)), =(0, %(+(i31, 1), 2))), i7, i31) the following chains were created:
• We consider the chain LOAD346(i7[3], i31[3]) → COND_LOAD3461(&&(&&(>=(i31[3], 0), >(i7[3], i31[3])), =(0, %(+(i31[3], 1), 2))), i7[3], i31[3]), COND_LOAD3461(TRUE, i7[4], i31[4]) → LOAD346(i7[4], +(i31[4], 1)) which results in the following constraint:

(24)    (&&(&&(>=(i31[3], 0), >(i7[3], i31[3])), =(0, %(+(i31[3], 1), 2)))=TRUEi7[3]=i7[4]i31[3]=i31[4]LOAD346(i7[3], i31[3])≥NonInfC∧LOAD346(i7[3], i31[3])≥COND_LOAD3461(&&(&&(>=(i31[3], 0), >(i7[3], i31[3])), =(0, %(+(i31[3], 1), 2))), i7[3], i31[3])∧(UIncreasing(COND_LOAD3461(&&(&&(>=(i31[3], 0), >(i7[3], i31[3])), =(0, %(+(i31[3], 1), 2))), i7[3], i31[3])), ≥))

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

(25)    (>=(i31[3], 0)=TRUE>(i7[3], i31[3])=TRUE>=(0, %(+(i31[3], 1), 2))=TRUE<=(0, %(+(i31[3], 1), 2))=TRUELOAD346(i7[3], i31[3])≥NonInfC∧LOAD346(i7[3], i31[3])≥COND_LOAD3461(&&(&&(>=(i31[3], 0), >(i7[3], i31[3])), =(0, %(+(i31[3], 1), 2))), i7[3], i31[3])∧(UIncreasing(COND_LOAD3461(&&(&&(>=(i31[3], 0), >(i7[3], i31[3])), =(0, %(+(i31[3], 1), 2))), i7[3], i31[3])), ≥))

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

(26)    (i31[3] ≥ 0∧i7[3] + [-1] + [-1]i31[3] ≥ 0∧[-1]min{[2], [-2]} ≥ 0∧max{[2], [-2]} ≥ 0 ⇒ (UIncreasing(COND_LOAD3461(&&(&&(>=(i31[3], 0), >(i7[3], i31[3])), =(0, %(+(i31[3], 1), 2))), i7[3], i31[3])), ≥)∧[(2)bni_20 + (-1)Bound*bni_20] + [bni_20]i7[3] + [(-1)bni_20]i31[3] ≥ 0∧[(-1)bso_21] ≥ 0)

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

(27)    (i31[3] ≥ 0∧i7[3] + [-1] + [-1]i31[3] ≥ 0∧[-1]min{[2], [-2]} ≥ 0∧max{[2], [-2]} ≥ 0 ⇒ (UIncreasing(COND_LOAD3461(&&(&&(>=(i31[3], 0), >(i7[3], i31[3])), =(0, %(+(i31[3], 1), 2))), i7[3], i31[3])), ≥)∧[(2)bni_20 + (-1)Bound*bni_20] + [bni_20]i7[3] + [(-1)bni_20]i31[3] ≥ 0∧[(-1)bso_21] ≥ 0)

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

(28)    (i31[3] ≥ 0∧i7[3] + [-1] + [-1]i31[3] ≥ 0∧[4] ≥ 0∧[2] ≥ 0∧[2] ≥ 0 ⇒ (UIncreasing(COND_LOAD3461(&&(&&(>=(i31[3], 0), >(i7[3], i31[3])), =(0, %(+(i31[3], 1), 2))), i7[3], i31[3])), ≥)∧[(2)bni_20 + (-1)Bound*bni_20] + [bni_20]i7[3] + [(-1)bni_20]i31[3] ≥ 0∧[(-1)bso_21] ≥ 0)

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

(29)    (i31[3] ≥ 0∧i7[3] ≥ 0∧[4] ≥ 0∧[2] ≥ 0∧[2] ≥ 0 ⇒ (UIncreasing(COND_LOAD3461(&&(&&(>=(i31[3], 0), >(i7[3], i31[3])), =(0, %(+(i31[3], 1), 2))), i7[3], i31[3])), ≥)∧[(3)bni_20 + (-1)Bound*bni_20] + [bni_20]i7[3] ≥ 0∧[(-1)bso_21] ≥ 0)

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

(30)    (i31[3] ≥ 0∧i7[3] ≥ 0∧[1] ≥ 0∧[1] ≥ 0∧[1] ≥ 0 ⇒ (UIncreasing(COND_LOAD3461(&&(&&(>=(i31[3], 0), >(i7[3], i31[3])), =(0, %(+(i31[3], 1), 2))), i7[3], i31[3])), ≥)∧[(3)bni_20 + (-1)Bound*bni_20] + [bni_20]i7[3] ≥ 0∧[(-1)bso_21] ≥ 0)

For Pair COND_LOAD3461(TRUE, i7, i31) → LOAD346(i7, +(i31, 1)) the following chains were created:
• We consider the chain COND_LOAD3461(TRUE, i7[4], i31[4]) → LOAD346(i7[4], +(i31[4], 1)) which results in the following constraint:

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

(32)    ((UIncreasing(LOAD346(i7[4], +(i31[4], 1))), ≥)∧[1 + (-1)bso_23] ≥ 0)

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

(33)    ((UIncreasing(LOAD346(i7[4], +(i31[4], 1))), ≥)∧[1 + (-1)bso_23] ≥ 0)

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

(34)    ((UIncreasing(LOAD346(i7[4], +(i31[4], 1))), ≥)∧[1 + (-1)bso_23] ≥ 0)

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

(35)    ((UIncreasing(LOAD346(i7[4], +(i31[4], 1))), ≥)∧0 = 0∧0 = 0∧[1 + (-1)bso_23] ≥ 0)

To summarize, we get the following constraints P for the following pairs.
• (i31[0] ≥ 0∧i7[0] ≥ 0 ⇒ (UIncreasing(COND_LOAD346(&&(>=(i31[0], 0), >(i7[0], i31[0])), i7[0], i31[0])), ≥)∧[(3)bni_14 + (-1)Bound*bni_14] + [bni_14]i7[0] ≥ 0∧[1 + (-1)bso_15] ≥ 0)

• COND_LOAD346(TRUE, i7, i31) → STORE528(i7, +(+(i31, 1), 1))
• ((UIncreasing(STORE528(i7[1], +(+(i31[1], 1), 1))), ≥)∧0 = 0∧0 = 0∧[1 + (-1)bso_17] ≥ 0)

• STORE528(i7, i47) → LOAD346(i7, i47)
• ((UIncreasing(LOAD346(i7[2], i47[2])), ≥)∧0 = 0∧0 = 0∧[(-1)bso_19] ≥ 0)
• ((UIncreasing(LOAD346(i7[2], i47[2])), ≥)∧0 = 0∧0 = 0∧[(-1)bso_19] ≥ 0)

• LOAD346(i7, i31) → COND_LOAD3461(&&(&&(>=(i31, 0), >(i7, i31)), =(0, %(+(i31, 1), 2))), i7, i31)
• (i31[3] ≥ 0∧i7[3] ≥ 0∧[1] ≥ 0∧[1] ≥ 0∧[1] ≥ 0 ⇒ (UIncreasing(COND_LOAD3461(&&(&&(>=(i31[3], 0), >(i7[3], i31[3])), =(0, %(+(i31[3], 1), 2))), i7[3], i31[3])), ≥)∧[(3)bni_20 + (-1)Bound*bni_20] + [bni_20]i7[3] ≥ 0∧[(-1)bso_21] ≥ 0)

• ((UIncreasing(LOAD346(i7[4], +(i31[4], 1))), ≥)∧0 = 0∧0 = 0∧[1 + (-1)bso_23] ≥ 0)

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

POL(TRUE) = 0
POL(FALSE) = 0
POL(LOAD346(x1, x2)) = [2] + x1 + [-1]x2
POL(COND_LOAD346(x1, x2, x3)) = [1] + x2 + [-1]x3
POL(&&(x1, x2)) = [-1]
POL(>=(x1, x2)) = [-1]
POL(0) = 0
POL(>(x1, x2)) = [-1]
POL(STORE528(x1, x2)) = [2] + [-1]x2 + x1
POL(+(x1, x2)) = x1 + x2
POL(1) = [1]
POL(COND_LOAD3461(x1, x2, x3)) = [2] + [-1]x3 + x2
POL(=(x1, x2)) = [-1]
POL(2) = [2]

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

POL(%(x1, 2)-1 @ {}) = min{x2, [-1]x2}
POL(%(x1, 2)1 @ {}) = max{x2, [-1]x2}

The following pairs are in P>:

COND_LOAD346(TRUE, i7[1], i31[1]) → STORE528(i7[1], +(+(i31[1], 1), 1))

The following pairs are in Pbound:

LOAD346(i7[3], i31[3]) → COND_LOAD3461(&&(&&(>=(i31[3], 0), >(i7[3], i31[3])), =(0, %(+(i31[3], 1), 2))), i7[3], i31[3])

The following pairs are in P:

LOAD346(i7[3], i31[3]) → COND_LOAD3461(&&(&&(>=(i31[3], 0), >(i7[3], i31[3])), =(0, %(+(i31[3], 1), 2))), i7[3], i31[3])

There are no usable rules.

(11) Obligation:

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

The following domains are used:

Boolean, Integer

R is empty.

The integer pair graph contains the following rules and edges:
(2): STORE528(i7[2], i47[2]) → LOAD346(i7[2], i47[2])
(3): LOAD346(i7[3], i31[3]) → COND_LOAD3461(i31[3] >= 0 && i7[3] > i31[3] && 0 = i31[3] + 1 % 2, i7[3], i31[3])

(2) -> (3), if ((i7[2]* i7[3])∧(i47[2]* i31[3]))

The set Q consists of the following terms:
Store528(x0, x1)

(12) IDependencyGraphProof (EQUIVALENT transformation)

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

(14) Obligation:

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

The following domains are used:

Integer

R is empty.

The integer pair graph contains the following rules and edges:
(1): COND_LOAD346(TRUE, i7[1], i31[1]) → STORE528(i7[1], i31[1] + 1 + 1)
(2): STORE528(i7[2], i47[2]) → LOAD346(i7[2], i47[2])

(1) -> (2), if ((i31[1] + 1 + 1* i47[2])∧(i7[1]* i7[2]))

The set Q consists of the following terms: