0 JBC
↳1 JBCToGraph (⇒, 330 ms)
↳2 JBCTerminationGraph
↳3 TerminationGraphToSCCProof (⇒, 10 ms)
↳4 AND
↳5 JBCTerminationSCC
↳6 SCCToIDPv1Proof (⇒, 150 ms)
↳7 IDP
↳8 IDPNonInfProof (⇒, 100 ms)
↳9 IDP
↳10 IDependencyGraphProof (⇔, 0 ms)
↳11 TRUE
↳12 JBCTerminationSCC
↳13 SCCToIDPv1Proof (⇒, 250 ms)
↳14 IDP
↳15 IDPNonInfProof (⇒, 60 ms)
↳16 AND
↳17 IDP
↳18 IDependencyGraphProof (⇔, 0 ms)
↳19 TRUE
↳20 IDP
↳21 IDependencyGraphProof (⇔, 0 ms)
↳22 TRUE
↳23 JBCTerminationSCC
↳24 SCCToIDPv1Proof (⇒, 180 ms)
↳25 IDP
↳26 IDPNonInfProof (⇒, 130 ms)
↳27 AND
↳28 IDP
↳29 IDependencyGraphProof (⇔, 0 ms)
↳30 TRUE
↳31 IDP
↳32 IDependencyGraphProof (⇔, 0 ms)
↳33 TRUE
package example_1;
public class A {
int incr(int i) {
return i=i+1;
}
}
package example_1;
public class B extends A {
int incr(int i) {
return i = i+2;
}
}
package example_1;
public class C extends B {
int incr(int i) {
return i=i+3;
}
}
package example_1;
public class Test {
public int add(int n,A o){
int res=0;
int i=0;
while (i<=n){
res=res+i;
i=o.incr(i);
}
return res;
}
public static void main(String[] args) {
int test = 1000;
Test testClass = new Test();
A a = new A();
int result1 = testClass.add(test,a);
a = new B();
int result2 = testClass.add(test,a);
a = new C();
int result3 = testClass.add(test,a);
// System.out.println("Result: "+result1 + result2 + result3);
}
}
Generated 20 rules for P and 0 rules for R.
P rules:
1041_0_add_Load(EOS(STATIC_1041), matching1, matching2, i111, i111) → 1045_0_add_GT(EOS(STATIC_1045), 1000, 1000, i111, i111, 1000) | &&(=(matching1, 1000), =(matching2, 1000))
1045_0_add_GT(EOS(STATIC_1045), matching1, matching2, i117, i117, matching3) → 1046_0_add_GT(EOS(STATIC_1046), 1000, 1000, i117, i117, 1000) | &&(&&(=(matching1, 1000), =(matching2, 1000)), =(matching3, 1000))
1046_0_add_GT(EOS(STATIC_1046), matching1, matching2, i117, i117, matching3) → 1049_0_add_Load(EOS(STATIC_1049), 1000, 1000, i117) | &&(&&(&&(<=(i117, 1000), =(matching1, 1000)), =(matching2, 1000)), =(matching3, 1000))
1049_0_add_Load(EOS(STATIC_1049), matching1, matching2, i117) → 1053_0_add_Load(EOS(STATIC_1053), 1000, 1000, i117) | &&(=(matching1, 1000), =(matching2, 1000))
1053_0_add_Load(EOS(STATIC_1053), matching1, matching2, i117) → 1057_0_add_IntArithmetic(EOS(STATIC_1057), 1000, 1000, i117, i117) | &&(=(matching1, 1000), =(matching2, 1000))
1057_0_add_IntArithmetic(EOS(STATIC_1057), matching1, matching2, i117, i117) → 1061_0_add_Store(EOS(STATIC_1061), 1000, 1000, i117) | &&(&&(>=(i117, 0), =(matching1, 1000)), =(matching2, 1000))
1061_0_add_Store(EOS(STATIC_1061), matching1, matching2, i117) → 1064_0_add_Load(EOS(STATIC_1064), 1000, 1000, i117) | &&(=(matching1, 1000), =(matching2, 1000))
1064_0_add_Load(EOS(STATIC_1064), matching1, matching2, i117) → 1068_0_add_Load(EOS(STATIC_1068), 1000, 1000, i117) | &&(=(matching1, 1000), =(matching2, 1000))
1068_0_add_Load(EOS(STATIC_1068), matching1, matching2, i117) → 1070_0_add_InvokeMethod(EOS(STATIC_1070), 1000, 1000, i117) | &&(=(matching1, 1000), =(matching2, 1000))
1070_0_add_InvokeMethod(EOS(STATIC_1070), matching1, matching2, i117) → 1071_0_incr_Load(EOS(STATIC_1071), 1000, 1000, i117, i117) | &&(=(matching1, 1000), =(matching2, 1000))
1071_0_incr_Load(EOS(STATIC_1071), matching1, matching2, i117, i117) → 1073_0_incr_ConstantStackPush(EOS(STATIC_1073), 1000, 1000, i117, i117) | &&(=(matching1, 1000), =(matching2, 1000))
1073_0_incr_ConstantStackPush(EOS(STATIC_1073), matching1, matching2, i117, i117) → 1074_0_incr_IntArithmetic(EOS(STATIC_1074), 1000, 1000, i117, i117, 3) | &&(=(matching1, 1000), =(matching2, 1000))
1074_0_incr_IntArithmetic(EOS(STATIC_1074), matching1, matching2, i117, i117, matching3) → 1076_0_incr_Duplicate(EOS(STATIC_1076), 1000, 1000, i117, +(i117, 3)) | &&(&&(&&(>=(i117, 0), =(matching1, 1000)), =(matching2, 1000)), =(matching3, 3))
1076_0_incr_Duplicate(EOS(STATIC_1076), matching1, matching2, i117, i124) → 1077_0_incr_Store(EOS(STATIC_1077), 1000, 1000, i117, i124, i124) | &&(=(matching1, 1000), =(matching2, 1000))
1077_0_incr_Store(EOS(STATIC_1077), matching1, matching2, i117, i124, i124) → 1079_0_incr_Return(EOS(STATIC_1079), 1000, 1000, i117, i124) | &&(=(matching1, 1000), =(matching2, 1000))
1079_0_incr_Return(EOS(STATIC_1079), matching1, matching2, i117, i124) → 1081_0_add_Store(EOS(STATIC_1081), 1000, 1000, i124) | &&(=(matching1, 1000), =(matching2, 1000))
1081_0_add_Store(EOS(STATIC_1081), matching1, matching2, i124) → 1083_0_add_JMP(EOS(STATIC_1083), 1000, 1000, i124) | &&(=(matching1, 1000), =(matching2, 1000))
1083_0_add_JMP(EOS(STATIC_1083), matching1, matching2, i124) → 1086_0_add_Load(EOS(STATIC_1086), 1000, 1000, i124) | &&(=(matching1, 1000), =(matching2, 1000))
1086_0_add_Load(EOS(STATIC_1086), matching1, matching2, i124) → 1038_0_add_Load(EOS(STATIC_1038), 1000, 1000, i124) | &&(=(matching1, 1000), =(matching2, 1000))
1038_0_add_Load(EOS(STATIC_1038), matching1, matching2, i111) → 1041_0_add_Load(EOS(STATIC_1041), 1000, 1000, i111, i111) | &&(=(matching1, 1000), =(matching2, 1000))
R rules:
Combined rules. Obtained 1 conditional rules for P and 0 conditional rules for R.
P rules:
1041_0_add_Load(EOS(STATIC_1041), 1000, 1000, x2, x2) → 1041_0_add_Load(EOS(STATIC_1041), 1000, 1000, +(x2, 3), +(x2, 3)) | &&(>(+(x2, 1), 0), <=(x2, 1000))
R rules:
Filtered ground terms:
1041_0_add_Load(x1, x2, x3, x4, x5) → 1041_0_add_Load(x4, x5)
EOS(x1) → EOS
Cond_1041_0_add_Load(x1, x2, x3, x4, x5, x6) → Cond_1041_0_add_Load(x1, x5, x6)
Filtered duplicate args:
1041_0_add_Load(x1, x2) → 1041_0_add_Load(x2)
Cond_1041_0_add_Load(x1, x2, x3) → Cond_1041_0_add_Load(x1, x3)
Combined rules. Obtained 1 conditional rules for P and 0 conditional rules for R.
P rules:
1041_0_add_Load(x2) → 1041_0_add_Load(+(x2, 3)) | &&(>(x2, -1), <=(x2, 1000))
R rules:
Finished conversion. Obtained 2 rules for P and 0 rules for R. System has predefined symbols.
P rules:
1041_0_ADD_LOAD(x2) → COND_1041_0_ADD_LOAD(&&(>(x2, -1), <=(x2, 1000)), x2)
COND_1041_0_ADD_LOAD(TRUE, x2) → 1041_0_ADD_LOAD(+(x2, 3))
R rules:
!= | ~ | 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 (x2[0] > -1 && x2[0] <= 1000 ∧x2[0] →* x2[1])
(1) -> (0), if (x2[1] + 3 →* x2[0])
(1) (&&(>(x2[0], -1), <=(x2[0], 1000))=TRUE∧x2[0]=x2[1] ⇒ 1041_0_ADD_LOAD(x2[0])≥NonInfC∧1041_0_ADD_LOAD(x2[0])≥COND_1041_0_ADD_LOAD(&&(>(x2[0], -1), <=(x2[0], 1000)), x2[0])∧(UIncreasing(COND_1041_0_ADD_LOAD(&&(>(x2[0], -1), <=(x2[0], 1000)), x2[0])), ≥))
(2) (>(x2[0], -1)=TRUE∧<=(x2[0], 1000)=TRUE ⇒ 1041_0_ADD_LOAD(x2[0])≥NonInfC∧1041_0_ADD_LOAD(x2[0])≥COND_1041_0_ADD_LOAD(&&(>(x2[0], -1), <=(x2[0], 1000)), x2[0])∧(UIncreasing(COND_1041_0_ADD_LOAD(&&(>(x2[0], -1), <=(x2[0], 1000)), x2[0])), ≥))
(3) (x2[0] ≥ 0∧[1000] + [-1]x2[0] ≥ 0 ⇒ (UIncreasing(COND_1041_0_ADD_LOAD(&&(>(x2[0], -1), <=(x2[0], 1000)), x2[0])), ≥)∧[bni_10 + (-1)Bound*bni_10] + [(-1)bni_10]x2[0] ≥ 0∧[2 + (-1)bso_11] ≥ 0)
(4) (x2[0] ≥ 0∧[1000] + [-1]x2[0] ≥ 0 ⇒ (UIncreasing(COND_1041_0_ADD_LOAD(&&(>(x2[0], -1), <=(x2[0], 1000)), x2[0])), ≥)∧[bni_10 + (-1)Bound*bni_10] + [(-1)bni_10]x2[0] ≥ 0∧[2 + (-1)bso_11] ≥ 0)
(5) (x2[0] ≥ 0∧[1000] + [-1]x2[0] ≥ 0 ⇒ (UIncreasing(COND_1041_0_ADD_LOAD(&&(>(x2[0], -1), <=(x2[0], 1000)), x2[0])), ≥)∧[bni_10 + (-1)Bound*bni_10] + [(-1)bni_10]x2[0] ≥ 0∧[2 + (-1)bso_11] ≥ 0)
(6) (COND_1041_0_ADD_LOAD(TRUE, x2[1])≥NonInfC∧COND_1041_0_ADD_LOAD(TRUE, x2[1])≥1041_0_ADD_LOAD(+(x2[1], 3))∧(UIncreasing(1041_0_ADD_LOAD(+(x2[1], 3))), ≥))
(7) ((UIncreasing(1041_0_ADD_LOAD(+(x2[1], 3))), ≥)∧[bni_12] = 0∧[1 + (-1)bso_13] ≥ 0)
(8) ((UIncreasing(1041_0_ADD_LOAD(+(x2[1], 3))), ≥)∧[bni_12] = 0∧[1 + (-1)bso_13] ≥ 0)
(9) ((UIncreasing(1041_0_ADD_LOAD(+(x2[1], 3))), ≥)∧[bni_12] = 0∧[1 + (-1)bso_13] ≥ 0)
(10) ((UIncreasing(1041_0_ADD_LOAD(+(x2[1], 3))), ≥)∧[bni_12] = 0∧0 = 0∧[1 + (-1)bso_13] ≥ 0)
POL(TRUE) = 0
POL(FALSE) = 0
POL(1041_0_ADD_LOAD(x1)) = [1] + [-1]x1
POL(COND_1041_0_ADD_LOAD(x1, x2)) = [-1] + [-1]x2
POL(&&(x1, x2)) = [-1]
POL(>(x1, x2)) = [-1]
POL(-1) = [-1]
POL(<=(x1, x2)) = [-1]
POL(1000) = [1000]
POL(+(x1, x2)) = x1 + x2
POL(3) = [3]
1041_0_ADD_LOAD(x2[0]) → COND_1041_0_ADD_LOAD(&&(>(x2[0], -1), <=(x2[0], 1000)), x2[0])
COND_1041_0_ADD_LOAD(TRUE, x2[1]) → 1041_0_ADD_LOAD(+(x2[1], 3))
1041_0_ADD_LOAD(x2[0]) → COND_1041_0_ADD_LOAD(&&(>(x2[0], -1), <=(x2[0], 1000)), x2[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
Generated 20 rules for P and 0 rules for R.
P rules:
740_0_add_Load(EOS(STATIC_740), matching1, matching2, matching3, i59, i59) → 743_0_add_GT(EOS(STATIC_743), 1000, 1000, 1000, i59, i59, 1000) | &&(&&(=(matching1, 1000), =(matching2, 1000)), =(matching3, 1000))
743_0_add_GT(EOS(STATIC_743), matching1, matching2, matching3, i65, i65, matching4) → 745_0_add_GT(EOS(STATIC_745), 1000, 1000, 1000, i65, i65, 1000) | &&(&&(&&(=(matching1, 1000), =(matching2, 1000)), =(matching3, 1000)), =(matching4, 1000))
745_0_add_GT(EOS(STATIC_745), matching1, matching2, matching3, i65, i65, matching4) → 749_0_add_Load(EOS(STATIC_749), 1000, 1000, 1000, i65) | &&(&&(&&(&&(<=(i65, 1000), =(matching1, 1000)), =(matching2, 1000)), =(matching3, 1000)), =(matching4, 1000))
749_0_add_Load(EOS(STATIC_749), matching1, matching2, matching3, i65) → 753_0_add_Load(EOS(STATIC_753), 1000, 1000, 1000, i65) | &&(&&(=(matching1, 1000), =(matching2, 1000)), =(matching3, 1000))
753_0_add_Load(EOS(STATIC_753), matching1, matching2, matching3, i65) → 757_0_add_IntArithmetic(EOS(STATIC_757), 1000, 1000, 1000, i65, i65) | &&(&&(=(matching1, 1000), =(matching2, 1000)), =(matching3, 1000))
757_0_add_IntArithmetic(EOS(STATIC_757), matching1, matching2, matching3, i65, i65) → 761_0_add_Store(EOS(STATIC_761), 1000, 1000, 1000, i65) | &&(&&(&&(>=(i65, 0), =(matching1, 1000)), =(matching2, 1000)), =(matching3, 1000))
761_0_add_Store(EOS(STATIC_761), matching1, matching2, matching3, i65) → 765_0_add_Load(EOS(STATIC_765), 1000, 1000, 1000, i65) | &&(&&(=(matching1, 1000), =(matching2, 1000)), =(matching3, 1000))
765_0_add_Load(EOS(STATIC_765), matching1, matching2, matching3, i65) → 769_0_add_Load(EOS(STATIC_769), 1000, 1000, 1000, i65) | &&(&&(=(matching1, 1000), =(matching2, 1000)), =(matching3, 1000))
769_0_add_Load(EOS(STATIC_769), matching1, matching2, matching3, i65) → 773_0_add_InvokeMethod(EOS(STATIC_773), 1000, 1000, 1000, i65) | &&(&&(=(matching1, 1000), =(matching2, 1000)), =(matching3, 1000))
773_0_add_InvokeMethod(EOS(STATIC_773), matching1, matching2, matching3, i65) → 776_0_incr_Load(EOS(STATIC_776), 1000, 1000, 1000, i65, i65) | &&(&&(=(matching1, 1000), =(matching2, 1000)), =(matching3, 1000))
776_0_incr_Load(EOS(STATIC_776), matching1, matching2, matching3, i65, i65) → 780_0_incr_ConstantStackPush(EOS(STATIC_780), 1000, 1000, 1000, i65, i65) | &&(&&(=(matching1, 1000), =(matching2, 1000)), =(matching3, 1000))
780_0_incr_ConstantStackPush(EOS(STATIC_780), matching1, matching2, matching3, i65, i65) → 784_0_incr_IntArithmetic(EOS(STATIC_784), 1000, 1000, 1000, i65, i65, 2) | &&(&&(=(matching1, 1000), =(matching2, 1000)), =(matching3, 1000))
784_0_incr_IntArithmetic(EOS(STATIC_784), matching1, matching2, matching3, i65, i65, matching4) → 787_0_incr_Duplicate(EOS(STATIC_787), 1000, 1000, 1000, i65, +(i65, 2)) | &&(&&(&&(&&(>=(i65, 0), =(matching1, 1000)), =(matching2, 1000)), =(matching3, 1000)), =(matching4, 2))
787_0_incr_Duplicate(EOS(STATIC_787), matching1, matching2, matching3, i65, i70) → 788_0_incr_Store(EOS(STATIC_788), 1000, 1000, 1000, i65, i70, i70) | &&(&&(=(matching1, 1000), =(matching2, 1000)), =(matching3, 1000))
788_0_incr_Store(EOS(STATIC_788), matching1, matching2, matching3, i65, i70, i70) → 792_0_incr_Return(EOS(STATIC_792), 1000, 1000, 1000, i65, i70) | &&(&&(=(matching1, 1000), =(matching2, 1000)), =(matching3, 1000))
792_0_incr_Return(EOS(STATIC_792), matching1, matching2, matching3, i65, i70) → 795_0_add_Store(EOS(STATIC_795), 1000, 1000, 1000, i70) | &&(&&(=(matching1, 1000), =(matching2, 1000)), =(matching3, 1000))
795_0_add_Store(EOS(STATIC_795), matching1, matching2, matching3, i70) → 797_0_add_JMP(EOS(STATIC_797), 1000, 1000, 1000, i70) | &&(&&(=(matching1, 1000), =(matching2, 1000)), =(matching3, 1000))
797_0_add_JMP(EOS(STATIC_797), matching1, matching2, matching3, i70) → 802_0_add_Load(EOS(STATIC_802), 1000, 1000, 1000, i70) | &&(&&(=(matching1, 1000), =(matching2, 1000)), =(matching3, 1000))
802_0_add_Load(EOS(STATIC_802), matching1, matching2, matching3, i70) → 736_0_add_Load(EOS(STATIC_736), 1000, 1000, 1000, i70) | &&(&&(=(matching1, 1000), =(matching2, 1000)), =(matching3, 1000))
736_0_add_Load(EOS(STATIC_736), matching1, matching2, matching3, i59) → 740_0_add_Load(EOS(STATIC_740), 1000, 1000, 1000, i59, i59) | &&(&&(=(matching1, 1000), =(matching2, 1000)), =(matching3, 1000))
R rules:
Combined rules. Obtained 1 conditional rules for P and 0 conditional rules for R.
P rules:
740_0_add_Load(EOS(STATIC_740), 1000, 1000, 1000, x3, x3) → 740_0_add_Load(EOS(STATIC_740), 1000, 1000, 1000, +(x3, 2), +(x3, 2)) | &&(>(+(x3, 1), 0), <=(x3, 1000))
R rules:
Filtered ground terms:
740_0_add_Load(x1, x2, x3, x4, x5, x6) → 740_0_add_Load(x5, x6)
EOS(x1) → EOS
Cond_740_0_add_Load(x1, x2, x3, x4, x5, x6, x7) → Cond_740_0_add_Load(x1, x6, x7)
Filtered duplicate args:
740_0_add_Load(x1, x2) → 740_0_add_Load(x2)
Cond_740_0_add_Load(x1, x2, x3) → Cond_740_0_add_Load(x1, x3)
Combined rules. Obtained 1 conditional rules for P and 0 conditional rules for R.
P rules:
740_0_add_Load(x3) → 740_0_add_Load(+(x3, 2)) | &&(>(x3, -1), <=(x3, 1000))
R rules:
Finished conversion. Obtained 2 rules for P and 0 rules for R. System has predefined symbols.
P rules:
740_0_ADD_LOAD(x3) → COND_740_0_ADD_LOAD(&&(>(x3, -1), <=(x3, 1000)), x3)
COND_740_0_ADD_LOAD(TRUE, x3) → 740_0_ADD_LOAD(+(x3, 2))
R rules:
!= | ~ | 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 (x3[0] > -1 && x3[0] <= 1000 ∧x3[0] →* x3[1])
(1) -> (0), if (x3[1] + 2 →* x3[0])
(1) (&&(>(x3[0], -1), <=(x3[0], 1000))=TRUE∧x3[0]=x3[1] ⇒ 740_0_ADD_LOAD(x3[0])≥NonInfC∧740_0_ADD_LOAD(x3[0])≥COND_740_0_ADD_LOAD(&&(>(x3[0], -1), <=(x3[0], 1000)), x3[0])∧(UIncreasing(COND_740_0_ADD_LOAD(&&(>(x3[0], -1), <=(x3[0], 1000)), x3[0])), ≥))
(2) (>(x3[0], -1)=TRUE∧<=(x3[0], 1000)=TRUE ⇒ 740_0_ADD_LOAD(x3[0])≥NonInfC∧740_0_ADD_LOAD(x3[0])≥COND_740_0_ADD_LOAD(&&(>(x3[0], -1), <=(x3[0], 1000)), x3[0])∧(UIncreasing(COND_740_0_ADD_LOAD(&&(>(x3[0], -1), <=(x3[0], 1000)), x3[0])), ≥))
(3) (x3[0] ≥ 0∧[1000] + [-1]x3[0] ≥ 0 ⇒ (UIncreasing(COND_740_0_ADD_LOAD(&&(>(x3[0], -1), <=(x3[0], 1000)), x3[0])), ≥)∧[(-1)bni_10 + (-1)Bound*bni_10] + [(-1)bni_10]x3[0] ≥ 0∧[(-1)bso_11] ≥ 0)
(4) (x3[0] ≥ 0∧[1000] + [-1]x3[0] ≥ 0 ⇒ (UIncreasing(COND_740_0_ADD_LOAD(&&(>(x3[0], -1), <=(x3[0], 1000)), x3[0])), ≥)∧[(-1)bni_10 + (-1)Bound*bni_10] + [(-1)bni_10]x3[0] ≥ 0∧[(-1)bso_11] ≥ 0)
(5) (x3[0] ≥ 0∧[1000] + [-1]x3[0] ≥ 0 ⇒ (UIncreasing(COND_740_0_ADD_LOAD(&&(>(x3[0], -1), <=(x3[0], 1000)), x3[0])), ≥)∧[(-1)bni_10 + (-1)Bound*bni_10] + [(-1)bni_10]x3[0] ≥ 0∧[(-1)bso_11] ≥ 0)
(6) (COND_740_0_ADD_LOAD(TRUE, x3[1])≥NonInfC∧COND_740_0_ADD_LOAD(TRUE, x3[1])≥740_0_ADD_LOAD(+(x3[1], 2))∧(UIncreasing(740_0_ADD_LOAD(+(x3[1], 2))), ≥))
(7) ((UIncreasing(740_0_ADD_LOAD(+(x3[1], 2))), ≥)∧[bni_12] = 0∧[2 + (-1)bso_13] ≥ 0)
(8) ((UIncreasing(740_0_ADD_LOAD(+(x3[1], 2))), ≥)∧[bni_12] = 0∧[2 + (-1)bso_13] ≥ 0)
(9) ((UIncreasing(740_0_ADD_LOAD(+(x3[1], 2))), ≥)∧[bni_12] = 0∧[2 + (-1)bso_13] ≥ 0)
(10) ((UIncreasing(740_0_ADD_LOAD(+(x3[1], 2))), ≥)∧[bni_12] = 0∧0 = 0∧[2 + (-1)bso_13] ≥ 0)
POL(TRUE) = 0
POL(FALSE) = 0
POL(740_0_ADD_LOAD(x1)) = [-1] + [-1]x1
POL(COND_740_0_ADD_LOAD(x1, x2)) = [-1] + [-1]x2
POL(&&(x1, x2)) = [-1]
POL(>(x1, x2)) = [-1]
POL(-1) = [-1]
POL(<=(x1, x2)) = [-1]
POL(1000) = [1000]
POL(+(x1, x2)) = x1 + x2
POL(2) = [2]
COND_740_0_ADD_LOAD(TRUE, x3[1]) → 740_0_ADD_LOAD(+(x3[1], 2))
740_0_ADD_LOAD(x3[0]) → COND_740_0_ADD_LOAD(&&(>(x3[0], -1), <=(x3[0], 1000)), x3[0])
740_0_ADD_LOAD(x3[0]) → COND_740_0_ADD_LOAD(&&(>(x3[0], -1), <=(x3[0], 1000)), x3[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 |
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 |
Integer
Generated 20 rules for P and 0 rules for R.
P rules:
330_0_add_Load(EOS(STATIC_330), matching1, matching2, matching3, i18, i18) → 337_0_add_GT(EOS(STATIC_337), 1000, 1000, 1000, i18, i18, 1000) | &&(&&(=(matching1, 1000), =(matching2, 1000)), =(matching3, 1000))
337_0_add_GT(EOS(STATIC_337), matching1, matching2, matching3, i22, i22, matching4) → 341_0_add_GT(EOS(STATIC_341), 1000, 1000, 1000, i22, i22, 1000) | &&(&&(&&(=(matching1, 1000), =(matching2, 1000)), =(matching3, 1000)), =(matching4, 1000))
341_0_add_GT(EOS(STATIC_341), matching1, matching2, matching3, i22, i22, matching4) → 344_0_add_Load(EOS(STATIC_344), 1000, 1000, 1000, i22) | &&(&&(&&(&&(<=(i22, 1000), =(matching1, 1000)), =(matching2, 1000)), =(matching3, 1000)), =(matching4, 1000))
344_0_add_Load(EOS(STATIC_344), matching1, matching2, matching3, i22) → 350_0_add_Load(EOS(STATIC_350), 1000, 1000, 1000, i22) | &&(&&(=(matching1, 1000), =(matching2, 1000)), =(matching3, 1000))
350_0_add_Load(EOS(STATIC_350), matching1, matching2, matching3, i22) → 355_0_add_IntArithmetic(EOS(STATIC_355), 1000, 1000, 1000, i22, i22) | &&(&&(=(matching1, 1000), =(matching2, 1000)), =(matching3, 1000))
355_0_add_IntArithmetic(EOS(STATIC_355), matching1, matching2, matching3, i22, i22) → 360_0_add_Store(EOS(STATIC_360), 1000, 1000, 1000, i22) | &&(&&(&&(>=(i22, 0), =(matching1, 1000)), =(matching2, 1000)), =(matching3, 1000))
360_0_add_Store(EOS(STATIC_360), matching1, matching2, matching3, i22) → 365_0_add_Load(EOS(STATIC_365), 1000, 1000, 1000, i22) | &&(&&(=(matching1, 1000), =(matching2, 1000)), =(matching3, 1000))
365_0_add_Load(EOS(STATIC_365), matching1, matching2, matching3, i22) → 370_0_add_Load(EOS(STATIC_370), 1000, 1000, 1000, i22) | &&(&&(=(matching1, 1000), =(matching2, 1000)), =(matching3, 1000))
370_0_add_Load(EOS(STATIC_370), matching1, matching2, matching3, i22) → 375_0_add_InvokeMethod(EOS(STATIC_375), 1000, 1000, 1000, i22) | &&(&&(=(matching1, 1000), =(matching2, 1000)), =(matching3, 1000))
375_0_add_InvokeMethod(EOS(STATIC_375), matching1, matching2, matching3, i22) → 381_0_incr_Load(EOS(STATIC_381), 1000, 1000, 1000, i22, i22) | &&(&&(=(matching1, 1000), =(matching2, 1000)), =(matching3, 1000))
381_0_incr_Load(EOS(STATIC_381), matching1, matching2, matching3, i22, i22) → 386_0_incr_ConstantStackPush(EOS(STATIC_386), 1000, 1000, 1000, i22, i22) | &&(&&(=(matching1, 1000), =(matching2, 1000)), =(matching3, 1000))
386_0_incr_ConstantStackPush(EOS(STATIC_386), matching1, matching2, matching3, i22, i22) → 391_0_incr_IntArithmetic(EOS(STATIC_391), 1000, 1000, 1000, i22, i22, 1) | &&(&&(=(matching1, 1000), =(matching2, 1000)), =(matching3, 1000))
391_0_incr_IntArithmetic(EOS(STATIC_391), matching1, matching2, matching3, i22, i22, matching4) → 396_0_incr_Duplicate(EOS(STATIC_396), 1000, 1000, 1000, i22, +(i22, 1)) | &&(&&(&&(&&(>=(i22, 0), =(matching1, 1000)), =(matching2, 1000)), =(matching3, 1000)), =(matching4, 1))
396_0_incr_Duplicate(EOS(STATIC_396), matching1, matching2, matching3, i22, i24) → 399_0_incr_Store(EOS(STATIC_399), 1000, 1000, 1000, i22, i24, i24) | &&(&&(=(matching1, 1000), =(matching2, 1000)), =(matching3, 1000))
399_0_incr_Store(EOS(STATIC_399), matching1, matching2, matching3, i22, i24, i24) → 405_0_incr_Return(EOS(STATIC_405), 1000, 1000, 1000, i22, i24) | &&(&&(=(matching1, 1000), =(matching2, 1000)), =(matching3, 1000))
405_0_incr_Return(EOS(STATIC_405), matching1, matching2, matching3, i22, i24) → 411_0_add_Store(EOS(STATIC_411), 1000, 1000, 1000, i24) | &&(&&(=(matching1, 1000), =(matching2, 1000)), =(matching3, 1000))
411_0_add_Store(EOS(STATIC_411), matching1, matching2, matching3, i24) → 415_0_add_JMP(EOS(STATIC_415), 1000, 1000, 1000, i24) | &&(&&(=(matching1, 1000), =(matching2, 1000)), =(matching3, 1000))
415_0_add_JMP(EOS(STATIC_415), matching1, matching2, matching3, i24) → 422_0_add_Load(EOS(STATIC_422), 1000, 1000, 1000, i24) | &&(&&(=(matching1, 1000), =(matching2, 1000)), =(matching3, 1000))
422_0_add_Load(EOS(STATIC_422), matching1, matching2, matching3, i24) → 326_0_add_Load(EOS(STATIC_326), 1000, 1000, 1000, i24) | &&(&&(=(matching1, 1000), =(matching2, 1000)), =(matching3, 1000))
326_0_add_Load(EOS(STATIC_326), matching1, matching2, matching3, i18) → 330_0_add_Load(EOS(STATIC_330), 1000, 1000, 1000, i18, i18) | &&(&&(=(matching1, 1000), =(matching2, 1000)), =(matching3, 1000))
R rules:
Combined rules. Obtained 1 conditional rules for P and 0 conditional rules for R.
P rules:
330_0_add_Load(EOS(STATIC_330), 1000, 1000, 1000, x3, x3) → 330_0_add_Load(EOS(STATIC_330), 1000, 1000, 1000, +(x3, 1), +(x3, 1)) | &&(>(+(x3, 1), 0), <=(x3, 1000))
R rules:
Filtered ground terms:
330_0_add_Load(x1, x2, x3, x4, x5, x6) → 330_0_add_Load(x5, x6)
EOS(x1) → EOS
Cond_330_0_add_Load(x1, x2, x3, x4, x5, x6, x7) → Cond_330_0_add_Load(x1, x6, x7)
Filtered duplicate args:
330_0_add_Load(x1, x2) → 330_0_add_Load(x2)
Cond_330_0_add_Load(x1, x2, x3) → Cond_330_0_add_Load(x1, x3)
Combined rules. Obtained 1 conditional rules for P and 0 conditional rules for R.
P rules:
330_0_add_Load(x3) → 330_0_add_Load(+(x3, 1)) | &&(>(x3, -1), <=(x3, 1000))
R rules:
Finished conversion. Obtained 2 rules for P and 0 rules for R. System has predefined symbols.
P rules:
330_0_ADD_LOAD(x3) → COND_330_0_ADD_LOAD(&&(>(x3, -1), <=(x3, 1000)), x3)
COND_330_0_ADD_LOAD(TRUE, x3) → 330_0_ADD_LOAD(+(x3, 1))
R rules:
!= | ~ | 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 (x3[0] > -1 && x3[0] <= 1000 ∧x3[0] →* x3[1])
(1) -> (0), if (x3[1] + 1 →* x3[0])
(1) (&&(>(x3[0], -1), <=(x3[0], 1000))=TRUE∧x3[0]=x3[1] ⇒ 330_0_ADD_LOAD(x3[0])≥NonInfC∧330_0_ADD_LOAD(x3[0])≥COND_330_0_ADD_LOAD(&&(>(x3[0], -1), <=(x3[0], 1000)), x3[0])∧(UIncreasing(COND_330_0_ADD_LOAD(&&(>(x3[0], -1), <=(x3[0], 1000)), x3[0])), ≥))
(2) (>(x3[0], -1)=TRUE∧<=(x3[0], 1000)=TRUE ⇒ 330_0_ADD_LOAD(x3[0])≥NonInfC∧330_0_ADD_LOAD(x3[0])≥COND_330_0_ADD_LOAD(&&(>(x3[0], -1), <=(x3[0], 1000)), x3[0])∧(UIncreasing(COND_330_0_ADD_LOAD(&&(>(x3[0], -1), <=(x3[0], 1000)), x3[0])), ≥))
(3) (x3[0] ≥ 0∧[1000] + [-1]x3[0] ≥ 0 ⇒ (UIncreasing(COND_330_0_ADD_LOAD(&&(>(x3[0], -1), <=(x3[0], 1000)), x3[0])), ≥)∧[(-1)bni_10 + (-1)Bound*bni_10] + [(-1)bni_10]x3[0] ≥ 0∧[(-1)bso_11] ≥ 0)
(4) (x3[0] ≥ 0∧[1000] + [-1]x3[0] ≥ 0 ⇒ (UIncreasing(COND_330_0_ADD_LOAD(&&(>(x3[0], -1), <=(x3[0], 1000)), x3[0])), ≥)∧[(-1)bni_10 + (-1)Bound*bni_10] + [(-1)bni_10]x3[0] ≥ 0∧[(-1)bso_11] ≥ 0)
(5) (x3[0] ≥ 0∧[1000] + [-1]x3[0] ≥ 0 ⇒ (UIncreasing(COND_330_0_ADD_LOAD(&&(>(x3[0], -1), <=(x3[0], 1000)), x3[0])), ≥)∧[(-1)bni_10 + (-1)Bound*bni_10] + [(-1)bni_10]x3[0] ≥ 0∧[(-1)bso_11] ≥ 0)
(6) (COND_330_0_ADD_LOAD(TRUE, x3[1])≥NonInfC∧COND_330_0_ADD_LOAD(TRUE, x3[1])≥330_0_ADD_LOAD(+(x3[1], 1))∧(UIncreasing(330_0_ADD_LOAD(+(x3[1], 1))), ≥))
(7) ((UIncreasing(330_0_ADD_LOAD(+(x3[1], 1))), ≥)∧[bni_12] = 0∧[1 + (-1)bso_13] ≥ 0)
(8) ((UIncreasing(330_0_ADD_LOAD(+(x3[1], 1))), ≥)∧[bni_12] = 0∧[1 + (-1)bso_13] ≥ 0)
(9) ((UIncreasing(330_0_ADD_LOAD(+(x3[1], 1))), ≥)∧[bni_12] = 0∧[1 + (-1)bso_13] ≥ 0)
(10) ((UIncreasing(330_0_ADD_LOAD(+(x3[1], 1))), ≥)∧[bni_12] = 0∧0 = 0∧[1 + (-1)bso_13] ≥ 0)
POL(TRUE) = 0
POL(FALSE) = 0
POL(330_0_ADD_LOAD(x1)) = [-1] + [-1]x1
POL(COND_330_0_ADD_LOAD(x1, x2)) = [-1] + [-1]x2
POL(&&(x1, x2)) = [-1]
POL(>(x1, x2)) = [-1]
POL(-1) = [-1]
POL(<=(x1, x2)) = [-1]
POL(1000) = [1000]
POL(+(x1, x2)) = x1 + x2
POL(1) = [1]
COND_330_0_ADD_LOAD(TRUE, x3[1]) → 330_0_ADD_LOAD(+(x3[1], 1))
330_0_ADD_LOAD(x3[0]) → COND_330_0_ADD_LOAD(&&(>(x3[0], -1), <=(x3[0], 1000)), x3[0])
330_0_ADD_LOAD(x3[0]) → COND_330_0_ADD_LOAD(&&(>(x3[0], -1), <=(x3[0], 1000)), x3[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 |
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 |
Integer