0 JBC
↳1 JBC2FIG (⇐)
↳2 FIGraph
↳3 FIGtoITRSProof (⇐)
↳4 ITRS
↳5 GroundTermsRemoverProof (⇔)
↳6 ITRS
↳7 ITRStoIDPProof (⇔)
↳8 IDP
↳9 UsableRulesProof (⇔)
↳10 IDP
↳11 IDPNonInfProof (⇐)
↳12 AND
↳13 IDP
↳14 IDependencyGraphProof (⇔)
↳15 IDP
↳16 IDPNonInfProof (⇐)
↳17 AND
↳18 IDP
↳19 IDependencyGraphProof (⇔)
↳20 TRUE
↳21 IDP
↳22 IDependencyGraphProof (⇔)
↳23 TRUE
↳24 IDP
↳25 IDependencyGraphProof (⇔)
↳26 TRUE
/**
* Example taken from "A Term Rewriting Approach to the Automated Termination
* Analysis of Imperative Programs" (http://www.cs.unm.edu/~spf/papers/2009-02.pdf)
* and converted to Java.
*/
public class PastaC1 {
public static void main(String[] args) {
Random.args = args;
int x = Random.random();
while (x >= 0) {
int y = 1;
while (x > y) {
y = 2*y;
}
x--;
}
}
}
public class Random {
static String[] args;
static int index = 0;
public static int random() {
String string = args[index];
index++;
return string.length();
}
}
!= | ~ | 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 |
Load288(x1, x2) → Load288(x2)
Cond_Load6711(x1, x2, x3, x4) → Cond_Load6711(x1, x3, x4)
Load671(x1, x2, x3) → Load671(x2, x3)
Cond_Load671(x1, x2, x3, x4) → Cond_Load671(x1, x3, x4)
Cond_Load288(x1, x2, x3) → Cond_Load288(x1, x3)
!= | ~ | 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 |
!= | ~ | 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 |
Integer, Boolean
(0) -> (1), if ((i20[0] >= 0 →* TRUE)∧(i20[0] →* i20[1]))
(1) -> (2), if ((i20[1] →* i47[2])∧(1 →* i48[2]))
(1) -> (4), if ((1 →* i48[4])∧(i20[1] →* i47[4]))
(2) -> (3), if ((i48[2] →* i48[3])∧(i48[2] > 0 && i47[2] > i48[2] →* TRUE)∧(i47[2] →* i47[3]))
(3) -> (2), if ((i47[3] →* i47[2])∧(2 * i48[3] →* i48[2]))
(3) -> (4), if ((i47[3] →* i47[4])∧(2 * i48[3] →* i48[4]))
(4) -> (5), if ((i47[4] >= 0 && i48[4] > 0 && i47[4] <= i48[4] →* TRUE)∧(i48[4] →* i48[5])∧(i47[4] →* i47[5]))
(5) -> (0), if ((i47[5] + -1 →* i20[0]))
!= | ~ | 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 |
Integer, Boolean
(0) -> (1), if ((i20[0] >= 0 →* TRUE)∧(i20[0] →* i20[1]))
(1) -> (2), if ((i20[1] →* i47[2])∧(1 →* i48[2]))
(1) -> (4), if ((1 →* i48[4])∧(i20[1] →* i47[4]))
(2) -> (3), if ((i48[2] →* i48[3])∧(i48[2] > 0 && i47[2] > i48[2] →* TRUE)∧(i47[2] →* i47[3]))
(3) -> (2), if ((i47[3] →* i47[2])∧(2 * i48[3] →* i48[2]))
(3) -> (4), if ((i47[3] →* i47[4])∧(2 * i48[3] →* i48[4]))
(4) -> (5), if ((i47[4] >= 0 && i48[4] > 0 && i47[4] <= i48[4] →* TRUE)∧(i48[4] →* i48[5])∧(i47[4] →* i47[5]))
(5) -> (0), if ((i47[5] + -1 →* i20[0]))
(1) (>=(i20[0], 0)=TRUE∧i20[0]=i20[1] ⇒ LOAD288(i20[0])≥NonInfC∧LOAD288(i20[0])≥COND_LOAD288(>=(i20[0], 0), i20[0])∧(UIncreasing(COND_LOAD288(>=(i20[0], 0), i20[0])), ≥))
(2) (>=(i20[0], 0)=TRUE ⇒ LOAD288(i20[0])≥NonInfC∧LOAD288(i20[0])≥COND_LOAD288(>=(i20[0], 0), i20[0])∧(UIncreasing(COND_LOAD288(>=(i20[0], 0), i20[0])), ≥))
(3) (i20[0] ≥ 0 ⇒ (UIncreasing(COND_LOAD288(>=(i20[0], 0), i20[0])), ≥)∧[bni_23 + (-1)Bound*bni_23] + [(2)bni_23]i20[0] ≥ 0∧[1 + (-1)bso_24] ≥ 0)
(4) (i20[0] ≥ 0 ⇒ (UIncreasing(COND_LOAD288(>=(i20[0], 0), i20[0])), ≥)∧[bni_23 + (-1)Bound*bni_23] + [(2)bni_23]i20[0] ≥ 0∧[1 + (-1)bso_24] ≥ 0)
(5) (i20[0] ≥ 0 ⇒ (UIncreasing(COND_LOAD288(>=(i20[0], 0), i20[0])), ≥)∧[bni_23 + (-1)Bound*bni_23] + [(2)bni_23]i20[0] ≥ 0∧[1 + (-1)bso_24] ≥ 0)
(6) (>=(i20[0], 0)=TRUE∧i20[0]=i20[1]∧i20[1]=i47[2]∧1=i48[2] ⇒ COND_LOAD288(TRUE, i20[1])≥NonInfC∧COND_LOAD288(TRUE, i20[1])≥LOAD671(i20[1], 1)∧(UIncreasing(LOAD671(i20[1], 1)), ≥))
(7) (>=(i20[0], 0)=TRUE ⇒ COND_LOAD288(TRUE, i20[0])≥NonInfC∧COND_LOAD288(TRUE, i20[0])≥LOAD671(i20[0], 1)∧(UIncreasing(LOAD671(i20[1], 1)), ≥))
(8) (i20[0] ≥ 0 ⇒ (UIncreasing(LOAD671(i20[1], 1)), ≥)∧[(-1)Bound*bni_25] + [(2)bni_25]i20[0] ≥ 0∧[(-1)bso_26] ≥ 0)
(9) (i20[0] ≥ 0 ⇒ (UIncreasing(LOAD671(i20[1], 1)), ≥)∧[(-1)Bound*bni_25] + [(2)bni_25]i20[0] ≥ 0∧[(-1)bso_26] ≥ 0)
(10) (i20[0] ≥ 0 ⇒ (UIncreasing(LOAD671(i20[1], 1)), ≥)∧[(-1)Bound*bni_25] + [(2)bni_25]i20[0] ≥ 0∧[(-1)bso_26] ≥ 0)
(11) (>=(i20[0], 0)=TRUE∧i20[0]=i20[1]∧1=i48[4]∧i20[1]=i47[4] ⇒ COND_LOAD288(TRUE, i20[1])≥NonInfC∧COND_LOAD288(TRUE, i20[1])≥LOAD671(i20[1], 1)∧(UIncreasing(LOAD671(i20[1], 1)), ≥))
(12) (>=(i20[0], 0)=TRUE ⇒ COND_LOAD288(TRUE, i20[0])≥NonInfC∧COND_LOAD288(TRUE, i20[0])≥LOAD671(i20[0], 1)∧(UIncreasing(LOAD671(i20[1], 1)), ≥))
(13) (i20[0] ≥ 0 ⇒ (UIncreasing(LOAD671(i20[1], 1)), ≥)∧[(-1)Bound*bni_25] + [(2)bni_25]i20[0] ≥ 0∧[(-1)bso_26] ≥ 0)
(14) (i20[0] ≥ 0 ⇒ (UIncreasing(LOAD671(i20[1], 1)), ≥)∧[(-1)Bound*bni_25] + [(2)bni_25]i20[0] ≥ 0∧[(-1)bso_26] ≥ 0)
(15) (i20[0] ≥ 0 ⇒ (UIncreasing(LOAD671(i20[1], 1)), ≥)∧[(-1)Bound*bni_25] + [(2)bni_25]i20[0] ≥ 0∧[(-1)bso_26] ≥ 0)
(16) (i48[2]=i48[3]∧&&(>(i48[2], 0), >(i47[2], i48[2]))=TRUE∧i47[2]=i47[3] ⇒ LOAD671(i47[2], i48[2])≥NonInfC∧LOAD671(i47[2], i48[2])≥COND_LOAD671(&&(>(i48[2], 0), >(i47[2], i48[2])), i47[2], i48[2])∧(UIncreasing(COND_LOAD671(&&(>(i48[2], 0), >(i47[2], i48[2])), i47[2], i48[2])), ≥))
(17) (>(i48[2], 0)=TRUE∧>(i47[2], i48[2])=TRUE ⇒ LOAD671(i47[2], i48[2])≥NonInfC∧LOAD671(i47[2], i48[2])≥COND_LOAD671(&&(>(i48[2], 0), >(i47[2], i48[2])), i47[2], i48[2])∧(UIncreasing(COND_LOAD671(&&(>(i48[2], 0), >(i47[2], i48[2])), i47[2], i48[2])), ≥))
(18) (i48[2] + [-1] ≥ 0∧i47[2] + [-1] + [-1]i48[2] ≥ 0 ⇒ (UIncreasing(COND_LOAD671(&&(>(i48[2], 0), >(i47[2], i48[2])), i47[2], i48[2])), ≥)∧[(-1)Bound*bni_27] + [(2)bni_27]i47[2] ≥ 0∧[(-1)bso_28] ≥ 0)
(19) (i48[2] + [-1] ≥ 0∧i47[2] + [-1] + [-1]i48[2] ≥ 0 ⇒ (UIncreasing(COND_LOAD671(&&(>(i48[2], 0), >(i47[2], i48[2])), i47[2], i48[2])), ≥)∧[(-1)Bound*bni_27] + [(2)bni_27]i47[2] ≥ 0∧[(-1)bso_28] ≥ 0)
(20) (i48[2] + [-1] ≥ 0∧i47[2] + [-1] + [-1]i48[2] ≥ 0 ⇒ (UIncreasing(COND_LOAD671(&&(>(i48[2], 0), >(i47[2], i48[2])), i47[2], i48[2])), ≥)∧[(-1)Bound*bni_27] + [(2)bni_27]i47[2] ≥ 0∧[(-1)bso_28] ≥ 0)
(21) (i48[2] ≥ 0∧i47[2] + [-2] + [-1]i48[2] ≥ 0 ⇒ (UIncreasing(COND_LOAD671(&&(>(i48[2], 0), >(i47[2], i48[2])), i47[2], i48[2])), ≥)∧[(-1)Bound*bni_27] + [(2)bni_27]i47[2] ≥ 0∧[(-1)bso_28] ≥ 0)
(22) (i48[2] ≥ 0∧i47[2] ≥ 0 ⇒ (UIncreasing(COND_LOAD671(&&(>(i48[2], 0), >(i47[2], i48[2])), i47[2], i48[2])), ≥)∧[(-1)Bound*bni_27 + (4)bni_27] + [(2)bni_27]i48[2] + [(2)bni_27]i47[2] ≥ 0∧[(-1)bso_28] ≥ 0)
(23) (i48[2]=i48[3]∧&&(>(i48[2], 0), >(i47[2], i48[2]))=TRUE∧i47[2]=i47[3]∧i47[3]=i47[2]1∧*(2, i48[3])=i48[2]1 ⇒ COND_LOAD671(TRUE, i47[3], i48[3])≥NonInfC∧COND_LOAD671(TRUE, i47[3], i48[3])≥LOAD671(i47[3], *(2, i48[3]))∧(UIncreasing(LOAD671(i47[3], *(2, i48[3]))), ≥))
(24) (>(i48[2], 0)=TRUE∧>(i47[2], i48[2])=TRUE ⇒ COND_LOAD671(TRUE, i47[2], i48[2])≥NonInfC∧COND_LOAD671(TRUE, i47[2], i48[2])≥LOAD671(i47[2], *(2, i48[2]))∧(UIncreasing(LOAD671(i47[3], *(2, i48[3]))), ≥))
(25) (i48[2] + [-1] ≥ 0∧i47[2] + [-1] + [-1]i48[2] ≥ 0 ⇒ (UIncreasing(LOAD671(i47[3], *(2, i48[3]))), ≥)∧[(-1)Bound*bni_29] + [(2)bni_29]i47[2] ≥ 0∧[(-1)bso_30] ≥ 0)
(26) (i48[2] + [-1] ≥ 0∧i47[2] + [-1] + [-1]i48[2] ≥ 0 ⇒ (UIncreasing(LOAD671(i47[3], *(2, i48[3]))), ≥)∧[(-1)Bound*bni_29] + [(2)bni_29]i47[2] ≥ 0∧[(-1)bso_30] ≥ 0)
(27) (i48[2] + [-1] ≥ 0∧i47[2] + [-1] + [-1]i48[2] ≥ 0 ⇒ (UIncreasing(LOAD671(i47[3], *(2, i48[3]))), ≥)∧[(-1)Bound*bni_29] + [(2)bni_29]i47[2] ≥ 0∧[(-1)bso_30] ≥ 0)
(28) (i48[2] ≥ 0∧i47[2] + [-2] + [-1]i48[2] ≥ 0 ⇒ (UIncreasing(LOAD671(i47[3], *(2, i48[3]))), ≥)∧[(-1)Bound*bni_29] + [(2)bni_29]i47[2] ≥ 0∧[(-1)bso_30] ≥ 0)
(29) (i48[2] ≥ 0∧i47[2] ≥ 0 ⇒ (UIncreasing(LOAD671(i47[3], *(2, i48[3]))), ≥)∧[(-1)Bound*bni_29 + (4)bni_29] + [(2)bni_29]i48[2] + [(2)bni_29]i47[2] ≥ 0∧[(-1)bso_30] ≥ 0)
(30) (i48[2]=i48[3]∧&&(>(i48[2], 0), >(i47[2], i48[2]))=TRUE∧i47[2]=i47[3]∧i47[3]=i47[4]∧*(2, i48[3])=i48[4] ⇒ COND_LOAD671(TRUE, i47[3], i48[3])≥NonInfC∧COND_LOAD671(TRUE, i47[3], i48[3])≥LOAD671(i47[3], *(2, i48[3]))∧(UIncreasing(LOAD671(i47[3], *(2, i48[3]))), ≥))
(31) (>(i48[2], 0)=TRUE∧>(i47[2], i48[2])=TRUE ⇒ COND_LOAD671(TRUE, i47[2], i48[2])≥NonInfC∧COND_LOAD671(TRUE, i47[2], i48[2])≥LOAD671(i47[2], *(2, i48[2]))∧(UIncreasing(LOAD671(i47[3], *(2, i48[3]))), ≥))
(32) (i48[2] + [-1] ≥ 0∧i47[2] + [-1] + [-1]i48[2] ≥ 0 ⇒ (UIncreasing(LOAD671(i47[3], *(2, i48[3]))), ≥)∧[(-1)Bound*bni_29] + [(2)bni_29]i47[2] ≥ 0∧[(-1)bso_30] ≥ 0)
(33) (i48[2] + [-1] ≥ 0∧i47[2] + [-1] + [-1]i48[2] ≥ 0 ⇒ (UIncreasing(LOAD671(i47[3], *(2, i48[3]))), ≥)∧[(-1)Bound*bni_29] + [(2)bni_29]i47[2] ≥ 0∧[(-1)bso_30] ≥ 0)
(34) (i48[2] + [-1] ≥ 0∧i47[2] + [-1] + [-1]i48[2] ≥ 0 ⇒ (UIncreasing(LOAD671(i47[3], *(2, i48[3]))), ≥)∧[(-1)Bound*bni_29] + [(2)bni_29]i47[2] ≥ 0∧[(-1)bso_30] ≥ 0)
(35) (i48[2] ≥ 0∧i47[2] + [-2] + [-1]i48[2] ≥ 0 ⇒ (UIncreasing(LOAD671(i47[3], *(2, i48[3]))), ≥)∧[(-1)Bound*bni_29] + [(2)bni_29]i47[2] ≥ 0∧[(-1)bso_30] ≥ 0)
(36) (i48[2] ≥ 0∧i47[2] ≥ 0 ⇒ (UIncreasing(LOAD671(i47[3], *(2, i48[3]))), ≥)∧[(-1)Bound*bni_29 + (4)bni_29] + [(2)bni_29]i48[2] + [(2)bni_29]i47[2] ≥ 0∧[(-1)bso_30] ≥ 0)
(37) (&&(&&(>=(i47[4], 0), >(i48[4], 0)), <=(i47[4], i48[4]))=TRUE∧i48[4]=i48[5]∧i47[4]=i47[5] ⇒ LOAD671(i47[4], i48[4])≥NonInfC∧LOAD671(i47[4], i48[4])≥COND_LOAD6711(&&(&&(>=(i47[4], 0), >(i48[4], 0)), <=(i47[4], i48[4])), i47[4], i48[4])∧(UIncreasing(COND_LOAD6711(&&(&&(>=(i47[4], 0), >(i48[4], 0)), <=(i47[4], i48[4])), i47[4], i48[4])), ≥))
(38) (<=(i47[4], i48[4])=TRUE∧>=(i47[4], 0)=TRUE∧>(i48[4], 0)=TRUE ⇒ LOAD671(i47[4], i48[4])≥NonInfC∧LOAD671(i47[4], i48[4])≥COND_LOAD6711(&&(&&(>=(i47[4], 0), >(i48[4], 0)), <=(i47[4], i48[4])), i47[4], i48[4])∧(UIncreasing(COND_LOAD6711(&&(&&(>=(i47[4], 0), >(i48[4], 0)), <=(i47[4], i48[4])), i47[4], i48[4])), ≥))
(39) (i48[4] + [-1]i47[4] ≥ 0∧i47[4] ≥ 0∧i48[4] + [-1] ≥ 0 ⇒ (UIncreasing(COND_LOAD6711(&&(&&(>=(i47[4], 0), >(i48[4], 0)), <=(i47[4], i48[4])), i47[4], i48[4])), ≥)∧[(-1)Bound*bni_31] + [(2)bni_31]i47[4] ≥ 0∧[(-1)bso_32] ≥ 0)
(40) (i48[4] + [-1]i47[4] ≥ 0∧i47[4] ≥ 0∧i48[4] + [-1] ≥ 0 ⇒ (UIncreasing(COND_LOAD6711(&&(&&(>=(i47[4], 0), >(i48[4], 0)), <=(i47[4], i48[4])), i47[4], i48[4])), ≥)∧[(-1)Bound*bni_31] + [(2)bni_31]i47[4] ≥ 0∧[(-1)bso_32] ≥ 0)
(41) (i48[4] + [-1]i47[4] ≥ 0∧i47[4] ≥ 0∧i48[4] + [-1] ≥ 0 ⇒ (UIncreasing(COND_LOAD6711(&&(&&(>=(i47[4], 0), >(i48[4], 0)), <=(i47[4], i48[4])), i47[4], i48[4])), ≥)∧[(-1)Bound*bni_31] + [(2)bni_31]i47[4] ≥ 0∧[(-1)bso_32] ≥ 0)
(42) (i48[4] ≥ 0∧i47[4] ≥ 0∧i47[4] + [-1] + i48[4] ≥ 0 ⇒ (UIncreasing(COND_LOAD6711(&&(&&(>=(i47[4], 0), >(i48[4], 0)), <=(i47[4], i48[4])), i47[4], i48[4])), ≥)∧[(-1)Bound*bni_31] + [(2)bni_31]i47[4] ≥ 0∧[(-1)bso_32] ≥ 0)
(43) (&&(&&(>=(i47[4], 0), >(i48[4], 0)), <=(i47[4], i48[4]))=TRUE∧i48[4]=i48[5]∧i47[4]=i47[5]∧+(i47[5], -1)=i20[0] ⇒ COND_LOAD6711(TRUE, i47[5], i48[5])≥NonInfC∧COND_LOAD6711(TRUE, i47[5], i48[5])≥LOAD288(+(i47[5], -1))∧(UIncreasing(LOAD288(+(i47[5], -1))), ≥))
(44) (<=(i47[4], i48[4])=TRUE∧>=(i47[4], 0)=TRUE∧>(i48[4], 0)=TRUE ⇒ COND_LOAD6711(TRUE, i47[4], i48[4])≥NonInfC∧COND_LOAD6711(TRUE, i47[4], i48[4])≥LOAD288(+(i47[4], -1))∧(UIncreasing(LOAD288(+(i47[5], -1))), ≥))
(45) (i48[4] + [-1]i47[4] ≥ 0∧i47[4] ≥ 0∧i48[4] + [-1] ≥ 0 ⇒ (UIncreasing(LOAD288(+(i47[5], -1))), ≥)∧[(-1)bni_33 + (-1)Bound*bni_33] + [(2)bni_33]i47[4] ≥ 0∧[(-1)bso_34] ≥ 0)
(46) (i48[4] + [-1]i47[4] ≥ 0∧i47[4] ≥ 0∧i48[4] + [-1] ≥ 0 ⇒ (UIncreasing(LOAD288(+(i47[5], -1))), ≥)∧[(-1)bni_33 + (-1)Bound*bni_33] + [(2)bni_33]i47[4] ≥ 0∧[(-1)bso_34] ≥ 0)
(47) (i48[4] + [-1]i47[4] ≥ 0∧i47[4] ≥ 0∧i48[4] + [-1] ≥ 0 ⇒ (UIncreasing(LOAD288(+(i47[5], -1))), ≥)∧[(-1)bni_33 + (-1)Bound*bni_33] + [(2)bni_33]i47[4] ≥ 0∧[(-1)bso_34] ≥ 0)
(48) (i48[4] ≥ 0∧i47[4] ≥ 0∧i47[4] + [-1] + i48[4] ≥ 0 ⇒ (UIncreasing(LOAD288(+(i47[5], -1))), ≥)∧[(-1)bni_33 + (-1)Bound*bni_33] + [(2)bni_33]i47[4] ≥ 0∧[(-1)bso_34] ≥ 0)
POL(TRUE) = 0
POL(FALSE) = [3]
POL(LOAD288(x1)) = [1] + [2]x1
POL(COND_LOAD288(x1, x2)) = [2]x2
POL(>=(x1, x2)) = [-1]
POL(0) = 0
POL(LOAD671(x1, x2)) = [2]x1
POL(1) = [1]
POL(COND_LOAD671(x1, x2, x3)) = [2]x2
POL(&&(x1, x2)) = [-1]
POL(>(x1, x2)) = [-1]
POL(*(x1, x2)) = x1·x2
POL(2) = [2]
POL(COND_LOAD6711(x1, x2, x3)) = [-1] + [2]x2 + [-1]x1
POL(<=(x1, x2)) = [-1]
POL(+(x1, x2)) = x1 + x2
POL(-1) = [-1]
LOAD288(i20[0]) → COND_LOAD288(>=(i20[0], 0), i20[0])
LOAD288(i20[0]) → COND_LOAD288(>=(i20[0], 0), i20[0])
COND_LOAD288(TRUE, i20[1]) → LOAD671(i20[1], 1)
LOAD671(i47[2], i48[2]) → COND_LOAD671(&&(>(i48[2], 0), >(i47[2], i48[2])), i47[2], i48[2])
COND_LOAD671(TRUE, i47[3], i48[3]) → LOAD671(i47[3], *(2, i48[3]))
LOAD671(i47[4], i48[4]) → COND_LOAD6711(&&(&&(>=(i47[4], 0), >(i48[4], 0)), <=(i47[4], i48[4])), i47[4], i48[4])
COND_LOAD6711(TRUE, i47[5], i48[5]) → LOAD288(+(i47[5], -1))
COND_LOAD288(TRUE, i20[1]) → LOAD671(i20[1], 1)
LOAD671(i47[2], i48[2]) → COND_LOAD671(&&(>(i48[2], 0), >(i47[2], i48[2])), i47[2], i48[2])
COND_LOAD671(TRUE, i47[3], i48[3]) → LOAD671(i47[3], *(2, i48[3]))
LOAD671(i47[4], i48[4]) → COND_LOAD6711(&&(&&(>=(i47[4], 0), >(i48[4], 0)), <=(i47[4], i48[4])), i47[4], i48[4])
COND_LOAD6711(TRUE, i47[5], i48[5]) → LOAD288(+(i47[5], -1))
TRUE1 → &&(TRUE, TRUE)1
FALSE1 → &&(TRUE, FALSE)1
FALSE1 → &&(FALSE, TRUE)1
FALSE1 → &&(FALSE, FALSE)1
!= | ~ | 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 |
Boolean, Integer
(1) -> (2), if ((i20[1] →* i47[2])∧(1 →* i48[2]))
(3) -> (2), if ((i47[3] →* i47[2])∧(2 * i48[3] →* i48[2]))
(2) -> (3), if ((i48[2] →* i48[3])∧(i48[2] > 0 && i47[2] > i48[2] →* TRUE)∧(i47[2] →* i47[3]))
(1) -> (4), if ((1 →* i48[4])∧(i20[1] →* i47[4]))
(3) -> (4), if ((i47[3] →* i47[4])∧(2 * i48[3] →* i48[4]))
(4) -> (5), if ((i47[4] >= 0 && i48[4] > 0 && i47[4] <= i48[4] →* TRUE)∧(i48[4] →* i48[5])∧(i47[4] →* i47[5]))
!= | ~ | 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 |
Integer, Boolean
(3) -> (2), if ((i47[3] →* i47[2])∧(2 * i48[3] →* i48[2]))
(2) -> (3), if ((i48[2] →* i48[3])∧(i48[2] > 0 && i47[2] > i48[2] →* TRUE)∧(i47[2] →* i47[3]))
(1) (i48[2]=i48[3]∧&&(>(i48[2], 0), >(i47[2], i48[2]))=TRUE∧i47[2]=i47[3]∧i47[3]=i47[2]1∧*(2, i48[3])=i48[2]1 ⇒ COND_LOAD671(TRUE, i47[3], i48[3])≥NonInfC∧COND_LOAD671(TRUE, i47[3], i48[3])≥LOAD671(i47[3], *(2, i48[3]))∧(UIncreasing(LOAD671(i47[3], *(2, i48[3]))), ≥))
(2) (>(i48[2], 0)=TRUE∧>(i47[2], i48[2])=TRUE ⇒ COND_LOAD671(TRUE, i47[2], i48[2])≥NonInfC∧COND_LOAD671(TRUE, i47[2], i48[2])≥LOAD671(i47[2], *(2, i48[2]))∧(UIncreasing(LOAD671(i47[3], *(2, i48[3]))), ≥))
(3) (i48[2] + [-1] ≥ 0∧i47[2] + [-1] + [-1]i48[2] ≥ 0 ⇒ (UIncreasing(LOAD671(i47[3], *(2, i48[3]))), ≥)∧[(-1)bni_12 + (-1)Bound*bni_12] + [(-1)bni_12]i48[2] + [bni_12]i47[2] ≥ 0∧[(-1)bso_13] + i48[2] ≥ 0)
(4) (i48[2] + [-1] ≥ 0∧i47[2] + [-1] + [-1]i48[2] ≥ 0 ⇒ (UIncreasing(LOAD671(i47[3], *(2, i48[3]))), ≥)∧[(-1)bni_12 + (-1)Bound*bni_12] + [(-1)bni_12]i48[2] + [bni_12]i47[2] ≥ 0∧[(-1)bso_13] + i48[2] ≥ 0)
(5) (i48[2] + [-1] ≥ 0∧i47[2] + [-1] + [-1]i48[2] ≥ 0 ⇒ (UIncreasing(LOAD671(i47[3], *(2, i48[3]))), ≥)∧[(-1)bni_12 + (-1)Bound*bni_12] + [(-1)bni_12]i48[2] + [bni_12]i47[2] ≥ 0∧[(-1)bso_13] + i48[2] ≥ 0)
(6) (i48[2] ≥ 0∧i47[2] + [-2] + [-1]i48[2] ≥ 0 ⇒ (UIncreasing(LOAD671(i47[3], *(2, i48[3]))), ≥)∧[(-2)bni_12 + (-1)Bound*bni_12] + [(-1)bni_12]i48[2] + [bni_12]i47[2] ≥ 0∧[1 + (-1)bso_13] + i48[2] ≥ 0)
(7) (i48[2] ≥ 0∧i47[2] ≥ 0 ⇒ (UIncreasing(LOAD671(i47[3], *(2, i48[3]))), ≥)∧[(-1)Bound*bni_12] + [bni_12]i47[2] ≥ 0∧[1 + (-1)bso_13] + i48[2] ≥ 0)
(8) (i48[2]=i48[3]∧&&(>(i48[2], 0), >(i47[2], i48[2]))=TRUE∧i47[2]=i47[3] ⇒ LOAD671(i47[2], i48[2])≥NonInfC∧LOAD671(i47[2], i48[2])≥COND_LOAD671(&&(>(i48[2], 0), >(i47[2], i48[2])), i47[2], i48[2])∧(UIncreasing(COND_LOAD671(&&(>(i48[2], 0), >(i47[2], i48[2])), i47[2], i48[2])), ≥))
(9) (>(i48[2], 0)=TRUE∧>(i47[2], i48[2])=TRUE ⇒ LOAD671(i47[2], i48[2])≥NonInfC∧LOAD671(i47[2], i48[2])≥COND_LOAD671(&&(>(i48[2], 0), >(i47[2], i48[2])), i47[2], i48[2])∧(UIncreasing(COND_LOAD671(&&(>(i48[2], 0), >(i47[2], i48[2])), i47[2], i48[2])), ≥))
(10) (i48[2] + [-1] ≥ 0∧i47[2] + [-1] + [-1]i48[2] ≥ 0 ⇒ (UIncreasing(COND_LOAD671(&&(>(i48[2], 0), >(i47[2], i48[2])), i47[2], i48[2])), ≥)∧[(-1)bni_14 + (-1)Bound*bni_14] + [(-1)bni_14]i48[2] + [bni_14]i47[2] ≥ 0∧[(-1)bso_15] ≥ 0)
(11) (i48[2] + [-1] ≥ 0∧i47[2] + [-1] + [-1]i48[2] ≥ 0 ⇒ (UIncreasing(COND_LOAD671(&&(>(i48[2], 0), >(i47[2], i48[2])), i47[2], i48[2])), ≥)∧[(-1)bni_14 + (-1)Bound*bni_14] + [(-1)bni_14]i48[2] + [bni_14]i47[2] ≥ 0∧[(-1)bso_15] ≥ 0)
(12) (i48[2] + [-1] ≥ 0∧i47[2] + [-1] + [-1]i48[2] ≥ 0 ⇒ (UIncreasing(COND_LOAD671(&&(>(i48[2], 0), >(i47[2], i48[2])), i47[2], i48[2])), ≥)∧[(-1)bni_14 + (-1)Bound*bni_14] + [(-1)bni_14]i48[2] + [bni_14]i47[2] ≥ 0∧[(-1)bso_15] ≥ 0)
(13) (i48[2] ≥ 0∧i47[2] + [-2] + [-1]i48[2] ≥ 0 ⇒ (UIncreasing(COND_LOAD671(&&(>(i48[2], 0), >(i47[2], i48[2])), i47[2], i48[2])), ≥)∧[(-2)bni_14 + (-1)Bound*bni_14] + [(-1)bni_14]i48[2] + [bni_14]i47[2] ≥ 0∧[(-1)bso_15] ≥ 0)
(14) (i48[2] ≥ 0∧i47[2] ≥ 0 ⇒ (UIncreasing(COND_LOAD671(&&(>(i48[2], 0), >(i47[2], i48[2])), i47[2], i48[2])), ≥)∧[(-1)Bound*bni_14] + [bni_14]i47[2] ≥ 0∧[(-1)bso_15] ≥ 0)
POL(TRUE) = 0
POL(FALSE) = [1]
POL(COND_LOAD671(x1, x2, x3)) = [-1] + [-1]x3 + x2
POL(LOAD671(x1, x2)) = [-1] + [-1]x2 + x1
POL(*(x1, x2)) = x1·x2
POL(2) = [2]
POL(&&(x1, x2)) = [-1]
POL(>(x1, x2)) = [-1]
POL(0) = 0
COND_LOAD671(TRUE, i47[3], i48[3]) → LOAD671(i47[3], *(2, i48[3]))
COND_LOAD671(TRUE, i47[3], i48[3]) → LOAD671(i47[3], *(2, i48[3]))
LOAD671(i47[2], i48[2]) → COND_LOAD671(&&(>(i48[2], 0), >(i47[2], i48[2])), i47[2], i48[2])
LOAD671(i47[2], i48[2]) → COND_LOAD671(&&(>(i48[2], 0), >(i47[2], i48[2])), i47[2], i48[2])
FALSE1 → &&(TRUE, FALSE)1
FALSE1 → &&(FALSE, FALSE)1
!= | ~ | 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 |
Boolean, Integer
!= | ~ | 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 |
!= | ~ | 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 |