0 JBC
↳1 JBC2FIG (⇐)
↳2 FIGraph
↳3 FIGtoITRSProof (⇐)
↳4 ITRS
↳5 ITRStoIDPProof (⇔)
↳6 IDP
↳7 UsableRulesProof (⇔)
↳8 IDP
↳9 IDPNonInfProof (⇐)
↳10 AND
↳11 IDP
↳12 IDependencyGraphProof (⇔)
↳13 IDP
↳14 IDPNonInfProof (⇐)
↳15 AND
↳16 IDP
↳17 IDependencyGraphProof (⇔)
↳18 TRUE
↳19 IDP
↳20 IDependencyGraphProof (⇔)
↳21 TRUE
↳22 IDP
↳23 IDependencyGraphProof (⇔)
↳24 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 PastaA1 {
public static void main(String[] args) {
Random.args = args;
int x = Random.random();
while (x > 0) {
int y = 0;
while (y < x) {
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 |
!= | ~ | 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] →* i20[2])∧(0 →* i31[2]))
(1) -> (4), if ((i20[1] →* i20[4])∧(0 →* i31[4]))
(2) -> (3), if ((i20[2] →* i20[3])∧(i31[2] →* i31[3])∧(i31[2] >= 0 && i31[2] < i20[2] && i31[2] + 1 > 0 →* TRUE))
(3) -> (2), if ((i31[3] + 1 →* i31[2])∧(i20[3] →* i20[2]))
(3) -> (4), if ((i20[3] →* i20[4])∧(i31[3] + 1 →* i31[4]))
(4) -> (5), if ((i20[4] > 0 && i31[4] >= i20[4] →* TRUE)∧(i20[4] →* i20[5])∧(i31[4] →* i31[5]))
(5) -> (0), if ((i20[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] →* i20[2])∧(0 →* i31[2]))
(1) -> (4), if ((i20[1] →* i20[4])∧(0 →* i31[4]))
(2) -> (3), if ((i20[2] →* i20[3])∧(i31[2] →* i31[3])∧(i31[2] >= 0 && i31[2] < i20[2] && i31[2] + 1 > 0 →* TRUE))
(3) -> (2), if ((i31[3] + 1 →* i31[2])∧(i20[3] →* i20[2]))
(3) -> (4), if ((i20[3] →* i20[4])∧(i31[3] + 1 →* i31[4]))
(4) -> (5), if ((i20[4] > 0 && i31[4] >= i20[4] →* TRUE)∧(i20[4] →* i20[5])∧(i31[4] →* i31[5]))
(5) -> (0), if ((i20[5] + -1 →* i20[0]))
(1) (>(i20[0], 0)=TRUE∧i20[0]=i20[1] ⇒ LOAD323(i20[0])≥NonInfC∧LOAD323(i20[0])≥COND_LOAD323(>(i20[0], 0), i20[0])∧(UIncreasing(COND_LOAD323(>(i20[0], 0), i20[0])), ≥))
(2) (>(i20[0], 0)=TRUE ⇒ LOAD323(i20[0])≥NonInfC∧LOAD323(i20[0])≥COND_LOAD323(>(i20[0], 0), i20[0])∧(UIncreasing(COND_LOAD323(>(i20[0], 0), i20[0])), ≥))
(3) (i20[0] + [-1] ≥ 0 ⇒ (UIncreasing(COND_LOAD323(>(i20[0], 0), i20[0])), ≥)∧[bni_23 + (-1)Bound*bni_23] + [bni_23]i20[0] ≥ 0∧[1 + (-1)bso_24] ≥ 0)
(4) (i20[0] + [-1] ≥ 0 ⇒ (UIncreasing(COND_LOAD323(>(i20[0], 0), i20[0])), ≥)∧[bni_23 + (-1)Bound*bni_23] + [bni_23]i20[0] ≥ 0∧[1 + (-1)bso_24] ≥ 0)
(5) (i20[0] + [-1] ≥ 0 ⇒ (UIncreasing(COND_LOAD323(>(i20[0], 0), i20[0])), ≥)∧[bni_23 + (-1)Bound*bni_23] + [bni_23]i20[0] ≥ 0∧[1 + (-1)bso_24] ≥ 0)
(6) (i20[0] ≥ 0 ⇒ (UIncreasing(COND_LOAD323(>(i20[0], 0), i20[0])), ≥)∧[(2)bni_23 + (-1)Bound*bni_23] + [bni_23]i20[0] ≥ 0∧[1 + (-1)bso_24] ≥ 0)
(7) (>(i20[0], 0)=TRUE∧i20[0]=i20[1]∧i20[1]=i20[2]∧0=i31[2] ⇒ COND_LOAD323(TRUE, i20[1])≥NonInfC∧COND_LOAD323(TRUE, i20[1])≥LOAD597(i20[1], 0)∧(UIncreasing(LOAD597(i20[1], 0)), ≥))
(8) (>(i20[0], 0)=TRUE ⇒ COND_LOAD323(TRUE, i20[0])≥NonInfC∧COND_LOAD323(TRUE, i20[0])≥LOAD597(i20[0], 0)∧(UIncreasing(LOAD597(i20[1], 0)), ≥))
(9) (i20[0] + [-1] ≥ 0 ⇒ (UIncreasing(LOAD597(i20[1], 0)), ≥)∧[(-1)Bound*bni_25] + [bni_25]i20[0] ≥ 0∧[(-1)bso_26] ≥ 0)
(10) (i20[0] + [-1] ≥ 0 ⇒ (UIncreasing(LOAD597(i20[1], 0)), ≥)∧[(-1)Bound*bni_25] + [bni_25]i20[0] ≥ 0∧[(-1)bso_26] ≥ 0)
(11) (i20[0] + [-1] ≥ 0 ⇒ (UIncreasing(LOAD597(i20[1], 0)), ≥)∧[(-1)Bound*bni_25] + [bni_25]i20[0] ≥ 0∧[(-1)bso_26] ≥ 0)
(12) (i20[0] ≥ 0 ⇒ (UIncreasing(LOAD597(i20[1], 0)), ≥)∧[(-1)Bound*bni_25 + bni_25] + [bni_25]i20[0] ≥ 0∧[(-1)bso_26] ≥ 0)
(13) (>(i20[0], 0)=TRUE∧i20[0]=i20[1]∧i20[1]=i20[4]∧0=i31[4] ⇒ COND_LOAD323(TRUE, i20[1])≥NonInfC∧COND_LOAD323(TRUE, i20[1])≥LOAD597(i20[1], 0)∧(UIncreasing(LOAD597(i20[1], 0)), ≥))
(14) (>(i20[0], 0)=TRUE ⇒ COND_LOAD323(TRUE, i20[0])≥NonInfC∧COND_LOAD323(TRUE, i20[0])≥LOAD597(i20[0], 0)∧(UIncreasing(LOAD597(i20[1], 0)), ≥))
(15) (i20[0] + [-1] ≥ 0 ⇒ (UIncreasing(LOAD597(i20[1], 0)), ≥)∧[(-1)Bound*bni_25] + [bni_25]i20[0] ≥ 0∧[(-1)bso_26] ≥ 0)
(16) (i20[0] + [-1] ≥ 0 ⇒ (UIncreasing(LOAD597(i20[1], 0)), ≥)∧[(-1)Bound*bni_25] + [bni_25]i20[0] ≥ 0∧[(-1)bso_26] ≥ 0)
(17) (i20[0] + [-1] ≥ 0 ⇒ (UIncreasing(LOAD597(i20[1], 0)), ≥)∧[(-1)Bound*bni_25] + [bni_25]i20[0] ≥ 0∧[(-1)bso_26] ≥ 0)
(18) (i20[0] ≥ 0 ⇒ (UIncreasing(LOAD597(i20[1], 0)), ≥)∧[(-1)Bound*bni_25 + bni_25] + [bni_25]i20[0] ≥ 0∧[(-1)bso_26] ≥ 0)
(19) (i20[2]=i20[3]∧i31[2]=i31[3]∧&&(&&(>=(i31[2], 0), <(i31[2], i20[2])), >(+(i31[2], 1), 0))=TRUE ⇒ LOAD597(i20[2], i31[2])≥NonInfC∧LOAD597(i20[2], i31[2])≥COND_LOAD597(&&(&&(>=(i31[2], 0), <(i31[2], i20[2])), >(+(i31[2], 1), 0)), i20[2], i31[2])∧(UIncreasing(COND_LOAD597(&&(&&(>=(i31[2], 0), <(i31[2], i20[2])), >(+(i31[2], 1), 0)), i20[2], i31[2])), ≥))
(20) (>(+(i31[2], 1), 0)=TRUE∧>=(i31[2], 0)=TRUE∧<(i31[2], i20[2])=TRUE ⇒ LOAD597(i20[2], i31[2])≥NonInfC∧LOAD597(i20[2], i31[2])≥COND_LOAD597(&&(&&(>=(i31[2], 0), <(i31[2], i20[2])), >(+(i31[2], 1), 0)), i20[2], i31[2])∧(UIncreasing(COND_LOAD597(&&(&&(>=(i31[2], 0), <(i31[2], i20[2])), >(+(i31[2], 1), 0)), i20[2], i31[2])), ≥))
(21) (i31[2] ≥ 0∧i31[2] ≥ 0∧i20[2] + [-1] + [-1]i31[2] ≥ 0 ⇒ (UIncreasing(COND_LOAD597(&&(&&(>=(i31[2], 0), <(i31[2], i20[2])), >(+(i31[2], 1), 0)), i20[2], i31[2])), ≥)∧[(-1)Bound*bni_27] + [bni_27]i20[2] ≥ 0∧[(-1)bso_28] ≥ 0)
(22) (i31[2] ≥ 0∧i31[2] ≥ 0∧i20[2] + [-1] + [-1]i31[2] ≥ 0 ⇒ (UIncreasing(COND_LOAD597(&&(&&(>=(i31[2], 0), <(i31[2], i20[2])), >(+(i31[2], 1), 0)), i20[2], i31[2])), ≥)∧[(-1)Bound*bni_27] + [bni_27]i20[2] ≥ 0∧[(-1)bso_28] ≥ 0)
(23) (i31[2] ≥ 0∧i31[2] ≥ 0∧i20[2] + [-1] + [-1]i31[2] ≥ 0 ⇒ (UIncreasing(COND_LOAD597(&&(&&(>=(i31[2], 0), <(i31[2], i20[2])), >(+(i31[2], 1), 0)), i20[2], i31[2])), ≥)∧[(-1)Bound*bni_27] + [bni_27]i20[2] ≥ 0∧[(-1)bso_28] ≥ 0)
(24) (i31[2] ≥ 0∧i31[2] ≥ 0∧i20[2] ≥ 0 ⇒ (UIncreasing(COND_LOAD597(&&(&&(>=(i31[2], 0), <(i31[2], i20[2])), >(+(i31[2], 1), 0)), i20[2], i31[2])), ≥)∧[(-1)Bound*bni_27 + bni_27] + [bni_27]i31[2] + [bni_27]i20[2] ≥ 0∧[(-1)bso_28] ≥ 0)
(25) (i20[2]=i20[3]∧i31[2]=i31[3]∧&&(&&(>=(i31[2], 0), <(i31[2], i20[2])), >(+(i31[2], 1), 0))=TRUE∧+(i31[3], 1)=i31[2]1∧i20[3]=i20[2]1 ⇒ COND_LOAD597(TRUE, i20[3], i31[3])≥NonInfC∧COND_LOAD597(TRUE, i20[3], i31[3])≥LOAD597(i20[3], +(i31[3], 1))∧(UIncreasing(LOAD597(i20[3], +(i31[3], 1))), ≥))
(26) (>(+(i31[2], 1), 0)=TRUE∧>=(i31[2], 0)=TRUE∧<(i31[2], i20[2])=TRUE ⇒ COND_LOAD597(TRUE, i20[2], i31[2])≥NonInfC∧COND_LOAD597(TRUE, i20[2], i31[2])≥LOAD597(i20[2], +(i31[2], 1))∧(UIncreasing(LOAD597(i20[3], +(i31[3], 1))), ≥))
(27) (i31[2] ≥ 0∧i31[2] ≥ 0∧i20[2] + [-1] + [-1]i31[2] ≥ 0 ⇒ (UIncreasing(LOAD597(i20[3], +(i31[3], 1))), ≥)∧[(-1)Bound*bni_29] + [bni_29]i20[2] ≥ 0∧[(-1)bso_30] ≥ 0)
(28) (i31[2] ≥ 0∧i31[2] ≥ 0∧i20[2] + [-1] + [-1]i31[2] ≥ 0 ⇒ (UIncreasing(LOAD597(i20[3], +(i31[3], 1))), ≥)∧[(-1)Bound*bni_29] + [bni_29]i20[2] ≥ 0∧[(-1)bso_30] ≥ 0)
(29) (i31[2] ≥ 0∧i31[2] ≥ 0∧i20[2] + [-1] + [-1]i31[2] ≥ 0 ⇒ (UIncreasing(LOAD597(i20[3], +(i31[3], 1))), ≥)∧[(-1)Bound*bni_29] + [bni_29]i20[2] ≥ 0∧[(-1)bso_30] ≥ 0)
(30) (i31[2] ≥ 0∧i31[2] ≥ 0∧i20[2] ≥ 0 ⇒ (UIncreasing(LOAD597(i20[3], +(i31[3], 1))), ≥)∧[(-1)Bound*bni_29 + bni_29] + [bni_29]i31[2] + [bni_29]i20[2] ≥ 0∧[(-1)bso_30] ≥ 0)
(31) (i20[2]=i20[3]∧i31[2]=i31[3]∧&&(&&(>=(i31[2], 0), <(i31[2], i20[2])), >(+(i31[2], 1), 0))=TRUE∧i20[3]=i20[4]∧+(i31[3], 1)=i31[4] ⇒ COND_LOAD597(TRUE, i20[3], i31[3])≥NonInfC∧COND_LOAD597(TRUE, i20[3], i31[3])≥LOAD597(i20[3], +(i31[3], 1))∧(UIncreasing(LOAD597(i20[3], +(i31[3], 1))), ≥))
(32) (>(+(i31[2], 1), 0)=TRUE∧>=(i31[2], 0)=TRUE∧<(i31[2], i20[2])=TRUE ⇒ COND_LOAD597(TRUE, i20[2], i31[2])≥NonInfC∧COND_LOAD597(TRUE, i20[2], i31[2])≥LOAD597(i20[2], +(i31[2], 1))∧(UIncreasing(LOAD597(i20[3], +(i31[3], 1))), ≥))
(33) (i31[2] ≥ 0∧i31[2] ≥ 0∧i20[2] + [-1] + [-1]i31[2] ≥ 0 ⇒ (UIncreasing(LOAD597(i20[3], +(i31[3], 1))), ≥)∧[(-1)Bound*bni_29] + [bni_29]i20[2] ≥ 0∧[(-1)bso_30] ≥ 0)
(34) (i31[2] ≥ 0∧i31[2] ≥ 0∧i20[2] + [-1] + [-1]i31[2] ≥ 0 ⇒ (UIncreasing(LOAD597(i20[3], +(i31[3], 1))), ≥)∧[(-1)Bound*bni_29] + [bni_29]i20[2] ≥ 0∧[(-1)bso_30] ≥ 0)
(35) (i31[2] ≥ 0∧i31[2] ≥ 0∧i20[2] + [-1] + [-1]i31[2] ≥ 0 ⇒ (UIncreasing(LOAD597(i20[3], +(i31[3], 1))), ≥)∧[(-1)Bound*bni_29] + [bni_29]i20[2] ≥ 0∧[(-1)bso_30] ≥ 0)
(36) (i31[2] ≥ 0∧i31[2] ≥ 0∧i20[2] ≥ 0 ⇒ (UIncreasing(LOAD597(i20[3], +(i31[3], 1))), ≥)∧[(-1)Bound*bni_29 + bni_29] + [bni_29]i31[2] + [bni_29]i20[2] ≥ 0∧[(-1)bso_30] ≥ 0)
(37) (&&(>(i20[4], 0), >=(i31[4], i20[4]))=TRUE∧i20[4]=i20[5]∧i31[4]=i31[5] ⇒ LOAD597(i20[4], i31[4])≥NonInfC∧LOAD597(i20[4], i31[4])≥COND_LOAD5971(&&(>(i20[4], 0), >=(i31[4], i20[4])), i20[4], i31[4])∧(UIncreasing(COND_LOAD5971(&&(>(i20[4], 0), >=(i31[4], i20[4])), i20[4], i31[4])), ≥))
(38) (>(i20[4], 0)=TRUE∧>=(i31[4], i20[4])=TRUE ⇒ LOAD597(i20[4], i31[4])≥NonInfC∧LOAD597(i20[4], i31[4])≥COND_LOAD5971(&&(>(i20[4], 0), >=(i31[4], i20[4])), i20[4], i31[4])∧(UIncreasing(COND_LOAD5971(&&(>(i20[4], 0), >=(i31[4], i20[4])), i20[4], i31[4])), ≥))
(39) (i20[4] + [-1] ≥ 0∧i31[4] + [-1]i20[4] ≥ 0 ⇒ (UIncreasing(COND_LOAD5971(&&(>(i20[4], 0), >=(i31[4], i20[4])), i20[4], i31[4])), ≥)∧[(-1)Bound*bni_31] + [bni_31]i20[4] ≥ 0∧[(-1)bso_32] ≥ 0)
(40) (i20[4] + [-1] ≥ 0∧i31[4] + [-1]i20[4] ≥ 0 ⇒ (UIncreasing(COND_LOAD5971(&&(>(i20[4], 0), >=(i31[4], i20[4])), i20[4], i31[4])), ≥)∧[(-1)Bound*bni_31] + [bni_31]i20[4] ≥ 0∧[(-1)bso_32] ≥ 0)
(41) (i20[4] + [-1] ≥ 0∧i31[4] + [-1]i20[4] ≥ 0 ⇒ (UIncreasing(COND_LOAD5971(&&(>(i20[4], 0), >=(i31[4], i20[4])), i20[4], i31[4])), ≥)∧[(-1)Bound*bni_31] + [bni_31]i20[4] ≥ 0∧[(-1)bso_32] ≥ 0)
(42) (i20[4] ≥ 0∧i31[4] + [-1] + [-1]i20[4] ≥ 0 ⇒ (UIncreasing(COND_LOAD5971(&&(>(i20[4], 0), >=(i31[4], i20[4])), i20[4], i31[4])), ≥)∧[(-1)Bound*bni_31 + bni_31] + [bni_31]i20[4] ≥ 0∧[(-1)bso_32] ≥ 0)
(43) (i20[4] ≥ 0∧i31[4] ≥ 0 ⇒ (UIncreasing(COND_LOAD5971(&&(>(i20[4], 0), >=(i31[4], i20[4])), i20[4], i31[4])), ≥)∧[(-1)Bound*bni_31 + bni_31] + [bni_31]i20[4] ≥ 0∧[(-1)bso_32] ≥ 0)
(44) (&&(>(i20[4], 0), >=(i31[4], i20[4]))=TRUE∧i20[4]=i20[5]∧i31[4]=i31[5]∧+(i20[5], -1)=i20[0] ⇒ COND_LOAD5971(TRUE, i20[5], i31[5])≥NonInfC∧COND_LOAD5971(TRUE, i20[5], i31[5])≥LOAD323(+(i20[5], -1))∧(UIncreasing(LOAD323(+(i20[5], -1))), ≥))
(45) (>(i20[4], 0)=TRUE∧>=(i31[4], i20[4])=TRUE ⇒ COND_LOAD5971(TRUE, i20[4], i31[4])≥NonInfC∧COND_LOAD5971(TRUE, i20[4], i31[4])≥LOAD323(+(i20[4], -1))∧(UIncreasing(LOAD323(+(i20[5], -1))), ≥))
(46) (i20[4] + [-1] ≥ 0∧i31[4] + [-1]i20[4] ≥ 0 ⇒ (UIncreasing(LOAD323(+(i20[5], -1))), ≥)∧[(-1)Bound*bni_33] + [bni_33]i20[4] ≥ 0∧[(-1)bso_34] ≥ 0)
(47) (i20[4] + [-1] ≥ 0∧i31[4] + [-1]i20[4] ≥ 0 ⇒ (UIncreasing(LOAD323(+(i20[5], -1))), ≥)∧[(-1)Bound*bni_33] + [bni_33]i20[4] ≥ 0∧[(-1)bso_34] ≥ 0)
(48) (i20[4] + [-1] ≥ 0∧i31[4] + [-1]i20[4] ≥ 0 ⇒ (UIncreasing(LOAD323(+(i20[5], -1))), ≥)∧[(-1)Bound*bni_33] + [bni_33]i20[4] ≥ 0∧[(-1)bso_34] ≥ 0)
(49) (i20[4] ≥ 0∧i31[4] + [-1] + [-1]i20[4] ≥ 0 ⇒ (UIncreasing(LOAD323(+(i20[5], -1))), ≥)∧[(-1)Bound*bni_33 + bni_33] + [bni_33]i20[4] ≥ 0∧[(-1)bso_34] ≥ 0)
(50) (i20[4] ≥ 0∧i31[4] ≥ 0 ⇒ (UIncreasing(LOAD323(+(i20[5], -1))), ≥)∧[(-1)Bound*bni_33 + bni_33] + [bni_33]i20[4] ≥ 0∧[(-1)bso_34] ≥ 0)
POL(TRUE) = 0
POL(FALSE) = [2]
POL(LOAD323(x1)) = [1] + x1
POL(COND_LOAD323(x1, x2)) = x2
POL(>(x1, x2)) = 0
POL(0) = 0
POL(LOAD597(x1, x2)) = x1
POL(COND_LOAD597(x1, x2, x3)) = x2 + [-1]x1
POL(&&(x1, x2)) = 0
POL(>=(x1, x2)) = [-1]
POL(<(x1, x2)) = [-1]
POL(+(x1, x2)) = x1 + x2
POL(1) = [1]
POL(COND_LOAD5971(x1, x2, x3)) = x2 + [-1]x1
POL(-1) = [-1]
LOAD323(i20[0]) → COND_LOAD323(>(i20[0], 0), i20[0])
LOAD323(i20[0]) → COND_LOAD323(>(i20[0], 0), i20[0])
COND_LOAD323(TRUE, i20[1]) → LOAD597(i20[1], 0)
LOAD597(i20[2], i31[2]) → COND_LOAD597(&&(&&(>=(i31[2], 0), <(i31[2], i20[2])), >(+(i31[2], 1), 0)), i20[2], i31[2])
COND_LOAD597(TRUE, i20[3], i31[3]) → LOAD597(i20[3], +(i31[3], 1))
LOAD597(i20[4], i31[4]) → COND_LOAD5971(&&(>(i20[4], 0), >=(i31[4], i20[4])), i20[4], i31[4])
COND_LOAD5971(TRUE, i20[5], i31[5]) → LOAD323(+(i20[5], -1))
COND_LOAD323(TRUE, i20[1]) → LOAD597(i20[1], 0)
LOAD597(i20[2], i31[2]) → COND_LOAD597(&&(&&(>=(i31[2], 0), <(i31[2], i20[2])), >(+(i31[2], 1), 0)), i20[2], i31[2])
COND_LOAD597(TRUE, i20[3], i31[3]) → LOAD597(i20[3], +(i31[3], 1))
LOAD597(i20[4], i31[4]) → COND_LOAD5971(&&(>(i20[4], 0), >=(i31[4], i20[4])), i20[4], i31[4])
COND_LOAD5971(TRUE, i20[5], i31[5]) → LOAD323(+(i20[5], -1))
&&(TRUE, TRUE)1 ↔ TRUE1
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] →* i20[2])∧(0 →* i31[2]))
(3) -> (2), if ((i31[3] + 1 →* i31[2])∧(i20[3] →* i20[2]))
(2) -> (3), if ((i20[2] →* i20[3])∧(i31[2] →* i31[3])∧(i31[2] >= 0 && i31[2] < i20[2] && i31[2] + 1 > 0 →* TRUE))
(1) -> (4), if ((i20[1] →* i20[4])∧(0 →* i31[4]))
(3) -> (4), if ((i20[3] →* i20[4])∧(i31[3] + 1 →* i31[4]))
(4) -> (5), if ((i20[4] > 0 && i31[4] >= i20[4] →* TRUE)∧(i20[4] →* i20[5])∧(i31[4] →* i31[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 ((i31[3] + 1 →* i31[2])∧(i20[3] →* i20[2]))
(2) -> (3), if ((i20[2] →* i20[3])∧(i31[2] →* i31[3])∧(i31[2] >= 0 && i31[2] < i20[2] && i31[2] + 1 > 0 →* TRUE))
(1) (i20[2]=i20[3]∧i31[2]=i31[3]∧&&(&&(>=(i31[2], 0), <(i31[2], i20[2])), >(+(i31[2], 1), 0))=TRUE∧+(i31[3], 1)=i31[2]1∧i20[3]=i20[2]1 ⇒ COND_LOAD597(TRUE, i20[3], i31[3])≥NonInfC∧COND_LOAD597(TRUE, i20[3], i31[3])≥LOAD597(i20[3], +(i31[3], 1))∧(UIncreasing(LOAD597(i20[3], +(i31[3], 1))), ≥))
(2) (>(+(i31[2], 1), 0)=TRUE∧>=(i31[2], 0)=TRUE∧<(i31[2], i20[2])=TRUE ⇒ COND_LOAD597(TRUE, i20[2], i31[2])≥NonInfC∧COND_LOAD597(TRUE, i20[2], i31[2])≥LOAD597(i20[2], +(i31[2], 1))∧(UIncreasing(LOAD597(i20[3], +(i31[3], 1))), ≥))
(3) (i31[2] ≥ 0∧i31[2] ≥ 0∧i20[2] + [-1] + [-1]i31[2] ≥ 0 ⇒ (UIncreasing(LOAD597(i20[3], +(i31[3], 1))), ≥)∧[(-1)bni_14 + (-1)Bound*bni_14] + [(-1)bni_14]i31[2] + [bni_14]i20[2] ≥ 0∧[1 + (-1)bso_15] ≥ 0)
(4) (i31[2] ≥ 0∧i31[2] ≥ 0∧i20[2] + [-1] + [-1]i31[2] ≥ 0 ⇒ (UIncreasing(LOAD597(i20[3], +(i31[3], 1))), ≥)∧[(-1)bni_14 + (-1)Bound*bni_14] + [(-1)bni_14]i31[2] + [bni_14]i20[2] ≥ 0∧[1 + (-1)bso_15] ≥ 0)
(5) (i31[2] ≥ 0∧i31[2] ≥ 0∧i20[2] + [-1] + [-1]i31[2] ≥ 0 ⇒ (UIncreasing(LOAD597(i20[3], +(i31[3], 1))), ≥)∧[(-1)bni_14 + (-1)Bound*bni_14] + [(-1)bni_14]i31[2] + [bni_14]i20[2] ≥ 0∧[1 + (-1)bso_15] ≥ 0)
(6) (i31[2] ≥ 0∧i31[2] ≥ 0∧i20[2] ≥ 0 ⇒ (UIncreasing(LOAD597(i20[3], +(i31[3], 1))), ≥)∧[(-1)Bound*bni_14] + [bni_14]i20[2] ≥ 0∧[1 + (-1)bso_15] ≥ 0)
(7) (i20[2]=i20[3]∧i31[2]=i31[3]∧&&(&&(>=(i31[2], 0), <(i31[2], i20[2])), >(+(i31[2], 1), 0))=TRUE ⇒ LOAD597(i20[2], i31[2])≥NonInfC∧LOAD597(i20[2], i31[2])≥COND_LOAD597(&&(&&(>=(i31[2], 0), <(i31[2], i20[2])), >(+(i31[2], 1), 0)), i20[2], i31[2])∧(UIncreasing(COND_LOAD597(&&(&&(>=(i31[2], 0), <(i31[2], i20[2])), >(+(i31[2], 1), 0)), i20[2], i31[2])), ≥))
(8) (>(+(i31[2], 1), 0)=TRUE∧>=(i31[2], 0)=TRUE∧<(i31[2], i20[2])=TRUE ⇒ LOAD597(i20[2], i31[2])≥NonInfC∧LOAD597(i20[2], i31[2])≥COND_LOAD597(&&(&&(>=(i31[2], 0), <(i31[2], i20[2])), >(+(i31[2], 1), 0)), i20[2], i31[2])∧(UIncreasing(COND_LOAD597(&&(&&(>=(i31[2], 0), <(i31[2], i20[2])), >(+(i31[2], 1), 0)), i20[2], i31[2])), ≥))
(9) (i31[2] ≥ 0∧i31[2] ≥ 0∧i20[2] + [-1] + [-1]i31[2] ≥ 0 ⇒ (UIncreasing(COND_LOAD597(&&(&&(>=(i31[2], 0), <(i31[2], i20[2])), >(+(i31[2], 1), 0)), i20[2], i31[2])), ≥)∧[(-1)bni_16 + (-1)Bound*bni_16] + [(-1)bni_16]i31[2] + [bni_16]i20[2] ≥ 0∧[(-1)bso_17] ≥ 0)
(10) (i31[2] ≥ 0∧i31[2] ≥ 0∧i20[2] + [-1] + [-1]i31[2] ≥ 0 ⇒ (UIncreasing(COND_LOAD597(&&(&&(>=(i31[2], 0), <(i31[2], i20[2])), >(+(i31[2], 1), 0)), i20[2], i31[2])), ≥)∧[(-1)bni_16 + (-1)Bound*bni_16] + [(-1)bni_16]i31[2] + [bni_16]i20[2] ≥ 0∧[(-1)bso_17] ≥ 0)
(11) (i31[2] ≥ 0∧i31[2] ≥ 0∧i20[2] + [-1] + [-1]i31[2] ≥ 0 ⇒ (UIncreasing(COND_LOAD597(&&(&&(>=(i31[2], 0), <(i31[2], i20[2])), >(+(i31[2], 1), 0)), i20[2], i31[2])), ≥)∧[(-1)bni_16 + (-1)Bound*bni_16] + [(-1)bni_16]i31[2] + [bni_16]i20[2] ≥ 0∧[(-1)bso_17] ≥ 0)
(12) (i31[2] ≥ 0∧i31[2] ≥ 0∧i20[2] ≥ 0 ⇒ (UIncreasing(COND_LOAD597(&&(&&(>=(i31[2], 0), <(i31[2], i20[2])), >(+(i31[2], 1), 0)), i20[2], i31[2])), ≥)∧[(-1)Bound*bni_16] + [bni_16]i20[2] ≥ 0∧[(-1)bso_17] ≥ 0)
POL(TRUE) = 0
POL(FALSE) = 0
POL(COND_LOAD597(x1, x2, x3)) = [-1] + [-1]x3 + x2
POL(LOAD597(x1, x2)) = [-1] + [-1]x2 + x1
POL(+(x1, x2)) = x1 + x2
POL(1) = [1]
POL(&&(x1, x2)) = [-1]
POL(>=(x1, x2)) = [-1]
POL(0) = 0
POL(<(x1, x2)) = [-1]
POL(>(x1, x2)) = [-1]
COND_LOAD597(TRUE, i20[3], i31[3]) → LOAD597(i20[3], +(i31[3], 1))
COND_LOAD597(TRUE, i20[3], i31[3]) → LOAD597(i20[3], +(i31[3], 1))
LOAD597(i20[2], i31[2]) → COND_LOAD597(&&(&&(>=(i31[2], 0), <(i31[2], i20[2])), >(+(i31[2], 1), 0)), i20[2], i31[2])
LOAD597(i20[2], i31[2]) → COND_LOAD597(&&(&&(>=(i31[2], 0), <(i31[2], i20[2])), >(+(i31[2], 1), 0)), i20[2], i31[2])
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
!= | ~ | 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 |