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 TRUE
↳14 IDP
↳15 IDependencyGraphProof (⇔)
↳16 TRUE
No human-readable program information known.
!= | ~ | 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 |
Boolean, Integer
(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]))
!= | ~ | 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
(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]))
(1) (&&(>=(i31[0], 0), >(i7[0], i31[0]))=TRUE∧i7[0]=i7[1]∧i31[0]=i31[1] ⇒ LOAD346(i7[0], i31[0])≥NonInfC∧LOAD346(i7[0], i31[0])≥COND_LOAD346(&&(>=(i31[0], 0), >(i7[0], i31[0])), i7[0], i31[0])∧(UIncreasing(COND_LOAD346(&&(>=(i31[0], 0), >(i7[0], i31[0])), i7[0], i31[0])), ≥))
(2) (>=(i31[0], 0)=TRUE∧>(i7[0], i31[0])=TRUE ⇒ LOAD346(i7[0], i31[0])≥NonInfC∧LOAD346(i7[0], i31[0])≥COND_LOAD346(&&(>=(i31[0], 0), >(i7[0], i31[0])), i7[0], i31[0])∧(UIncreasing(COND_LOAD346(&&(>=(i31[0], 0), >(i7[0], i31[0])), i7[0], i31[0])), ≥))
(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)
(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)
(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)
(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)
(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))), ≥))
(8) ((UIncreasing(STORE528(i7[1], +(+(i31[1], 1), 1))), ≥)∧[1 + (-1)bso_17] ≥ 0)
(9) ((UIncreasing(STORE528(i7[1], +(+(i31[1], 1), 1))), ≥)∧[1 + (-1)bso_17] ≥ 0)
(10) ((UIncreasing(STORE528(i7[1], +(+(i31[1], 1), 1))), ≥)∧[1 + (-1)bso_17] ≥ 0)
(11) ((UIncreasing(STORE528(i7[1], +(+(i31[1], 1), 1))), ≥)∧0 = 0∧0 = 0∧[1 + (-1)bso_17] ≥ 0)
(12) (i7[2]=i7[0]∧i47[2]=i31[0] ⇒ STORE528(i7[2], i47[2])≥NonInfC∧STORE528(i7[2], i47[2])≥LOAD346(i7[2], i47[2])∧(UIncreasing(LOAD346(i7[2], i47[2])), ≥))
(13) (STORE528(i7[2], i47[2])≥NonInfC∧STORE528(i7[2], i47[2])≥LOAD346(i7[2], i47[2])∧(UIncreasing(LOAD346(i7[2], i47[2])), ≥))
(14) ((UIncreasing(LOAD346(i7[2], i47[2])), ≥)∧[(-1)bso_19] ≥ 0)
(15) ((UIncreasing(LOAD346(i7[2], i47[2])), ≥)∧[(-1)bso_19] ≥ 0)
(16) ((UIncreasing(LOAD346(i7[2], i47[2])), ≥)∧[(-1)bso_19] ≥ 0)
(17) ((UIncreasing(LOAD346(i7[2], i47[2])), ≥)∧0 = 0∧0 = 0∧[(-1)bso_19] ≥ 0)
(18) (i7[2]=i7[3]∧i47[2]=i31[3] ⇒ STORE528(i7[2], i47[2])≥NonInfC∧STORE528(i7[2], i47[2])≥LOAD346(i7[2], i47[2])∧(UIncreasing(LOAD346(i7[2], i47[2])), ≥))
(19) (STORE528(i7[2], i47[2])≥NonInfC∧STORE528(i7[2], i47[2])≥LOAD346(i7[2], i47[2])∧(UIncreasing(LOAD346(i7[2], i47[2])), ≥))
(20) ((UIncreasing(LOAD346(i7[2], i47[2])), ≥)∧[(-1)bso_19] ≥ 0)
(21) ((UIncreasing(LOAD346(i7[2], i47[2])), ≥)∧[(-1)bso_19] ≥ 0)
(22) ((UIncreasing(LOAD346(i7[2], i47[2])), ≥)∧[(-1)bso_19] ≥ 0)
(23) ((UIncreasing(LOAD346(i7[2], i47[2])), ≥)∧0 = 0∧0 = 0∧[(-1)bso_19] ≥ 0)
(24) (&&(&&(>=(i31[3], 0), >(i7[3], i31[3])), =(0, %(+(i31[3], 1), 2)))=TRUE∧i7[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])), ≥))
(25) (>=(i31[3], 0)=TRUE∧>(i7[3], i31[3])=TRUE∧>=(0, %(+(i31[3], 1), 2))=TRUE∧<=(0, %(+(i31[3], 1), 2))=TRUE ⇒ 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])), ≥))
(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)
(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)
(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)
(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)
(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)
(31) (COND_LOAD3461(TRUE, i7[4], i31[4])≥NonInfC∧COND_LOAD3461(TRUE, i7[4], i31[4])≥LOAD346(i7[4], +(i31[4], 1))∧(UIncreasing(LOAD346(i7[4], +(i31[4], 1))), ≥))
(32) ((UIncreasing(LOAD346(i7[4], +(i31[4], 1))), ≥)∧[1 + (-1)bso_23] ≥ 0)
(33) ((UIncreasing(LOAD346(i7[4], +(i31[4], 1))), ≥)∧[1 + (-1)bso_23] ≥ 0)
(34) ((UIncreasing(LOAD346(i7[4], +(i31[4], 1))), ≥)∧[1 + (-1)bso_23] ≥ 0)
(35) ((UIncreasing(LOAD346(i7[4], +(i31[4], 1))), ≥)∧0 = 0∧0 = 0∧[1 + (-1)bso_23] ≥ 0)
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}
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))
COND_LOAD3461(TRUE, i7[4], i31[4]) → LOAD346(i7[4], +(i31[4], 1))
LOAD346(i7[0], i31[0]) → COND_LOAD346(&&(>=(i31[0], 0), >(i7[0], i31[0])), i7[0], i31[0])
LOAD346(i7[3], i31[3]) → COND_LOAD3461(&&(&&(>=(i31[3], 0), >(i7[3], i31[3])), =(0, %(+(i31[3], 1), 2))), i7[3], i31[3])
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])
!= | ~ | 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
(2) -> (3), if ((i7[2] →* i7[3])∧(i47[2] →* i31[3]))
!= | ~ | 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
(1) -> (2), if ((i31[1] + 1 + 1 →* i47[2])∧(i7[1] →* i7[2]))