(0) Obligation:
JBC Problem based on JBC Program:
Manifest-Version: 1.0
Created-By: 1.6.0_20 (Apple Inc.)
Main-Class: Test9
public class Test9 {
public static void main(String[] args) {
long l = args.length;
while (l > 0) {
for (int i = (int) l ; i < 100; i++)
test(i);
l--;
}
}
private static void test(int i) {
int j, k, l, m;
for (j = i; j > 0; j--);
for (k = i; k > 0; k--);
for (l = i; l > 0; l--);
for (m = i; m > 0; m--);
for (j = i; j > 0; j--);
for (k = i; k > 0; k--);
for (l = i; l > 0; l--);
for (m = i; m > 0; m--);
for (j = i; j > 0; j--);
for (k = i; k > 0; k--);
for (l = i; l > 0; l--);
for (m = i; m > 0; m--);
}
}
(1) JBC2FIG (SOUND transformation)
Constructed FIGraph.
(2) Obligation:
FIGraph based on JBC Program:
Test9.main([Ljava/lang/String;)V: Graph of 37 nodes with 1 SCC.
Test9.test(I)V: Graph of 122 nodes with 12 SCCs.
(3) FIGtoITRSProof (SOUND transformation)
Transformed FIGraph SCCs to IDPs. Logs:
Log for SCC 0: Generated 6 rules for P and 2 rules for R.
Combined rules. Obtained 1 rules for P and 1 rules for R.
Filtered ground terms:
465_0_test_LE(x1, x2, x3) → 465_0_test_LE(x2, x3)
Cond_465_0_test_LE(x1, x2, x3, x4) → Cond_465_0_test_LE(x1, x3, x4)
471_0_test_Return(x1) → 471_0_test_Return
Filtered duplicate args:
465_0_test_LE(x1, x2) → 465_0_test_LE(x2)
Cond_465_0_test_LE(x1, x2, x3) → Cond_465_0_test_LE(x1, x3)
Combined rules. Obtained 1 rules for P and 1 rules for R.
Finished conversion. Obtained 1 rules for P and 1 rules for R. System has predefined symbols.
Log for SCC 1: Generated 6 rules for P and 13 rules for R.
Combined rules. Obtained 1 rules for P and 3 rules for R.
Filtered ground terms:
426_0_test_LE(x1, x2, x3, x4) → 426_0_test_LE(x2, x3, x4)
Cond_426_0_test_LE(x1, x2, x3, x4, x5) → Cond_426_0_test_LE(x1, x3, x4, x5)
465_0_test_LE(x1, x2, x3) → 465_0_test_LE(x2, x3)
Cond_465_0_test_LE(x1, x2, x3, x4) → Cond_465_0_test_LE(x1, x3, x4)
471_0_test_Return(x1) → 471_0_test_Return
Filtered duplicate args:
426_0_test_LE(x1, x2, x3) → 426_0_test_LE(x1, x3)
Cond_426_0_test_LE(x1, x2, x3, x4) → Cond_426_0_test_LE(x1, x2, x4)
465_0_test_LE(x1, x2) → 465_0_test_LE(x2)
Cond_465_0_test_LE(x1, x2, x3) → Cond_465_0_test_LE(x1, x3)
Combined rules. Obtained 1 rules for P and 3 rules for R.
Finished conversion. Obtained 1 rules for P and 3 rules for R. System has predefined symbols.
Log for SCC 2: Generated 6 rules for P and 24 rules for R.
Combined rules. Obtained 1 rules for P and 5 rules for R.
Filtered ground terms:
386_0_test_LE(x1, x2, x3, x4) → 386_0_test_LE(x2, x3, x4)
Cond_386_0_test_LE(x1, x2, x3, x4, x5) → Cond_386_0_test_LE(x1, x3, x4, x5)
465_0_test_LE(x1, x2, x3) → 465_0_test_LE(x2, x3)
Cond_465_0_test_LE(x1, x2, x3, x4) → Cond_465_0_test_LE(x1, x3, x4)
471_0_test_Return(x1) → 471_0_test_Return
426_0_test_LE(x1, x2, x3, x4) → 426_0_test_LE(x2, x3, x4)
Cond_426_0_test_LE(x1, x2, x3, x4, x5) → Cond_426_0_test_LE(x1, x3, x4, x5)
Filtered duplicate args:
386_0_test_LE(x1, x2, x3) → 386_0_test_LE(x1, x3)
Cond_386_0_test_LE(x1, x2, x3, x4) → Cond_386_0_test_LE(x1, x2, x4)
465_0_test_LE(x1, x2) → 465_0_test_LE(x2)
Cond_465_0_test_LE(x1, x2, x3) → Cond_465_0_test_LE(x1, x3)
426_0_test_LE(x1, x2, x3) → 426_0_test_LE(x1, x3)
Cond_426_0_test_LE(x1, x2, x3, x4) → Cond_426_0_test_LE(x1, x2, x4)
Combined rules. Obtained 1 rules for P and 5 rules for R.
Finished conversion. Obtained 1 rules for P and 5 rules for R. System has predefined symbols.
Log for SCC 3: Generated 6 rules for P and 35 rules for R.
Combined rules. Obtained 1 rules for P and 7 rules for R.
Filtered ground terms:
354_0_test_LE(x1, x2, x3, x4) → 354_0_test_LE(x2, x3, x4)
Cond_354_0_test_LE(x1, x2, x3, x4, x5) → Cond_354_0_test_LE(x1, x3, x4, x5)
465_0_test_LE(x1, x2, x3) → 465_0_test_LE(x2, x3)
Cond_465_0_test_LE(x1, x2, x3, x4) → Cond_465_0_test_LE(x1, x3, x4)
471_0_test_Return(x1) → 471_0_test_Return
426_0_test_LE(x1, x2, x3, x4) → 426_0_test_LE(x2, x3, x4)
Cond_426_0_test_LE(x1, x2, x3, x4, x5) → Cond_426_0_test_LE(x1, x3, x4, x5)
386_0_test_LE(x1, x2, x3, x4) → 386_0_test_LE(x2, x3, x4)
Cond_386_0_test_LE(x1, x2, x3, x4, x5) → Cond_386_0_test_LE(x1, x3, x4, x5)
Filtered duplicate args:
354_0_test_LE(x1, x2, x3) → 354_0_test_LE(x1, x3)
Cond_354_0_test_LE(x1, x2, x3, x4) → Cond_354_0_test_LE(x1, x2, x4)
465_0_test_LE(x1, x2) → 465_0_test_LE(x2)
Cond_465_0_test_LE(x1, x2, x3) → Cond_465_0_test_LE(x1, x3)
426_0_test_LE(x1, x2, x3) → 426_0_test_LE(x1, x3)
Cond_426_0_test_LE(x1, x2, x3, x4) → Cond_426_0_test_LE(x1, x2, x4)
386_0_test_LE(x1, x2, x3) → 386_0_test_LE(x1, x3)
Cond_386_0_test_LE(x1, x2, x3, x4) → Cond_386_0_test_LE(x1, x2, x4)
Combined rules. Obtained 1 rules for P and 7 rules for R.
Finished conversion. Obtained 1 rules for P and 7 rules for R. System has predefined symbols.
Log for SCC 4: Generated 6 rules for P and 46 rules for R.
Combined rules. Obtained 1 rules for P and 9 rules for R.
Filtered ground terms:
319_0_test_LE(x1, x2, x3, x4) → 319_0_test_LE(x2, x3, x4)
Cond_319_0_test_LE(x1, x2, x3, x4, x5) → Cond_319_0_test_LE(x1, x3, x4, x5)
465_0_test_LE(x1, x2, x3) → 465_0_test_LE(x2, x3)
Cond_465_0_test_LE(x1, x2, x3, x4) → Cond_465_0_test_LE(x1, x3, x4)
471_0_test_Return(x1) → 471_0_test_Return
426_0_test_LE(x1, x2, x3, x4) → 426_0_test_LE(x2, x3, x4)
Cond_426_0_test_LE(x1, x2, x3, x4, x5) → Cond_426_0_test_LE(x1, x3, x4, x5)
386_0_test_LE(x1, x2, x3, x4) → 386_0_test_LE(x2, x3, x4)
Cond_386_0_test_LE(x1, x2, x3, x4, x5) → Cond_386_0_test_LE(x1, x3, x4, x5)
354_0_test_LE(x1, x2, x3, x4) → 354_0_test_LE(x2, x3, x4)
Cond_354_0_test_LE(x1, x2, x3, x4, x5) → Cond_354_0_test_LE(x1, x3, x4, x5)
Filtered duplicate args:
319_0_test_LE(x1, x2, x3) → 319_0_test_LE(x1, x3)
Cond_319_0_test_LE(x1, x2, x3, x4) → Cond_319_0_test_LE(x1, x2, x4)
465_0_test_LE(x1, x2) → 465_0_test_LE(x2)
Cond_465_0_test_LE(x1, x2, x3) → Cond_465_0_test_LE(x1, x3)
426_0_test_LE(x1, x2, x3) → 426_0_test_LE(x1, x3)
Cond_426_0_test_LE(x1, x2, x3, x4) → Cond_426_0_test_LE(x1, x2, x4)
386_0_test_LE(x1, x2, x3) → 386_0_test_LE(x1, x3)
Cond_386_0_test_LE(x1, x2, x3, x4) → Cond_386_0_test_LE(x1, x2, x4)
354_0_test_LE(x1, x2, x3) → 354_0_test_LE(x1, x3)
Cond_354_0_test_LE(x1, x2, x3, x4) → Cond_354_0_test_LE(x1, x2, x4)
Combined rules. Obtained 1 rules for P and 9 rules for R.
Finished conversion. Obtained 1 rules for P and 9 rules for R. System has predefined symbols.
Log for SCC 5: Generated 6 rules for P and 57 rules for R.
Combined rules. Obtained 1 rules for P and 11 rules for R.
Filtered ground terms:
285_0_test_LE(x1, x2, x3, x4) → 285_0_test_LE(x2, x3, x4)
Cond_285_0_test_LE(x1, x2, x3, x4, x5) → Cond_285_0_test_LE(x1, x3, x4, x5)
465_0_test_LE(x1, x2, x3) → 465_0_test_LE(x2, x3)
Cond_465_0_test_LE(x1, x2, x3, x4) → Cond_465_0_test_LE(x1, x3, x4)
471_0_test_Return(x1) → 471_0_test_Return
426_0_test_LE(x1, x2, x3, x4) → 426_0_test_LE(x2, x3, x4)
Cond_426_0_test_LE(x1, x2, x3, x4, x5) → Cond_426_0_test_LE(x1, x3, x4, x5)
386_0_test_LE(x1, x2, x3, x4) → 386_0_test_LE(x2, x3, x4)
Cond_386_0_test_LE(x1, x2, x3, x4, x5) → Cond_386_0_test_LE(x1, x3, x4, x5)
354_0_test_LE(x1, x2, x3, x4) → 354_0_test_LE(x2, x3, x4)
Cond_354_0_test_LE(x1, x2, x3, x4, x5) → Cond_354_0_test_LE(x1, x3, x4, x5)
319_0_test_LE(x1, x2, x3, x4) → 319_0_test_LE(x2, x3, x4)
Cond_319_0_test_LE(x1, x2, x3, x4, x5) → Cond_319_0_test_LE(x1, x3, x4, x5)
Filtered duplicate args:
285_0_test_LE(x1, x2, x3) → 285_0_test_LE(x1, x3)
Cond_285_0_test_LE(x1, x2, x3, x4) → Cond_285_0_test_LE(x1, x2, x4)
465_0_test_LE(x1, x2) → 465_0_test_LE(x2)
Cond_465_0_test_LE(x1, x2, x3) → Cond_465_0_test_LE(x1, x3)
426_0_test_LE(x1, x2, x3) → 426_0_test_LE(x1, x3)
Cond_426_0_test_LE(x1, x2, x3, x4) → Cond_426_0_test_LE(x1, x2, x4)
386_0_test_LE(x1, x2, x3) → 386_0_test_LE(x1, x3)
Cond_386_0_test_LE(x1, x2, x3, x4) → Cond_386_0_test_LE(x1, x2, x4)
354_0_test_LE(x1, x2, x3) → 354_0_test_LE(x1, x3)
Cond_354_0_test_LE(x1, x2, x3, x4) → Cond_354_0_test_LE(x1, x2, x4)
319_0_test_LE(x1, x2, x3) → 319_0_test_LE(x1, x3)
Cond_319_0_test_LE(x1, x2, x3, x4) → Cond_319_0_test_LE(x1, x2, x4)
Combined rules. Obtained 1 rules for P and 11 rules for R.
Finished conversion. Obtained 1 rules for P and 11 rules for R. System has predefined symbols.
Log for SCC 6: Generated 6 rules for P and 68 rules for R.
Combined rules. Obtained 1 rules for P and 13 rules for R.
Filtered ground terms:
248_0_test_LE(x1, x2, x3, x4) → 248_0_test_LE(x2, x3, x4)
Cond_248_0_test_LE(x1, x2, x3, x4, x5) → Cond_248_0_test_LE(x1, x3, x4, x5)
465_0_test_LE(x1, x2, x3) → 465_0_test_LE(x2, x3)
Cond_465_0_test_LE(x1, x2, x3, x4) → Cond_465_0_test_LE(x1, x3, x4)
471_0_test_Return(x1) → 471_0_test_Return
426_0_test_LE(x1, x2, x3, x4) → 426_0_test_LE(x2, x3, x4)
Cond_426_0_test_LE(x1, x2, x3, x4, x5) → Cond_426_0_test_LE(x1, x3, x4, x5)
386_0_test_LE(x1, x2, x3, x4) → 386_0_test_LE(x2, x3, x4)
Cond_386_0_test_LE(x1, x2, x3, x4, x5) → Cond_386_0_test_LE(x1, x3, x4, x5)
354_0_test_LE(x1, x2, x3, x4) → 354_0_test_LE(x2, x3, x4)
Cond_354_0_test_LE(x1, x2, x3, x4, x5) → Cond_354_0_test_LE(x1, x3, x4, x5)
319_0_test_LE(x1, x2, x3, x4) → 319_0_test_LE(x2, x3, x4)
Cond_319_0_test_LE(x1, x2, x3, x4, x5) → Cond_319_0_test_LE(x1, x3, x4, x5)
285_0_test_LE(x1, x2, x3, x4) → 285_0_test_LE(x2, x3, x4)
Cond_285_0_test_LE(x1, x2, x3, x4, x5) → Cond_285_0_test_LE(x1, x3, x4, x5)
Filtered duplicate args:
248_0_test_LE(x1, x2, x3) → 248_0_test_LE(x1, x3)
Cond_248_0_test_LE(x1, x2, x3, x4) → Cond_248_0_test_LE(x1, x2, x4)
465_0_test_LE(x1, x2) → 465_0_test_LE(x2)
Cond_465_0_test_LE(x1, x2, x3) → Cond_465_0_test_LE(x1, x3)
426_0_test_LE(x1, x2, x3) → 426_0_test_LE(x1, x3)
Cond_426_0_test_LE(x1, x2, x3, x4) → Cond_426_0_test_LE(x1, x2, x4)
386_0_test_LE(x1, x2, x3) → 386_0_test_LE(x1, x3)
Cond_386_0_test_LE(x1, x2, x3, x4) → Cond_386_0_test_LE(x1, x2, x4)
354_0_test_LE(x1, x2, x3) → 354_0_test_LE(x1, x3)
Cond_354_0_test_LE(x1, x2, x3, x4) → Cond_354_0_test_LE(x1, x2, x4)
319_0_test_LE(x1, x2, x3) → 319_0_test_LE(x1, x3)
Cond_319_0_test_LE(x1, x2, x3, x4) → Cond_319_0_test_LE(x1, x2, x4)
285_0_test_LE(x1, x2, x3) → 285_0_test_LE(x1, x3)
Cond_285_0_test_LE(x1, x2, x3, x4) → Cond_285_0_test_LE(x1, x2, x4)
Combined rules. Obtained 1 rules for P and 13 rules for R.
Finished conversion. Obtained 1 rules for P and 13 rules for R. System has predefined symbols.
Log for SCC 7: Generated 6 rules for P and 79 rules for R.
Combined rules. Obtained 1 rules for P and 15 rules for R.
Filtered ground terms:
221_0_test_LE(x1, x2, x3, x4) → 221_0_test_LE(x2, x3, x4)
Cond_221_0_test_LE(x1, x2, x3, x4, x5) → Cond_221_0_test_LE(x1, x3, x4, x5)
465_0_test_LE(x1, x2, x3) → 465_0_test_LE(x2, x3)
Cond_465_0_test_LE(x1, x2, x3, x4) → Cond_465_0_test_LE(x1, x3, x4)
471_0_test_Return(x1) → 471_0_test_Return
426_0_test_LE(x1, x2, x3, x4) → 426_0_test_LE(x2, x3, x4)
Cond_426_0_test_LE(x1, x2, x3, x4, x5) → Cond_426_0_test_LE(x1, x3, x4, x5)
386_0_test_LE(x1, x2, x3, x4) → 386_0_test_LE(x2, x3, x4)
Cond_386_0_test_LE(x1, x2, x3, x4, x5) → Cond_386_0_test_LE(x1, x3, x4, x5)
354_0_test_LE(x1, x2, x3, x4) → 354_0_test_LE(x2, x3, x4)
Cond_354_0_test_LE(x1, x2, x3, x4, x5) → Cond_354_0_test_LE(x1, x3, x4, x5)
319_0_test_LE(x1, x2, x3, x4) → 319_0_test_LE(x2, x3, x4)
Cond_319_0_test_LE(x1, x2, x3, x4, x5) → Cond_319_0_test_LE(x1, x3, x4, x5)
285_0_test_LE(x1, x2, x3, x4) → 285_0_test_LE(x2, x3, x4)
Cond_285_0_test_LE(x1, x2, x3, x4, x5) → Cond_285_0_test_LE(x1, x3, x4, x5)
248_0_test_LE(x1, x2, x3, x4) → 248_0_test_LE(x2, x3, x4)
Cond_248_0_test_LE(x1, x2, x3, x4, x5) → Cond_248_0_test_LE(x1, x3, x4, x5)
Filtered duplicate args:
221_0_test_LE(x1, x2, x3) → 221_0_test_LE(x1, x3)
Cond_221_0_test_LE(x1, x2, x3, x4) → Cond_221_0_test_LE(x1, x2, x4)
465_0_test_LE(x1, x2) → 465_0_test_LE(x2)
Cond_465_0_test_LE(x1, x2, x3) → Cond_465_0_test_LE(x1, x3)
426_0_test_LE(x1, x2, x3) → 426_0_test_LE(x1, x3)
Cond_426_0_test_LE(x1, x2, x3, x4) → Cond_426_0_test_LE(x1, x2, x4)
386_0_test_LE(x1, x2, x3) → 386_0_test_LE(x1, x3)
Cond_386_0_test_LE(x1, x2, x3, x4) → Cond_386_0_test_LE(x1, x2, x4)
354_0_test_LE(x1, x2, x3) → 354_0_test_LE(x1, x3)
Cond_354_0_test_LE(x1, x2, x3, x4) → Cond_354_0_test_LE(x1, x2, x4)
319_0_test_LE(x1, x2, x3) → 319_0_test_LE(x1, x3)
Cond_319_0_test_LE(x1, x2, x3, x4) → Cond_319_0_test_LE(x1, x2, x4)
285_0_test_LE(x1, x2, x3) → 285_0_test_LE(x1, x3)
Cond_285_0_test_LE(x1, x2, x3, x4) → Cond_285_0_test_LE(x1, x2, x4)
248_0_test_LE(x1, x2, x3) → 248_0_test_LE(x1, x3)
Cond_248_0_test_LE(x1, x2, x3, x4) → Cond_248_0_test_LE(x1, x2, x4)
Combined rules. Obtained 1 rules for P and 15 rules for R.
Finished conversion. Obtained 1 rules for P and 15 rules for R. System has predefined symbols.
Log for SCC 8: Generated 6 rules for P and 90 rules for R.
Combined rules. Obtained 1 rules for P and 17 rules for R.
Filtered ground terms:
193_0_test_LE(x1, x2, x3, x4) → 193_0_test_LE(x2, x3, x4)
Cond_193_0_test_LE(x1, x2, x3, x4, x5) → Cond_193_0_test_LE(x1, x3, x4, x5)
465_0_test_LE(x1, x2, x3) → 465_0_test_LE(x2, x3)
Cond_465_0_test_LE(x1, x2, x3, x4) → Cond_465_0_test_LE(x1, x3, x4)
471_0_test_Return(x1) → 471_0_test_Return
426_0_test_LE(x1, x2, x3, x4) → 426_0_test_LE(x2, x3, x4)
Cond_426_0_test_LE(x1, x2, x3, x4, x5) → Cond_426_0_test_LE(x1, x3, x4, x5)
386_0_test_LE(x1, x2, x3, x4) → 386_0_test_LE(x2, x3, x4)
Cond_386_0_test_LE(x1, x2, x3, x4, x5) → Cond_386_0_test_LE(x1, x3, x4, x5)
354_0_test_LE(x1, x2, x3, x4) → 354_0_test_LE(x2, x3, x4)
Cond_354_0_test_LE(x1, x2, x3, x4, x5) → Cond_354_0_test_LE(x1, x3, x4, x5)
319_0_test_LE(x1, x2, x3, x4) → 319_0_test_LE(x2, x3, x4)
Cond_319_0_test_LE(x1, x2, x3, x4, x5) → Cond_319_0_test_LE(x1, x3, x4, x5)
285_0_test_LE(x1, x2, x3, x4) → 285_0_test_LE(x2, x3, x4)
Cond_285_0_test_LE(x1, x2, x3, x4, x5) → Cond_285_0_test_LE(x1, x3, x4, x5)
248_0_test_LE(x1, x2, x3, x4) → 248_0_test_LE(x2, x3, x4)
Cond_248_0_test_LE(x1, x2, x3, x4, x5) → Cond_248_0_test_LE(x1, x3, x4, x5)
221_0_test_LE(x1, x2, x3, x4) → 221_0_test_LE(x2, x3, x4)
Cond_221_0_test_LE(x1, x2, x3, x4, x5) → Cond_221_0_test_LE(x1, x3, x4, x5)
Filtered duplicate args:
193_0_test_LE(x1, x2, x3) → 193_0_test_LE(x1, x3)
Cond_193_0_test_LE(x1, x2, x3, x4) → Cond_193_0_test_LE(x1, x2, x4)
465_0_test_LE(x1, x2) → 465_0_test_LE(x2)
Cond_465_0_test_LE(x1, x2, x3) → Cond_465_0_test_LE(x1, x3)
426_0_test_LE(x1, x2, x3) → 426_0_test_LE(x1, x3)
Cond_426_0_test_LE(x1, x2, x3, x4) → Cond_426_0_test_LE(x1, x2, x4)
386_0_test_LE(x1, x2, x3) → 386_0_test_LE(x1, x3)
Cond_386_0_test_LE(x1, x2, x3, x4) → Cond_386_0_test_LE(x1, x2, x4)
354_0_test_LE(x1, x2, x3) → 354_0_test_LE(x1, x3)
Cond_354_0_test_LE(x1, x2, x3, x4) → Cond_354_0_test_LE(x1, x2, x4)
319_0_test_LE(x1, x2, x3) → 319_0_test_LE(x1, x3)
Cond_319_0_test_LE(x1, x2, x3, x4) → Cond_319_0_test_LE(x1, x2, x4)
285_0_test_LE(x1, x2, x3) → 285_0_test_LE(x1, x3)
Cond_285_0_test_LE(x1, x2, x3, x4) → Cond_285_0_test_LE(x1, x2, x4)
248_0_test_LE(x1, x2, x3) → 248_0_test_LE(x1, x3)
Cond_248_0_test_LE(x1, x2, x3, x4) → Cond_248_0_test_LE(x1, x2, x4)
221_0_test_LE(x1, x2, x3) → 221_0_test_LE(x1, x3)
Cond_221_0_test_LE(x1, x2, x3, x4) → Cond_221_0_test_LE(x1, x2, x4)
Combined rules. Obtained 1 rules for P and 17 rules for R.
Finished conversion. Obtained 1 rules for P and 17 rules for R. System has predefined symbols.
Log for SCC 9: Generated 6 rules for P and 101 rules for R.
Combined rules. Obtained 1 rules for P and 19 rules for R.
Filtered ground terms:
162_0_test_LE(x1, x2, x3, x4) → 162_0_test_LE(x2, x3, x4)
Cond_162_0_test_LE(x1, x2, x3, x4, x5) → Cond_162_0_test_LE(x1, x3, x4, x5)
465_0_test_LE(x1, x2, x3) → 465_0_test_LE(x2, x3)
Cond_465_0_test_LE(x1, x2, x3, x4) → Cond_465_0_test_LE(x1, x3, x4)
471_0_test_Return(x1) → 471_0_test_Return
426_0_test_LE(x1, x2, x3, x4) → 426_0_test_LE(x2, x3, x4)
Cond_426_0_test_LE(x1, x2, x3, x4, x5) → Cond_426_0_test_LE(x1, x3, x4, x5)
386_0_test_LE(x1, x2, x3, x4) → 386_0_test_LE(x2, x3, x4)
Cond_386_0_test_LE(x1, x2, x3, x4, x5) → Cond_386_0_test_LE(x1, x3, x4, x5)
354_0_test_LE(x1, x2, x3, x4) → 354_0_test_LE(x2, x3, x4)
Cond_354_0_test_LE(x1, x2, x3, x4, x5) → Cond_354_0_test_LE(x1, x3, x4, x5)
319_0_test_LE(x1, x2, x3, x4) → 319_0_test_LE(x2, x3, x4)
Cond_319_0_test_LE(x1, x2, x3, x4, x5) → Cond_319_0_test_LE(x1, x3, x4, x5)
285_0_test_LE(x1, x2, x3, x4) → 285_0_test_LE(x2, x3, x4)
Cond_285_0_test_LE(x1, x2, x3, x4, x5) → Cond_285_0_test_LE(x1, x3, x4, x5)
248_0_test_LE(x1, x2, x3, x4) → 248_0_test_LE(x2, x3, x4)
Cond_248_0_test_LE(x1, x2, x3, x4, x5) → Cond_248_0_test_LE(x1, x3, x4, x5)
221_0_test_LE(x1, x2, x3, x4) → 221_0_test_LE(x2, x3, x4)
Cond_221_0_test_LE(x1, x2, x3, x4, x5) → Cond_221_0_test_LE(x1, x3, x4, x5)
193_0_test_LE(x1, x2, x3, x4) → 193_0_test_LE(x2, x3, x4)
Cond_193_0_test_LE(x1, x2, x3, x4, x5) → Cond_193_0_test_LE(x1, x3, x4, x5)
Filtered duplicate args:
162_0_test_LE(x1, x2, x3) → 162_0_test_LE(x1, x3)
Cond_162_0_test_LE(x1, x2, x3, x4) → Cond_162_0_test_LE(x1, x2, x4)
465_0_test_LE(x1, x2) → 465_0_test_LE(x2)
Cond_465_0_test_LE(x1, x2, x3) → Cond_465_0_test_LE(x1, x3)
426_0_test_LE(x1, x2, x3) → 426_0_test_LE(x1, x3)
Cond_426_0_test_LE(x1, x2, x3, x4) → Cond_426_0_test_LE(x1, x2, x4)
386_0_test_LE(x1, x2, x3) → 386_0_test_LE(x1, x3)
Cond_386_0_test_LE(x1, x2, x3, x4) → Cond_386_0_test_LE(x1, x2, x4)
354_0_test_LE(x1, x2, x3) → 354_0_test_LE(x1, x3)
Cond_354_0_test_LE(x1, x2, x3, x4) → Cond_354_0_test_LE(x1, x2, x4)
319_0_test_LE(x1, x2, x3) → 319_0_test_LE(x1, x3)
Cond_319_0_test_LE(x1, x2, x3, x4) → Cond_319_0_test_LE(x1, x2, x4)
285_0_test_LE(x1, x2, x3) → 285_0_test_LE(x1, x3)
Cond_285_0_test_LE(x1, x2, x3, x4) → Cond_285_0_test_LE(x1, x2, x4)
248_0_test_LE(x1, x2, x3) → 248_0_test_LE(x1, x3)
Cond_248_0_test_LE(x1, x2, x3, x4) → Cond_248_0_test_LE(x1, x2, x4)
221_0_test_LE(x1, x2, x3) → 221_0_test_LE(x1, x3)
Cond_221_0_test_LE(x1, x2, x3, x4) → Cond_221_0_test_LE(x1, x2, x4)
193_0_test_LE(x1, x2, x3) → 193_0_test_LE(x1, x3)
Cond_193_0_test_LE(x1, x2, x3, x4) → Cond_193_0_test_LE(x1, x2, x4)
Combined rules. Obtained 1 rules for P and 19 rules for R.
Finished conversion. Obtained 1 rules for P and 19 rules for R. System has predefined symbols.
Log for SCC 10: Generated 6 rules for P and 112 rules for R.
Combined rules. Obtained 1 rules for P and 21 rules for R.
Filtered ground terms:
130_0_test_LE(x1, x2, x3, x4) → 130_0_test_LE(x2, x3, x4)
Cond_130_0_test_LE(x1, x2, x3, x4, x5) → Cond_130_0_test_LE(x1, x3, x4, x5)
465_0_test_LE(x1, x2, x3) → 465_0_test_LE(x2, x3)
Cond_465_0_test_LE(x1, x2, x3, x4) → Cond_465_0_test_LE(x1, x3, x4)
471_0_test_Return(x1) → 471_0_test_Return
426_0_test_LE(x1, x2, x3, x4) → 426_0_test_LE(x2, x3, x4)
Cond_426_0_test_LE(x1, x2, x3, x4, x5) → Cond_426_0_test_LE(x1, x3, x4, x5)
386_0_test_LE(x1, x2, x3, x4) → 386_0_test_LE(x2, x3, x4)
Cond_386_0_test_LE(x1, x2, x3, x4, x5) → Cond_386_0_test_LE(x1, x3, x4, x5)
354_0_test_LE(x1, x2, x3, x4) → 354_0_test_LE(x2, x3, x4)
Cond_354_0_test_LE(x1, x2, x3, x4, x5) → Cond_354_0_test_LE(x1, x3, x4, x5)
319_0_test_LE(x1, x2, x3, x4) → 319_0_test_LE(x2, x3, x4)
Cond_319_0_test_LE(x1, x2, x3, x4, x5) → Cond_319_0_test_LE(x1, x3, x4, x5)
285_0_test_LE(x1, x2, x3, x4) → 285_0_test_LE(x2, x3, x4)
Cond_285_0_test_LE(x1, x2, x3, x4, x5) → Cond_285_0_test_LE(x1, x3, x4, x5)
248_0_test_LE(x1, x2, x3, x4) → 248_0_test_LE(x2, x3, x4)
Cond_248_0_test_LE(x1, x2, x3, x4, x5) → Cond_248_0_test_LE(x1, x3, x4, x5)
221_0_test_LE(x1, x2, x3, x4) → 221_0_test_LE(x2, x3, x4)
Cond_221_0_test_LE(x1, x2, x3, x4, x5) → Cond_221_0_test_LE(x1, x3, x4, x5)
193_0_test_LE(x1, x2, x3, x4) → 193_0_test_LE(x2, x3, x4)
Cond_193_0_test_LE(x1, x2, x3, x4, x5) → Cond_193_0_test_LE(x1, x3, x4, x5)
162_0_test_LE(x1, x2, x3, x4) → 162_0_test_LE(x2, x3, x4)
Cond_162_0_test_LE(x1, x2, x3, x4, x5) → Cond_162_0_test_LE(x1, x3, x4, x5)
Filtered duplicate args:
130_0_test_LE(x1, x2, x3) → 130_0_test_LE(x1, x3)
Cond_130_0_test_LE(x1, x2, x3, x4) → Cond_130_0_test_LE(x1, x2, x4)
465_0_test_LE(x1, x2) → 465_0_test_LE(x2)
Cond_465_0_test_LE(x1, x2, x3) → Cond_465_0_test_LE(x1, x3)
426_0_test_LE(x1, x2, x3) → 426_0_test_LE(x1, x3)
Cond_426_0_test_LE(x1, x2, x3, x4) → Cond_426_0_test_LE(x1, x2, x4)
386_0_test_LE(x1, x2, x3) → 386_0_test_LE(x1, x3)
Cond_386_0_test_LE(x1, x2, x3, x4) → Cond_386_0_test_LE(x1, x2, x4)
354_0_test_LE(x1, x2, x3) → 354_0_test_LE(x1, x3)
Cond_354_0_test_LE(x1, x2, x3, x4) → Cond_354_0_test_LE(x1, x2, x4)
319_0_test_LE(x1, x2, x3) → 319_0_test_LE(x1, x3)
Cond_319_0_test_LE(x1, x2, x3, x4) → Cond_319_0_test_LE(x1, x2, x4)
285_0_test_LE(x1, x2, x3) → 285_0_test_LE(x1, x3)
Cond_285_0_test_LE(x1, x2, x3, x4) → Cond_285_0_test_LE(x1, x2, x4)
248_0_test_LE(x1, x2, x3) → 248_0_test_LE(x1, x3)
Cond_248_0_test_LE(x1, x2, x3, x4) → Cond_248_0_test_LE(x1, x2, x4)
221_0_test_LE(x1, x2, x3) → 221_0_test_LE(x1, x3)
Cond_221_0_test_LE(x1, x2, x3, x4) → Cond_221_0_test_LE(x1, x2, x4)
193_0_test_LE(x1, x2, x3) → 193_0_test_LE(x1, x3)
Cond_193_0_test_LE(x1, x2, x3, x4) → Cond_193_0_test_LE(x1, x2, x4)
162_0_test_LE(x1, x2, x3) → 162_0_test_LE(x1, x3)
Cond_162_0_test_LE(x1, x2, x3, x4) → Cond_162_0_test_LE(x1, x2, x4)
Combined rules. Obtained 1 rules for P and 21 rules for R.
Finished conversion. Obtained 1 rules for P and 21 rules for R. System has predefined symbols.
Log for SCC 11: Generated 6 rules for P and 123 rules for R.
Combined rules. Obtained 1 rules for P and 23 rules for R.
Filtered ground terms:
97_0_test_LE(x1, x2, x3, x4) → 97_0_test_LE(x2, x3, x4)
Cond_97_0_test_LE(x1, x2, x3, x4, x5) → Cond_97_0_test_LE(x1, x3, x4, x5)
465_0_test_LE(x1, x2, x3) → 465_0_test_LE(x2, x3)
Cond_465_0_test_LE(x1, x2, x3, x4) → Cond_465_0_test_LE(x1, x3, x4)
471_0_test_Return(x1) → 471_0_test_Return
426_0_test_LE(x1, x2, x3, x4) → 426_0_test_LE(x2, x3, x4)
Cond_426_0_test_LE(x1, x2, x3, x4, x5) → Cond_426_0_test_LE(x1, x3, x4, x5)
386_0_test_LE(x1, x2, x3, x4) → 386_0_test_LE(x2, x3, x4)
Cond_386_0_test_LE(x1, x2, x3, x4, x5) → Cond_386_0_test_LE(x1, x3, x4, x5)
354_0_test_LE(x1, x2, x3, x4) → 354_0_test_LE(x2, x3, x4)
Cond_354_0_test_LE(x1, x2, x3, x4, x5) → Cond_354_0_test_LE(x1, x3, x4, x5)
319_0_test_LE(x1, x2, x3, x4) → 319_0_test_LE(x2, x3, x4)
Cond_319_0_test_LE(x1, x2, x3, x4, x5) → Cond_319_0_test_LE(x1, x3, x4, x5)
285_0_test_LE(x1, x2, x3, x4) → 285_0_test_LE(x2, x3, x4)
Cond_285_0_test_LE(x1, x2, x3, x4, x5) → Cond_285_0_test_LE(x1, x3, x4, x5)
248_0_test_LE(x1, x2, x3, x4) → 248_0_test_LE(x2, x3, x4)
Cond_248_0_test_LE(x1, x2, x3, x4, x5) → Cond_248_0_test_LE(x1, x3, x4, x5)
221_0_test_LE(x1, x2, x3, x4) → 221_0_test_LE(x2, x3, x4)
Cond_221_0_test_LE(x1, x2, x3, x4, x5) → Cond_221_0_test_LE(x1, x3, x4, x5)
193_0_test_LE(x1, x2, x3, x4) → 193_0_test_LE(x2, x3, x4)
Cond_193_0_test_LE(x1, x2, x3, x4, x5) → Cond_193_0_test_LE(x1, x3, x4, x5)
162_0_test_LE(x1, x2, x3, x4) → 162_0_test_LE(x2, x3, x4)
Cond_162_0_test_LE(x1, x2, x3, x4, x5) → Cond_162_0_test_LE(x1, x3, x4, x5)
130_0_test_LE(x1, x2, x3, x4) → 130_0_test_LE(x2, x3, x4)
Cond_130_0_test_LE(x1, x2, x3, x4, x5) → Cond_130_0_test_LE(x1, x3, x4, x5)
Filtered duplicate args:
97_0_test_LE(x1, x2, x3) → 97_0_test_LE(x1, x3)
Cond_97_0_test_LE(x1, x2, x3, x4) → Cond_97_0_test_LE(x1, x2, x4)
465_0_test_LE(x1, x2) → 465_0_test_LE(x2)
Cond_465_0_test_LE(x1, x2, x3) → Cond_465_0_test_LE(x1, x3)
426_0_test_LE(x1, x2, x3) → 426_0_test_LE(x1, x3)
Cond_426_0_test_LE(x1, x2, x3, x4) → Cond_426_0_test_LE(x1, x2, x4)
386_0_test_LE(x1, x2, x3) → 386_0_test_LE(x1, x3)
Cond_386_0_test_LE(x1, x2, x3, x4) → Cond_386_0_test_LE(x1, x2, x4)
354_0_test_LE(x1, x2, x3) → 354_0_test_LE(x1, x3)
Cond_354_0_test_LE(x1, x2, x3, x4) → Cond_354_0_test_LE(x1, x2, x4)
319_0_test_LE(x1, x2, x3) → 319_0_test_LE(x1, x3)
Cond_319_0_test_LE(x1, x2, x3, x4) → Cond_319_0_test_LE(x1, x2, x4)
285_0_test_LE(x1, x2, x3) → 285_0_test_LE(x1, x3)
Cond_285_0_test_LE(x1, x2, x3, x4) → Cond_285_0_test_LE(x1, x2, x4)
248_0_test_LE(x1, x2, x3) → 248_0_test_LE(x1, x3)
Cond_248_0_test_LE(x1, x2, x3, x4) → Cond_248_0_test_LE(x1, x2, x4)
221_0_test_LE(x1, x2, x3) → 221_0_test_LE(x1, x3)
Cond_221_0_test_LE(x1, x2, x3, x4) → Cond_221_0_test_LE(x1, x2, x4)
193_0_test_LE(x1, x2, x3) → 193_0_test_LE(x1, x3)
Cond_193_0_test_LE(x1, x2, x3, x4) → Cond_193_0_test_LE(x1, x2, x4)
162_0_test_LE(x1, x2, x3) → 162_0_test_LE(x1, x3)
Cond_162_0_test_LE(x1, x2, x3, x4) → Cond_162_0_test_LE(x1, x2, x4)
130_0_test_LE(x1, x2, x3) → 130_0_test_LE(x1, x3)
Cond_130_0_test_LE(x1, x2, x3, x4) → Cond_130_0_test_LE(x1, x2, x4)
Combined rules. Obtained 1 rules for P and 23 rules for R.
Finished conversion. Obtained 1 rules for P and 23 rules for R. System has predefined symbols.
Log for SCC 12: Generated 27 rules for P and 137 rules for R.
Combined rules. Obtained 3 rules for P and 25 rules for R.
Filtered ground terms:
48_0_main_GE(x1, x2, x3, x4, x5) → 48_0_main_GE(x2, x3, x4)
Cond_48_0_main_GE1(x1, x2, x3, x4, x5, x6) → Cond_48_0_main_GE1(x1, x3, x4, x5)
Cond_56_1_main_InvokeMethod(x1, x2, x3, x4, x5) → Cond_56_1_main_InvokeMethod(x1, x3, x4, x5)
471_0_test_Return(x1) → 471_0_test_Return
56_0_test_Load(x1, x2) → 56_0_test_Load(x2)
Cond_48_0_main_GE(x1, x2, x3, x4, x5, x6) → Cond_48_0_main_GE(x1, x3, x4, x5)
465_0_test_LE(x1, x2, x3) → 465_0_test_LE(x2, x3)
Cond_465_0_test_LE(x1, x2, x3, x4) → Cond_465_0_test_LE(x1, x3, x4)
426_0_test_LE(x1, x2, x3, x4) → 426_0_test_LE(x2, x3, x4)
Cond_426_0_test_LE(x1, x2, x3, x4, x5) → Cond_426_0_test_LE(x1, x3, x4, x5)
386_0_test_LE(x1, x2, x3, x4) → 386_0_test_LE(x2, x3, x4)
Cond_386_0_test_LE(x1, x2, x3, x4, x5) → Cond_386_0_test_LE(x1, x3, x4, x5)
354_0_test_LE(x1, x2, x3, x4) → 354_0_test_LE(x2, x3, x4)
Cond_354_0_test_LE(x1, x2, x3, x4, x5) → Cond_354_0_test_LE(x1, x3, x4, x5)
319_0_test_LE(x1, x2, x3, x4) → 319_0_test_LE(x2, x3, x4)
Cond_319_0_test_LE(x1, x2, x3, x4, x5) → Cond_319_0_test_LE(x1, x3, x4, x5)
285_0_test_LE(x1, x2, x3, x4) → 285_0_test_LE(x2, x3, x4)
Cond_285_0_test_LE(x1, x2, x3, x4, x5) → Cond_285_0_test_LE(x1, x3, x4, x5)
248_0_test_LE(x1, x2, x3, x4) → 248_0_test_LE(x2, x3, x4)
Cond_248_0_test_LE(x1, x2, x3, x4, x5) → Cond_248_0_test_LE(x1, x3, x4, x5)
221_0_test_LE(x1, x2, x3, x4) → 221_0_test_LE(x2, x3, x4)
Cond_221_0_test_LE(x1, x2, x3, x4, x5) → Cond_221_0_test_LE(x1, x3, x4, x5)
193_0_test_LE(x1, x2, x3, x4) → 193_0_test_LE(x2, x3, x4)
Cond_193_0_test_LE(x1, x2, x3, x4, x5) → Cond_193_0_test_LE(x1, x3, x4, x5)
162_0_test_LE(x1, x2, x3, x4) → 162_0_test_LE(x2, x3, x4)
Cond_162_0_test_LE(x1, x2, x3, x4, x5) → Cond_162_0_test_LE(x1, x3, x4, x5)
130_0_test_LE(x1, x2, x3, x4) → 130_0_test_LE(x2, x3, x4)
Cond_130_0_test_LE(x1, x2, x3, x4, x5) → Cond_130_0_test_LE(x1, x3, x4, x5)
97_0_test_LE(x1, x2, x3, x4) → 97_0_test_LE(x2, x3, x4)
Cond_97_0_test_LE(x1, x2, x3, x4, x5) → Cond_97_0_test_LE(x1, x3, x4, x5)
Filtered duplicate args:
48_0_main_GE(x1, x2, x3) → 48_0_main_GE(x1, x3)
Cond_48_0_main_GE1(x1, x2, x3, x4) → Cond_48_0_main_GE1(x1, x2, x4)
Cond_56_1_main_InvokeMethod(x1, x2, x3, x4) → Cond_56_1_main_InvokeMethod(x1, x2, x4)
56_1_main_InvokeMethod(x1, x2, x3, x4) → 56_1_main_InvokeMethod(x1, x2, x4)
Cond_48_0_main_GE(x1, x2, x3, x4) → Cond_48_0_main_GE(x1, x2, x4)
465_0_test_LE(x1, x2) → 465_0_test_LE(x2)
Cond_465_0_test_LE(x1, x2, x3) → Cond_465_0_test_LE(x1, x3)
426_0_test_LE(x1, x2, x3) → 426_0_test_LE(x1, x3)
Cond_426_0_test_LE(x1, x2, x3, x4) → Cond_426_0_test_LE(x1, x2, x4)
386_0_test_LE(x1, x2, x3) → 386_0_test_LE(x1, x3)
Cond_386_0_test_LE(x1, x2, x3, x4) → Cond_386_0_test_LE(x1, x2, x4)
354_0_test_LE(x1, x2, x3) → 354_0_test_LE(x1, x3)
Cond_354_0_test_LE(x1, x2, x3, x4) → Cond_354_0_test_LE(x1, x2, x4)
319_0_test_LE(x1, x2, x3) → 319_0_test_LE(x1, x3)
Cond_319_0_test_LE(x1, x2, x3, x4) → Cond_319_0_test_LE(x1, x2, x4)
285_0_test_LE(x1, x2, x3) → 285_0_test_LE(x1, x3)
Cond_285_0_test_LE(x1, x2, x3, x4) → Cond_285_0_test_LE(x1, x2, x4)
248_0_test_LE(x1, x2, x3) → 248_0_test_LE(x1, x3)
Cond_248_0_test_LE(x1, x2, x3, x4) → Cond_248_0_test_LE(x1, x2, x4)
221_0_test_LE(x1, x2, x3) → 221_0_test_LE(x1, x3)
Cond_221_0_test_LE(x1, x2, x3, x4) → Cond_221_0_test_LE(x1, x2, x4)
193_0_test_LE(x1, x2, x3) → 193_0_test_LE(x1, x3)
Cond_193_0_test_LE(x1, x2, x3, x4) → Cond_193_0_test_LE(x1, x2, x4)
162_0_test_LE(x1, x2, x3) → 162_0_test_LE(x1, x3)
Cond_162_0_test_LE(x1, x2, x3, x4) → Cond_162_0_test_LE(x1, x2, x4)
130_0_test_LE(x1, x2, x3) → 130_0_test_LE(x1, x3)
Cond_130_0_test_LE(x1, x2, x3, x4) → Cond_130_0_test_LE(x1, x2, x4)
97_0_test_LE(x1, x2, x3) → 97_0_test_LE(x1, x3)
Cond_97_0_test_LE(x1, x2, x3, x4) → Cond_97_0_test_LE(x1, x2, x4)
Filtered unneeded arguments:
Cond_48_0_main_GE1(x1, x2, x3) → Cond_48_0_main_GE1(x1, x2)
Combined rules. Obtained 3 rules for P and 25 rules for R.
Finished conversion. Obtained 3 rules for P and 25 rules for R. System has predefined symbols.
(4) Complex Obligation (AND)
(5) 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
The ITRS R consists of the following rules:
465_0_test_LE(
0) →
471_0_test_ReturnThe integer pair graph contains the following rules and edges:
(0):
465_0_TEST_LE(
x0[0]) →
COND_465_0_TEST_LE(
x0[0] > 0,
x0[0])
(1):
COND_465_0_TEST_LE(
TRUE,
x0[1]) →
465_0_TEST_LE(
x0[1] + -1)
(0) -> (1), if ((x0[0] > 0 →* TRUE)∧(x0[0] →* x0[1]))
(1) -> (0), if ((x0[1] + -1 →* x0[0]))
The set Q consists of the following terms:
465_0_test_LE(
0)
(6) 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
465_0_TEST_LE(
x0) →
COND_465_0_TEST_LE(
>(
x0,
0),
x0) the following chains were created:
- We consider the chain 465_0_TEST_LE(x0[0]) → COND_465_0_TEST_LE(>(x0[0], 0), x0[0]), COND_465_0_TEST_LE(TRUE, x0[1]) → 465_0_TEST_LE(+(x0[1], -1)) which results in the following constraint:
(1) (>(x0[0], 0)=TRUE∧x0[0]=x0[1] ⇒ 465_0_TEST_LE(x0[0])≥NonInfC∧465_0_TEST_LE(x0[0])≥COND_465_0_TEST_LE(>(x0[0], 0), x0[0])∧(UIncreasing(COND_465_0_TEST_LE(>(x0[0], 0), x0[0])), ≥))
We simplified constraint (1) using rule (IV) which results in the following new constraint:
(2) (>(x0[0], 0)=TRUE ⇒ 465_0_TEST_LE(x0[0])≥NonInfC∧465_0_TEST_LE(x0[0])≥COND_465_0_TEST_LE(>(x0[0], 0), x0[0])∧(UIncreasing(COND_465_0_TEST_LE(>(x0[0], 0), x0[0])), ≥))
We simplified constraint (2) using rule (POLY_CONSTRAINTS) which results in the following new constraint:
(3) (x0[0] + [-1] ≥ 0 ⇒ (UIncreasing(COND_465_0_TEST_LE(>(x0[0], 0), x0[0])), ≥)∧[(-1)Bound*bni_10] + [(2)bni_10]x0[0] ≥ 0∧[(-1)bso_11] ≥ 0)
We simplified constraint (3) using rule (IDP_POLY_SIMPLIFY) which results in the following new constraint:
(4) (x0[0] + [-1] ≥ 0 ⇒ (UIncreasing(COND_465_0_TEST_LE(>(x0[0], 0), x0[0])), ≥)∧[(-1)Bound*bni_10] + [(2)bni_10]x0[0] ≥ 0∧[(-1)bso_11] ≥ 0)
We simplified constraint (4) using rule (POLY_REMOVE_MIN_MAX) which results in the following new constraint:
(5) (x0[0] + [-1] ≥ 0 ⇒ (UIncreasing(COND_465_0_TEST_LE(>(x0[0], 0), x0[0])), ≥)∧[(-1)Bound*bni_10] + [(2)bni_10]x0[0] ≥ 0∧[(-1)bso_11] ≥ 0)
We simplified constraint (5) using rule (IDP_SMT_SPLIT) which results in the following new constraint:
(6) (x0[0] ≥ 0 ⇒ (UIncreasing(COND_465_0_TEST_LE(>(x0[0], 0), x0[0])), ≥)∧[(-1)Bound*bni_10 + (2)bni_10] + [(2)bni_10]x0[0] ≥ 0∧[(-1)bso_11] ≥ 0)
For Pair
COND_465_0_TEST_LE(
TRUE,
x0) →
465_0_TEST_LE(
+(
x0,
-1)) the following chains were created:
- We consider the chain COND_465_0_TEST_LE(TRUE, x0[1]) → 465_0_TEST_LE(+(x0[1], -1)) which results in the following constraint:
(7) (COND_465_0_TEST_LE(TRUE, x0[1])≥NonInfC∧COND_465_0_TEST_LE(TRUE, x0[1])≥465_0_TEST_LE(+(x0[1], -1))∧(UIncreasing(465_0_TEST_LE(+(x0[1], -1))), ≥))
We simplified constraint (7) using rule (POLY_CONSTRAINTS) which results in the following new constraint:
(8) ((UIncreasing(465_0_TEST_LE(+(x0[1], -1))), ≥)∧[2 + (-1)bso_13] ≥ 0)
We simplified constraint (8) using rule (IDP_POLY_SIMPLIFY) which results in the following new constraint:
(9) ((UIncreasing(465_0_TEST_LE(+(x0[1], -1))), ≥)∧[2 + (-1)bso_13] ≥ 0)
We simplified constraint (9) using rule (POLY_REMOVE_MIN_MAX) which results in the following new constraint:
(10) ((UIncreasing(465_0_TEST_LE(+(x0[1], -1))), ≥)∧[2 + (-1)bso_13] ≥ 0)
We simplified constraint (10) using rule (IDP_UNRESTRICTED_VARS) which results in the following new constraint:
(11) ((UIncreasing(465_0_TEST_LE(+(x0[1], -1))), ≥)∧0 = 0∧[2 + (-1)bso_13] ≥ 0)
To summarize, we get the following constraints P
≥ for the following pairs.
- 465_0_TEST_LE(x0) → COND_465_0_TEST_LE(>(x0, 0), x0)
- (x0[0] ≥ 0 ⇒ (UIncreasing(COND_465_0_TEST_LE(>(x0[0], 0), x0[0])), ≥)∧[(-1)Bound*bni_10 + (2)bni_10] + [(2)bni_10]x0[0] ≥ 0∧[(-1)bso_11] ≥ 0)
- COND_465_0_TEST_LE(TRUE, x0) → 465_0_TEST_LE(+(x0, -1))
- ((UIncreasing(465_0_TEST_LE(+(x0[1], -1))), ≥)∧0 = 0∧[2 + (-1)bso_13] ≥ 0)
The constraints for P
> respective P
bound 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 P
bound.
Using the following integer polynomial ordering the resulting constraints can be solved
Polynomial interpretation over integers[POLO]:
POL(TRUE) = 0
POL(FALSE) = 0
POL(465_0_test_LE(x1)) = [-1]
POL(0) = 0
POL(471_0_test_Return) = [-1]
POL(465_0_TEST_LE(x1)) = [2]x1
POL(COND_465_0_TEST_LE(x1, x2)) = [2]x2
POL(>(x1, x2)) = [-1]
POL(+(x1, x2)) = x1 + x2
POL(-1) = [-1]
The following pairs are in P
>:
COND_465_0_TEST_LE(TRUE, x0[1]) → 465_0_TEST_LE(+(x0[1], -1))
The following pairs are in P
bound:
465_0_TEST_LE(x0[0]) → COND_465_0_TEST_LE(>(x0[0], 0), x0[0])
The following pairs are in P
≥:
465_0_TEST_LE(x0[0]) → COND_465_0_TEST_LE(>(x0[0], 0), x0[0])
There are no usable rules.
(7) Complex Obligation (AND)
(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:
Integer
The ITRS R consists of the following rules:
465_0_test_LE(
0) →
471_0_test_ReturnThe integer pair graph contains the following rules and edges:
(0):
465_0_TEST_LE(
x0[0]) →
COND_465_0_TEST_LE(
x0[0] > 0,
x0[0])
The set Q consists of the following terms:
465_0_test_LE(
0)
(9) IDependencyGraphProof (EQUIVALENT transformation)
The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 0 SCCs with 1 less node.
(10) TRUE
(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:
Integer
The ITRS R consists of the following rules:
465_0_test_LE(
0) →
471_0_test_ReturnThe integer pair graph contains the following rules and edges:
(1):
COND_465_0_TEST_LE(
TRUE,
x0[1]) →
465_0_TEST_LE(
x0[1] + -1)
The set Q consists of the following terms:
465_0_test_LE(
0)
(12) IDependencyGraphProof (EQUIVALENT transformation)
The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 0 SCCs with 1 less node.
(13) TRUE
(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
The ITRS R consists of the following rules:
426_0_test_LE(
x0,
0) →
465_0_test_LE(
x0)
465_0_test_LE(
0) →
471_0_test_Return465_0_test_LE(
x0) →
Cond_465_0_test_LE(
x0 > 0,
x0)
Cond_465_0_test_LE(
TRUE,
x0) →
465_0_test_LE(
x0 + -1)
The integer pair graph contains the following rules and edges:
(0):
426_0_TEST_LE(
x0[0],
x1[0]) →
COND_426_0_TEST_LE(
x1[0] > 0,
x0[0],
x1[0])
(1):
COND_426_0_TEST_LE(
TRUE,
x0[1],
x1[1]) →
426_0_TEST_LE(
x0[1],
x1[1] + -1)
(0) -> (1), if ((x1[0] > 0 →* TRUE)∧(x0[0] →* x0[1])∧(x1[0] →* x1[1]))
(1) -> (0), if ((x0[1] →* x0[0])∧(x1[1] + -1 →* x1[0]))
The set Q consists of the following terms:
426_0_test_LE(
x0,
0)
465_0_test_LE(
x0)
Cond_465_0_test_LE(
TRUE,
x0)
(15) 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
426_0_TEST_LE(
x0,
x1) →
COND_426_0_TEST_LE(
>(
x1,
0),
x0,
x1) the following chains were created:
- We consider the chain 426_0_TEST_LE(x0[0], x1[0]) → COND_426_0_TEST_LE(>(x1[0], 0), x0[0], x1[0]), COND_426_0_TEST_LE(TRUE, x0[1], x1[1]) → 426_0_TEST_LE(x0[1], +(x1[1], -1)) which results in the following constraint:
(1) (>(x1[0], 0)=TRUE∧x0[0]=x0[1]∧x1[0]=x1[1] ⇒ 426_0_TEST_LE(x0[0], x1[0])≥NonInfC∧426_0_TEST_LE(x0[0], x1[0])≥COND_426_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])∧(UIncreasing(COND_426_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])), ≥))
We simplified constraint (1) using rule (IV) which results in the following new constraint:
(2) (>(x1[0], 0)=TRUE ⇒ 426_0_TEST_LE(x0[0], x1[0])≥NonInfC∧426_0_TEST_LE(x0[0], x1[0])≥COND_426_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])∧(UIncreasing(COND_426_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])), ≥))
We simplified constraint (2) using rule (POLY_CONSTRAINTS) which results in the following new constraint:
(3) (x1[0] + [-1] ≥ 0 ⇒ (UIncreasing(COND_426_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])), ≥)∧[(-1)Bound*bni_14] + [(2)bni_14]x1[0] ≥ 0∧[(-1)bso_15] ≥ 0)
We simplified constraint (3) using rule (IDP_POLY_SIMPLIFY) which results in the following new constraint:
(4) (x1[0] + [-1] ≥ 0 ⇒ (UIncreasing(COND_426_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])), ≥)∧[(-1)Bound*bni_14] + [(2)bni_14]x1[0] ≥ 0∧[(-1)bso_15] ≥ 0)
We simplified constraint (4) using rule (POLY_REMOVE_MIN_MAX) which results in the following new constraint:
(5) (x1[0] + [-1] ≥ 0 ⇒ (UIncreasing(COND_426_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])), ≥)∧[(-1)Bound*bni_14] + [(2)bni_14]x1[0] ≥ 0∧[(-1)bso_15] ≥ 0)
We simplified constraint (5) using rule (IDP_SMT_SPLIT) which results in the following new constraint:
(6) (x1[0] ≥ 0 ⇒ (UIncreasing(COND_426_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])), ≥)∧[(-1)Bound*bni_14 + (2)bni_14] + [(2)bni_14]x1[0] ≥ 0∧[(-1)bso_15] ≥ 0)
For Pair
COND_426_0_TEST_LE(
TRUE,
x0,
x1) →
426_0_TEST_LE(
x0,
+(
x1,
-1)) the following chains were created:
- We consider the chain COND_426_0_TEST_LE(TRUE, x0[1], x1[1]) → 426_0_TEST_LE(x0[1], +(x1[1], -1)) which results in the following constraint:
(7) (COND_426_0_TEST_LE(TRUE, x0[1], x1[1])≥NonInfC∧COND_426_0_TEST_LE(TRUE, x0[1], x1[1])≥426_0_TEST_LE(x0[1], +(x1[1], -1))∧(UIncreasing(426_0_TEST_LE(x0[1], +(x1[1], -1))), ≥))
We simplified constraint (7) using rule (POLY_CONSTRAINTS) which results in the following new constraint:
(8) ((UIncreasing(426_0_TEST_LE(x0[1], +(x1[1], -1))), ≥)∧[2 + (-1)bso_17] ≥ 0)
We simplified constraint (8) using rule (IDP_POLY_SIMPLIFY) which results in the following new constraint:
(9) ((UIncreasing(426_0_TEST_LE(x0[1], +(x1[1], -1))), ≥)∧[2 + (-1)bso_17] ≥ 0)
We simplified constraint (9) using rule (POLY_REMOVE_MIN_MAX) which results in the following new constraint:
(10) ((UIncreasing(426_0_TEST_LE(x0[1], +(x1[1], -1))), ≥)∧[2 + (-1)bso_17] ≥ 0)
We simplified constraint (10) using rule (IDP_UNRESTRICTED_VARS) which results in the following new constraint:
(11) ((UIncreasing(426_0_TEST_LE(x0[1], +(x1[1], -1))), ≥)∧0 = 0∧[2 + (-1)bso_17] ≥ 0)
To summarize, we get the following constraints P
≥ for the following pairs.
- 426_0_TEST_LE(x0, x1) → COND_426_0_TEST_LE(>(x1, 0), x0, x1)
- (x1[0] ≥ 0 ⇒ (UIncreasing(COND_426_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])), ≥)∧[(-1)Bound*bni_14 + (2)bni_14] + [(2)bni_14]x1[0] ≥ 0∧[(-1)bso_15] ≥ 0)
- COND_426_0_TEST_LE(TRUE, x0, x1) → 426_0_TEST_LE(x0, +(x1, -1))
- ((UIncreasing(426_0_TEST_LE(x0[1], +(x1[1], -1))), ≥)∧0 = 0∧[2 + (-1)bso_17] ≥ 0)
The constraints for P
> respective P
bound 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 P
bound.
Using the following integer polynomial ordering the resulting constraints can be solved
Polynomial interpretation over integers[POLO]:
POL(TRUE) = 0
POL(FALSE) = 0
POL(426_0_test_LE(x1, x2)) = [-1]
POL(0) = 0
POL(465_0_test_LE(x1)) = [-1] + [-1]x1
POL(471_0_test_Return) = [-1]
POL(Cond_465_0_test_LE(x1, x2)) = [-1] + [-1]x2
POL(>(x1, x2)) = [-1]
POL(+(x1, x2)) = x1 + x2
POL(-1) = [-1]
POL(426_0_TEST_LE(x1, x2)) = [2]x2
POL(COND_426_0_TEST_LE(x1, x2, x3)) = [2]x3
The following pairs are in P
>:
COND_426_0_TEST_LE(TRUE, x0[1], x1[1]) → 426_0_TEST_LE(x0[1], +(x1[1], -1))
The following pairs are in P
bound:
426_0_TEST_LE(x0[0], x1[0]) → COND_426_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])
The following pairs are in P
≥:
426_0_TEST_LE(x0[0], x1[0]) → COND_426_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])
There are no usable rules.
(16) Complex Obligation (AND)
(17) 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
The ITRS R consists of the following rules:
426_0_test_LE(
x0,
0) →
465_0_test_LE(
x0)
465_0_test_LE(
0) →
471_0_test_Return465_0_test_LE(
x0) →
Cond_465_0_test_LE(
x0 > 0,
x0)
Cond_465_0_test_LE(
TRUE,
x0) →
465_0_test_LE(
x0 + -1)
The integer pair graph contains the following rules and edges:
(0):
426_0_TEST_LE(
x0[0],
x1[0]) →
COND_426_0_TEST_LE(
x1[0] > 0,
x0[0],
x1[0])
The set Q consists of the following terms:
426_0_test_LE(
x0,
0)
465_0_test_LE(
x0)
Cond_465_0_test_LE(
TRUE,
x0)
(18) IDependencyGraphProof (EQUIVALENT transformation)
The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 0 SCCs with 1 less node.
(19) TRUE
(20) 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
The ITRS R consists of the following rules:
426_0_test_LE(
x0,
0) →
465_0_test_LE(
x0)
465_0_test_LE(
0) →
471_0_test_Return465_0_test_LE(
x0) →
Cond_465_0_test_LE(
x0 > 0,
x0)
Cond_465_0_test_LE(
TRUE,
x0) →
465_0_test_LE(
x0 + -1)
The integer pair graph contains the following rules and edges:
(1):
COND_426_0_TEST_LE(
TRUE,
x0[1],
x1[1]) →
426_0_TEST_LE(
x0[1],
x1[1] + -1)
The set Q consists of the following terms:
426_0_test_LE(
x0,
0)
465_0_test_LE(
x0)
Cond_465_0_test_LE(
TRUE,
x0)
(21) IDependencyGraphProof (EQUIVALENT transformation)
The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 0 SCCs with 1 less node.
(22) TRUE
(23) 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
The ITRS R consists of the following rules:
386_0_test_LE(
x0,
0) →
426_0_test_LE(
x0,
x0)
426_0_test_LE(
x0,
x1) →
Cond_426_0_test_LE(
x1 > 0,
x0,
x1)
Cond_426_0_test_LE(
TRUE,
x0,
x1) →
426_0_test_LE(
x0,
x1 + -1)
426_0_test_LE(
x0,
0) →
465_0_test_LE(
x0)
465_0_test_LE(
0) →
471_0_test_Return465_0_test_LE(
x0) →
Cond_465_0_test_LE(
x0 > 0,
x0)
Cond_465_0_test_LE(
TRUE,
x0) →
465_0_test_LE(
x0 + -1)
The integer pair graph contains the following rules and edges:
(0):
386_0_TEST_LE(
x0[0],
x1[0]) →
COND_386_0_TEST_LE(
x1[0] > 0,
x0[0],
x1[0])
(1):
COND_386_0_TEST_LE(
TRUE,
x0[1],
x1[1]) →
386_0_TEST_LE(
x0[1],
x1[1] + -1)
(0) -> (1), if ((x1[0] > 0 →* TRUE)∧(x0[0] →* x0[1])∧(x1[0] →* x1[1]))
(1) -> (0), if ((x0[1] →* x0[0])∧(x1[1] + -1 →* x1[0]))
The set Q consists of the following terms:
386_0_test_LE(
x0,
0)
426_0_test_LE(
x0,
x1)
Cond_426_0_test_LE(
TRUE,
x0,
x1)
465_0_test_LE(
x0)
Cond_465_0_test_LE(
TRUE,
x0)
(24) 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
386_0_TEST_LE(
x0,
x1) →
COND_386_0_TEST_LE(
>(
x1,
0),
x0,
x1) the following chains were created:
- We consider the chain 386_0_TEST_LE(x0[0], x1[0]) → COND_386_0_TEST_LE(>(x1[0], 0), x0[0], x1[0]), COND_386_0_TEST_LE(TRUE, x0[1], x1[1]) → 386_0_TEST_LE(x0[1], +(x1[1], -1)) which results in the following constraint:
(1) (>(x1[0], 0)=TRUE∧x0[0]=x0[1]∧x1[0]=x1[1] ⇒ 386_0_TEST_LE(x0[0], x1[0])≥NonInfC∧386_0_TEST_LE(x0[0], x1[0])≥COND_386_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])∧(UIncreasing(COND_386_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])), ≥))
We simplified constraint (1) using rule (IV) which results in the following new constraint:
(2) (>(x1[0], 0)=TRUE ⇒ 386_0_TEST_LE(x0[0], x1[0])≥NonInfC∧386_0_TEST_LE(x0[0], x1[0])≥COND_386_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])∧(UIncreasing(COND_386_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])), ≥))
We simplified constraint (2) using rule (POLY_CONSTRAINTS) which results in the following new constraint:
(3) (x1[0] + [-1] ≥ 0 ⇒ (UIncreasing(COND_386_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])), ≥)∧[(-1)Bound*bni_16] + [(2)bni_16]x1[0] ≥ 0∧[(-1)bso_17] ≥ 0)
We simplified constraint (3) using rule (IDP_POLY_SIMPLIFY) which results in the following new constraint:
(4) (x1[0] + [-1] ≥ 0 ⇒ (UIncreasing(COND_386_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])), ≥)∧[(-1)Bound*bni_16] + [(2)bni_16]x1[0] ≥ 0∧[(-1)bso_17] ≥ 0)
We simplified constraint (4) using rule (POLY_REMOVE_MIN_MAX) which results in the following new constraint:
(5) (x1[0] + [-1] ≥ 0 ⇒ (UIncreasing(COND_386_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])), ≥)∧[(-1)Bound*bni_16] + [(2)bni_16]x1[0] ≥ 0∧[(-1)bso_17] ≥ 0)
We simplified constraint (5) using rule (IDP_SMT_SPLIT) which results in the following new constraint:
(6) (x1[0] ≥ 0 ⇒ (UIncreasing(COND_386_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])), ≥)∧[(-1)Bound*bni_16 + (2)bni_16] + [(2)bni_16]x1[0] ≥ 0∧[(-1)bso_17] ≥ 0)
For Pair
COND_386_0_TEST_LE(
TRUE,
x0,
x1) →
386_0_TEST_LE(
x0,
+(
x1,
-1)) the following chains were created:
- We consider the chain COND_386_0_TEST_LE(TRUE, x0[1], x1[1]) → 386_0_TEST_LE(x0[1], +(x1[1], -1)) which results in the following constraint:
(7) (COND_386_0_TEST_LE(TRUE, x0[1], x1[1])≥NonInfC∧COND_386_0_TEST_LE(TRUE, x0[1], x1[1])≥386_0_TEST_LE(x0[1], +(x1[1], -1))∧(UIncreasing(386_0_TEST_LE(x0[1], +(x1[1], -1))), ≥))
We simplified constraint (7) using rule (POLY_CONSTRAINTS) which results in the following new constraint:
(8) ((UIncreasing(386_0_TEST_LE(x0[1], +(x1[1], -1))), ≥)∧[2 + (-1)bso_19] ≥ 0)
We simplified constraint (8) using rule (IDP_POLY_SIMPLIFY) which results in the following new constraint:
(9) ((UIncreasing(386_0_TEST_LE(x0[1], +(x1[1], -1))), ≥)∧[2 + (-1)bso_19] ≥ 0)
We simplified constraint (9) using rule (POLY_REMOVE_MIN_MAX) which results in the following new constraint:
(10) ((UIncreasing(386_0_TEST_LE(x0[1], +(x1[1], -1))), ≥)∧[2 + (-1)bso_19] ≥ 0)
We simplified constraint (10) using rule (IDP_UNRESTRICTED_VARS) which results in the following new constraint:
(11) ((UIncreasing(386_0_TEST_LE(x0[1], +(x1[1], -1))), ≥)∧0 = 0∧[2 + (-1)bso_19] ≥ 0)
To summarize, we get the following constraints P
≥ for the following pairs.
- 386_0_TEST_LE(x0, x1) → COND_386_0_TEST_LE(>(x1, 0), x0, x1)
- (x1[0] ≥ 0 ⇒ (UIncreasing(COND_386_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])), ≥)∧[(-1)Bound*bni_16 + (2)bni_16] + [(2)bni_16]x1[0] ≥ 0∧[(-1)bso_17] ≥ 0)
- COND_386_0_TEST_LE(TRUE, x0, x1) → 386_0_TEST_LE(x0, +(x1, -1))
- ((UIncreasing(386_0_TEST_LE(x0[1], +(x1[1], -1))), ≥)∧0 = 0∧[2 + (-1)bso_19] ≥ 0)
The constraints for P
> respective P
bound 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 P
bound.
Using the following integer polynomial ordering the resulting constraints can be solved
Polynomial interpretation over integers[POLO]:
POL(TRUE) = 0
POL(FALSE) = 0
POL(386_0_test_LE(x1, x2)) = [-1]
POL(0) = 0
POL(426_0_test_LE(x1, x2)) = [-1] + [-1]x2
POL(Cond_426_0_test_LE(x1, x2, x3)) = [-1] + [-1]x3
POL(>(x1, x2)) = [-1]
POL(+(x1, x2)) = x1 + x2
POL(-1) = [-1]
POL(465_0_test_LE(x1)) = [-1] + [-1]x1
POL(471_0_test_Return) = [-1]
POL(Cond_465_0_test_LE(x1, x2)) = [-1] + [-1]x2
POL(386_0_TEST_LE(x1, x2)) = [2]x2
POL(COND_386_0_TEST_LE(x1, x2, x3)) = [2]x3
The following pairs are in P
>:
COND_386_0_TEST_LE(TRUE, x0[1], x1[1]) → 386_0_TEST_LE(x0[1], +(x1[1], -1))
The following pairs are in P
bound:
386_0_TEST_LE(x0[0], x1[0]) → COND_386_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])
The following pairs are in P
≥:
386_0_TEST_LE(x0[0], x1[0]) → COND_386_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])
There are no usable rules.
(25) Complex Obligation (AND)
(26) 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
The ITRS R consists of the following rules:
386_0_test_LE(
x0,
0) →
426_0_test_LE(
x0,
x0)
426_0_test_LE(
x0,
x1) →
Cond_426_0_test_LE(
x1 > 0,
x0,
x1)
Cond_426_0_test_LE(
TRUE,
x0,
x1) →
426_0_test_LE(
x0,
x1 + -1)
426_0_test_LE(
x0,
0) →
465_0_test_LE(
x0)
465_0_test_LE(
0) →
471_0_test_Return465_0_test_LE(
x0) →
Cond_465_0_test_LE(
x0 > 0,
x0)
Cond_465_0_test_LE(
TRUE,
x0) →
465_0_test_LE(
x0 + -1)
The integer pair graph contains the following rules and edges:
(0):
386_0_TEST_LE(
x0[0],
x1[0]) →
COND_386_0_TEST_LE(
x1[0] > 0,
x0[0],
x1[0])
The set Q consists of the following terms:
386_0_test_LE(
x0,
0)
426_0_test_LE(
x0,
x1)
Cond_426_0_test_LE(
TRUE,
x0,
x1)
465_0_test_LE(
x0)
Cond_465_0_test_LE(
TRUE,
x0)
(27) IDependencyGraphProof (EQUIVALENT transformation)
The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 0 SCCs with 1 less node.
(28) TRUE
(29) 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
The ITRS R consists of the following rules:
386_0_test_LE(
x0,
0) →
426_0_test_LE(
x0,
x0)
426_0_test_LE(
x0,
x1) →
Cond_426_0_test_LE(
x1 > 0,
x0,
x1)
Cond_426_0_test_LE(
TRUE,
x0,
x1) →
426_0_test_LE(
x0,
x1 + -1)
426_0_test_LE(
x0,
0) →
465_0_test_LE(
x0)
465_0_test_LE(
0) →
471_0_test_Return465_0_test_LE(
x0) →
Cond_465_0_test_LE(
x0 > 0,
x0)
Cond_465_0_test_LE(
TRUE,
x0) →
465_0_test_LE(
x0 + -1)
The integer pair graph contains the following rules and edges:
(1):
COND_386_0_TEST_LE(
TRUE,
x0[1],
x1[1]) →
386_0_TEST_LE(
x0[1],
x1[1] + -1)
The set Q consists of the following terms:
386_0_test_LE(
x0,
0)
426_0_test_LE(
x0,
x1)
Cond_426_0_test_LE(
TRUE,
x0,
x1)
465_0_test_LE(
x0)
Cond_465_0_test_LE(
TRUE,
x0)
(30) IDependencyGraphProof (EQUIVALENT transformation)
The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 0 SCCs with 1 less node.
(31) TRUE
(32) 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
The ITRS R consists of the following rules:
354_0_test_LE(
x0,
0) →
386_0_test_LE(
x0,
x0)
386_0_test_LE(
x0,
x1) →
Cond_386_0_test_LE(
x1 > 0,
x0,
x1)
Cond_386_0_test_LE(
TRUE,
x0,
x1) →
386_0_test_LE(
x0,
x1 + -1)
386_0_test_LE(
x0,
0) →
426_0_test_LE(
x0,
x0)
426_0_test_LE(
x0,
x1) →
Cond_426_0_test_LE(
x1 > 0,
x0,
x1)
Cond_426_0_test_LE(
TRUE,
x0,
x1) →
426_0_test_LE(
x0,
x1 + -1)
426_0_test_LE(
x0,
0) →
465_0_test_LE(
x0)
465_0_test_LE(
0) →
471_0_test_Return465_0_test_LE(
x0) →
Cond_465_0_test_LE(
x0 > 0,
x0)
Cond_465_0_test_LE(
TRUE,
x0) →
465_0_test_LE(
x0 + -1)
The integer pair graph contains the following rules and edges:
(0):
354_0_TEST_LE(
x0[0],
x1[0]) →
COND_354_0_TEST_LE(
x1[0] > 0,
x0[0],
x1[0])
(1):
COND_354_0_TEST_LE(
TRUE,
x0[1],
x1[1]) →
354_0_TEST_LE(
x0[1],
x1[1] + -1)
(0) -> (1), if ((x1[0] > 0 →* TRUE)∧(x0[0] →* x0[1])∧(x1[0] →* x1[1]))
(1) -> (0), if ((x0[1] →* x0[0])∧(x1[1] + -1 →* x1[0]))
The set Q consists of the following terms:
354_0_test_LE(
x0,
0)
386_0_test_LE(
x0,
x1)
Cond_386_0_test_LE(
TRUE,
x0,
x1)
426_0_test_LE(
x0,
x1)
Cond_426_0_test_LE(
TRUE,
x0,
x1)
465_0_test_LE(
x0)
Cond_465_0_test_LE(
TRUE,
x0)
(33) 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
354_0_TEST_LE(
x0,
x1) →
COND_354_0_TEST_LE(
>(
x1,
0),
x0,
x1) the following chains were created:
- We consider the chain 354_0_TEST_LE(x0[0], x1[0]) → COND_354_0_TEST_LE(>(x1[0], 0), x0[0], x1[0]), COND_354_0_TEST_LE(TRUE, x0[1], x1[1]) → 354_0_TEST_LE(x0[1], +(x1[1], -1)) which results in the following constraint:
(1) (>(x1[0], 0)=TRUE∧x0[0]=x0[1]∧x1[0]=x1[1] ⇒ 354_0_TEST_LE(x0[0], x1[0])≥NonInfC∧354_0_TEST_LE(x0[0], x1[0])≥COND_354_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])∧(UIncreasing(COND_354_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])), ≥))
We simplified constraint (1) using rule (IV) which results in the following new constraint:
(2) (>(x1[0], 0)=TRUE ⇒ 354_0_TEST_LE(x0[0], x1[0])≥NonInfC∧354_0_TEST_LE(x0[0], x1[0])≥COND_354_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])∧(UIncreasing(COND_354_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])), ≥))
We simplified constraint (2) using rule (POLY_CONSTRAINTS) which results in the following new constraint:
(3) (x1[0] + [-1] ≥ 0 ⇒ (UIncreasing(COND_354_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])), ≥)∧[(-1)Bound*bni_17] + [(2)bni_17]x1[0] ≥ 0∧[(-1)bso_18] ≥ 0)
We simplified constraint (3) using rule (IDP_POLY_SIMPLIFY) which results in the following new constraint:
(4) (x1[0] + [-1] ≥ 0 ⇒ (UIncreasing(COND_354_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])), ≥)∧[(-1)Bound*bni_17] + [(2)bni_17]x1[0] ≥ 0∧[(-1)bso_18] ≥ 0)
We simplified constraint (4) using rule (POLY_REMOVE_MIN_MAX) which results in the following new constraint:
(5) (x1[0] + [-1] ≥ 0 ⇒ (UIncreasing(COND_354_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])), ≥)∧[(-1)Bound*bni_17] + [(2)bni_17]x1[0] ≥ 0∧[(-1)bso_18] ≥ 0)
We simplified constraint (5) using rule (IDP_SMT_SPLIT) which results in the following new constraint:
(6) (x1[0] ≥ 0 ⇒ (UIncreasing(COND_354_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])), ≥)∧[(-1)Bound*bni_17 + (2)bni_17] + [(2)bni_17]x1[0] ≥ 0∧[(-1)bso_18] ≥ 0)
For Pair
COND_354_0_TEST_LE(
TRUE,
x0,
x1) →
354_0_TEST_LE(
x0,
+(
x1,
-1)) the following chains were created:
- We consider the chain COND_354_0_TEST_LE(TRUE, x0[1], x1[1]) → 354_0_TEST_LE(x0[1], +(x1[1], -1)) which results in the following constraint:
(7) (COND_354_0_TEST_LE(TRUE, x0[1], x1[1])≥NonInfC∧COND_354_0_TEST_LE(TRUE, x0[1], x1[1])≥354_0_TEST_LE(x0[1], +(x1[1], -1))∧(UIncreasing(354_0_TEST_LE(x0[1], +(x1[1], -1))), ≥))
We simplified constraint (7) using rule (POLY_CONSTRAINTS) which results in the following new constraint:
(8) ((UIncreasing(354_0_TEST_LE(x0[1], +(x1[1], -1))), ≥)∧[2 + (-1)bso_20] ≥ 0)
We simplified constraint (8) using rule (IDP_POLY_SIMPLIFY) which results in the following new constraint:
(9) ((UIncreasing(354_0_TEST_LE(x0[1], +(x1[1], -1))), ≥)∧[2 + (-1)bso_20] ≥ 0)
We simplified constraint (9) using rule (POLY_REMOVE_MIN_MAX) which results in the following new constraint:
(10) ((UIncreasing(354_0_TEST_LE(x0[1], +(x1[1], -1))), ≥)∧[2 + (-1)bso_20] ≥ 0)
We simplified constraint (10) using rule (IDP_UNRESTRICTED_VARS) which results in the following new constraint:
(11) ((UIncreasing(354_0_TEST_LE(x0[1], +(x1[1], -1))), ≥)∧0 = 0∧[2 + (-1)bso_20] ≥ 0)
To summarize, we get the following constraints P
≥ for the following pairs.
- 354_0_TEST_LE(x0, x1) → COND_354_0_TEST_LE(>(x1, 0), x0, x1)
- (x1[0] ≥ 0 ⇒ (UIncreasing(COND_354_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])), ≥)∧[(-1)Bound*bni_17 + (2)bni_17] + [(2)bni_17]x1[0] ≥ 0∧[(-1)bso_18] ≥ 0)
- COND_354_0_TEST_LE(TRUE, x0, x1) → 354_0_TEST_LE(x0, +(x1, -1))
- ((UIncreasing(354_0_TEST_LE(x0[1], +(x1[1], -1))), ≥)∧0 = 0∧[2 + (-1)bso_20] ≥ 0)
The constraints for P
> respective P
bound 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 P
bound.
Using the following integer polynomial ordering the resulting constraints can be solved
Polynomial interpretation over integers[POLO]:
POL(TRUE) = 0
POL(FALSE) = 0
POL(354_0_test_LE(x1, x2)) = [-1]
POL(0) = 0
POL(386_0_test_LE(x1, x2)) = [-1] + [-1]x2
POL(Cond_386_0_test_LE(x1, x2, x3)) = [-1] + [-1]x3
POL(>(x1, x2)) = [-1]
POL(+(x1, x2)) = x1 + x2
POL(-1) = [-1]
POL(426_0_test_LE(x1, x2)) = [-1] + [-1]x2
POL(Cond_426_0_test_LE(x1, x2, x3)) = [-1] + [-1]x3
POL(465_0_test_LE(x1)) = [-1] + [-1]x1
POL(471_0_test_Return) = [-1]
POL(Cond_465_0_test_LE(x1, x2)) = [-1] + [-1]x2
POL(354_0_TEST_LE(x1, x2)) = [2]x2
POL(COND_354_0_TEST_LE(x1, x2, x3)) = [2]x3
The following pairs are in P
>:
COND_354_0_TEST_LE(TRUE, x0[1], x1[1]) → 354_0_TEST_LE(x0[1], +(x1[1], -1))
The following pairs are in P
bound:
354_0_TEST_LE(x0[0], x1[0]) → COND_354_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])
The following pairs are in P
≥:
354_0_TEST_LE(x0[0], x1[0]) → COND_354_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])
There are no usable rules.
(34) Complex Obligation (AND)
(35) 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
The ITRS R consists of the following rules:
354_0_test_LE(
x0,
0) →
386_0_test_LE(
x0,
x0)
386_0_test_LE(
x0,
x1) →
Cond_386_0_test_LE(
x1 > 0,
x0,
x1)
Cond_386_0_test_LE(
TRUE,
x0,
x1) →
386_0_test_LE(
x0,
x1 + -1)
386_0_test_LE(
x0,
0) →
426_0_test_LE(
x0,
x0)
426_0_test_LE(
x0,
x1) →
Cond_426_0_test_LE(
x1 > 0,
x0,
x1)
Cond_426_0_test_LE(
TRUE,
x0,
x1) →
426_0_test_LE(
x0,
x1 + -1)
426_0_test_LE(
x0,
0) →
465_0_test_LE(
x0)
465_0_test_LE(
0) →
471_0_test_Return465_0_test_LE(
x0) →
Cond_465_0_test_LE(
x0 > 0,
x0)
Cond_465_0_test_LE(
TRUE,
x0) →
465_0_test_LE(
x0 + -1)
The integer pair graph contains the following rules and edges:
(0):
354_0_TEST_LE(
x0[0],
x1[0]) →
COND_354_0_TEST_LE(
x1[0] > 0,
x0[0],
x1[0])
The set Q consists of the following terms:
354_0_test_LE(
x0,
0)
386_0_test_LE(
x0,
x1)
Cond_386_0_test_LE(
TRUE,
x0,
x1)
426_0_test_LE(
x0,
x1)
Cond_426_0_test_LE(
TRUE,
x0,
x1)
465_0_test_LE(
x0)
Cond_465_0_test_LE(
TRUE,
x0)
(36) IDependencyGraphProof (EQUIVALENT transformation)
The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 0 SCCs with 1 less node.
(37) TRUE
(38) 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
The ITRS R consists of the following rules:
354_0_test_LE(
x0,
0) →
386_0_test_LE(
x0,
x0)
386_0_test_LE(
x0,
x1) →
Cond_386_0_test_LE(
x1 > 0,
x0,
x1)
Cond_386_0_test_LE(
TRUE,
x0,
x1) →
386_0_test_LE(
x0,
x1 + -1)
386_0_test_LE(
x0,
0) →
426_0_test_LE(
x0,
x0)
426_0_test_LE(
x0,
x1) →
Cond_426_0_test_LE(
x1 > 0,
x0,
x1)
Cond_426_0_test_LE(
TRUE,
x0,
x1) →
426_0_test_LE(
x0,
x1 + -1)
426_0_test_LE(
x0,
0) →
465_0_test_LE(
x0)
465_0_test_LE(
0) →
471_0_test_Return465_0_test_LE(
x0) →
Cond_465_0_test_LE(
x0 > 0,
x0)
Cond_465_0_test_LE(
TRUE,
x0) →
465_0_test_LE(
x0 + -1)
The integer pair graph contains the following rules and edges:
(1):
COND_354_0_TEST_LE(
TRUE,
x0[1],
x1[1]) →
354_0_TEST_LE(
x0[1],
x1[1] + -1)
The set Q consists of the following terms:
354_0_test_LE(
x0,
0)
386_0_test_LE(
x0,
x1)
Cond_386_0_test_LE(
TRUE,
x0,
x1)
426_0_test_LE(
x0,
x1)
Cond_426_0_test_LE(
TRUE,
x0,
x1)
465_0_test_LE(
x0)
Cond_465_0_test_LE(
TRUE,
x0)
(39) IDependencyGraphProof (EQUIVALENT transformation)
The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 0 SCCs with 1 less node.
(40) TRUE
(41) 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
The ITRS R consists of the following rules:
319_0_test_LE(
x0,
0) →
354_0_test_LE(
x0,
x0)
354_0_test_LE(
x0,
x1) →
Cond_354_0_test_LE(
x1 > 0,
x0,
x1)
Cond_354_0_test_LE(
TRUE,
x0,
x1) →
354_0_test_LE(
x0,
x1 + -1)
354_0_test_LE(
x0,
0) →
386_0_test_LE(
x0,
x0)
386_0_test_LE(
x0,
x1) →
Cond_386_0_test_LE(
x1 > 0,
x0,
x1)
Cond_386_0_test_LE(
TRUE,
x0,
x1) →
386_0_test_LE(
x0,
x1 + -1)
386_0_test_LE(
x0,
0) →
426_0_test_LE(
x0,
x0)
426_0_test_LE(
x0,
x1) →
Cond_426_0_test_LE(
x1 > 0,
x0,
x1)
Cond_426_0_test_LE(
TRUE,
x0,
x1) →
426_0_test_LE(
x0,
x1 + -1)
426_0_test_LE(
x0,
0) →
465_0_test_LE(
x0)
465_0_test_LE(
0) →
471_0_test_Return465_0_test_LE(
x0) →
Cond_465_0_test_LE(
x0 > 0,
x0)
Cond_465_0_test_LE(
TRUE,
x0) →
465_0_test_LE(
x0 + -1)
The integer pair graph contains the following rules and edges:
(0):
319_0_TEST_LE(
x0[0],
x1[0]) →
COND_319_0_TEST_LE(
x1[0] > 0,
x0[0],
x1[0])
(1):
COND_319_0_TEST_LE(
TRUE,
x0[1],
x1[1]) →
319_0_TEST_LE(
x0[1],
x1[1] + -1)
(0) -> (1), if ((x1[0] > 0 →* TRUE)∧(x0[0] →* x0[1])∧(x1[0] →* x1[1]))
(1) -> (0), if ((x0[1] →* x0[0])∧(x1[1] + -1 →* x1[0]))
The set Q consists of the following terms:
319_0_test_LE(
x0,
0)
354_0_test_LE(
x0,
x1)
Cond_354_0_test_LE(
TRUE,
x0,
x1)
386_0_test_LE(
x0,
x1)
Cond_386_0_test_LE(
TRUE,
x0,
x1)
426_0_test_LE(
x0,
x1)
Cond_426_0_test_LE(
TRUE,
x0,
x1)
465_0_test_LE(
x0)
Cond_465_0_test_LE(
TRUE,
x0)
(42) 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
319_0_TEST_LE(
x0,
x1) →
COND_319_0_TEST_LE(
>(
x1,
0),
x0,
x1) the following chains were created:
- We consider the chain 319_0_TEST_LE(x0[0], x1[0]) → COND_319_0_TEST_LE(>(x1[0], 0), x0[0], x1[0]), COND_319_0_TEST_LE(TRUE, x0[1], x1[1]) → 319_0_TEST_LE(x0[1], +(x1[1], -1)) which results in the following constraint:
(1) (>(x1[0], 0)=TRUE∧x0[0]=x0[1]∧x1[0]=x1[1] ⇒ 319_0_TEST_LE(x0[0], x1[0])≥NonInfC∧319_0_TEST_LE(x0[0], x1[0])≥COND_319_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])∧(UIncreasing(COND_319_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])), ≥))
We simplified constraint (1) using rule (IV) which results in the following new constraint:
(2) (>(x1[0], 0)=TRUE ⇒ 319_0_TEST_LE(x0[0], x1[0])≥NonInfC∧319_0_TEST_LE(x0[0], x1[0])≥COND_319_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])∧(UIncreasing(COND_319_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])), ≥))
We simplified constraint (2) using rule (POLY_CONSTRAINTS) which results in the following new constraint:
(3) (x1[0] + [-1] ≥ 0 ⇒ (UIncreasing(COND_319_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])), ≥)∧[(-1)Bound*bni_21] + [(2)bni_21]x1[0] ≥ 0∧[(-1)bso_22] ≥ 0)
We simplified constraint (3) using rule (IDP_POLY_SIMPLIFY) which results in the following new constraint:
(4) (x1[0] + [-1] ≥ 0 ⇒ (UIncreasing(COND_319_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])), ≥)∧[(-1)Bound*bni_21] + [(2)bni_21]x1[0] ≥ 0∧[(-1)bso_22] ≥ 0)
We simplified constraint (4) using rule (POLY_REMOVE_MIN_MAX) which results in the following new constraint:
(5) (x1[0] + [-1] ≥ 0 ⇒ (UIncreasing(COND_319_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])), ≥)∧[(-1)Bound*bni_21] + [(2)bni_21]x1[0] ≥ 0∧[(-1)bso_22] ≥ 0)
We simplified constraint (5) using rule (IDP_SMT_SPLIT) which results in the following new constraint:
(6) (x1[0] ≥ 0 ⇒ (UIncreasing(COND_319_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])), ≥)∧[(-1)Bound*bni_21 + (2)bni_21] + [(2)bni_21]x1[0] ≥ 0∧[(-1)bso_22] ≥ 0)
For Pair
COND_319_0_TEST_LE(
TRUE,
x0,
x1) →
319_0_TEST_LE(
x0,
+(
x1,
-1)) the following chains were created:
- We consider the chain COND_319_0_TEST_LE(TRUE, x0[1], x1[1]) → 319_0_TEST_LE(x0[1], +(x1[1], -1)) which results in the following constraint:
(7) (COND_319_0_TEST_LE(TRUE, x0[1], x1[1])≥NonInfC∧COND_319_0_TEST_LE(TRUE, x0[1], x1[1])≥319_0_TEST_LE(x0[1], +(x1[1], -1))∧(UIncreasing(319_0_TEST_LE(x0[1], +(x1[1], -1))), ≥))
We simplified constraint (7) using rule (POLY_CONSTRAINTS) which results in the following new constraint:
(8) ((UIncreasing(319_0_TEST_LE(x0[1], +(x1[1], -1))), ≥)∧[2 + (-1)bso_24] ≥ 0)
We simplified constraint (8) using rule (IDP_POLY_SIMPLIFY) which results in the following new constraint:
(9) ((UIncreasing(319_0_TEST_LE(x0[1], +(x1[1], -1))), ≥)∧[2 + (-1)bso_24] ≥ 0)
We simplified constraint (9) using rule (POLY_REMOVE_MIN_MAX) which results in the following new constraint:
(10) ((UIncreasing(319_0_TEST_LE(x0[1], +(x1[1], -1))), ≥)∧[2 + (-1)bso_24] ≥ 0)
We simplified constraint (10) using rule (IDP_UNRESTRICTED_VARS) which results in the following new constraint:
(11) ((UIncreasing(319_0_TEST_LE(x0[1], +(x1[1], -1))), ≥)∧0 = 0∧[2 + (-1)bso_24] ≥ 0)
To summarize, we get the following constraints P
≥ for the following pairs.
- 319_0_TEST_LE(x0, x1) → COND_319_0_TEST_LE(>(x1, 0), x0, x1)
- (x1[0] ≥ 0 ⇒ (UIncreasing(COND_319_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])), ≥)∧[(-1)Bound*bni_21 + (2)bni_21] + [(2)bni_21]x1[0] ≥ 0∧[(-1)bso_22] ≥ 0)
- COND_319_0_TEST_LE(TRUE, x0, x1) → 319_0_TEST_LE(x0, +(x1, -1))
- ((UIncreasing(319_0_TEST_LE(x0[1], +(x1[1], -1))), ≥)∧0 = 0∧[2 + (-1)bso_24] ≥ 0)
The constraints for P
> respective P
bound 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 P
bound.
Using the following integer polynomial ordering the resulting constraints can be solved
Polynomial interpretation over integers[POLO]:
POL(TRUE) = 0
POL(FALSE) = 0
POL(319_0_test_LE(x1, x2)) = [-1]
POL(0) = 0
POL(354_0_test_LE(x1, x2)) = [-1] + [-1]x2
POL(Cond_354_0_test_LE(x1, x2, x3)) = [-1] + [-1]x3
POL(>(x1, x2)) = [-1]
POL(+(x1, x2)) = x1 + x2
POL(-1) = [-1]
POL(386_0_test_LE(x1, x2)) = [-1] + [-1]x2
POL(Cond_386_0_test_LE(x1, x2, x3)) = [-1] + [-1]x3
POL(426_0_test_LE(x1, x2)) = [-1] + [-1]x2
POL(Cond_426_0_test_LE(x1, x2, x3)) = [-1] + [-1]x3
POL(465_0_test_LE(x1)) = [-1] + [-1]x1
POL(471_0_test_Return) = [-1]
POL(Cond_465_0_test_LE(x1, x2)) = [-1] + [-1]x2
POL(319_0_TEST_LE(x1, x2)) = [2]x2
POL(COND_319_0_TEST_LE(x1, x2, x3)) = [2]x3
The following pairs are in P
>:
COND_319_0_TEST_LE(TRUE, x0[1], x1[1]) → 319_0_TEST_LE(x0[1], +(x1[1], -1))
The following pairs are in P
bound:
319_0_TEST_LE(x0[0], x1[0]) → COND_319_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])
The following pairs are in P
≥:
319_0_TEST_LE(x0[0], x1[0]) → COND_319_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])
There are no usable rules.
(43) Complex Obligation (AND)
(44) 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
The ITRS R consists of the following rules:
319_0_test_LE(
x0,
0) →
354_0_test_LE(
x0,
x0)
354_0_test_LE(
x0,
x1) →
Cond_354_0_test_LE(
x1 > 0,
x0,
x1)
Cond_354_0_test_LE(
TRUE,
x0,
x1) →
354_0_test_LE(
x0,
x1 + -1)
354_0_test_LE(
x0,
0) →
386_0_test_LE(
x0,
x0)
386_0_test_LE(
x0,
x1) →
Cond_386_0_test_LE(
x1 > 0,
x0,
x1)
Cond_386_0_test_LE(
TRUE,
x0,
x1) →
386_0_test_LE(
x0,
x1 + -1)
386_0_test_LE(
x0,
0) →
426_0_test_LE(
x0,
x0)
426_0_test_LE(
x0,
x1) →
Cond_426_0_test_LE(
x1 > 0,
x0,
x1)
Cond_426_0_test_LE(
TRUE,
x0,
x1) →
426_0_test_LE(
x0,
x1 + -1)
426_0_test_LE(
x0,
0) →
465_0_test_LE(
x0)
465_0_test_LE(
0) →
471_0_test_Return465_0_test_LE(
x0) →
Cond_465_0_test_LE(
x0 > 0,
x0)
Cond_465_0_test_LE(
TRUE,
x0) →
465_0_test_LE(
x0 + -1)
The integer pair graph contains the following rules and edges:
(0):
319_0_TEST_LE(
x0[0],
x1[0]) →
COND_319_0_TEST_LE(
x1[0] > 0,
x0[0],
x1[0])
The set Q consists of the following terms:
319_0_test_LE(
x0,
0)
354_0_test_LE(
x0,
x1)
Cond_354_0_test_LE(
TRUE,
x0,
x1)
386_0_test_LE(
x0,
x1)
Cond_386_0_test_LE(
TRUE,
x0,
x1)
426_0_test_LE(
x0,
x1)
Cond_426_0_test_LE(
TRUE,
x0,
x1)
465_0_test_LE(
x0)
Cond_465_0_test_LE(
TRUE,
x0)
(45) IDependencyGraphProof (EQUIVALENT transformation)
The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 0 SCCs with 1 less node.
(46) TRUE
(47) 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
The ITRS R consists of the following rules:
319_0_test_LE(
x0,
0) →
354_0_test_LE(
x0,
x0)
354_0_test_LE(
x0,
x1) →
Cond_354_0_test_LE(
x1 > 0,
x0,
x1)
Cond_354_0_test_LE(
TRUE,
x0,
x1) →
354_0_test_LE(
x0,
x1 + -1)
354_0_test_LE(
x0,
0) →
386_0_test_LE(
x0,
x0)
386_0_test_LE(
x0,
x1) →
Cond_386_0_test_LE(
x1 > 0,
x0,
x1)
Cond_386_0_test_LE(
TRUE,
x0,
x1) →
386_0_test_LE(
x0,
x1 + -1)
386_0_test_LE(
x0,
0) →
426_0_test_LE(
x0,
x0)
426_0_test_LE(
x0,
x1) →
Cond_426_0_test_LE(
x1 > 0,
x0,
x1)
Cond_426_0_test_LE(
TRUE,
x0,
x1) →
426_0_test_LE(
x0,
x1 + -1)
426_0_test_LE(
x0,
0) →
465_0_test_LE(
x0)
465_0_test_LE(
0) →
471_0_test_Return465_0_test_LE(
x0) →
Cond_465_0_test_LE(
x0 > 0,
x0)
Cond_465_0_test_LE(
TRUE,
x0) →
465_0_test_LE(
x0 + -1)
The integer pair graph contains the following rules and edges:
(1):
COND_319_0_TEST_LE(
TRUE,
x0[1],
x1[1]) →
319_0_TEST_LE(
x0[1],
x1[1] + -1)
The set Q consists of the following terms:
319_0_test_LE(
x0,
0)
354_0_test_LE(
x0,
x1)
Cond_354_0_test_LE(
TRUE,
x0,
x1)
386_0_test_LE(
x0,
x1)
Cond_386_0_test_LE(
TRUE,
x0,
x1)
426_0_test_LE(
x0,
x1)
Cond_426_0_test_LE(
TRUE,
x0,
x1)
465_0_test_LE(
x0)
Cond_465_0_test_LE(
TRUE,
x0)
(48) IDependencyGraphProof (EQUIVALENT transformation)
The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 0 SCCs with 1 less node.
(49) TRUE
(50) 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
The ITRS R consists of the following rules:
285_0_test_LE(
x0,
0) →
319_0_test_LE(
x0,
x0)
319_0_test_LE(
x0,
x1) →
Cond_319_0_test_LE(
x1 > 0,
x0,
x1)
Cond_319_0_test_LE(
TRUE,
x0,
x1) →
319_0_test_LE(
x0,
x1 + -1)
319_0_test_LE(
x0,
0) →
354_0_test_LE(
x0,
x0)
354_0_test_LE(
x0,
x1) →
Cond_354_0_test_LE(
x1 > 0,
x0,
x1)
Cond_354_0_test_LE(
TRUE,
x0,
x1) →
354_0_test_LE(
x0,
x1 + -1)
354_0_test_LE(
x0,
0) →
386_0_test_LE(
x0,
x0)
386_0_test_LE(
x0,
x1) →
Cond_386_0_test_LE(
x1 > 0,
x0,
x1)
Cond_386_0_test_LE(
TRUE,
x0,
x1) →
386_0_test_LE(
x0,
x1 + -1)
386_0_test_LE(
x0,
0) →
426_0_test_LE(
x0,
x0)
426_0_test_LE(
x0,
x1) →
Cond_426_0_test_LE(
x1 > 0,
x0,
x1)
Cond_426_0_test_LE(
TRUE,
x0,
x1) →
426_0_test_LE(
x0,
x1 + -1)
426_0_test_LE(
x0,
0) →
465_0_test_LE(
x0)
465_0_test_LE(
0) →
471_0_test_Return465_0_test_LE(
x0) →
Cond_465_0_test_LE(
x0 > 0,
x0)
Cond_465_0_test_LE(
TRUE,
x0) →
465_0_test_LE(
x0 + -1)
The integer pair graph contains the following rules and edges:
(0):
285_0_TEST_LE(
x0[0],
x1[0]) →
COND_285_0_TEST_LE(
x1[0] > 0,
x0[0],
x1[0])
(1):
COND_285_0_TEST_LE(
TRUE,
x0[1],
x1[1]) →
285_0_TEST_LE(
x0[1],
x1[1] + -1)
(0) -> (1), if ((x1[0] > 0 →* TRUE)∧(x0[0] →* x0[1])∧(x1[0] →* x1[1]))
(1) -> (0), if ((x0[1] →* x0[0])∧(x1[1] + -1 →* x1[0]))
The set Q consists of the following terms:
285_0_test_LE(
x0,
0)
319_0_test_LE(
x0,
x1)
Cond_319_0_test_LE(
TRUE,
x0,
x1)
354_0_test_LE(
x0,
x1)
Cond_354_0_test_LE(
TRUE,
x0,
x1)
386_0_test_LE(
x0,
x1)
Cond_386_0_test_LE(
TRUE,
x0,
x1)
426_0_test_LE(
x0,
x1)
Cond_426_0_test_LE(
TRUE,
x0,
x1)
465_0_test_LE(
x0)
Cond_465_0_test_LE(
TRUE,
x0)
(51) 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
285_0_TEST_LE(
x0,
x1) →
COND_285_0_TEST_LE(
>(
x1,
0),
x0,
x1) the following chains were created:
- We consider the chain 285_0_TEST_LE(x0[0], x1[0]) → COND_285_0_TEST_LE(>(x1[0], 0), x0[0], x1[0]), COND_285_0_TEST_LE(TRUE, x0[1], x1[1]) → 285_0_TEST_LE(x0[1], +(x1[1], -1)) which results in the following constraint:
(1) (>(x1[0], 0)=TRUE∧x0[0]=x0[1]∧x1[0]=x1[1] ⇒ 285_0_TEST_LE(x0[0], x1[0])≥NonInfC∧285_0_TEST_LE(x0[0], x1[0])≥COND_285_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])∧(UIncreasing(COND_285_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])), ≥))
We simplified constraint (1) using rule (IV) which results in the following new constraint:
(2) (>(x1[0], 0)=TRUE ⇒ 285_0_TEST_LE(x0[0], x1[0])≥NonInfC∧285_0_TEST_LE(x0[0], x1[0])≥COND_285_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])∧(UIncreasing(COND_285_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])), ≥))
We simplified constraint (2) using rule (POLY_CONSTRAINTS) which results in the following new constraint:
(3) (x1[0] + [-1] ≥ 0 ⇒ (UIncreasing(COND_285_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])), ≥)∧[(-1)Bound*bni_22] + [(2)bni_22]x1[0] ≥ 0∧[(-1)bso_23] ≥ 0)
We simplified constraint (3) using rule (IDP_POLY_SIMPLIFY) which results in the following new constraint:
(4) (x1[0] + [-1] ≥ 0 ⇒ (UIncreasing(COND_285_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])), ≥)∧[(-1)Bound*bni_22] + [(2)bni_22]x1[0] ≥ 0∧[(-1)bso_23] ≥ 0)
We simplified constraint (4) using rule (POLY_REMOVE_MIN_MAX) which results in the following new constraint:
(5) (x1[0] + [-1] ≥ 0 ⇒ (UIncreasing(COND_285_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])), ≥)∧[(-1)Bound*bni_22] + [(2)bni_22]x1[0] ≥ 0∧[(-1)bso_23] ≥ 0)
We simplified constraint (5) using rule (IDP_SMT_SPLIT) which results in the following new constraint:
(6) (x1[0] ≥ 0 ⇒ (UIncreasing(COND_285_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])), ≥)∧[(-1)Bound*bni_22 + (2)bni_22] + [(2)bni_22]x1[0] ≥ 0∧[(-1)bso_23] ≥ 0)
For Pair
COND_285_0_TEST_LE(
TRUE,
x0,
x1) →
285_0_TEST_LE(
x0,
+(
x1,
-1)) the following chains were created:
- We consider the chain COND_285_0_TEST_LE(TRUE, x0[1], x1[1]) → 285_0_TEST_LE(x0[1], +(x1[1], -1)) which results in the following constraint:
(7) (COND_285_0_TEST_LE(TRUE, x0[1], x1[1])≥NonInfC∧COND_285_0_TEST_LE(TRUE, x0[1], x1[1])≥285_0_TEST_LE(x0[1], +(x1[1], -1))∧(UIncreasing(285_0_TEST_LE(x0[1], +(x1[1], -1))), ≥))
We simplified constraint (7) using rule (POLY_CONSTRAINTS) which results in the following new constraint:
(8) ((UIncreasing(285_0_TEST_LE(x0[1], +(x1[1], -1))), ≥)∧[2 + (-1)bso_25] ≥ 0)
We simplified constraint (8) using rule (IDP_POLY_SIMPLIFY) which results in the following new constraint:
(9) ((UIncreasing(285_0_TEST_LE(x0[1], +(x1[1], -1))), ≥)∧[2 + (-1)bso_25] ≥ 0)
We simplified constraint (9) using rule (POLY_REMOVE_MIN_MAX) which results in the following new constraint:
(10) ((UIncreasing(285_0_TEST_LE(x0[1], +(x1[1], -1))), ≥)∧[2 + (-1)bso_25] ≥ 0)
We simplified constraint (10) using rule (IDP_UNRESTRICTED_VARS) which results in the following new constraint:
(11) ((UIncreasing(285_0_TEST_LE(x0[1], +(x1[1], -1))), ≥)∧0 = 0∧[2 + (-1)bso_25] ≥ 0)
To summarize, we get the following constraints P
≥ for the following pairs.
- 285_0_TEST_LE(x0, x1) → COND_285_0_TEST_LE(>(x1, 0), x0, x1)
- (x1[0] ≥ 0 ⇒ (UIncreasing(COND_285_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])), ≥)∧[(-1)Bound*bni_22 + (2)bni_22] + [(2)bni_22]x1[0] ≥ 0∧[(-1)bso_23] ≥ 0)
- COND_285_0_TEST_LE(TRUE, x0, x1) → 285_0_TEST_LE(x0, +(x1, -1))
- ((UIncreasing(285_0_TEST_LE(x0[1], +(x1[1], -1))), ≥)∧0 = 0∧[2 + (-1)bso_25] ≥ 0)
The constraints for P
> respective P
bound 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 P
bound.
Using the following integer polynomial ordering the resulting constraints can be solved
Polynomial interpretation over integers[POLO]:
POL(TRUE) = 0
POL(FALSE) = 0
POL(285_0_test_LE(x1, x2)) = [-1]
POL(0) = 0
POL(319_0_test_LE(x1, x2)) = [-1] + [-1]x2
POL(Cond_319_0_test_LE(x1, x2, x3)) = [-1] + [-1]x3
POL(>(x1, x2)) = [-1]
POL(+(x1, x2)) = x1 + x2
POL(-1) = [-1]
POL(354_0_test_LE(x1, x2)) = [-1] + [-1]x2
POL(Cond_354_0_test_LE(x1, x2, x3)) = [-1] + [-1]x3
POL(386_0_test_LE(x1, x2)) = [-1] + [-1]x2
POL(Cond_386_0_test_LE(x1, x2, x3)) = [-1] + [-1]x3
POL(426_0_test_LE(x1, x2)) = [-1] + [-1]x2
POL(Cond_426_0_test_LE(x1, x2, x3)) = [-1] + [-1]x3
POL(465_0_test_LE(x1)) = [-1] + [-1]x1
POL(471_0_test_Return) = [-1]
POL(Cond_465_0_test_LE(x1, x2)) = [-1] + [-1]x2
POL(285_0_TEST_LE(x1, x2)) = [2]x2
POL(COND_285_0_TEST_LE(x1, x2, x3)) = [2]x3
The following pairs are in P
>:
COND_285_0_TEST_LE(TRUE, x0[1], x1[1]) → 285_0_TEST_LE(x0[1], +(x1[1], -1))
The following pairs are in P
bound:
285_0_TEST_LE(x0[0], x1[0]) → COND_285_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])
The following pairs are in P
≥:
285_0_TEST_LE(x0[0], x1[0]) → COND_285_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])
There are no usable rules.
(52) Complex Obligation (AND)
(53) 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
The ITRS R consists of the following rules:
285_0_test_LE(
x0,
0) →
319_0_test_LE(
x0,
x0)
319_0_test_LE(
x0,
x1) →
Cond_319_0_test_LE(
x1 > 0,
x0,
x1)
Cond_319_0_test_LE(
TRUE,
x0,
x1) →
319_0_test_LE(
x0,
x1 + -1)
319_0_test_LE(
x0,
0) →
354_0_test_LE(
x0,
x0)
354_0_test_LE(
x0,
x1) →
Cond_354_0_test_LE(
x1 > 0,
x0,
x1)
Cond_354_0_test_LE(
TRUE,
x0,
x1) →
354_0_test_LE(
x0,
x1 + -1)
354_0_test_LE(
x0,
0) →
386_0_test_LE(
x0,
x0)
386_0_test_LE(
x0,
x1) →
Cond_386_0_test_LE(
x1 > 0,
x0,
x1)
Cond_386_0_test_LE(
TRUE,
x0,
x1) →
386_0_test_LE(
x0,
x1 + -1)
386_0_test_LE(
x0,
0) →
426_0_test_LE(
x0,
x0)
426_0_test_LE(
x0,
x1) →
Cond_426_0_test_LE(
x1 > 0,
x0,
x1)
Cond_426_0_test_LE(
TRUE,
x0,
x1) →
426_0_test_LE(
x0,
x1 + -1)
426_0_test_LE(
x0,
0) →
465_0_test_LE(
x0)
465_0_test_LE(
0) →
471_0_test_Return465_0_test_LE(
x0) →
Cond_465_0_test_LE(
x0 > 0,
x0)
Cond_465_0_test_LE(
TRUE,
x0) →
465_0_test_LE(
x0 + -1)
The integer pair graph contains the following rules and edges:
(0):
285_0_TEST_LE(
x0[0],
x1[0]) →
COND_285_0_TEST_LE(
x1[0] > 0,
x0[0],
x1[0])
The set Q consists of the following terms:
285_0_test_LE(
x0,
0)
319_0_test_LE(
x0,
x1)
Cond_319_0_test_LE(
TRUE,
x0,
x1)
354_0_test_LE(
x0,
x1)
Cond_354_0_test_LE(
TRUE,
x0,
x1)
386_0_test_LE(
x0,
x1)
Cond_386_0_test_LE(
TRUE,
x0,
x1)
426_0_test_LE(
x0,
x1)
Cond_426_0_test_LE(
TRUE,
x0,
x1)
465_0_test_LE(
x0)
Cond_465_0_test_LE(
TRUE,
x0)
(54) IDependencyGraphProof (EQUIVALENT transformation)
The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 0 SCCs with 1 less node.
(55) TRUE
(56) 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
The ITRS R consists of the following rules:
285_0_test_LE(
x0,
0) →
319_0_test_LE(
x0,
x0)
319_0_test_LE(
x0,
x1) →
Cond_319_0_test_LE(
x1 > 0,
x0,
x1)
Cond_319_0_test_LE(
TRUE,
x0,
x1) →
319_0_test_LE(
x0,
x1 + -1)
319_0_test_LE(
x0,
0) →
354_0_test_LE(
x0,
x0)
354_0_test_LE(
x0,
x1) →
Cond_354_0_test_LE(
x1 > 0,
x0,
x1)
Cond_354_0_test_LE(
TRUE,
x0,
x1) →
354_0_test_LE(
x0,
x1 + -1)
354_0_test_LE(
x0,
0) →
386_0_test_LE(
x0,
x0)
386_0_test_LE(
x0,
x1) →
Cond_386_0_test_LE(
x1 > 0,
x0,
x1)
Cond_386_0_test_LE(
TRUE,
x0,
x1) →
386_0_test_LE(
x0,
x1 + -1)
386_0_test_LE(
x0,
0) →
426_0_test_LE(
x0,
x0)
426_0_test_LE(
x0,
x1) →
Cond_426_0_test_LE(
x1 > 0,
x0,
x1)
Cond_426_0_test_LE(
TRUE,
x0,
x1) →
426_0_test_LE(
x0,
x1 + -1)
426_0_test_LE(
x0,
0) →
465_0_test_LE(
x0)
465_0_test_LE(
0) →
471_0_test_Return465_0_test_LE(
x0) →
Cond_465_0_test_LE(
x0 > 0,
x0)
Cond_465_0_test_LE(
TRUE,
x0) →
465_0_test_LE(
x0 + -1)
The integer pair graph contains the following rules and edges:
(1):
COND_285_0_TEST_LE(
TRUE,
x0[1],
x1[1]) →
285_0_TEST_LE(
x0[1],
x1[1] + -1)
The set Q consists of the following terms:
285_0_test_LE(
x0,
0)
319_0_test_LE(
x0,
x1)
Cond_319_0_test_LE(
TRUE,
x0,
x1)
354_0_test_LE(
x0,
x1)
Cond_354_0_test_LE(
TRUE,
x0,
x1)
386_0_test_LE(
x0,
x1)
Cond_386_0_test_LE(
TRUE,
x0,
x1)
426_0_test_LE(
x0,
x1)
Cond_426_0_test_LE(
TRUE,
x0,
x1)
465_0_test_LE(
x0)
Cond_465_0_test_LE(
TRUE,
x0)
(57) IDependencyGraphProof (EQUIVALENT transformation)
The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 0 SCCs with 1 less node.
(58) TRUE
(59) 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
The ITRS R consists of the following rules:
248_0_test_LE(
x0,
0) →
285_0_test_LE(
x0,
x0)
285_0_test_LE(
x0,
x1) →
Cond_285_0_test_LE(
x1 > 0,
x0,
x1)
Cond_285_0_test_LE(
TRUE,
x0,
x1) →
285_0_test_LE(
x0,
x1 + -1)
285_0_test_LE(
x0,
0) →
319_0_test_LE(
x0,
x0)
319_0_test_LE(
x0,
x1) →
Cond_319_0_test_LE(
x1 > 0,
x0,
x1)
Cond_319_0_test_LE(
TRUE,
x0,
x1) →
319_0_test_LE(
x0,
x1 + -1)
319_0_test_LE(
x0,
0) →
354_0_test_LE(
x0,
x0)
354_0_test_LE(
x0,
x1) →
Cond_354_0_test_LE(
x1 > 0,
x0,
x1)
Cond_354_0_test_LE(
TRUE,
x0,
x1) →
354_0_test_LE(
x0,
x1 + -1)
354_0_test_LE(
x0,
0) →
386_0_test_LE(
x0,
x0)
386_0_test_LE(
x0,
x1) →
Cond_386_0_test_LE(
x1 > 0,
x0,
x1)
Cond_386_0_test_LE(
TRUE,
x0,
x1) →
386_0_test_LE(
x0,
x1 + -1)
386_0_test_LE(
x0,
0) →
426_0_test_LE(
x0,
x0)
426_0_test_LE(
x0,
x1) →
Cond_426_0_test_LE(
x1 > 0,
x0,
x1)
Cond_426_0_test_LE(
TRUE,
x0,
x1) →
426_0_test_LE(
x0,
x1 + -1)
426_0_test_LE(
x0,
0) →
465_0_test_LE(
x0)
465_0_test_LE(
0) →
471_0_test_Return465_0_test_LE(
x0) →
Cond_465_0_test_LE(
x0 > 0,
x0)
Cond_465_0_test_LE(
TRUE,
x0) →
465_0_test_LE(
x0 + -1)
The integer pair graph contains the following rules and edges:
(0):
248_0_TEST_LE(
x0[0],
x1[0]) →
COND_248_0_TEST_LE(
x1[0] > 0,
x0[0],
x1[0])
(1):
COND_248_0_TEST_LE(
TRUE,
x0[1],
x1[1]) →
248_0_TEST_LE(
x0[1],
x1[1] + -1)
(0) -> (1), if ((x1[0] > 0 →* TRUE)∧(x0[0] →* x0[1])∧(x1[0] →* x1[1]))
(1) -> (0), if ((x0[1] →* x0[0])∧(x1[1] + -1 →* x1[0]))
The set Q consists of the following terms:
248_0_test_LE(
x0,
0)
285_0_test_LE(
x0,
x1)
Cond_285_0_test_LE(
TRUE,
x0,
x1)
319_0_test_LE(
x0,
x1)
Cond_319_0_test_LE(
TRUE,
x0,
x1)
354_0_test_LE(
x0,
x1)
Cond_354_0_test_LE(
TRUE,
x0,
x1)
386_0_test_LE(
x0,
x1)
Cond_386_0_test_LE(
TRUE,
x0,
x1)
426_0_test_LE(
x0,
x1)
Cond_426_0_test_LE(
TRUE,
x0,
x1)
465_0_test_LE(
x0)
Cond_465_0_test_LE(
TRUE,
x0)
(60) 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
248_0_TEST_LE(
x0,
x1) →
COND_248_0_TEST_LE(
>(
x1,
0),
x0,
x1) the following chains were created:
- We consider the chain 248_0_TEST_LE(x0[0], x1[0]) → COND_248_0_TEST_LE(>(x1[0], 0), x0[0], x1[0]), COND_248_0_TEST_LE(TRUE, x0[1], x1[1]) → 248_0_TEST_LE(x0[1], +(x1[1], -1)) which results in the following constraint:
(1) (>(x1[0], 0)=TRUE∧x0[0]=x0[1]∧x1[0]=x1[1] ⇒ 248_0_TEST_LE(x0[0], x1[0])≥NonInfC∧248_0_TEST_LE(x0[0], x1[0])≥COND_248_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])∧(UIncreasing(COND_248_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])), ≥))
We simplified constraint (1) using rule (IV) which results in the following new constraint:
(2) (>(x1[0], 0)=TRUE ⇒ 248_0_TEST_LE(x0[0], x1[0])≥NonInfC∧248_0_TEST_LE(x0[0], x1[0])≥COND_248_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])∧(UIncreasing(COND_248_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])), ≥))
We simplified constraint (2) using rule (POLY_CONSTRAINTS) which results in the following new constraint:
(3) (x1[0] + [-1] ≥ 0 ⇒ (UIncreasing(COND_248_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])), ≥)∧[(-1)Bound*bni_23] + [(2)bni_23]x1[0] ≥ 0∧[(-1)bso_24] ≥ 0)
We simplified constraint (3) using rule (IDP_POLY_SIMPLIFY) which results in the following new constraint:
(4) (x1[0] + [-1] ≥ 0 ⇒ (UIncreasing(COND_248_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])), ≥)∧[(-1)Bound*bni_23] + [(2)bni_23]x1[0] ≥ 0∧[(-1)bso_24] ≥ 0)
We simplified constraint (4) using rule (POLY_REMOVE_MIN_MAX) which results in the following new constraint:
(5) (x1[0] + [-1] ≥ 0 ⇒ (UIncreasing(COND_248_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])), ≥)∧[(-1)Bound*bni_23] + [(2)bni_23]x1[0] ≥ 0∧[(-1)bso_24] ≥ 0)
We simplified constraint (5) using rule (IDP_SMT_SPLIT) which results in the following new constraint:
(6) (x1[0] ≥ 0 ⇒ (UIncreasing(COND_248_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])), ≥)∧[(-1)Bound*bni_23 + (2)bni_23] + [(2)bni_23]x1[0] ≥ 0∧[(-1)bso_24] ≥ 0)
For Pair
COND_248_0_TEST_LE(
TRUE,
x0,
x1) →
248_0_TEST_LE(
x0,
+(
x1,
-1)) the following chains were created:
- We consider the chain COND_248_0_TEST_LE(TRUE, x0[1], x1[1]) → 248_0_TEST_LE(x0[1], +(x1[1], -1)) which results in the following constraint:
(7) (COND_248_0_TEST_LE(TRUE, x0[1], x1[1])≥NonInfC∧COND_248_0_TEST_LE(TRUE, x0[1], x1[1])≥248_0_TEST_LE(x0[1], +(x1[1], -1))∧(UIncreasing(248_0_TEST_LE(x0[1], +(x1[1], -1))), ≥))
We simplified constraint (7) using rule (POLY_CONSTRAINTS) which results in the following new constraint:
(8) ((UIncreasing(248_0_TEST_LE(x0[1], +(x1[1], -1))), ≥)∧[2 + (-1)bso_26] ≥ 0)
We simplified constraint (8) using rule (IDP_POLY_SIMPLIFY) which results in the following new constraint:
(9) ((UIncreasing(248_0_TEST_LE(x0[1], +(x1[1], -1))), ≥)∧[2 + (-1)bso_26] ≥ 0)
We simplified constraint (9) using rule (POLY_REMOVE_MIN_MAX) which results in the following new constraint:
(10) ((UIncreasing(248_0_TEST_LE(x0[1], +(x1[1], -1))), ≥)∧[2 + (-1)bso_26] ≥ 0)
We simplified constraint (10) using rule (IDP_UNRESTRICTED_VARS) which results in the following new constraint:
(11) ((UIncreasing(248_0_TEST_LE(x0[1], +(x1[1], -1))), ≥)∧0 = 0∧[2 + (-1)bso_26] ≥ 0)
To summarize, we get the following constraints P
≥ for the following pairs.
- 248_0_TEST_LE(x0, x1) → COND_248_0_TEST_LE(>(x1, 0), x0, x1)
- (x1[0] ≥ 0 ⇒ (UIncreasing(COND_248_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])), ≥)∧[(-1)Bound*bni_23 + (2)bni_23] + [(2)bni_23]x1[0] ≥ 0∧[(-1)bso_24] ≥ 0)
- COND_248_0_TEST_LE(TRUE, x0, x1) → 248_0_TEST_LE(x0, +(x1, -1))
- ((UIncreasing(248_0_TEST_LE(x0[1], +(x1[1], -1))), ≥)∧0 = 0∧[2 + (-1)bso_26] ≥ 0)
The constraints for P
> respective P
bound 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 P
bound.
Using the following integer polynomial ordering the resulting constraints can be solved
Polynomial interpretation over integers[POLO]:
POL(TRUE) = 0
POL(FALSE) = 0
POL(248_0_test_LE(x1, x2)) = [-1]
POL(0) = 0
POL(285_0_test_LE(x1, x2)) = [-1] + [-1]x2
POL(Cond_285_0_test_LE(x1, x2, x3)) = [-1] + [-1]x3
POL(>(x1, x2)) = [-1]
POL(+(x1, x2)) = x1 + x2
POL(-1) = [-1]
POL(319_0_test_LE(x1, x2)) = [-1] + [-1]x2
POL(Cond_319_0_test_LE(x1, x2, x3)) = [-1] + [-1]x3
POL(354_0_test_LE(x1, x2)) = [-1] + [-1]x2
POL(Cond_354_0_test_LE(x1, x2, x3)) = [-1] + [-1]x3
POL(386_0_test_LE(x1, x2)) = [-1] + [-1]x2
POL(Cond_386_0_test_LE(x1, x2, x3)) = [-1] + [-1]x3
POL(426_0_test_LE(x1, x2)) = [-1] + [-1]x2
POL(Cond_426_0_test_LE(x1, x2, x3)) = [-1] + [-1]x3
POL(465_0_test_LE(x1)) = [-1] + [-1]x1
POL(471_0_test_Return) = [-1]
POL(Cond_465_0_test_LE(x1, x2)) = [-1] + [-1]x2
POL(248_0_TEST_LE(x1, x2)) = [2]x2
POL(COND_248_0_TEST_LE(x1, x2, x3)) = [2]x3
The following pairs are in P
>:
COND_248_0_TEST_LE(TRUE, x0[1], x1[1]) → 248_0_TEST_LE(x0[1], +(x1[1], -1))
The following pairs are in P
bound:
248_0_TEST_LE(x0[0], x1[0]) → COND_248_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])
The following pairs are in P
≥:
248_0_TEST_LE(x0[0], x1[0]) → COND_248_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])
There are no usable rules.
(61) Complex Obligation (AND)
(62) 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
The ITRS R consists of the following rules:
248_0_test_LE(
x0,
0) →
285_0_test_LE(
x0,
x0)
285_0_test_LE(
x0,
x1) →
Cond_285_0_test_LE(
x1 > 0,
x0,
x1)
Cond_285_0_test_LE(
TRUE,
x0,
x1) →
285_0_test_LE(
x0,
x1 + -1)
285_0_test_LE(
x0,
0) →
319_0_test_LE(
x0,
x0)
319_0_test_LE(
x0,
x1) →
Cond_319_0_test_LE(
x1 > 0,
x0,
x1)
Cond_319_0_test_LE(
TRUE,
x0,
x1) →
319_0_test_LE(
x0,
x1 + -1)
319_0_test_LE(
x0,
0) →
354_0_test_LE(
x0,
x0)
354_0_test_LE(
x0,
x1) →
Cond_354_0_test_LE(
x1 > 0,
x0,
x1)
Cond_354_0_test_LE(
TRUE,
x0,
x1) →
354_0_test_LE(
x0,
x1 + -1)
354_0_test_LE(
x0,
0) →
386_0_test_LE(
x0,
x0)
386_0_test_LE(
x0,
x1) →
Cond_386_0_test_LE(
x1 > 0,
x0,
x1)
Cond_386_0_test_LE(
TRUE,
x0,
x1) →
386_0_test_LE(
x0,
x1 + -1)
386_0_test_LE(
x0,
0) →
426_0_test_LE(
x0,
x0)
426_0_test_LE(
x0,
x1) →
Cond_426_0_test_LE(
x1 > 0,
x0,
x1)
Cond_426_0_test_LE(
TRUE,
x0,
x1) →
426_0_test_LE(
x0,
x1 + -1)
426_0_test_LE(
x0,
0) →
465_0_test_LE(
x0)
465_0_test_LE(
0) →
471_0_test_Return465_0_test_LE(
x0) →
Cond_465_0_test_LE(
x0 > 0,
x0)
Cond_465_0_test_LE(
TRUE,
x0) →
465_0_test_LE(
x0 + -1)
The integer pair graph contains the following rules and edges:
(0):
248_0_TEST_LE(
x0[0],
x1[0]) →
COND_248_0_TEST_LE(
x1[0] > 0,
x0[0],
x1[0])
The set Q consists of the following terms:
248_0_test_LE(
x0,
0)
285_0_test_LE(
x0,
x1)
Cond_285_0_test_LE(
TRUE,
x0,
x1)
319_0_test_LE(
x0,
x1)
Cond_319_0_test_LE(
TRUE,
x0,
x1)
354_0_test_LE(
x0,
x1)
Cond_354_0_test_LE(
TRUE,
x0,
x1)
386_0_test_LE(
x0,
x1)
Cond_386_0_test_LE(
TRUE,
x0,
x1)
426_0_test_LE(
x0,
x1)
Cond_426_0_test_LE(
TRUE,
x0,
x1)
465_0_test_LE(
x0)
Cond_465_0_test_LE(
TRUE,
x0)
(63) IDependencyGraphProof (EQUIVALENT transformation)
The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 0 SCCs with 1 less node.
(64) TRUE
(65) 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
The ITRS R consists of the following rules:
248_0_test_LE(
x0,
0) →
285_0_test_LE(
x0,
x0)
285_0_test_LE(
x0,
x1) →
Cond_285_0_test_LE(
x1 > 0,
x0,
x1)
Cond_285_0_test_LE(
TRUE,
x0,
x1) →
285_0_test_LE(
x0,
x1 + -1)
285_0_test_LE(
x0,
0) →
319_0_test_LE(
x0,
x0)
319_0_test_LE(
x0,
x1) →
Cond_319_0_test_LE(
x1 > 0,
x0,
x1)
Cond_319_0_test_LE(
TRUE,
x0,
x1) →
319_0_test_LE(
x0,
x1 + -1)
319_0_test_LE(
x0,
0) →
354_0_test_LE(
x0,
x0)
354_0_test_LE(
x0,
x1) →
Cond_354_0_test_LE(
x1 > 0,
x0,
x1)
Cond_354_0_test_LE(
TRUE,
x0,
x1) →
354_0_test_LE(
x0,
x1 + -1)
354_0_test_LE(
x0,
0) →
386_0_test_LE(
x0,
x0)
386_0_test_LE(
x0,
x1) →
Cond_386_0_test_LE(
x1 > 0,
x0,
x1)
Cond_386_0_test_LE(
TRUE,
x0,
x1) →
386_0_test_LE(
x0,
x1 + -1)
386_0_test_LE(
x0,
0) →
426_0_test_LE(
x0,
x0)
426_0_test_LE(
x0,
x1) →
Cond_426_0_test_LE(
x1 > 0,
x0,
x1)
Cond_426_0_test_LE(
TRUE,
x0,
x1) →
426_0_test_LE(
x0,
x1 + -1)
426_0_test_LE(
x0,
0) →
465_0_test_LE(
x0)
465_0_test_LE(
0) →
471_0_test_Return465_0_test_LE(
x0) →
Cond_465_0_test_LE(
x0 > 0,
x0)
Cond_465_0_test_LE(
TRUE,
x0) →
465_0_test_LE(
x0 + -1)
The integer pair graph contains the following rules and edges:
(1):
COND_248_0_TEST_LE(
TRUE,
x0[1],
x1[1]) →
248_0_TEST_LE(
x0[1],
x1[1] + -1)
The set Q consists of the following terms:
248_0_test_LE(
x0,
0)
285_0_test_LE(
x0,
x1)
Cond_285_0_test_LE(
TRUE,
x0,
x1)
319_0_test_LE(
x0,
x1)
Cond_319_0_test_LE(
TRUE,
x0,
x1)
354_0_test_LE(
x0,
x1)
Cond_354_0_test_LE(
TRUE,
x0,
x1)
386_0_test_LE(
x0,
x1)
Cond_386_0_test_LE(
TRUE,
x0,
x1)
426_0_test_LE(
x0,
x1)
Cond_426_0_test_LE(
TRUE,
x0,
x1)
465_0_test_LE(
x0)
Cond_465_0_test_LE(
TRUE,
x0)
(66) IDependencyGraphProof (EQUIVALENT transformation)
The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 0 SCCs with 1 less node.
(67) TRUE
(68) 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
The ITRS R consists of the following rules:
221_0_test_LE(
x0,
0) →
248_0_test_LE(
x0,
x0)
248_0_test_LE(
x0,
x1) →
Cond_248_0_test_LE(
x1 > 0,
x0,
x1)
Cond_248_0_test_LE(
TRUE,
x0,
x1) →
248_0_test_LE(
x0,
x1 + -1)
248_0_test_LE(
x0,
0) →
285_0_test_LE(
x0,
x0)
285_0_test_LE(
x0,
x1) →
Cond_285_0_test_LE(
x1 > 0,
x0,
x1)
Cond_285_0_test_LE(
TRUE,
x0,
x1) →
285_0_test_LE(
x0,
x1 + -1)
285_0_test_LE(
x0,
0) →
319_0_test_LE(
x0,
x0)
319_0_test_LE(
x0,
x1) →
Cond_319_0_test_LE(
x1 > 0,
x0,
x1)
Cond_319_0_test_LE(
TRUE,
x0,
x1) →
319_0_test_LE(
x0,
x1 + -1)
319_0_test_LE(
x0,
0) →
354_0_test_LE(
x0,
x0)
354_0_test_LE(
x0,
x1) →
Cond_354_0_test_LE(
x1 > 0,
x0,
x1)
Cond_354_0_test_LE(
TRUE,
x0,
x1) →
354_0_test_LE(
x0,
x1 + -1)
354_0_test_LE(
x0,
0) →
386_0_test_LE(
x0,
x0)
386_0_test_LE(
x0,
x1) →
Cond_386_0_test_LE(
x1 > 0,
x0,
x1)
Cond_386_0_test_LE(
TRUE,
x0,
x1) →
386_0_test_LE(
x0,
x1 + -1)
386_0_test_LE(
x0,
0) →
426_0_test_LE(
x0,
x0)
426_0_test_LE(
x0,
x1) →
Cond_426_0_test_LE(
x1 > 0,
x0,
x1)
Cond_426_0_test_LE(
TRUE,
x0,
x1) →
426_0_test_LE(
x0,
x1 + -1)
426_0_test_LE(
x0,
0) →
465_0_test_LE(
x0)
465_0_test_LE(
0) →
471_0_test_Return465_0_test_LE(
x0) →
Cond_465_0_test_LE(
x0 > 0,
x0)
Cond_465_0_test_LE(
TRUE,
x0) →
465_0_test_LE(
x0 + -1)
The integer pair graph contains the following rules and edges:
(0):
221_0_TEST_LE(
x0[0],
x1[0]) →
COND_221_0_TEST_LE(
x1[0] > 0,
x0[0],
x1[0])
(1):
COND_221_0_TEST_LE(
TRUE,
x0[1],
x1[1]) →
221_0_TEST_LE(
x0[1],
x1[1] + -1)
(0) -> (1), if ((x1[0] > 0 →* TRUE)∧(x0[0] →* x0[1])∧(x1[0] →* x1[1]))
(1) -> (0), if ((x0[1] →* x0[0])∧(x1[1] + -1 →* x1[0]))
The set Q consists of the following terms:
221_0_test_LE(
x0,
0)
248_0_test_LE(
x0,
x1)
Cond_248_0_test_LE(
TRUE,
x0,
x1)
285_0_test_LE(
x0,
x1)
Cond_285_0_test_LE(
TRUE,
x0,
x1)
319_0_test_LE(
x0,
x1)
Cond_319_0_test_LE(
TRUE,
x0,
x1)
354_0_test_LE(
x0,
x1)
Cond_354_0_test_LE(
TRUE,
x0,
x1)
386_0_test_LE(
x0,
x1)
Cond_386_0_test_LE(
TRUE,
x0,
x1)
426_0_test_LE(
x0,
x1)
Cond_426_0_test_LE(
TRUE,
x0,
x1)
465_0_test_LE(
x0)
Cond_465_0_test_LE(
TRUE,
x0)
(69) 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
221_0_TEST_LE(
x0,
x1) →
COND_221_0_TEST_LE(
>(
x1,
0),
x0,
x1) the following chains were created:
- We consider the chain 221_0_TEST_LE(x0[0], x1[0]) → COND_221_0_TEST_LE(>(x1[0], 0), x0[0], x1[0]), COND_221_0_TEST_LE(TRUE, x0[1], x1[1]) → 221_0_TEST_LE(x0[1], +(x1[1], -1)) which results in the following constraint:
(1) (>(x1[0], 0)=TRUE∧x0[0]=x0[1]∧x1[0]=x1[1] ⇒ 221_0_TEST_LE(x0[0], x1[0])≥NonInfC∧221_0_TEST_LE(x0[0], x1[0])≥COND_221_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])∧(UIncreasing(COND_221_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])), ≥))
We simplified constraint (1) using rule (IV) which results in the following new constraint:
(2) (>(x1[0], 0)=TRUE ⇒ 221_0_TEST_LE(x0[0], x1[0])≥NonInfC∧221_0_TEST_LE(x0[0], x1[0])≥COND_221_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])∧(UIncreasing(COND_221_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])), ≥))
We simplified constraint (2) using rule (POLY_CONSTRAINTS) which results in the following new constraint:
(3) (x1[0] + [-1] ≥ 0 ⇒ (UIncreasing(COND_221_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])), ≥)∧[(-1)Bound*bni_27] + [(2)bni_27]x1[0] ≥ 0∧[(-1)bso_28] ≥ 0)
We simplified constraint (3) using rule (IDP_POLY_SIMPLIFY) which results in the following new constraint:
(4) (x1[0] + [-1] ≥ 0 ⇒ (UIncreasing(COND_221_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])), ≥)∧[(-1)Bound*bni_27] + [(2)bni_27]x1[0] ≥ 0∧[(-1)bso_28] ≥ 0)
We simplified constraint (4) using rule (POLY_REMOVE_MIN_MAX) which results in the following new constraint:
(5) (x1[0] + [-1] ≥ 0 ⇒ (UIncreasing(COND_221_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])), ≥)∧[(-1)Bound*bni_27] + [(2)bni_27]x1[0] ≥ 0∧[(-1)bso_28] ≥ 0)
We simplified constraint (5) using rule (IDP_SMT_SPLIT) which results in the following new constraint:
(6) (x1[0] ≥ 0 ⇒ (UIncreasing(COND_221_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])), ≥)∧[(-1)Bound*bni_27 + (2)bni_27] + [(2)bni_27]x1[0] ≥ 0∧[(-1)bso_28] ≥ 0)
For Pair
COND_221_0_TEST_LE(
TRUE,
x0,
x1) →
221_0_TEST_LE(
x0,
+(
x1,
-1)) the following chains were created:
- We consider the chain COND_221_0_TEST_LE(TRUE, x0[1], x1[1]) → 221_0_TEST_LE(x0[1], +(x1[1], -1)) which results in the following constraint:
(7) (COND_221_0_TEST_LE(TRUE, x0[1], x1[1])≥NonInfC∧COND_221_0_TEST_LE(TRUE, x0[1], x1[1])≥221_0_TEST_LE(x0[1], +(x1[1], -1))∧(UIncreasing(221_0_TEST_LE(x0[1], +(x1[1], -1))), ≥))
We simplified constraint (7) using rule (POLY_CONSTRAINTS) which results in the following new constraint:
(8) ((UIncreasing(221_0_TEST_LE(x0[1], +(x1[1], -1))), ≥)∧[2 + (-1)bso_30] ≥ 0)
We simplified constraint (8) using rule (IDP_POLY_SIMPLIFY) which results in the following new constraint:
(9) ((UIncreasing(221_0_TEST_LE(x0[1], +(x1[1], -1))), ≥)∧[2 + (-1)bso_30] ≥ 0)
We simplified constraint (9) using rule (POLY_REMOVE_MIN_MAX) which results in the following new constraint:
(10) ((UIncreasing(221_0_TEST_LE(x0[1], +(x1[1], -1))), ≥)∧[2 + (-1)bso_30] ≥ 0)
We simplified constraint (10) using rule (IDP_UNRESTRICTED_VARS) which results in the following new constraint:
(11) ((UIncreasing(221_0_TEST_LE(x0[1], +(x1[1], -1))), ≥)∧0 = 0∧[2 + (-1)bso_30] ≥ 0)
To summarize, we get the following constraints P
≥ for the following pairs.
- 221_0_TEST_LE(x0, x1) → COND_221_0_TEST_LE(>(x1, 0), x0, x1)
- (x1[0] ≥ 0 ⇒ (UIncreasing(COND_221_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])), ≥)∧[(-1)Bound*bni_27 + (2)bni_27] + [(2)bni_27]x1[0] ≥ 0∧[(-1)bso_28] ≥ 0)
- COND_221_0_TEST_LE(TRUE, x0, x1) → 221_0_TEST_LE(x0, +(x1, -1))
- ((UIncreasing(221_0_TEST_LE(x0[1], +(x1[1], -1))), ≥)∧0 = 0∧[2 + (-1)bso_30] ≥ 0)
The constraints for P
> respective P
bound 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 P
bound.
Using the following integer polynomial ordering the resulting constraints can be solved
Polynomial interpretation over integers[POLO]:
POL(TRUE) = 0
POL(FALSE) = 0
POL(221_0_test_LE(x1, x2)) = [-1]
POL(0) = 0
POL(248_0_test_LE(x1, x2)) = [-1] + [-1]x2
POL(Cond_248_0_test_LE(x1, x2, x3)) = [-1] + [-1]x3
POL(>(x1, x2)) = [-1]
POL(+(x1, x2)) = x1 + x2
POL(-1) = [-1]
POL(285_0_test_LE(x1, x2)) = [-1] + [-1]x2
POL(Cond_285_0_test_LE(x1, x2, x3)) = [-1] + [-1]x3
POL(319_0_test_LE(x1, x2)) = [-1] + [-1]x2
POL(Cond_319_0_test_LE(x1, x2, x3)) = [-1] + [-1]x3
POL(354_0_test_LE(x1, x2)) = [-1] + [-1]x2
POL(Cond_354_0_test_LE(x1, x2, x3)) = [-1] + [-1]x3
POL(386_0_test_LE(x1, x2)) = [-1] + [-1]x2
POL(Cond_386_0_test_LE(x1, x2, x3)) = [-1] + [-1]x3
POL(426_0_test_LE(x1, x2)) = [-1] + [-1]x2
POL(Cond_426_0_test_LE(x1, x2, x3)) = [-1] + [-1]x3
POL(465_0_test_LE(x1)) = [-1] + [-1]x1
POL(471_0_test_Return) = [-1]
POL(Cond_465_0_test_LE(x1, x2)) = [-1] + [-1]x2
POL(221_0_TEST_LE(x1, x2)) = [2]x2
POL(COND_221_0_TEST_LE(x1, x2, x3)) = [2]x3
The following pairs are in P
>:
COND_221_0_TEST_LE(TRUE, x0[1], x1[1]) → 221_0_TEST_LE(x0[1], +(x1[1], -1))
The following pairs are in P
bound:
221_0_TEST_LE(x0[0], x1[0]) → COND_221_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])
The following pairs are in P
≥:
221_0_TEST_LE(x0[0], x1[0]) → COND_221_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])
There are no usable rules.
(70) Complex Obligation (AND)
(71) 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
The ITRS R consists of the following rules:
221_0_test_LE(
x0,
0) →
248_0_test_LE(
x0,
x0)
248_0_test_LE(
x0,
x1) →
Cond_248_0_test_LE(
x1 > 0,
x0,
x1)
Cond_248_0_test_LE(
TRUE,
x0,
x1) →
248_0_test_LE(
x0,
x1 + -1)
248_0_test_LE(
x0,
0) →
285_0_test_LE(
x0,
x0)
285_0_test_LE(
x0,
x1) →
Cond_285_0_test_LE(
x1 > 0,
x0,
x1)
Cond_285_0_test_LE(
TRUE,
x0,
x1) →
285_0_test_LE(
x0,
x1 + -1)
285_0_test_LE(
x0,
0) →
319_0_test_LE(
x0,
x0)
319_0_test_LE(
x0,
x1) →
Cond_319_0_test_LE(
x1 > 0,
x0,
x1)
Cond_319_0_test_LE(
TRUE,
x0,
x1) →
319_0_test_LE(
x0,
x1 + -1)
319_0_test_LE(
x0,
0) →
354_0_test_LE(
x0,
x0)
354_0_test_LE(
x0,
x1) →
Cond_354_0_test_LE(
x1 > 0,
x0,
x1)
Cond_354_0_test_LE(
TRUE,
x0,
x1) →
354_0_test_LE(
x0,
x1 + -1)
354_0_test_LE(
x0,
0) →
386_0_test_LE(
x0,
x0)
386_0_test_LE(
x0,
x1) →
Cond_386_0_test_LE(
x1 > 0,
x0,
x1)
Cond_386_0_test_LE(
TRUE,
x0,
x1) →
386_0_test_LE(
x0,
x1 + -1)
386_0_test_LE(
x0,
0) →
426_0_test_LE(
x0,
x0)
426_0_test_LE(
x0,
x1) →
Cond_426_0_test_LE(
x1 > 0,
x0,
x1)
Cond_426_0_test_LE(
TRUE,
x0,
x1) →
426_0_test_LE(
x0,
x1 + -1)
426_0_test_LE(
x0,
0) →
465_0_test_LE(
x0)
465_0_test_LE(
0) →
471_0_test_Return465_0_test_LE(
x0) →
Cond_465_0_test_LE(
x0 > 0,
x0)
Cond_465_0_test_LE(
TRUE,
x0) →
465_0_test_LE(
x0 + -1)
The integer pair graph contains the following rules and edges:
(0):
221_0_TEST_LE(
x0[0],
x1[0]) →
COND_221_0_TEST_LE(
x1[0] > 0,
x0[0],
x1[0])
The set Q consists of the following terms:
221_0_test_LE(
x0,
0)
248_0_test_LE(
x0,
x1)
Cond_248_0_test_LE(
TRUE,
x0,
x1)
285_0_test_LE(
x0,
x1)
Cond_285_0_test_LE(
TRUE,
x0,
x1)
319_0_test_LE(
x0,
x1)
Cond_319_0_test_LE(
TRUE,
x0,
x1)
354_0_test_LE(
x0,
x1)
Cond_354_0_test_LE(
TRUE,
x0,
x1)
386_0_test_LE(
x0,
x1)
Cond_386_0_test_LE(
TRUE,
x0,
x1)
426_0_test_LE(
x0,
x1)
Cond_426_0_test_LE(
TRUE,
x0,
x1)
465_0_test_LE(
x0)
Cond_465_0_test_LE(
TRUE,
x0)
(72) IDependencyGraphProof (EQUIVALENT transformation)
The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 0 SCCs with 1 less node.
(73) TRUE
(74) 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
The ITRS R consists of the following rules:
221_0_test_LE(
x0,
0) →
248_0_test_LE(
x0,
x0)
248_0_test_LE(
x0,
x1) →
Cond_248_0_test_LE(
x1 > 0,
x0,
x1)
Cond_248_0_test_LE(
TRUE,
x0,
x1) →
248_0_test_LE(
x0,
x1 + -1)
248_0_test_LE(
x0,
0) →
285_0_test_LE(
x0,
x0)
285_0_test_LE(
x0,
x1) →
Cond_285_0_test_LE(
x1 > 0,
x0,
x1)
Cond_285_0_test_LE(
TRUE,
x0,
x1) →
285_0_test_LE(
x0,
x1 + -1)
285_0_test_LE(
x0,
0) →
319_0_test_LE(
x0,
x0)
319_0_test_LE(
x0,
x1) →
Cond_319_0_test_LE(
x1 > 0,
x0,
x1)
Cond_319_0_test_LE(
TRUE,
x0,
x1) →
319_0_test_LE(
x0,
x1 + -1)
319_0_test_LE(
x0,
0) →
354_0_test_LE(
x0,
x0)
354_0_test_LE(
x0,
x1) →
Cond_354_0_test_LE(
x1 > 0,
x0,
x1)
Cond_354_0_test_LE(
TRUE,
x0,
x1) →
354_0_test_LE(
x0,
x1 + -1)
354_0_test_LE(
x0,
0) →
386_0_test_LE(
x0,
x0)
386_0_test_LE(
x0,
x1) →
Cond_386_0_test_LE(
x1 > 0,
x0,
x1)
Cond_386_0_test_LE(
TRUE,
x0,
x1) →
386_0_test_LE(
x0,
x1 + -1)
386_0_test_LE(
x0,
0) →
426_0_test_LE(
x0,
x0)
426_0_test_LE(
x0,
x1) →
Cond_426_0_test_LE(
x1 > 0,
x0,
x1)
Cond_426_0_test_LE(
TRUE,
x0,
x1) →
426_0_test_LE(
x0,
x1 + -1)
426_0_test_LE(
x0,
0) →
465_0_test_LE(
x0)
465_0_test_LE(
0) →
471_0_test_Return465_0_test_LE(
x0) →
Cond_465_0_test_LE(
x0 > 0,
x0)
Cond_465_0_test_LE(
TRUE,
x0) →
465_0_test_LE(
x0 + -1)
The integer pair graph contains the following rules and edges:
(1):
COND_221_0_TEST_LE(
TRUE,
x0[1],
x1[1]) →
221_0_TEST_LE(
x0[1],
x1[1] + -1)
The set Q consists of the following terms:
221_0_test_LE(
x0,
0)
248_0_test_LE(
x0,
x1)
Cond_248_0_test_LE(
TRUE,
x0,
x1)
285_0_test_LE(
x0,
x1)
Cond_285_0_test_LE(
TRUE,
x0,
x1)
319_0_test_LE(
x0,
x1)
Cond_319_0_test_LE(
TRUE,
x0,
x1)
354_0_test_LE(
x0,
x1)
Cond_354_0_test_LE(
TRUE,
x0,
x1)
386_0_test_LE(
x0,
x1)
Cond_386_0_test_LE(
TRUE,
x0,
x1)
426_0_test_LE(
x0,
x1)
Cond_426_0_test_LE(
TRUE,
x0,
x1)
465_0_test_LE(
x0)
Cond_465_0_test_LE(
TRUE,
x0)
(75) IDependencyGraphProof (EQUIVALENT transformation)
The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 0 SCCs with 1 less node.
(76) TRUE
(77) 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
The ITRS R consists of the following rules:
193_0_test_LE(
x0,
0) →
221_0_test_LE(
x0,
x0)
221_0_test_LE(
x0,
x1) →
Cond_221_0_test_LE(
x1 > 0,
x0,
x1)
Cond_221_0_test_LE(
TRUE,
x0,
x1) →
221_0_test_LE(
x0,
x1 + -1)
221_0_test_LE(
x0,
0) →
248_0_test_LE(
x0,
x0)
248_0_test_LE(
x0,
x1) →
Cond_248_0_test_LE(
x1 > 0,
x0,
x1)
Cond_248_0_test_LE(
TRUE,
x0,
x1) →
248_0_test_LE(
x0,
x1 + -1)
248_0_test_LE(
x0,
0) →
285_0_test_LE(
x0,
x0)
285_0_test_LE(
x0,
x1) →
Cond_285_0_test_LE(
x1 > 0,
x0,
x1)
Cond_285_0_test_LE(
TRUE,
x0,
x1) →
285_0_test_LE(
x0,
x1 + -1)
285_0_test_LE(
x0,
0) →
319_0_test_LE(
x0,
x0)
319_0_test_LE(
x0,
x1) →
Cond_319_0_test_LE(
x1 > 0,
x0,
x1)
Cond_319_0_test_LE(
TRUE,
x0,
x1) →
319_0_test_LE(
x0,
x1 + -1)
319_0_test_LE(
x0,
0) →
354_0_test_LE(
x0,
x0)
354_0_test_LE(
x0,
x1) →
Cond_354_0_test_LE(
x1 > 0,
x0,
x1)
Cond_354_0_test_LE(
TRUE,
x0,
x1) →
354_0_test_LE(
x0,
x1 + -1)
354_0_test_LE(
x0,
0) →
386_0_test_LE(
x0,
x0)
386_0_test_LE(
x0,
x1) →
Cond_386_0_test_LE(
x1 > 0,
x0,
x1)
Cond_386_0_test_LE(
TRUE,
x0,
x1) →
386_0_test_LE(
x0,
x1 + -1)
386_0_test_LE(
x0,
0) →
426_0_test_LE(
x0,
x0)
426_0_test_LE(
x0,
x1) →
Cond_426_0_test_LE(
x1 > 0,
x0,
x1)
Cond_426_0_test_LE(
TRUE,
x0,
x1) →
426_0_test_LE(
x0,
x1 + -1)
426_0_test_LE(
x0,
0) →
465_0_test_LE(
x0)
465_0_test_LE(
0) →
471_0_test_Return465_0_test_LE(
x0) →
Cond_465_0_test_LE(
x0 > 0,
x0)
Cond_465_0_test_LE(
TRUE,
x0) →
465_0_test_LE(
x0 + -1)
The integer pair graph contains the following rules and edges:
(0):
193_0_TEST_LE(
x0[0],
x1[0]) →
COND_193_0_TEST_LE(
x1[0] > 0,
x0[0],
x1[0])
(1):
COND_193_0_TEST_LE(
TRUE,
x0[1],
x1[1]) →
193_0_TEST_LE(
x0[1],
x1[1] + -1)
(0) -> (1), if ((x1[0] > 0 →* TRUE)∧(x0[0] →* x0[1])∧(x1[0] →* x1[1]))
(1) -> (0), if ((x0[1] →* x0[0])∧(x1[1] + -1 →* x1[0]))
The set Q consists of the following terms:
193_0_test_LE(
x0,
0)
221_0_test_LE(
x0,
x1)
Cond_221_0_test_LE(
TRUE,
x0,
x1)
248_0_test_LE(
x0,
x1)
Cond_248_0_test_LE(
TRUE,
x0,
x1)
285_0_test_LE(
x0,
x1)
Cond_285_0_test_LE(
TRUE,
x0,
x1)
319_0_test_LE(
x0,
x1)
Cond_319_0_test_LE(
TRUE,
x0,
x1)
354_0_test_LE(
x0,
x1)
Cond_354_0_test_LE(
TRUE,
x0,
x1)
386_0_test_LE(
x0,
x1)
Cond_386_0_test_LE(
TRUE,
x0,
x1)
426_0_test_LE(
x0,
x1)
Cond_426_0_test_LE(
TRUE,
x0,
x1)
465_0_test_LE(
x0)
Cond_465_0_test_LE(
TRUE,
x0)
(78) 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
193_0_TEST_LE(
x0,
x1) →
COND_193_0_TEST_LE(
>(
x1,
0),
x0,
x1) the following chains were created:
- We consider the chain 193_0_TEST_LE(x0[0], x1[0]) → COND_193_0_TEST_LE(>(x1[0], 0), x0[0], x1[0]), COND_193_0_TEST_LE(TRUE, x0[1], x1[1]) → 193_0_TEST_LE(x0[1], +(x1[1], -1)) which results in the following constraint:
(1) (>(x1[0], 0)=TRUE∧x0[0]=x0[1]∧x1[0]=x1[1] ⇒ 193_0_TEST_LE(x0[0], x1[0])≥NonInfC∧193_0_TEST_LE(x0[0], x1[0])≥COND_193_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])∧(UIncreasing(COND_193_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])), ≥))
We simplified constraint (1) using rule (IV) which results in the following new constraint:
(2) (>(x1[0], 0)=TRUE ⇒ 193_0_TEST_LE(x0[0], x1[0])≥NonInfC∧193_0_TEST_LE(x0[0], x1[0])≥COND_193_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])∧(UIncreasing(COND_193_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])), ≥))
We simplified constraint (2) using rule (POLY_CONSTRAINTS) which results in the following new constraint:
(3) (x1[0] + [-1] ≥ 0 ⇒ (UIncreasing(COND_193_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])), ≥)∧[(-1)Bound*bni_27] + [(2)bni_27]x1[0] ≥ 0∧[(-1)bso_28] ≥ 0)
We simplified constraint (3) using rule (IDP_POLY_SIMPLIFY) which results in the following new constraint:
(4) (x1[0] + [-1] ≥ 0 ⇒ (UIncreasing(COND_193_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])), ≥)∧[(-1)Bound*bni_27] + [(2)bni_27]x1[0] ≥ 0∧[(-1)bso_28] ≥ 0)
We simplified constraint (4) using rule (POLY_REMOVE_MIN_MAX) which results in the following new constraint:
(5) (x1[0] + [-1] ≥ 0 ⇒ (UIncreasing(COND_193_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])), ≥)∧[(-1)Bound*bni_27] + [(2)bni_27]x1[0] ≥ 0∧[(-1)bso_28] ≥ 0)
We simplified constraint (5) using rule (IDP_SMT_SPLIT) which results in the following new constraint:
(6) (x1[0] ≥ 0 ⇒ (UIncreasing(COND_193_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])), ≥)∧[(-1)Bound*bni_27 + (2)bni_27] + [(2)bni_27]x1[0] ≥ 0∧[(-1)bso_28] ≥ 0)
For Pair
COND_193_0_TEST_LE(
TRUE,
x0,
x1) →
193_0_TEST_LE(
x0,
+(
x1,
-1)) the following chains were created:
- We consider the chain COND_193_0_TEST_LE(TRUE, x0[1], x1[1]) → 193_0_TEST_LE(x0[1], +(x1[1], -1)) which results in the following constraint:
(7) (COND_193_0_TEST_LE(TRUE, x0[1], x1[1])≥NonInfC∧COND_193_0_TEST_LE(TRUE, x0[1], x1[1])≥193_0_TEST_LE(x0[1], +(x1[1], -1))∧(UIncreasing(193_0_TEST_LE(x0[1], +(x1[1], -1))), ≥))
We simplified constraint (7) using rule (POLY_CONSTRAINTS) which results in the following new constraint:
(8) ((UIncreasing(193_0_TEST_LE(x0[1], +(x1[1], -1))), ≥)∧[2 + (-1)bso_30] ≥ 0)
We simplified constraint (8) using rule (IDP_POLY_SIMPLIFY) which results in the following new constraint:
(9) ((UIncreasing(193_0_TEST_LE(x0[1], +(x1[1], -1))), ≥)∧[2 + (-1)bso_30] ≥ 0)
We simplified constraint (9) using rule (POLY_REMOVE_MIN_MAX) which results in the following new constraint:
(10) ((UIncreasing(193_0_TEST_LE(x0[1], +(x1[1], -1))), ≥)∧[2 + (-1)bso_30] ≥ 0)
We simplified constraint (10) using rule (IDP_UNRESTRICTED_VARS) which results in the following new constraint:
(11) ((UIncreasing(193_0_TEST_LE(x0[1], +(x1[1], -1))), ≥)∧0 = 0∧[2 + (-1)bso_30] ≥ 0)
To summarize, we get the following constraints P
≥ for the following pairs.
- 193_0_TEST_LE(x0, x1) → COND_193_0_TEST_LE(>(x1, 0), x0, x1)
- (x1[0] ≥ 0 ⇒ (UIncreasing(COND_193_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])), ≥)∧[(-1)Bound*bni_27 + (2)bni_27] + [(2)bni_27]x1[0] ≥ 0∧[(-1)bso_28] ≥ 0)
- COND_193_0_TEST_LE(TRUE, x0, x1) → 193_0_TEST_LE(x0, +(x1, -1))
- ((UIncreasing(193_0_TEST_LE(x0[1], +(x1[1], -1))), ≥)∧0 = 0∧[2 + (-1)bso_30] ≥ 0)
The constraints for P
> respective P
bound 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 P
bound.
Using the following integer polynomial ordering the resulting constraints can be solved
Polynomial interpretation over integers[POLO]:
POL(TRUE) = 0
POL(FALSE) = 0
POL(193_0_test_LE(x1, x2)) = [-1]
POL(0) = 0
POL(221_0_test_LE(x1, x2)) = [-1] + [-1]x2
POL(Cond_221_0_test_LE(x1, x2, x3)) = [-1] + [-1]x3
POL(>(x1, x2)) = [-1]
POL(+(x1, x2)) = x1 + x2
POL(-1) = [-1]
POL(248_0_test_LE(x1, x2)) = [-1] + [-1]x2
POL(Cond_248_0_test_LE(x1, x2, x3)) = [-1] + [-1]x3
POL(285_0_test_LE(x1, x2)) = [-1] + [-1]x2
POL(Cond_285_0_test_LE(x1, x2, x3)) = [-1] + [-1]x3
POL(319_0_test_LE(x1, x2)) = [-1] + [-1]x2
POL(Cond_319_0_test_LE(x1, x2, x3)) = [-1] + [-1]x3
POL(354_0_test_LE(x1, x2)) = [-1] + [-1]x2
POL(Cond_354_0_test_LE(x1, x2, x3)) = [-1] + [-1]x3
POL(386_0_test_LE(x1, x2)) = [-1] + [-1]x2
POL(Cond_386_0_test_LE(x1, x2, x3)) = [-1] + [-1]x3
POL(426_0_test_LE(x1, x2)) = [-1] + [-1]x2
POL(Cond_426_0_test_LE(x1, x2, x3)) = [-1] + [-1]x3
POL(465_0_test_LE(x1)) = [-1] + [-1]x1
POL(471_0_test_Return) = [-1]
POL(Cond_465_0_test_LE(x1, x2)) = [-1] + [-1]x2
POL(193_0_TEST_LE(x1, x2)) = [2]x2
POL(COND_193_0_TEST_LE(x1, x2, x3)) = [2]x3
The following pairs are in P
>:
COND_193_0_TEST_LE(TRUE, x0[1], x1[1]) → 193_0_TEST_LE(x0[1], +(x1[1], -1))
The following pairs are in P
bound:
193_0_TEST_LE(x0[0], x1[0]) → COND_193_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])
The following pairs are in P
≥:
193_0_TEST_LE(x0[0], x1[0]) → COND_193_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])
There are no usable rules.
(79) Complex Obligation (AND)
(80) 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
The ITRS R consists of the following rules:
193_0_test_LE(
x0,
0) →
221_0_test_LE(
x0,
x0)
221_0_test_LE(
x0,
x1) →
Cond_221_0_test_LE(
x1 > 0,
x0,
x1)
Cond_221_0_test_LE(
TRUE,
x0,
x1) →
221_0_test_LE(
x0,
x1 + -1)
221_0_test_LE(
x0,
0) →
248_0_test_LE(
x0,
x0)
248_0_test_LE(
x0,
x1) →
Cond_248_0_test_LE(
x1 > 0,
x0,
x1)
Cond_248_0_test_LE(
TRUE,
x0,
x1) →
248_0_test_LE(
x0,
x1 + -1)
248_0_test_LE(
x0,
0) →
285_0_test_LE(
x0,
x0)
285_0_test_LE(
x0,
x1) →
Cond_285_0_test_LE(
x1 > 0,
x0,
x1)
Cond_285_0_test_LE(
TRUE,
x0,
x1) →
285_0_test_LE(
x0,
x1 + -1)
285_0_test_LE(
x0,
0) →
319_0_test_LE(
x0,
x0)
319_0_test_LE(
x0,
x1) →
Cond_319_0_test_LE(
x1 > 0,
x0,
x1)
Cond_319_0_test_LE(
TRUE,
x0,
x1) →
319_0_test_LE(
x0,
x1 + -1)
319_0_test_LE(
x0,
0) →
354_0_test_LE(
x0,
x0)
354_0_test_LE(
x0,
x1) →
Cond_354_0_test_LE(
x1 > 0,
x0,
x1)
Cond_354_0_test_LE(
TRUE,
x0,
x1) →
354_0_test_LE(
x0,
x1 + -1)
354_0_test_LE(
x0,
0) →
386_0_test_LE(
x0,
x0)
386_0_test_LE(
x0,
x1) →
Cond_386_0_test_LE(
x1 > 0,
x0,
x1)
Cond_386_0_test_LE(
TRUE,
x0,
x1) →
386_0_test_LE(
x0,
x1 + -1)
386_0_test_LE(
x0,
0) →
426_0_test_LE(
x0,
x0)
426_0_test_LE(
x0,
x1) →
Cond_426_0_test_LE(
x1 > 0,
x0,
x1)
Cond_426_0_test_LE(
TRUE,
x0,
x1) →
426_0_test_LE(
x0,
x1 + -1)
426_0_test_LE(
x0,
0) →
465_0_test_LE(
x0)
465_0_test_LE(
0) →
471_0_test_Return465_0_test_LE(
x0) →
Cond_465_0_test_LE(
x0 > 0,
x0)
Cond_465_0_test_LE(
TRUE,
x0) →
465_0_test_LE(
x0 + -1)
The integer pair graph contains the following rules and edges:
(0):
193_0_TEST_LE(
x0[0],
x1[0]) →
COND_193_0_TEST_LE(
x1[0] > 0,
x0[0],
x1[0])
The set Q consists of the following terms:
193_0_test_LE(
x0,
0)
221_0_test_LE(
x0,
x1)
Cond_221_0_test_LE(
TRUE,
x0,
x1)
248_0_test_LE(
x0,
x1)
Cond_248_0_test_LE(
TRUE,
x0,
x1)
285_0_test_LE(
x0,
x1)
Cond_285_0_test_LE(
TRUE,
x0,
x1)
319_0_test_LE(
x0,
x1)
Cond_319_0_test_LE(
TRUE,
x0,
x1)
354_0_test_LE(
x0,
x1)
Cond_354_0_test_LE(
TRUE,
x0,
x1)
386_0_test_LE(
x0,
x1)
Cond_386_0_test_LE(
TRUE,
x0,
x1)
426_0_test_LE(
x0,
x1)
Cond_426_0_test_LE(
TRUE,
x0,
x1)
465_0_test_LE(
x0)
Cond_465_0_test_LE(
TRUE,
x0)
(81) IDependencyGraphProof (EQUIVALENT transformation)
The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 0 SCCs with 1 less node.
(82) TRUE
(83) 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
The ITRS R consists of the following rules:
193_0_test_LE(
x0,
0) →
221_0_test_LE(
x0,
x0)
221_0_test_LE(
x0,
x1) →
Cond_221_0_test_LE(
x1 > 0,
x0,
x1)
Cond_221_0_test_LE(
TRUE,
x0,
x1) →
221_0_test_LE(
x0,
x1 + -1)
221_0_test_LE(
x0,
0) →
248_0_test_LE(
x0,
x0)
248_0_test_LE(
x0,
x1) →
Cond_248_0_test_LE(
x1 > 0,
x0,
x1)
Cond_248_0_test_LE(
TRUE,
x0,
x1) →
248_0_test_LE(
x0,
x1 + -1)
248_0_test_LE(
x0,
0) →
285_0_test_LE(
x0,
x0)
285_0_test_LE(
x0,
x1) →
Cond_285_0_test_LE(
x1 > 0,
x0,
x1)
Cond_285_0_test_LE(
TRUE,
x0,
x1) →
285_0_test_LE(
x0,
x1 + -1)
285_0_test_LE(
x0,
0) →
319_0_test_LE(
x0,
x0)
319_0_test_LE(
x0,
x1) →
Cond_319_0_test_LE(
x1 > 0,
x0,
x1)
Cond_319_0_test_LE(
TRUE,
x0,
x1) →
319_0_test_LE(
x0,
x1 + -1)
319_0_test_LE(
x0,
0) →
354_0_test_LE(
x0,
x0)
354_0_test_LE(
x0,
x1) →
Cond_354_0_test_LE(
x1 > 0,
x0,
x1)
Cond_354_0_test_LE(
TRUE,
x0,
x1) →
354_0_test_LE(
x0,
x1 + -1)
354_0_test_LE(
x0,
0) →
386_0_test_LE(
x0,
x0)
386_0_test_LE(
x0,
x1) →
Cond_386_0_test_LE(
x1 > 0,
x0,
x1)
Cond_386_0_test_LE(
TRUE,
x0,
x1) →
386_0_test_LE(
x0,
x1 + -1)
386_0_test_LE(
x0,
0) →
426_0_test_LE(
x0,
x0)
426_0_test_LE(
x0,
x1) →
Cond_426_0_test_LE(
x1 > 0,
x0,
x1)
Cond_426_0_test_LE(
TRUE,
x0,
x1) →
426_0_test_LE(
x0,
x1 + -1)
426_0_test_LE(
x0,
0) →
465_0_test_LE(
x0)
465_0_test_LE(
0) →
471_0_test_Return465_0_test_LE(
x0) →
Cond_465_0_test_LE(
x0 > 0,
x0)
Cond_465_0_test_LE(
TRUE,
x0) →
465_0_test_LE(
x0 + -1)
The integer pair graph contains the following rules and edges:
(1):
COND_193_0_TEST_LE(
TRUE,
x0[1],
x1[1]) →
193_0_TEST_LE(
x0[1],
x1[1] + -1)
The set Q consists of the following terms:
193_0_test_LE(
x0,
0)
221_0_test_LE(
x0,
x1)
Cond_221_0_test_LE(
TRUE,
x0,
x1)
248_0_test_LE(
x0,
x1)
Cond_248_0_test_LE(
TRUE,
x0,
x1)
285_0_test_LE(
x0,
x1)
Cond_285_0_test_LE(
TRUE,
x0,
x1)
319_0_test_LE(
x0,
x1)
Cond_319_0_test_LE(
TRUE,
x0,
x1)
354_0_test_LE(
x0,
x1)
Cond_354_0_test_LE(
TRUE,
x0,
x1)
386_0_test_LE(
x0,
x1)
Cond_386_0_test_LE(
TRUE,
x0,
x1)
426_0_test_LE(
x0,
x1)
Cond_426_0_test_LE(
TRUE,
x0,
x1)
465_0_test_LE(
x0)
Cond_465_0_test_LE(
TRUE,
x0)
(84) IDependencyGraphProof (EQUIVALENT transformation)
The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 0 SCCs with 1 less node.
(85) TRUE
(86) 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
The ITRS R consists of the following rules:
162_0_test_LE(
x0,
0) →
193_0_test_LE(
x0,
x0)
193_0_test_LE(
x0,
x1) →
Cond_193_0_test_LE(
x1 > 0,
x0,
x1)
Cond_193_0_test_LE(
TRUE,
x0,
x1) →
193_0_test_LE(
x0,
x1 + -1)
193_0_test_LE(
x0,
0) →
221_0_test_LE(
x0,
x0)
221_0_test_LE(
x0,
x1) →
Cond_221_0_test_LE(
x1 > 0,
x0,
x1)
Cond_221_0_test_LE(
TRUE,
x0,
x1) →
221_0_test_LE(
x0,
x1 + -1)
221_0_test_LE(
x0,
0) →
248_0_test_LE(
x0,
x0)
248_0_test_LE(
x0,
x1) →
Cond_248_0_test_LE(
x1 > 0,
x0,
x1)
Cond_248_0_test_LE(
TRUE,
x0,
x1) →
248_0_test_LE(
x0,
x1 + -1)
248_0_test_LE(
x0,
0) →
285_0_test_LE(
x0,
x0)
285_0_test_LE(
x0,
x1) →
Cond_285_0_test_LE(
x1 > 0,
x0,
x1)
Cond_285_0_test_LE(
TRUE,
x0,
x1) →
285_0_test_LE(
x0,
x1 + -1)
285_0_test_LE(
x0,
0) →
319_0_test_LE(
x0,
x0)
319_0_test_LE(
x0,
x1) →
Cond_319_0_test_LE(
x1 > 0,
x0,
x1)
Cond_319_0_test_LE(
TRUE,
x0,
x1) →
319_0_test_LE(
x0,
x1 + -1)
319_0_test_LE(
x0,
0) →
354_0_test_LE(
x0,
x0)
354_0_test_LE(
x0,
x1) →
Cond_354_0_test_LE(
x1 > 0,
x0,
x1)
Cond_354_0_test_LE(
TRUE,
x0,
x1) →
354_0_test_LE(
x0,
x1 + -1)
354_0_test_LE(
x0,
0) →
386_0_test_LE(
x0,
x0)
386_0_test_LE(
x0,
x1) →
Cond_386_0_test_LE(
x1 > 0,
x0,
x1)
Cond_386_0_test_LE(
TRUE,
x0,
x1) →
386_0_test_LE(
x0,
x1 + -1)
386_0_test_LE(
x0,
0) →
426_0_test_LE(
x0,
x0)
426_0_test_LE(
x0,
x1) →
Cond_426_0_test_LE(
x1 > 0,
x0,
x1)
Cond_426_0_test_LE(
TRUE,
x0,
x1) →
426_0_test_LE(
x0,
x1 + -1)
426_0_test_LE(
x0,
0) →
465_0_test_LE(
x0)
465_0_test_LE(
0) →
471_0_test_Return465_0_test_LE(
x0) →
Cond_465_0_test_LE(
x0 > 0,
x0)
Cond_465_0_test_LE(
TRUE,
x0) →
465_0_test_LE(
x0 + -1)
The integer pair graph contains the following rules and edges:
(0):
162_0_TEST_LE(
x0[0],
x1[0]) →
COND_162_0_TEST_LE(
x1[0] > 0,
x0[0],
x1[0])
(1):
COND_162_0_TEST_LE(
TRUE,
x0[1],
x1[1]) →
162_0_TEST_LE(
x0[1],
x1[1] + -1)
(0) -> (1), if ((x1[0] > 0 →* TRUE)∧(x0[0] →* x0[1])∧(x1[0] →* x1[1]))
(1) -> (0), if ((x0[1] →* x0[0])∧(x1[1] + -1 →* x1[0]))
The set Q consists of the following terms:
162_0_test_LE(
x0,
0)
193_0_test_LE(
x0,
x1)
Cond_193_0_test_LE(
TRUE,
x0,
x1)
221_0_test_LE(
x0,
x1)
Cond_221_0_test_LE(
TRUE,
x0,
x1)
248_0_test_LE(
x0,
x1)
Cond_248_0_test_LE(
TRUE,
x0,
x1)
285_0_test_LE(
x0,
x1)
Cond_285_0_test_LE(
TRUE,
x0,
x1)
319_0_test_LE(
x0,
x1)
Cond_319_0_test_LE(
TRUE,
x0,
x1)
354_0_test_LE(
x0,
x1)
Cond_354_0_test_LE(
TRUE,
x0,
x1)
386_0_test_LE(
x0,
x1)
Cond_386_0_test_LE(
TRUE,
x0,
x1)
426_0_test_LE(
x0,
x1)
Cond_426_0_test_LE(
TRUE,
x0,
x1)
465_0_test_LE(
x0)
Cond_465_0_test_LE(
TRUE,
x0)
(87) 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
162_0_TEST_LE(
x0,
x1) →
COND_162_0_TEST_LE(
>(
x1,
0),
x0,
x1) the following chains were created:
- We consider the chain 162_0_TEST_LE(x0[0], x1[0]) → COND_162_0_TEST_LE(>(x1[0], 0), x0[0], x1[0]), COND_162_0_TEST_LE(TRUE, x0[1], x1[1]) → 162_0_TEST_LE(x0[1], +(x1[1], -1)) which results in the following constraint:
(1) (>(x1[0], 0)=TRUE∧x0[0]=x0[1]∧x1[0]=x1[1] ⇒ 162_0_TEST_LE(x0[0], x1[0])≥NonInfC∧162_0_TEST_LE(x0[0], x1[0])≥COND_162_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])∧(UIncreasing(COND_162_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])), ≥))
We simplified constraint (1) using rule (IV) which results in the following new constraint:
(2) (>(x1[0], 0)=TRUE ⇒ 162_0_TEST_LE(x0[0], x1[0])≥NonInfC∧162_0_TEST_LE(x0[0], x1[0])≥COND_162_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])∧(UIncreasing(COND_162_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])), ≥))
We simplified constraint (2) using rule (POLY_CONSTRAINTS) which results in the following new constraint:
(3) (x1[0] + [-1] ≥ 0 ⇒ (UIncreasing(COND_162_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])), ≥)∧[(-1)Bound*bni_31] + [(2)bni_31]x1[0] ≥ 0∧[(-1)bso_32] ≥ 0)
We simplified constraint (3) using rule (IDP_POLY_SIMPLIFY) which results in the following new constraint:
(4) (x1[0] + [-1] ≥ 0 ⇒ (UIncreasing(COND_162_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])), ≥)∧[(-1)Bound*bni_31] + [(2)bni_31]x1[0] ≥ 0∧[(-1)bso_32] ≥ 0)
We simplified constraint (4) using rule (POLY_REMOVE_MIN_MAX) which results in the following new constraint:
(5) (x1[0] + [-1] ≥ 0 ⇒ (UIncreasing(COND_162_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])), ≥)∧[(-1)Bound*bni_31] + [(2)bni_31]x1[0] ≥ 0∧[(-1)bso_32] ≥ 0)
We simplified constraint (5) using rule (IDP_SMT_SPLIT) which results in the following new constraint:
(6) (x1[0] ≥ 0 ⇒ (UIncreasing(COND_162_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])), ≥)∧[(-1)Bound*bni_31 + (2)bni_31] + [(2)bni_31]x1[0] ≥ 0∧[(-1)bso_32] ≥ 0)
For Pair
COND_162_0_TEST_LE(
TRUE,
x0,
x1) →
162_0_TEST_LE(
x0,
+(
x1,
-1)) the following chains were created:
- We consider the chain COND_162_0_TEST_LE(TRUE, x0[1], x1[1]) → 162_0_TEST_LE(x0[1], +(x1[1], -1)) which results in the following constraint:
(7) (COND_162_0_TEST_LE(TRUE, x0[1], x1[1])≥NonInfC∧COND_162_0_TEST_LE(TRUE, x0[1], x1[1])≥162_0_TEST_LE(x0[1], +(x1[1], -1))∧(UIncreasing(162_0_TEST_LE(x0[1], +(x1[1], -1))), ≥))
We simplified constraint (7) using rule (POLY_CONSTRAINTS) which results in the following new constraint:
(8) ((UIncreasing(162_0_TEST_LE(x0[1], +(x1[1], -1))), ≥)∧[2 + (-1)bso_34] ≥ 0)
We simplified constraint (8) using rule (IDP_POLY_SIMPLIFY) which results in the following new constraint:
(9) ((UIncreasing(162_0_TEST_LE(x0[1], +(x1[1], -1))), ≥)∧[2 + (-1)bso_34] ≥ 0)
We simplified constraint (9) using rule (POLY_REMOVE_MIN_MAX) which results in the following new constraint:
(10) ((UIncreasing(162_0_TEST_LE(x0[1], +(x1[1], -1))), ≥)∧[2 + (-1)bso_34] ≥ 0)
We simplified constraint (10) using rule (IDP_UNRESTRICTED_VARS) which results in the following new constraint:
(11) ((UIncreasing(162_0_TEST_LE(x0[1], +(x1[1], -1))), ≥)∧0 = 0∧[2 + (-1)bso_34] ≥ 0)
To summarize, we get the following constraints P
≥ for the following pairs.
- 162_0_TEST_LE(x0, x1) → COND_162_0_TEST_LE(>(x1, 0), x0, x1)
- (x1[0] ≥ 0 ⇒ (UIncreasing(COND_162_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])), ≥)∧[(-1)Bound*bni_31 + (2)bni_31] + [(2)bni_31]x1[0] ≥ 0∧[(-1)bso_32] ≥ 0)
- COND_162_0_TEST_LE(TRUE, x0, x1) → 162_0_TEST_LE(x0, +(x1, -1))
- ((UIncreasing(162_0_TEST_LE(x0[1], +(x1[1], -1))), ≥)∧0 = 0∧[2 + (-1)bso_34] ≥ 0)
The constraints for P
> respective P
bound 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 P
bound.
Using the following integer polynomial ordering the resulting constraints can be solved
Polynomial interpretation over integers[POLO]:
POL(TRUE) = 0
POL(FALSE) = 0
POL(162_0_test_LE(x1, x2)) = [-1]
POL(0) = 0
POL(193_0_test_LE(x1, x2)) = [-1] + [-1]x2
POL(Cond_193_0_test_LE(x1, x2, x3)) = [-1] + [-1]x3
POL(>(x1, x2)) = [-1]
POL(+(x1, x2)) = x1 + x2
POL(-1) = [-1]
POL(221_0_test_LE(x1, x2)) = [-1] + [-1]x2
POL(Cond_221_0_test_LE(x1, x2, x3)) = [-1] + [-1]x3
POL(248_0_test_LE(x1, x2)) = [-1] + [-1]x2
POL(Cond_248_0_test_LE(x1, x2, x3)) = [-1] + [-1]x3
POL(285_0_test_LE(x1, x2)) = [-1] + [-1]x2
POL(Cond_285_0_test_LE(x1, x2, x3)) = [-1] + [-1]x3
POL(319_0_test_LE(x1, x2)) = [-1] + [-1]x2
POL(Cond_319_0_test_LE(x1, x2, x3)) = [-1] + [-1]x3
POL(354_0_test_LE(x1, x2)) = [-1] + [-1]x2
POL(Cond_354_0_test_LE(x1, x2, x3)) = [-1] + [-1]x3
POL(386_0_test_LE(x1, x2)) = [-1] + [-1]x2
POL(Cond_386_0_test_LE(x1, x2, x3)) = [-1] + [-1]x3
POL(426_0_test_LE(x1, x2)) = [-1] + [-1]x2
POL(Cond_426_0_test_LE(x1, x2, x3)) = [-1] + [-1]x3
POL(465_0_test_LE(x1)) = [-1] + [-1]x1
POL(471_0_test_Return) = [-1]
POL(Cond_465_0_test_LE(x1, x2)) = [-1] + [-1]x2
POL(162_0_TEST_LE(x1, x2)) = [2]x2
POL(COND_162_0_TEST_LE(x1, x2, x3)) = [2]x3
The following pairs are in P
>:
COND_162_0_TEST_LE(TRUE, x0[1], x1[1]) → 162_0_TEST_LE(x0[1], +(x1[1], -1))
The following pairs are in P
bound:
162_0_TEST_LE(x0[0], x1[0]) → COND_162_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])
The following pairs are in P
≥:
162_0_TEST_LE(x0[0], x1[0]) → COND_162_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])
There are no usable rules.
(88) Complex Obligation (AND)
(89) 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
The ITRS R consists of the following rules:
162_0_test_LE(
x0,
0) →
193_0_test_LE(
x0,
x0)
193_0_test_LE(
x0,
x1) →
Cond_193_0_test_LE(
x1 > 0,
x0,
x1)
Cond_193_0_test_LE(
TRUE,
x0,
x1) →
193_0_test_LE(
x0,
x1 + -1)
193_0_test_LE(
x0,
0) →
221_0_test_LE(
x0,
x0)
221_0_test_LE(
x0,
x1) →
Cond_221_0_test_LE(
x1 > 0,
x0,
x1)
Cond_221_0_test_LE(
TRUE,
x0,
x1) →
221_0_test_LE(
x0,
x1 + -1)
221_0_test_LE(
x0,
0) →
248_0_test_LE(
x0,
x0)
248_0_test_LE(
x0,
x1) →
Cond_248_0_test_LE(
x1 > 0,
x0,
x1)
Cond_248_0_test_LE(
TRUE,
x0,
x1) →
248_0_test_LE(
x0,
x1 + -1)
248_0_test_LE(
x0,
0) →
285_0_test_LE(
x0,
x0)
285_0_test_LE(
x0,
x1) →
Cond_285_0_test_LE(
x1 > 0,
x0,
x1)
Cond_285_0_test_LE(
TRUE,
x0,
x1) →
285_0_test_LE(
x0,
x1 + -1)
285_0_test_LE(
x0,
0) →
319_0_test_LE(
x0,
x0)
319_0_test_LE(
x0,
x1) →
Cond_319_0_test_LE(
x1 > 0,
x0,
x1)
Cond_319_0_test_LE(
TRUE,
x0,
x1) →
319_0_test_LE(
x0,
x1 + -1)
319_0_test_LE(
x0,
0) →
354_0_test_LE(
x0,
x0)
354_0_test_LE(
x0,
x1) →
Cond_354_0_test_LE(
x1 > 0,
x0,
x1)
Cond_354_0_test_LE(
TRUE,
x0,
x1) →
354_0_test_LE(
x0,
x1 + -1)
354_0_test_LE(
x0,
0) →
386_0_test_LE(
x0,
x0)
386_0_test_LE(
x0,
x1) →
Cond_386_0_test_LE(
x1 > 0,
x0,
x1)
Cond_386_0_test_LE(
TRUE,
x0,
x1) →
386_0_test_LE(
x0,
x1 + -1)
386_0_test_LE(
x0,
0) →
426_0_test_LE(
x0,
x0)
426_0_test_LE(
x0,
x1) →
Cond_426_0_test_LE(
x1 > 0,
x0,
x1)
Cond_426_0_test_LE(
TRUE,
x0,
x1) →
426_0_test_LE(
x0,
x1 + -1)
426_0_test_LE(
x0,
0) →
465_0_test_LE(
x0)
465_0_test_LE(
0) →
471_0_test_Return465_0_test_LE(
x0) →
Cond_465_0_test_LE(
x0 > 0,
x0)
Cond_465_0_test_LE(
TRUE,
x0) →
465_0_test_LE(
x0 + -1)
The integer pair graph contains the following rules and edges:
(0):
162_0_TEST_LE(
x0[0],
x1[0]) →
COND_162_0_TEST_LE(
x1[0] > 0,
x0[0],
x1[0])
The set Q consists of the following terms:
162_0_test_LE(
x0,
0)
193_0_test_LE(
x0,
x1)
Cond_193_0_test_LE(
TRUE,
x0,
x1)
221_0_test_LE(
x0,
x1)
Cond_221_0_test_LE(
TRUE,
x0,
x1)
248_0_test_LE(
x0,
x1)
Cond_248_0_test_LE(
TRUE,
x0,
x1)
285_0_test_LE(
x0,
x1)
Cond_285_0_test_LE(
TRUE,
x0,
x1)
319_0_test_LE(
x0,
x1)
Cond_319_0_test_LE(
TRUE,
x0,
x1)
354_0_test_LE(
x0,
x1)
Cond_354_0_test_LE(
TRUE,
x0,
x1)
386_0_test_LE(
x0,
x1)
Cond_386_0_test_LE(
TRUE,
x0,
x1)
426_0_test_LE(
x0,
x1)
Cond_426_0_test_LE(
TRUE,
x0,
x1)
465_0_test_LE(
x0)
Cond_465_0_test_LE(
TRUE,
x0)
(90) IDependencyGraphProof (EQUIVALENT transformation)
The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 0 SCCs with 1 less node.
(91) TRUE
(92) 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
The ITRS R consists of the following rules:
162_0_test_LE(
x0,
0) →
193_0_test_LE(
x0,
x0)
193_0_test_LE(
x0,
x1) →
Cond_193_0_test_LE(
x1 > 0,
x0,
x1)
Cond_193_0_test_LE(
TRUE,
x0,
x1) →
193_0_test_LE(
x0,
x1 + -1)
193_0_test_LE(
x0,
0) →
221_0_test_LE(
x0,
x0)
221_0_test_LE(
x0,
x1) →
Cond_221_0_test_LE(
x1 > 0,
x0,
x1)
Cond_221_0_test_LE(
TRUE,
x0,
x1) →
221_0_test_LE(
x0,
x1 + -1)
221_0_test_LE(
x0,
0) →
248_0_test_LE(
x0,
x0)
248_0_test_LE(
x0,
x1) →
Cond_248_0_test_LE(
x1 > 0,
x0,
x1)
Cond_248_0_test_LE(
TRUE,
x0,
x1) →
248_0_test_LE(
x0,
x1 + -1)
248_0_test_LE(
x0,
0) →
285_0_test_LE(
x0,
x0)
285_0_test_LE(
x0,
x1) →
Cond_285_0_test_LE(
x1 > 0,
x0,
x1)
Cond_285_0_test_LE(
TRUE,
x0,
x1) →
285_0_test_LE(
x0,
x1 + -1)
285_0_test_LE(
x0,
0) →
319_0_test_LE(
x0,
x0)
319_0_test_LE(
x0,
x1) →
Cond_319_0_test_LE(
x1 > 0,
x0,
x1)
Cond_319_0_test_LE(
TRUE,
x0,
x1) →
319_0_test_LE(
x0,
x1 + -1)
319_0_test_LE(
x0,
0) →
354_0_test_LE(
x0,
x0)
354_0_test_LE(
x0,
x1) →
Cond_354_0_test_LE(
x1 > 0,
x0,
x1)
Cond_354_0_test_LE(
TRUE,
x0,
x1) →
354_0_test_LE(
x0,
x1 + -1)
354_0_test_LE(
x0,
0) →
386_0_test_LE(
x0,
x0)
386_0_test_LE(
x0,
x1) →
Cond_386_0_test_LE(
x1 > 0,
x0,
x1)
Cond_386_0_test_LE(
TRUE,
x0,
x1) →
386_0_test_LE(
x0,
x1 + -1)
386_0_test_LE(
x0,
0) →
426_0_test_LE(
x0,
x0)
426_0_test_LE(
x0,
x1) →
Cond_426_0_test_LE(
x1 > 0,
x0,
x1)
Cond_426_0_test_LE(
TRUE,
x0,
x1) →
426_0_test_LE(
x0,
x1 + -1)
426_0_test_LE(
x0,
0) →
465_0_test_LE(
x0)
465_0_test_LE(
0) →
471_0_test_Return465_0_test_LE(
x0) →
Cond_465_0_test_LE(
x0 > 0,
x0)
Cond_465_0_test_LE(
TRUE,
x0) →
465_0_test_LE(
x0 + -1)
The integer pair graph contains the following rules and edges:
(1):
COND_162_0_TEST_LE(
TRUE,
x0[1],
x1[1]) →
162_0_TEST_LE(
x0[1],
x1[1] + -1)
The set Q consists of the following terms:
162_0_test_LE(
x0,
0)
193_0_test_LE(
x0,
x1)
Cond_193_0_test_LE(
TRUE,
x0,
x1)
221_0_test_LE(
x0,
x1)
Cond_221_0_test_LE(
TRUE,
x0,
x1)
248_0_test_LE(
x0,
x1)
Cond_248_0_test_LE(
TRUE,
x0,
x1)
285_0_test_LE(
x0,
x1)
Cond_285_0_test_LE(
TRUE,
x0,
x1)
319_0_test_LE(
x0,
x1)
Cond_319_0_test_LE(
TRUE,
x0,
x1)
354_0_test_LE(
x0,
x1)
Cond_354_0_test_LE(
TRUE,
x0,
x1)
386_0_test_LE(
x0,
x1)
Cond_386_0_test_LE(
TRUE,
x0,
x1)
426_0_test_LE(
x0,
x1)
Cond_426_0_test_LE(
TRUE,
x0,
x1)
465_0_test_LE(
x0)
Cond_465_0_test_LE(
TRUE,
x0)
(93) IDependencyGraphProof (EQUIVALENT transformation)
The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 0 SCCs with 1 less node.
(94) TRUE
(95) 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
The ITRS R consists of the following rules:
130_0_test_LE(
x0,
0) →
162_0_test_LE(
x0,
x0)
162_0_test_LE(
x0,
x1) →
Cond_162_0_test_LE(
x1 > 0,
x0,
x1)
Cond_162_0_test_LE(
TRUE,
x0,
x1) →
162_0_test_LE(
x0,
x1 + -1)
162_0_test_LE(
x0,
0) →
193_0_test_LE(
x0,
x0)
193_0_test_LE(
x0,
x1) →
Cond_193_0_test_LE(
x1 > 0,
x0,
x1)
Cond_193_0_test_LE(
TRUE,
x0,
x1) →
193_0_test_LE(
x0,
x1 + -1)
193_0_test_LE(
x0,
0) →
221_0_test_LE(
x0,
x0)
221_0_test_LE(
x0,
x1) →
Cond_221_0_test_LE(
x1 > 0,
x0,
x1)
Cond_221_0_test_LE(
TRUE,
x0,
x1) →
221_0_test_LE(
x0,
x1 + -1)
221_0_test_LE(
x0,
0) →
248_0_test_LE(
x0,
x0)
248_0_test_LE(
x0,
x1) →
Cond_248_0_test_LE(
x1 > 0,
x0,
x1)
Cond_248_0_test_LE(
TRUE,
x0,
x1) →
248_0_test_LE(
x0,
x1 + -1)
248_0_test_LE(
x0,
0) →
285_0_test_LE(
x0,
x0)
285_0_test_LE(
x0,
x1) →
Cond_285_0_test_LE(
x1 > 0,
x0,
x1)
Cond_285_0_test_LE(
TRUE,
x0,
x1) →
285_0_test_LE(
x0,
x1 + -1)
285_0_test_LE(
x0,
0) →
319_0_test_LE(
x0,
x0)
319_0_test_LE(
x0,
x1) →
Cond_319_0_test_LE(
x1 > 0,
x0,
x1)
Cond_319_0_test_LE(
TRUE,
x0,
x1) →
319_0_test_LE(
x0,
x1 + -1)
319_0_test_LE(
x0,
0) →
354_0_test_LE(
x0,
x0)
354_0_test_LE(
x0,
x1) →
Cond_354_0_test_LE(
x1 > 0,
x0,
x1)
Cond_354_0_test_LE(
TRUE,
x0,
x1) →
354_0_test_LE(
x0,
x1 + -1)
354_0_test_LE(
x0,
0) →
386_0_test_LE(
x0,
x0)
386_0_test_LE(
x0,
x1) →
Cond_386_0_test_LE(
x1 > 0,
x0,
x1)
Cond_386_0_test_LE(
TRUE,
x0,
x1) →
386_0_test_LE(
x0,
x1 + -1)
386_0_test_LE(
x0,
0) →
426_0_test_LE(
x0,
x0)
426_0_test_LE(
x0,
x1) →
Cond_426_0_test_LE(
x1 > 0,
x0,
x1)
Cond_426_0_test_LE(
TRUE,
x0,
x1) →
426_0_test_LE(
x0,
x1 + -1)
426_0_test_LE(
x0,
0) →
465_0_test_LE(
x0)
465_0_test_LE(
0) →
471_0_test_Return465_0_test_LE(
x0) →
Cond_465_0_test_LE(
x0 > 0,
x0)
Cond_465_0_test_LE(
TRUE,
x0) →
465_0_test_LE(
x0 + -1)
The integer pair graph contains the following rules and edges:
(0):
130_0_TEST_LE(
x0[0],
x1[0]) →
COND_130_0_TEST_LE(
x1[0] > 0,
x0[0],
x1[0])
(1):
COND_130_0_TEST_LE(
TRUE,
x0[1],
x1[1]) →
130_0_TEST_LE(
x0[1],
x1[1] + -1)
(0) -> (1), if ((x1[0] > 0 →* TRUE)∧(x0[0] →* x0[1])∧(x1[0] →* x1[1]))
(1) -> (0), if ((x0[1] →* x0[0])∧(x1[1] + -1 →* x1[0]))
The set Q consists of the following terms:
130_0_test_LE(
x0,
0)
162_0_test_LE(
x0,
x1)
Cond_162_0_test_LE(
TRUE,
x0,
x1)
193_0_test_LE(
x0,
x1)
Cond_193_0_test_LE(
TRUE,
x0,
x1)
221_0_test_LE(
x0,
x1)
Cond_221_0_test_LE(
TRUE,
x0,
x1)
248_0_test_LE(
x0,
x1)
Cond_248_0_test_LE(
TRUE,
x0,
x1)
285_0_test_LE(
x0,
x1)
Cond_285_0_test_LE(
TRUE,
x0,
x1)
319_0_test_LE(
x0,
x1)
Cond_319_0_test_LE(
TRUE,
x0,
x1)
354_0_test_LE(
x0,
x1)
Cond_354_0_test_LE(
TRUE,
x0,
x1)
386_0_test_LE(
x0,
x1)
Cond_386_0_test_LE(
TRUE,
x0,
x1)
426_0_test_LE(
x0,
x1)
Cond_426_0_test_LE(
TRUE,
x0,
x1)
465_0_test_LE(
x0)
Cond_465_0_test_LE(
TRUE,
x0)
(96) 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
130_0_TEST_LE(
x0,
x1) →
COND_130_0_TEST_LE(
>(
x1,
0),
x0,
x1) the following chains were created:
- We consider the chain 130_0_TEST_LE(x0[0], x1[0]) → COND_130_0_TEST_LE(>(x1[0], 0), x0[0], x1[0]), COND_130_0_TEST_LE(TRUE, x0[1], x1[1]) → 130_0_TEST_LE(x0[1], +(x1[1], -1)) which results in the following constraint:
(1) (>(x1[0], 0)=TRUE∧x0[0]=x0[1]∧x1[0]=x1[1] ⇒ 130_0_TEST_LE(x0[0], x1[0])≥NonInfC∧130_0_TEST_LE(x0[0], x1[0])≥COND_130_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])∧(UIncreasing(COND_130_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])), ≥))
We simplified constraint (1) using rule (IV) which results in the following new constraint:
(2) (>(x1[0], 0)=TRUE ⇒ 130_0_TEST_LE(x0[0], x1[0])≥NonInfC∧130_0_TEST_LE(x0[0], x1[0])≥COND_130_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])∧(UIncreasing(COND_130_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])), ≥))
We simplified constraint (2) using rule (POLY_CONSTRAINTS) which results in the following new constraint:
(3) (x1[0] + [-1] ≥ 0 ⇒ (UIncreasing(COND_130_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])), ≥)∧[(-1)Bound*bni_32] + [(2)bni_32]x1[0] ≥ 0∧[(-1)bso_33] ≥ 0)
We simplified constraint (3) using rule (IDP_POLY_SIMPLIFY) which results in the following new constraint:
(4) (x1[0] + [-1] ≥ 0 ⇒ (UIncreasing(COND_130_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])), ≥)∧[(-1)Bound*bni_32] + [(2)bni_32]x1[0] ≥ 0∧[(-1)bso_33] ≥ 0)
We simplified constraint (4) using rule (POLY_REMOVE_MIN_MAX) which results in the following new constraint:
(5) (x1[0] + [-1] ≥ 0 ⇒ (UIncreasing(COND_130_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])), ≥)∧[(-1)Bound*bni_32] + [(2)bni_32]x1[0] ≥ 0∧[(-1)bso_33] ≥ 0)
We simplified constraint (5) using rule (IDP_SMT_SPLIT) which results in the following new constraint:
(6) (x1[0] ≥ 0 ⇒ (UIncreasing(COND_130_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])), ≥)∧[(-1)Bound*bni_32 + (2)bni_32] + [(2)bni_32]x1[0] ≥ 0∧[(-1)bso_33] ≥ 0)
For Pair
COND_130_0_TEST_LE(
TRUE,
x0,
x1) →
130_0_TEST_LE(
x0,
+(
x1,
-1)) the following chains were created:
- We consider the chain COND_130_0_TEST_LE(TRUE, x0[1], x1[1]) → 130_0_TEST_LE(x0[1], +(x1[1], -1)) which results in the following constraint:
(7) (COND_130_0_TEST_LE(TRUE, x0[1], x1[1])≥NonInfC∧COND_130_0_TEST_LE(TRUE, x0[1], x1[1])≥130_0_TEST_LE(x0[1], +(x1[1], -1))∧(UIncreasing(130_0_TEST_LE(x0[1], +(x1[1], -1))), ≥))
We simplified constraint (7) using rule (POLY_CONSTRAINTS) which results in the following new constraint:
(8) ((UIncreasing(130_0_TEST_LE(x0[1], +(x1[1], -1))), ≥)∧[2 + (-1)bso_35] ≥ 0)
We simplified constraint (8) using rule (IDP_POLY_SIMPLIFY) which results in the following new constraint:
(9) ((UIncreasing(130_0_TEST_LE(x0[1], +(x1[1], -1))), ≥)∧[2 + (-1)bso_35] ≥ 0)
We simplified constraint (9) using rule (POLY_REMOVE_MIN_MAX) which results in the following new constraint:
(10) ((UIncreasing(130_0_TEST_LE(x0[1], +(x1[1], -1))), ≥)∧[2 + (-1)bso_35] ≥ 0)
We simplified constraint (10) using rule (IDP_UNRESTRICTED_VARS) which results in the following new constraint:
(11) ((UIncreasing(130_0_TEST_LE(x0[1], +(x1[1], -1))), ≥)∧0 = 0∧[2 + (-1)bso_35] ≥ 0)
To summarize, we get the following constraints P
≥ for the following pairs.
- 130_0_TEST_LE(x0, x1) → COND_130_0_TEST_LE(>(x1, 0), x0, x1)
- (x1[0] ≥ 0 ⇒ (UIncreasing(COND_130_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])), ≥)∧[(-1)Bound*bni_32 + (2)bni_32] + [(2)bni_32]x1[0] ≥ 0∧[(-1)bso_33] ≥ 0)
- COND_130_0_TEST_LE(TRUE, x0, x1) → 130_0_TEST_LE(x0, +(x1, -1))
- ((UIncreasing(130_0_TEST_LE(x0[1], +(x1[1], -1))), ≥)∧0 = 0∧[2 + (-1)bso_35] ≥ 0)
The constraints for P
> respective P
bound 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 P
bound.
Using the following integer polynomial ordering the resulting constraints can be solved
Polynomial interpretation over integers[POLO]:
POL(TRUE) = 0
POL(FALSE) = 0
POL(130_0_test_LE(x1, x2)) = [-1]
POL(0) = 0
POL(162_0_test_LE(x1, x2)) = [-1] + [-1]x2
POL(Cond_162_0_test_LE(x1, x2, x3)) = [-1] + [-1]x3
POL(>(x1, x2)) = [-1]
POL(+(x1, x2)) = x1 + x2
POL(-1) = [-1]
POL(193_0_test_LE(x1, x2)) = [-1] + [-1]x2
POL(Cond_193_0_test_LE(x1, x2, x3)) = [-1] + [-1]x3
POL(221_0_test_LE(x1, x2)) = [-1] + [-1]x2
POL(Cond_221_0_test_LE(x1, x2, x3)) = [-1] + [-1]x3
POL(248_0_test_LE(x1, x2)) = [-1] + [-1]x2
POL(Cond_248_0_test_LE(x1, x2, x3)) = [-1] + [-1]x3
POL(285_0_test_LE(x1, x2)) = [-1] + [-1]x2
POL(Cond_285_0_test_LE(x1, x2, x3)) = [-1] + [-1]x3
POL(319_0_test_LE(x1, x2)) = [-1] + [-1]x2
POL(Cond_319_0_test_LE(x1, x2, x3)) = [-1] + [-1]x3
POL(354_0_test_LE(x1, x2)) = [-1] + [-1]x2
POL(Cond_354_0_test_LE(x1, x2, x3)) = [-1] + [-1]x3
POL(386_0_test_LE(x1, x2)) = [-1] + [-1]x2
POL(Cond_386_0_test_LE(x1, x2, x3)) = [-1] + [-1]x3
POL(426_0_test_LE(x1, x2)) = [-1] + [-1]x2
POL(Cond_426_0_test_LE(x1, x2, x3)) = [-1] + [-1]x3
POL(465_0_test_LE(x1)) = [-1] + [-1]x1
POL(471_0_test_Return) = [-1]
POL(Cond_465_0_test_LE(x1, x2)) = [-1] + [-1]x2
POL(130_0_TEST_LE(x1, x2)) = [2]x2
POL(COND_130_0_TEST_LE(x1, x2, x3)) = [2]x3
The following pairs are in P
>:
COND_130_0_TEST_LE(TRUE, x0[1], x1[1]) → 130_0_TEST_LE(x0[1], +(x1[1], -1))
The following pairs are in P
bound:
130_0_TEST_LE(x0[0], x1[0]) → COND_130_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])
The following pairs are in P
≥:
130_0_TEST_LE(x0[0], x1[0]) → COND_130_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])
There are no usable rules.
(97) Complex Obligation (AND)
(98) 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
The ITRS R consists of the following rules:
130_0_test_LE(
x0,
0) →
162_0_test_LE(
x0,
x0)
162_0_test_LE(
x0,
x1) →
Cond_162_0_test_LE(
x1 > 0,
x0,
x1)
Cond_162_0_test_LE(
TRUE,
x0,
x1) →
162_0_test_LE(
x0,
x1 + -1)
162_0_test_LE(
x0,
0) →
193_0_test_LE(
x0,
x0)
193_0_test_LE(
x0,
x1) →
Cond_193_0_test_LE(
x1 > 0,
x0,
x1)
Cond_193_0_test_LE(
TRUE,
x0,
x1) →
193_0_test_LE(
x0,
x1 + -1)
193_0_test_LE(
x0,
0) →
221_0_test_LE(
x0,
x0)
221_0_test_LE(
x0,
x1) →
Cond_221_0_test_LE(
x1 > 0,
x0,
x1)
Cond_221_0_test_LE(
TRUE,
x0,
x1) →
221_0_test_LE(
x0,
x1 + -1)
221_0_test_LE(
x0,
0) →
248_0_test_LE(
x0,
x0)
248_0_test_LE(
x0,
x1) →
Cond_248_0_test_LE(
x1 > 0,
x0,
x1)
Cond_248_0_test_LE(
TRUE,
x0,
x1) →
248_0_test_LE(
x0,
x1 + -1)
248_0_test_LE(
x0,
0) →
285_0_test_LE(
x0,
x0)
285_0_test_LE(
x0,
x1) →
Cond_285_0_test_LE(
x1 > 0,
x0,
x1)
Cond_285_0_test_LE(
TRUE,
x0,
x1) →
285_0_test_LE(
x0,
x1 + -1)
285_0_test_LE(
x0,
0) →
319_0_test_LE(
x0,
x0)
319_0_test_LE(
x0,
x1) →
Cond_319_0_test_LE(
x1 > 0,
x0,
x1)
Cond_319_0_test_LE(
TRUE,
x0,
x1) →
319_0_test_LE(
x0,
x1 + -1)
319_0_test_LE(
x0,
0) →
354_0_test_LE(
x0,
x0)
354_0_test_LE(
x0,
x1) →
Cond_354_0_test_LE(
x1 > 0,
x0,
x1)
Cond_354_0_test_LE(
TRUE,
x0,
x1) →
354_0_test_LE(
x0,
x1 + -1)
354_0_test_LE(
x0,
0) →
386_0_test_LE(
x0,
x0)
386_0_test_LE(
x0,
x1) →
Cond_386_0_test_LE(
x1 > 0,
x0,
x1)
Cond_386_0_test_LE(
TRUE,
x0,
x1) →
386_0_test_LE(
x0,
x1 + -1)
386_0_test_LE(
x0,
0) →
426_0_test_LE(
x0,
x0)
426_0_test_LE(
x0,
x1) →
Cond_426_0_test_LE(
x1 > 0,
x0,
x1)
Cond_426_0_test_LE(
TRUE,
x0,
x1) →
426_0_test_LE(
x0,
x1 + -1)
426_0_test_LE(
x0,
0) →
465_0_test_LE(
x0)
465_0_test_LE(
0) →
471_0_test_Return465_0_test_LE(
x0) →
Cond_465_0_test_LE(
x0 > 0,
x0)
Cond_465_0_test_LE(
TRUE,
x0) →
465_0_test_LE(
x0 + -1)
The integer pair graph contains the following rules and edges:
(0):
130_0_TEST_LE(
x0[0],
x1[0]) →
COND_130_0_TEST_LE(
x1[0] > 0,
x0[0],
x1[0])
The set Q consists of the following terms:
130_0_test_LE(
x0,
0)
162_0_test_LE(
x0,
x1)
Cond_162_0_test_LE(
TRUE,
x0,
x1)
193_0_test_LE(
x0,
x1)
Cond_193_0_test_LE(
TRUE,
x0,
x1)
221_0_test_LE(
x0,
x1)
Cond_221_0_test_LE(
TRUE,
x0,
x1)
248_0_test_LE(
x0,
x1)
Cond_248_0_test_LE(
TRUE,
x0,
x1)
285_0_test_LE(
x0,
x1)
Cond_285_0_test_LE(
TRUE,
x0,
x1)
319_0_test_LE(
x0,
x1)
Cond_319_0_test_LE(
TRUE,
x0,
x1)
354_0_test_LE(
x0,
x1)
Cond_354_0_test_LE(
TRUE,
x0,
x1)
386_0_test_LE(
x0,
x1)
Cond_386_0_test_LE(
TRUE,
x0,
x1)
426_0_test_LE(
x0,
x1)
Cond_426_0_test_LE(
TRUE,
x0,
x1)
465_0_test_LE(
x0)
Cond_465_0_test_LE(
TRUE,
x0)
(99) IDependencyGraphProof (EQUIVALENT transformation)
The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 0 SCCs with 1 less node.
(100) TRUE
(101) 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
The ITRS R consists of the following rules:
130_0_test_LE(
x0,
0) →
162_0_test_LE(
x0,
x0)
162_0_test_LE(
x0,
x1) →
Cond_162_0_test_LE(
x1 > 0,
x0,
x1)
Cond_162_0_test_LE(
TRUE,
x0,
x1) →
162_0_test_LE(
x0,
x1 + -1)
162_0_test_LE(
x0,
0) →
193_0_test_LE(
x0,
x0)
193_0_test_LE(
x0,
x1) →
Cond_193_0_test_LE(
x1 > 0,
x0,
x1)
Cond_193_0_test_LE(
TRUE,
x0,
x1) →
193_0_test_LE(
x0,
x1 + -1)
193_0_test_LE(
x0,
0) →
221_0_test_LE(
x0,
x0)
221_0_test_LE(
x0,
x1) →
Cond_221_0_test_LE(
x1 > 0,
x0,
x1)
Cond_221_0_test_LE(
TRUE,
x0,
x1) →
221_0_test_LE(
x0,
x1 + -1)
221_0_test_LE(
x0,
0) →
248_0_test_LE(
x0,
x0)
248_0_test_LE(
x0,
x1) →
Cond_248_0_test_LE(
x1 > 0,
x0,
x1)
Cond_248_0_test_LE(
TRUE,
x0,
x1) →
248_0_test_LE(
x0,
x1 + -1)
248_0_test_LE(
x0,
0) →
285_0_test_LE(
x0,
x0)
285_0_test_LE(
x0,
x1) →
Cond_285_0_test_LE(
x1 > 0,
x0,
x1)
Cond_285_0_test_LE(
TRUE,
x0,
x1) →
285_0_test_LE(
x0,
x1 + -1)
285_0_test_LE(
x0,
0) →
319_0_test_LE(
x0,
x0)
319_0_test_LE(
x0,
x1) →
Cond_319_0_test_LE(
x1 > 0,
x0,
x1)
Cond_319_0_test_LE(
TRUE,
x0,
x1) →
319_0_test_LE(
x0,
x1 + -1)
319_0_test_LE(
x0,
0) →
354_0_test_LE(
x0,
x0)
354_0_test_LE(
x0,
x1) →
Cond_354_0_test_LE(
x1 > 0,
x0,
x1)
Cond_354_0_test_LE(
TRUE,
x0,
x1) →
354_0_test_LE(
x0,
x1 + -1)
354_0_test_LE(
x0,
0) →
386_0_test_LE(
x0,
x0)
386_0_test_LE(
x0,
x1) →
Cond_386_0_test_LE(
x1 > 0,
x0,
x1)
Cond_386_0_test_LE(
TRUE,
x0,
x1) →
386_0_test_LE(
x0,
x1 + -1)
386_0_test_LE(
x0,
0) →
426_0_test_LE(
x0,
x0)
426_0_test_LE(
x0,
x1) →
Cond_426_0_test_LE(
x1 > 0,
x0,
x1)
Cond_426_0_test_LE(
TRUE,
x0,
x1) →
426_0_test_LE(
x0,
x1 + -1)
426_0_test_LE(
x0,
0) →
465_0_test_LE(
x0)
465_0_test_LE(
0) →
471_0_test_Return465_0_test_LE(
x0) →
Cond_465_0_test_LE(
x0 > 0,
x0)
Cond_465_0_test_LE(
TRUE,
x0) →
465_0_test_LE(
x0 + -1)
The integer pair graph contains the following rules and edges:
(1):
COND_130_0_TEST_LE(
TRUE,
x0[1],
x1[1]) →
130_0_TEST_LE(
x0[1],
x1[1] + -1)
The set Q consists of the following terms:
130_0_test_LE(
x0,
0)
162_0_test_LE(
x0,
x1)
Cond_162_0_test_LE(
TRUE,
x0,
x1)
193_0_test_LE(
x0,
x1)
Cond_193_0_test_LE(
TRUE,
x0,
x1)
221_0_test_LE(
x0,
x1)
Cond_221_0_test_LE(
TRUE,
x0,
x1)
248_0_test_LE(
x0,
x1)
Cond_248_0_test_LE(
TRUE,
x0,
x1)
285_0_test_LE(
x0,
x1)
Cond_285_0_test_LE(
TRUE,
x0,
x1)
319_0_test_LE(
x0,
x1)
Cond_319_0_test_LE(
TRUE,
x0,
x1)
354_0_test_LE(
x0,
x1)
Cond_354_0_test_LE(
TRUE,
x0,
x1)
386_0_test_LE(
x0,
x1)
Cond_386_0_test_LE(
TRUE,
x0,
x1)
426_0_test_LE(
x0,
x1)
Cond_426_0_test_LE(
TRUE,
x0,
x1)
465_0_test_LE(
x0)
Cond_465_0_test_LE(
TRUE,
x0)
(102) IDependencyGraphProof (EQUIVALENT transformation)
The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 0 SCCs with 1 less node.
(103) TRUE
(104) 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
The ITRS R consists of the following rules:
97_0_test_LE(
x0,
0) →
130_0_test_LE(
x0,
x0)
130_0_test_LE(
x0,
x1) →
Cond_130_0_test_LE(
x1 > 0,
x0,
x1)
Cond_130_0_test_LE(
TRUE,
x0,
x1) →
130_0_test_LE(
x0,
x1 + -1)
130_0_test_LE(
x0,
0) →
162_0_test_LE(
x0,
x0)
162_0_test_LE(
x0,
x1) →
Cond_162_0_test_LE(
x1 > 0,
x0,
x1)
Cond_162_0_test_LE(
TRUE,
x0,
x1) →
162_0_test_LE(
x0,
x1 + -1)
162_0_test_LE(
x0,
0) →
193_0_test_LE(
x0,
x0)
193_0_test_LE(
x0,
x1) →
Cond_193_0_test_LE(
x1 > 0,
x0,
x1)
Cond_193_0_test_LE(
TRUE,
x0,
x1) →
193_0_test_LE(
x0,
x1 + -1)
193_0_test_LE(
x0,
0) →
221_0_test_LE(
x0,
x0)
221_0_test_LE(
x0,
x1) →
Cond_221_0_test_LE(
x1 > 0,
x0,
x1)
Cond_221_0_test_LE(
TRUE,
x0,
x1) →
221_0_test_LE(
x0,
x1 + -1)
221_0_test_LE(
x0,
0) →
248_0_test_LE(
x0,
x0)
248_0_test_LE(
x0,
x1) →
Cond_248_0_test_LE(
x1 > 0,
x0,
x1)
Cond_248_0_test_LE(
TRUE,
x0,
x1) →
248_0_test_LE(
x0,
x1 + -1)
248_0_test_LE(
x0,
0) →
285_0_test_LE(
x0,
x0)
285_0_test_LE(
x0,
x1) →
Cond_285_0_test_LE(
x1 > 0,
x0,
x1)
Cond_285_0_test_LE(
TRUE,
x0,
x1) →
285_0_test_LE(
x0,
x1 + -1)
285_0_test_LE(
x0,
0) →
319_0_test_LE(
x0,
x0)
319_0_test_LE(
x0,
x1) →
Cond_319_0_test_LE(
x1 > 0,
x0,
x1)
Cond_319_0_test_LE(
TRUE,
x0,
x1) →
319_0_test_LE(
x0,
x1 + -1)
319_0_test_LE(
x0,
0) →
354_0_test_LE(
x0,
x0)
354_0_test_LE(
x0,
x1) →
Cond_354_0_test_LE(
x1 > 0,
x0,
x1)
Cond_354_0_test_LE(
TRUE,
x0,
x1) →
354_0_test_LE(
x0,
x1 + -1)
354_0_test_LE(
x0,
0) →
386_0_test_LE(
x0,
x0)
386_0_test_LE(
x0,
x1) →
Cond_386_0_test_LE(
x1 > 0,
x0,
x1)
Cond_386_0_test_LE(
TRUE,
x0,
x1) →
386_0_test_LE(
x0,
x1 + -1)
386_0_test_LE(
x0,
0) →
426_0_test_LE(
x0,
x0)
426_0_test_LE(
x0,
x1) →
Cond_426_0_test_LE(
x1 > 0,
x0,
x1)
Cond_426_0_test_LE(
TRUE,
x0,
x1) →
426_0_test_LE(
x0,
x1 + -1)
426_0_test_LE(
x0,
0) →
465_0_test_LE(
x0)
465_0_test_LE(
0) →
471_0_test_Return465_0_test_LE(
x0) →
Cond_465_0_test_LE(
x0 > 0,
x0)
Cond_465_0_test_LE(
TRUE,
x0) →
465_0_test_LE(
x0 + -1)
The integer pair graph contains the following rules and edges:
(0):
97_0_TEST_LE(
x0[0],
x1[0]) →
COND_97_0_TEST_LE(
x1[0] > 0,
x0[0],
x1[0])
(1):
COND_97_0_TEST_LE(
TRUE,
x0[1],
x1[1]) →
97_0_TEST_LE(
x0[1],
x1[1] + -1)
(0) -> (1), if ((x1[0] > 0 →* TRUE)∧(x0[0] →* x0[1])∧(x1[0] →* x1[1]))
(1) -> (0), if ((x0[1] →* x0[0])∧(x1[1] + -1 →* x1[0]))
The set Q consists of the following terms:
97_0_test_LE(
x0,
0)
130_0_test_LE(
x0,
x1)
Cond_130_0_test_LE(
TRUE,
x0,
x1)
162_0_test_LE(
x0,
x1)
Cond_162_0_test_LE(
TRUE,
x0,
x1)
193_0_test_LE(
x0,
x1)
Cond_193_0_test_LE(
TRUE,
x0,
x1)
221_0_test_LE(
x0,
x1)
Cond_221_0_test_LE(
TRUE,
x0,
x1)
248_0_test_LE(
x0,
x1)
Cond_248_0_test_LE(
TRUE,
x0,
x1)
285_0_test_LE(
x0,
x1)
Cond_285_0_test_LE(
TRUE,
x0,
x1)
319_0_test_LE(
x0,
x1)
Cond_319_0_test_LE(
TRUE,
x0,
x1)
354_0_test_LE(
x0,
x1)
Cond_354_0_test_LE(
TRUE,
x0,
x1)
386_0_test_LE(
x0,
x1)
Cond_386_0_test_LE(
TRUE,
x0,
x1)
426_0_test_LE(
x0,
x1)
Cond_426_0_test_LE(
TRUE,
x0,
x1)
465_0_test_LE(
x0)
Cond_465_0_test_LE(
TRUE,
x0)
(105) 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
97_0_TEST_LE(
x0,
x1) →
COND_97_0_TEST_LE(
>(
x1,
0),
x0,
x1) the following chains were created:
- We consider the chain 97_0_TEST_LE(x0[0], x1[0]) → COND_97_0_TEST_LE(>(x1[0], 0), x0[0], x1[0]), COND_97_0_TEST_LE(TRUE, x0[1], x1[1]) → 97_0_TEST_LE(x0[1], +(x1[1], -1)) which results in the following constraint:
(1) (>(x1[0], 0)=TRUE∧x0[0]=x0[1]∧x1[0]=x1[1] ⇒ 97_0_TEST_LE(x0[0], x1[0])≥NonInfC∧97_0_TEST_LE(x0[0], x1[0])≥COND_97_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])∧(UIncreasing(COND_97_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])), ≥))
We simplified constraint (1) using rule (IV) which results in the following new constraint:
(2) (>(x1[0], 0)=TRUE ⇒ 97_0_TEST_LE(x0[0], x1[0])≥NonInfC∧97_0_TEST_LE(x0[0], x1[0])≥COND_97_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])∧(UIncreasing(COND_97_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])), ≥))
We simplified constraint (2) using rule (POLY_CONSTRAINTS) which results in the following new constraint:
(3) (x1[0] + [-1] ≥ 0 ⇒ (UIncreasing(COND_97_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])), ≥)∧[(-1)Bound*bni_34] + [(2)bni_34]x1[0] ≥ 0∧[(-1)bso_35] ≥ 0)
We simplified constraint (3) using rule (IDP_POLY_SIMPLIFY) which results in the following new constraint:
(4) (x1[0] + [-1] ≥ 0 ⇒ (UIncreasing(COND_97_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])), ≥)∧[(-1)Bound*bni_34] + [(2)bni_34]x1[0] ≥ 0∧[(-1)bso_35] ≥ 0)
We simplified constraint (4) using rule (POLY_REMOVE_MIN_MAX) which results in the following new constraint:
(5) (x1[0] + [-1] ≥ 0 ⇒ (UIncreasing(COND_97_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])), ≥)∧[(-1)Bound*bni_34] + [(2)bni_34]x1[0] ≥ 0∧[(-1)bso_35] ≥ 0)
We simplified constraint (5) using rule (IDP_SMT_SPLIT) which results in the following new constraint:
(6) (x1[0] ≥ 0 ⇒ (UIncreasing(COND_97_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])), ≥)∧[(-1)Bound*bni_34 + (2)bni_34] + [(2)bni_34]x1[0] ≥ 0∧[(-1)bso_35] ≥ 0)
For Pair
COND_97_0_TEST_LE(
TRUE,
x0,
x1) →
97_0_TEST_LE(
x0,
+(
x1,
-1)) the following chains were created:
- We consider the chain COND_97_0_TEST_LE(TRUE, x0[1], x1[1]) → 97_0_TEST_LE(x0[1], +(x1[1], -1)) which results in the following constraint:
(7) (COND_97_0_TEST_LE(TRUE, x0[1], x1[1])≥NonInfC∧COND_97_0_TEST_LE(TRUE, x0[1], x1[1])≥97_0_TEST_LE(x0[1], +(x1[1], -1))∧(UIncreasing(97_0_TEST_LE(x0[1], +(x1[1], -1))), ≥))
We simplified constraint (7) using rule (POLY_CONSTRAINTS) which results in the following new constraint:
(8) ((UIncreasing(97_0_TEST_LE(x0[1], +(x1[1], -1))), ≥)∧[2 + (-1)bso_37] ≥ 0)
We simplified constraint (8) using rule (IDP_POLY_SIMPLIFY) which results in the following new constraint:
(9) ((UIncreasing(97_0_TEST_LE(x0[1], +(x1[1], -1))), ≥)∧[2 + (-1)bso_37] ≥ 0)
We simplified constraint (9) using rule (POLY_REMOVE_MIN_MAX) which results in the following new constraint:
(10) ((UIncreasing(97_0_TEST_LE(x0[1], +(x1[1], -1))), ≥)∧[2 + (-1)bso_37] ≥ 0)
We simplified constraint (10) using rule (IDP_UNRESTRICTED_VARS) which results in the following new constraint:
(11) ((UIncreasing(97_0_TEST_LE(x0[1], +(x1[1], -1))), ≥)∧0 = 0∧[2 + (-1)bso_37] ≥ 0)
To summarize, we get the following constraints P
≥ for the following pairs.
- 97_0_TEST_LE(x0, x1) → COND_97_0_TEST_LE(>(x1, 0), x0, x1)
- (x1[0] ≥ 0 ⇒ (UIncreasing(COND_97_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])), ≥)∧[(-1)Bound*bni_34 + (2)bni_34] + [(2)bni_34]x1[0] ≥ 0∧[(-1)bso_35] ≥ 0)
- COND_97_0_TEST_LE(TRUE, x0, x1) → 97_0_TEST_LE(x0, +(x1, -1))
- ((UIncreasing(97_0_TEST_LE(x0[1], +(x1[1], -1))), ≥)∧0 = 0∧[2 + (-1)bso_37] ≥ 0)
The constraints for P
> respective P
bound 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 P
bound.
Using the following integer polynomial ordering the resulting constraints can be solved
Polynomial interpretation over integers[POLO]:
POL(TRUE) = 0
POL(FALSE) = 0
POL(97_0_test_LE(x1, x2)) = [-1]
POL(0) = 0
POL(130_0_test_LE(x1, x2)) = [-1] + [-1]x2
POL(Cond_130_0_test_LE(x1, x2, x3)) = [-1] + [-1]x3
POL(>(x1, x2)) = [-1]
POL(+(x1, x2)) = x1 + x2
POL(-1) = [-1]
POL(162_0_test_LE(x1, x2)) = [-1] + [-1]x2
POL(Cond_162_0_test_LE(x1, x2, x3)) = [-1] + [-1]x3
POL(193_0_test_LE(x1, x2)) = [-1] + [-1]x2
POL(Cond_193_0_test_LE(x1, x2, x3)) = [-1] + [-1]x3
POL(221_0_test_LE(x1, x2)) = [-1] + [-1]x2
POL(Cond_221_0_test_LE(x1, x2, x3)) = [-1] + [-1]x3
POL(248_0_test_LE(x1, x2)) = [-1] + [-1]x2
POL(Cond_248_0_test_LE(x1, x2, x3)) = [-1] + [-1]x3
POL(285_0_test_LE(x1, x2)) = [-1] + [-1]x2
POL(Cond_285_0_test_LE(x1, x2, x3)) = [-1] + [-1]x3
POL(319_0_test_LE(x1, x2)) = [-1] + [-1]x2
POL(Cond_319_0_test_LE(x1, x2, x3)) = [-1] + [-1]x3
POL(354_0_test_LE(x1, x2)) = [-1] + [-1]x2
POL(Cond_354_0_test_LE(x1, x2, x3)) = [-1] + [-1]x3
POL(386_0_test_LE(x1, x2)) = [-1] + [-1]x2
POL(Cond_386_0_test_LE(x1, x2, x3)) = [-1] + [-1]x3
POL(426_0_test_LE(x1, x2)) = [-1] + [-1]x2
POL(Cond_426_0_test_LE(x1, x2, x3)) = [-1] + [-1]x3
POL(465_0_test_LE(x1)) = [-1] + [-1]x1
POL(471_0_test_Return) = [-1]
POL(Cond_465_0_test_LE(x1, x2)) = [-1] + [-1]x2
POL(97_0_TEST_LE(x1, x2)) = [2]x2
POL(COND_97_0_TEST_LE(x1, x2, x3)) = [2]x3
The following pairs are in P
>:
COND_97_0_TEST_LE(TRUE, x0[1], x1[1]) → 97_0_TEST_LE(x0[1], +(x1[1], -1))
The following pairs are in P
bound:
97_0_TEST_LE(x0[0], x1[0]) → COND_97_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])
The following pairs are in P
≥:
97_0_TEST_LE(x0[0], x1[0]) → COND_97_0_TEST_LE(>(x1[0], 0), x0[0], x1[0])
There are no usable rules.
(106) Complex Obligation (AND)
(107) 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
The ITRS R consists of the following rules:
97_0_test_LE(
x0,
0) →
130_0_test_LE(
x0,
x0)
130_0_test_LE(
x0,
x1) →
Cond_130_0_test_LE(
x1 > 0,
x0,
x1)
Cond_130_0_test_LE(
TRUE,
x0,
x1) →
130_0_test_LE(
x0,
x1 + -1)
130_0_test_LE(
x0,
0) →
162_0_test_LE(
x0,
x0)
162_0_test_LE(
x0,
x1) →
Cond_162_0_test_LE(
x1 > 0,
x0,
x1)
Cond_162_0_test_LE(
TRUE,
x0,
x1) →
162_0_test_LE(
x0,
x1 + -1)
162_0_test_LE(
x0,
0) →
193_0_test_LE(
x0,
x0)
193_0_test_LE(
x0,
x1) →
Cond_193_0_test_LE(
x1 > 0,
x0,
x1)
Cond_193_0_test_LE(
TRUE,
x0,
x1) →
193_0_test_LE(
x0,
x1 + -1)
193_0_test_LE(
x0,
0) →
221_0_test_LE(
x0,
x0)
221_0_test_LE(
x0,
x1) →
Cond_221_0_test_LE(
x1 > 0,
x0,
x1)
Cond_221_0_test_LE(
TRUE,
x0,
x1) →
221_0_test_LE(
x0,
x1 + -1)
221_0_test_LE(
x0,
0) →
248_0_test_LE(
x0,
x0)
248_0_test_LE(
x0,
x1) →
Cond_248_0_test_LE(
x1 > 0,
x0,
x1)
Cond_248_0_test_LE(
TRUE,
x0,
x1) →
248_0_test_LE(
x0,
x1 + -1)
248_0_test_LE(
x0,
0) →
285_0_test_LE(
x0,
x0)
285_0_test_LE(
x0,
x1) →
Cond_285_0_test_LE(
x1 > 0,
x0,
x1)
Cond_285_0_test_LE(
TRUE,
x0,
x1) →
285_0_test_LE(
x0,
x1 + -1)
285_0_test_LE(
x0,
0) →
319_0_test_LE(
x0,
x0)
319_0_test_LE(
x0,
x1) →
Cond_319_0_test_LE(
x1 > 0,
x0,
x1)
Cond_319_0_test_LE(
TRUE,
x0,
x1) →
319_0_test_LE(
x0,
x1 + -1)
319_0_test_LE(
x0,
0) →
354_0_test_LE(
x0,
x0)
354_0_test_LE(
x0,
x1) →
Cond_354_0_test_LE(
x1 > 0,
x0,
x1)
Cond_354_0_test_LE(
TRUE,
x0,
x1) →
354_0_test_LE(
x0,
x1 + -1)
354_0_test_LE(
x0,
0) →
386_0_test_LE(
x0,
x0)
386_0_test_LE(
x0,
x1) →
Cond_386_0_test_LE(
x1 > 0,
x0,
x1)
Cond_386_0_test_LE(
TRUE,
x0,
x1) →
386_0_test_LE(
x0,
x1 + -1)
386_0_test_LE(
x0,
0) →
426_0_test_LE(
x0,
x0)
426_0_test_LE(
x0,
x1) →
Cond_426_0_test_LE(
x1 > 0,
x0,
x1)
Cond_426_0_test_LE(
TRUE,
x0,
x1) →
426_0_test_LE(
x0,
x1 + -1)
426_0_test_LE(
x0,
0) →
465_0_test_LE(
x0)
465_0_test_LE(
0) →
471_0_test_Return465_0_test_LE(
x0) →
Cond_465_0_test_LE(
x0 > 0,
x0)
Cond_465_0_test_LE(
TRUE,
x0) →
465_0_test_LE(
x0 + -1)
The integer pair graph contains the following rules and edges:
(0):
97_0_TEST_LE(
x0[0],
x1[0]) →
COND_97_0_TEST_LE(
x1[0] > 0,
x0[0],
x1[0])
The set Q consists of the following terms:
97_0_test_LE(
x0,
0)
130_0_test_LE(
x0,
x1)
Cond_130_0_test_LE(
TRUE,
x0,
x1)
162_0_test_LE(
x0,
x1)
Cond_162_0_test_LE(
TRUE,
x0,
x1)
193_0_test_LE(
x0,
x1)
Cond_193_0_test_LE(
TRUE,
x0,
x1)
221_0_test_LE(
x0,
x1)
Cond_221_0_test_LE(
TRUE,
x0,
x1)
248_0_test_LE(
x0,
x1)
Cond_248_0_test_LE(
TRUE,
x0,
x1)
285_0_test_LE(
x0,
x1)
Cond_285_0_test_LE(
TRUE,
x0,
x1)
319_0_test_LE(
x0,
x1)
Cond_319_0_test_LE(
TRUE,
x0,
x1)
354_0_test_LE(
x0,
x1)
Cond_354_0_test_LE(
TRUE,
x0,
x1)
386_0_test_LE(
x0,
x1)
Cond_386_0_test_LE(
TRUE,
x0,
x1)
426_0_test_LE(
x0,
x1)
Cond_426_0_test_LE(
TRUE,
x0,
x1)
465_0_test_LE(
x0)
Cond_465_0_test_LE(
TRUE,
x0)
(108) IDependencyGraphProof (EQUIVALENT transformation)
The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 0 SCCs with 1 less node.
(109) TRUE
(110) 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
The ITRS R consists of the following rules:
97_0_test_LE(
x0,
0) →
130_0_test_LE(
x0,
x0)
130_0_test_LE(
x0,
x1) →
Cond_130_0_test_LE(
x1 > 0,
x0,
x1)
Cond_130_0_test_LE(
TRUE,
x0,
x1) →
130_0_test_LE(
x0,
x1 + -1)
130_0_test_LE(
x0,
0) →
162_0_test_LE(
x0,
x0)
162_0_test_LE(
x0,
x1) →
Cond_162_0_test_LE(
x1 > 0,
x0,
x1)
Cond_162_0_test_LE(
TRUE,
x0,
x1) →
162_0_test_LE(
x0,
x1 + -1)
162_0_test_LE(
x0,
0) →
193_0_test_LE(
x0,
x0)
193_0_test_LE(
x0,
x1) →
Cond_193_0_test_LE(
x1 > 0,
x0,
x1)
Cond_193_0_test_LE(
TRUE,
x0,
x1) →
193_0_test_LE(
x0,
x1 + -1)
193_0_test_LE(
x0,
0) →
221_0_test_LE(
x0,
x0)
221_0_test_LE(
x0,
x1) →
Cond_221_0_test_LE(
x1 > 0,
x0,
x1)
Cond_221_0_test_LE(
TRUE,
x0,
x1) →
221_0_test_LE(
x0,
x1 + -1)
221_0_test_LE(
x0,
0) →
248_0_test_LE(
x0,
x0)
248_0_test_LE(
x0,
x1) →
Cond_248_0_test_LE(
x1 > 0,
x0,
x1)
Cond_248_0_test_LE(
TRUE,
x0,
x1) →
248_0_test_LE(
x0,
x1 + -1)
248_0_test_LE(
x0,
0) →
285_0_test_LE(
x0,
x0)
285_0_test_LE(
x0,
x1) →
Cond_285_0_test_LE(
x1 > 0,
x0,
x1)
Cond_285_0_test_LE(
TRUE,
x0,
x1) →
285_0_test_LE(
x0,
x1 + -1)
285_0_test_LE(
x0,
0) →
319_0_test_LE(
x0,
x0)
319_0_test_LE(
x0,
x1) →
Cond_319_0_test_LE(
x1 > 0,
x0,
x1)
Cond_319_0_test_LE(
TRUE,
x0,
x1) →
319_0_test_LE(
x0,
x1 + -1)
319_0_test_LE(
x0,
0) →
354_0_test_LE(
x0,
x0)
354_0_test_LE(
x0,
x1) →
Cond_354_0_test_LE(
x1 > 0,
x0,
x1)
Cond_354_0_test_LE(
TRUE,
x0,
x1) →
354_0_test_LE(
x0,
x1 + -1)
354_0_test_LE(
x0,
0) →
386_0_test_LE(
x0,
x0)
386_0_test_LE(
x0,
x1) →
Cond_386_0_test_LE(
x1 > 0,
x0,
x1)
Cond_386_0_test_LE(
TRUE,
x0,
x1) →
386_0_test_LE(
x0,
x1 + -1)
386_0_test_LE(
x0,
0) →
426_0_test_LE(
x0,
x0)
426_0_test_LE(
x0,
x1) →
Cond_426_0_test_LE(
x1 > 0,
x0,
x1)
Cond_426_0_test_LE(
TRUE,
x0,
x1) →
426_0_test_LE(
x0,
x1 + -1)
426_0_test_LE(
x0,
0) →
465_0_test_LE(
x0)
465_0_test_LE(
0) →
471_0_test_Return465_0_test_LE(
x0) →
Cond_465_0_test_LE(
x0 > 0,
x0)
Cond_465_0_test_LE(
TRUE,
x0) →
465_0_test_LE(
x0 + -1)
The integer pair graph contains the following rules and edges:
(1):
COND_97_0_TEST_LE(
TRUE,
x0[1],
x1[1]) →
97_0_TEST_LE(
x0[1],
x1[1] + -1)
The set Q consists of the following terms:
97_0_test_LE(
x0,
0)
130_0_test_LE(
x0,
x1)
Cond_130_0_test_LE(
TRUE,
x0,
x1)
162_0_test_LE(
x0,
x1)
Cond_162_0_test_LE(
TRUE,
x0,
x1)
193_0_test_LE(
x0,
x1)
Cond_193_0_test_LE(
TRUE,
x0,
x1)
221_0_test_LE(
x0,
x1)
Cond_221_0_test_LE(
TRUE,
x0,
x1)
248_0_test_LE(
x0,
x1)
Cond_248_0_test_LE(
TRUE,
x0,
x1)
285_0_test_LE(
x0,
x1)
Cond_285_0_test_LE(
TRUE,
x0,
x1)
319_0_test_LE(
x0,
x1)
Cond_319_0_test_LE(
TRUE,
x0,
x1)
354_0_test_LE(
x0,
x1)
Cond_354_0_test_LE(
TRUE,
x0,
x1)
386_0_test_LE(
x0,
x1)
Cond_386_0_test_LE(
TRUE,
x0,
x1)
426_0_test_LE(
x0,
x1)
Cond_426_0_test_LE(
TRUE,
x0,
x1)
465_0_test_LE(
x0)
Cond_465_0_test_LE(
TRUE,
x0)
(111) IDependencyGraphProof (EQUIVALENT transformation)
The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 0 SCCs with 1 less node.
(112) TRUE
(113) 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, Boolean
The ITRS R consists of the following rules:
56_0_test_Load(
x0) →
97_0_test_LE(
x0,
x0)
97_0_test_LE(
x0,
x1) →
Cond_97_0_test_LE(
x1 > 0,
x0,
x1)
Cond_97_0_test_LE(
TRUE,
x0,
x1) →
97_0_test_LE(
x0,
x1 + -1)
97_0_test_LE(
x0,
0) →
130_0_test_LE(
x0,
x0)
130_0_test_LE(
x0,
x1) →
Cond_130_0_test_LE(
x1 > 0,
x0,
x1)
Cond_130_0_test_LE(
TRUE,
x0,
x1) →
130_0_test_LE(
x0,
x1 + -1)
130_0_test_LE(
x0,
0) →
162_0_test_LE(
x0,
x0)
162_0_test_LE(
x0,
x1) →
Cond_162_0_test_LE(
x1 > 0,
x0,
x1)
Cond_162_0_test_LE(
TRUE,
x0,
x1) →
162_0_test_LE(
x0,
x1 + -1)
162_0_test_LE(
x0,
0) →
193_0_test_LE(
x0,
x0)
193_0_test_LE(
x0,
x1) →
Cond_193_0_test_LE(
x1 > 0,
x0,
x1)
Cond_193_0_test_LE(
TRUE,
x0,
x1) →
193_0_test_LE(
x0,
x1 + -1)
193_0_test_LE(
x0,
0) →
221_0_test_LE(
x0,
x0)
221_0_test_LE(
x0,
x1) →
Cond_221_0_test_LE(
x1 > 0,
x0,
x1)
Cond_221_0_test_LE(
TRUE,
x0,
x1) →
221_0_test_LE(
x0,
x1 + -1)
221_0_test_LE(
x0,
0) →
248_0_test_LE(
x0,
x0)
248_0_test_LE(
x0,
x1) →
Cond_248_0_test_LE(
x1 > 0,
x0,
x1)
Cond_248_0_test_LE(
TRUE,
x0,
x1) →
248_0_test_LE(
x0,
x1 + -1)
248_0_test_LE(
x0,
0) →
285_0_test_LE(
x0,
x0)
285_0_test_LE(
x0,
x1) →
Cond_285_0_test_LE(
x1 > 0,
x0,
x1)
Cond_285_0_test_LE(
TRUE,
x0,
x1) →
285_0_test_LE(
x0,
x1 + -1)
285_0_test_LE(
x0,
0) →
319_0_test_LE(
x0,
x0)
319_0_test_LE(
x0,
x1) →
Cond_319_0_test_LE(
x1 > 0,
x0,
x1)
Cond_319_0_test_LE(
TRUE,
x0,
x1) →
319_0_test_LE(
x0,
x1 + -1)
319_0_test_LE(
x0,
0) →
354_0_test_LE(
x0,
x0)
354_0_test_LE(
x0,
x1) →
Cond_354_0_test_LE(
x1 > 0,
x0,
x1)
Cond_354_0_test_LE(
TRUE,
x0,
x1) →
354_0_test_LE(
x0,
x1 + -1)
354_0_test_LE(
x0,
0) →
386_0_test_LE(
x0,
x0)
386_0_test_LE(
x0,
x1) →
Cond_386_0_test_LE(
x1 > 0,
x0,
x1)
Cond_386_0_test_LE(
TRUE,
x0,
x1) →
386_0_test_LE(
x0,
x1 + -1)
386_0_test_LE(
x0,
0) →
426_0_test_LE(
x0,
x0)
426_0_test_LE(
x0,
x1) →
Cond_426_0_test_LE(
x1 > 0,
x0,
x1)
Cond_426_0_test_LE(
TRUE,
x0,
x1) →
426_0_test_LE(
x0,
x1 + -1)
426_0_test_LE(
x0,
0) →
465_0_test_LE(
x0)
465_0_test_LE(
0) →
471_0_test_Return465_0_test_LE(
x0) →
Cond_465_0_test_LE(
x0 > 0,
x0)
Cond_465_0_test_LE(
TRUE,
x0) →
465_0_test_LE(
x0 + -1)
The integer pair graph contains the following rules and edges:
(0):
48_0_MAIN_GE(
x0[0],
x1[0]) →
COND_48_0_MAIN_GE(
x1[0] < 100,
x0[0],
x1[0])
(1):
COND_48_0_MAIN_GE(
TRUE,
x0[1],
x1[1]) →
56_1_MAIN_INVOKEMETHOD(
56_0_test_Load(
x1[1]),
x0[1],
x1[1])
(2):
56_1_MAIN_INVOKEMETHOD(
471_0_test_Return,
x0[2],
x1[2]) →
COND_56_1_MAIN_INVOKEMETHOD(
x1[2] > 0,
471_0_test_Return,
x0[2],
x1[2])
(3):
COND_56_1_MAIN_INVOKEMETHOD(
TRUE,
471_0_test_Return,
x0[3],
x1[3]) →
48_0_MAIN_GE(
x0[3],
x1[3] + 1)
(4):
48_0_MAIN_GE(
x0[4],
x1[4]) →
COND_48_0_MAIN_GE1(
x1[4] >= 100 && x0[4] > 0 && 1 > 0 && 0 < x0[4] - 1,
x0[4],
x1[4])
(5):
COND_48_0_MAIN_GE1(
TRUE,
x0[5],
x1[5]) →
48_0_MAIN_GE(
x0[5] - 1,
x0[5] - 1)
(0) -> (1), if ((x1[0] < 100 →* TRUE)∧(x0[0] →* x0[1])∧(x1[0] →* x1[1]))
(1) -> (2), if ((56_0_test_Load(x1[1]) →* 471_0_test_Return)∧(x0[1] →* x0[2])∧(x1[1] →* x1[2]))
(2) -> (3), if ((x1[2] > 0 →* TRUE)∧(x0[2] →* x0[3])∧(x1[2] →* x1[3]))
(3) -> (0), if ((x0[3] →* x0[0])∧(x1[3] + 1 →* x1[0]))
(3) -> (4), if ((x0[3] →* x0[4])∧(x1[3] + 1 →* x1[4]))
(4) -> (5), if ((x1[4] >= 100 && x0[4] > 0 && 1 > 0 && 0 < x0[4] - 1 →* TRUE)∧(x0[4] →* x0[5])∧(x1[4] →* x1[5]))
(5) -> (0), if ((x0[5] - 1 →* x0[0])∧(x0[5] - 1 →* x1[0]))
(5) -> (4), if ((x0[5] - 1 →* x0[4])∧(x0[5] - 1 →* x1[4]))
The set Q consists of the following terms:
56_0_test_Load(
x0)
97_0_test_LE(
x0,
x1)
Cond_97_0_test_LE(
TRUE,
x0,
x1)
130_0_test_LE(
x0,
x1)
Cond_130_0_test_LE(
TRUE,
x0,
x1)
162_0_test_LE(
x0,
x1)
Cond_162_0_test_LE(
TRUE,
x0,
x1)
193_0_test_LE(
x0,
x1)
Cond_193_0_test_LE(
TRUE,
x0,
x1)
221_0_test_LE(
x0,
x1)
Cond_221_0_test_LE(
TRUE,
x0,
x1)
248_0_test_LE(
x0,
x1)
Cond_248_0_test_LE(
TRUE,
x0,
x1)
285_0_test_LE(
x0,
x1)
Cond_285_0_test_LE(
TRUE,
x0,
x1)
319_0_test_LE(
x0,
x1)
Cond_319_0_test_LE(
TRUE,
x0,
x1)
354_0_test_LE(
x0,
x1)
Cond_354_0_test_LE(
TRUE,
x0,
x1)
386_0_test_LE(
x0,
x1)
Cond_386_0_test_LE(
TRUE,
x0,
x1)
426_0_test_LE(
x0,
x1)
Cond_426_0_test_LE(
TRUE,
x0,
x1)
465_0_test_LE(
x0)
Cond_465_0_test_LE(
TRUE,
x0)
(114) 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
48_0_MAIN_GE(
x0,
x1) →
COND_48_0_MAIN_GE(
<(
x1,
100),
x0,
x1) the following chains were created:
- We consider the chain 48_0_MAIN_GE(x0[0], x1[0]) → COND_48_0_MAIN_GE(<(x1[0], 100), x0[0], x1[0]), COND_48_0_MAIN_GE(TRUE, x0[1], x1[1]) → 56_1_MAIN_INVOKEMETHOD(56_0_test_Load(x1[1]), x0[1], x1[1]) which results in the following constraint:
(1) (<(x1[0], 100)=TRUE∧x0[0]=x0[1]∧x1[0]=x1[1] ⇒ 48_0_MAIN_GE(x0[0], x1[0])≥NonInfC∧48_0_MAIN_GE(x0[0], x1[0])≥COND_48_0_MAIN_GE(<(x1[0], 100), x0[0], x1[0])∧(UIncreasing(COND_48_0_MAIN_GE(<(x1[0], 100), x0[0], x1[0])), ≥))
We simplified constraint (1) using rule (IV) which results in the following new constraint:
(2) (<(x1[0], 100)=TRUE ⇒ 48_0_MAIN_GE(x0[0], x1[0])≥NonInfC∧48_0_MAIN_GE(x0[0], x1[0])≥COND_48_0_MAIN_GE(<(x1[0], 100), x0[0], x1[0])∧(UIncreasing(COND_48_0_MAIN_GE(<(x1[0], 100), x0[0], x1[0])), ≥))
We simplified constraint (2) using rule (POLY_CONSTRAINTS) which results in the following new constraint:
(3) ([99] + [-1]x1[0] ≥ 0 ⇒ (UIncreasing(COND_48_0_MAIN_GE(<(x1[0], 100), x0[0], x1[0])), ≥)∧[(-1)bni_54 + (-1)Bound*bni_54] + [bni_54]x0[0] ≥ 0∧[(-1)bso_55] ≥ 0)
We simplified constraint (3) using rule (IDP_POLY_SIMPLIFY) which results in the following new constraint:
(4) ([99] + [-1]x1[0] ≥ 0 ⇒ (UIncreasing(COND_48_0_MAIN_GE(<(x1[0], 100), x0[0], x1[0])), ≥)∧[(-1)bni_54 + (-1)Bound*bni_54] + [bni_54]x0[0] ≥ 0∧[(-1)bso_55] ≥ 0)
We simplified constraint (4) using rule (POLY_REMOVE_MIN_MAX) which results in the following new constraint:
(5) ([99] + [-1]x1[0] ≥ 0 ⇒ (UIncreasing(COND_48_0_MAIN_GE(<(x1[0], 100), x0[0], x1[0])), ≥)∧[(-1)bni_54 + (-1)Bound*bni_54] + [bni_54]x0[0] ≥ 0∧[(-1)bso_55] ≥ 0)
We simplified constraint (5) using rule (IDP_UNRESTRICTED_VARS) which results in the following new constraint:
(6) ([99] + [-1]x1[0] ≥ 0 ⇒ (UIncreasing(COND_48_0_MAIN_GE(<(x1[0], 100), x0[0], x1[0])), ≥)∧[bni_54] = 0∧[(-1)bni_54 + (-1)Bound*bni_54] ≥ 0∧0 = 0∧[(-1)bso_55] ≥ 0)
We simplified constraint (6) using rule (IDP_SMT_SPLIT) which results in the following new constraints:
(7) ([99] + x1[0] ≥ 0∧x1[0] ≥ 0 ⇒ (UIncreasing(COND_48_0_MAIN_GE(<(x1[0], 100), x0[0], x1[0])), ≥)∧[bni_54] = 0∧[(-1)bni_54 + (-1)Bound*bni_54] ≥ 0∧0 = 0∧[(-1)bso_55] ≥ 0)
(8) ([99] + [-1]x1[0] ≥ 0∧x1[0] ≥ 0 ⇒ (UIncreasing(COND_48_0_MAIN_GE(<(x1[0], 100), x0[0], x1[0])), ≥)∧[bni_54] = 0∧[(-1)bni_54 + (-1)Bound*bni_54] ≥ 0∧0 = 0∧[(-1)bso_55] ≥ 0)
For Pair
COND_48_0_MAIN_GE(
TRUE,
x0,
x1) →
56_1_MAIN_INVOKEMETHOD(
56_0_test_Load(
x1),
x0,
x1) the following chains were created:
- We consider the chain COND_48_0_MAIN_GE(TRUE, x0[1], x1[1]) → 56_1_MAIN_INVOKEMETHOD(56_0_test_Load(x1[1]), x0[1], x1[1]) which results in the following constraint:
(9) (COND_48_0_MAIN_GE(TRUE, x0[1], x1[1])≥NonInfC∧COND_48_0_MAIN_GE(TRUE, x0[1], x1[1])≥56_1_MAIN_INVOKEMETHOD(56_0_test_Load(x1[1]), x0[1], x1[1])∧(UIncreasing(56_1_MAIN_INVOKEMETHOD(56_0_test_Load(x1[1]), x0[1], x1[1])), ≥))
We simplified constraint (9) using rule (POLY_CONSTRAINTS) which results in the following new constraint:
(10) ((UIncreasing(56_1_MAIN_INVOKEMETHOD(56_0_test_Load(x1[1]), x0[1], x1[1])), ≥)∧[(-1)bso_57] ≥ 0)
We simplified constraint (10) using rule (IDP_POLY_SIMPLIFY) which results in the following new constraint:
(11) ((UIncreasing(56_1_MAIN_INVOKEMETHOD(56_0_test_Load(x1[1]), x0[1], x1[1])), ≥)∧[(-1)bso_57] ≥ 0)
We simplified constraint (11) using rule (POLY_REMOVE_MIN_MAX) which results in the following new constraint:
(12) ((UIncreasing(56_1_MAIN_INVOKEMETHOD(56_0_test_Load(x1[1]), x0[1], x1[1])), ≥)∧[(-1)bso_57] ≥ 0)
We simplified constraint (12) using rule (IDP_UNRESTRICTED_VARS) which results in the following new constraint:
(13) ((UIncreasing(56_1_MAIN_INVOKEMETHOD(56_0_test_Load(x1[1]), x0[1], x1[1])), ≥)∧0 = 0∧0 = 0∧[(-1)bso_57] ≥ 0)
For Pair
56_1_MAIN_INVOKEMETHOD(
471_0_test_Return,
x0,
x1) →
COND_56_1_MAIN_INVOKEMETHOD(
>(
x1,
0),
471_0_test_Return,
x0,
x1) the following chains were created:
- We consider the chain 56_1_MAIN_INVOKEMETHOD(471_0_test_Return, x0[2], x1[2]) → COND_56_1_MAIN_INVOKEMETHOD(>(x1[2], 0), 471_0_test_Return, x0[2], x1[2]), COND_56_1_MAIN_INVOKEMETHOD(TRUE, 471_0_test_Return, x0[3], x1[3]) → 48_0_MAIN_GE(x0[3], +(x1[3], 1)) which results in the following constraint:
(14) (>(x1[2], 0)=TRUE∧x0[2]=x0[3]∧x1[2]=x1[3] ⇒ 56_1_MAIN_INVOKEMETHOD(471_0_test_Return, x0[2], x1[2])≥NonInfC∧56_1_MAIN_INVOKEMETHOD(471_0_test_Return, x0[2], x1[2])≥COND_56_1_MAIN_INVOKEMETHOD(>(x1[2], 0), 471_0_test_Return, x0[2], x1[2])∧(UIncreasing(COND_56_1_MAIN_INVOKEMETHOD(>(x1[2], 0), 471_0_test_Return, x0[2], x1[2])), ≥))
We simplified constraint (14) using rule (IV) which results in the following new constraint:
(15) (>(x1[2], 0)=TRUE ⇒ 56_1_MAIN_INVOKEMETHOD(471_0_test_Return, x0[2], x1[2])≥NonInfC∧56_1_MAIN_INVOKEMETHOD(471_0_test_Return, x0[2], x1[2])≥COND_56_1_MAIN_INVOKEMETHOD(>(x1[2], 0), 471_0_test_Return, x0[2], x1[2])∧(UIncreasing(COND_56_1_MAIN_INVOKEMETHOD(>(x1[2], 0), 471_0_test_Return, x0[2], x1[2])), ≥))
We simplified constraint (15) using rule (POLY_CONSTRAINTS) which results in the following new constraint:
(16) (x1[2] + [-1] ≥ 0 ⇒ (UIncreasing(COND_56_1_MAIN_INVOKEMETHOD(>(x1[2], 0), 471_0_test_Return, x0[2], x1[2])), ≥)∧[(-1)bni_58 + (-1)Bound*bni_58] + [bni_58]x0[2] ≥ 0∧[(-1)bso_59] ≥ 0)
We simplified constraint (16) using rule (IDP_POLY_SIMPLIFY) which results in the following new constraint:
(17) (x1[2] + [-1] ≥ 0 ⇒ (UIncreasing(COND_56_1_MAIN_INVOKEMETHOD(>(x1[2], 0), 471_0_test_Return, x0[2], x1[2])), ≥)∧[(-1)bni_58 + (-1)Bound*bni_58] + [bni_58]x0[2] ≥ 0∧[(-1)bso_59] ≥ 0)
We simplified constraint (17) using rule (POLY_REMOVE_MIN_MAX) which results in the following new constraint:
(18) (x1[2] + [-1] ≥ 0 ⇒ (UIncreasing(COND_56_1_MAIN_INVOKEMETHOD(>(x1[2], 0), 471_0_test_Return, x0[2], x1[2])), ≥)∧[(-1)bni_58 + (-1)Bound*bni_58] + [bni_58]x0[2] ≥ 0∧[(-1)bso_59] ≥ 0)
We simplified constraint (18) using rule (IDP_UNRESTRICTED_VARS) which results in the following new constraint:
(19) (x1[2] + [-1] ≥ 0 ⇒ (UIncreasing(COND_56_1_MAIN_INVOKEMETHOD(>(x1[2], 0), 471_0_test_Return, x0[2], x1[2])), ≥)∧[bni_58] = 0∧[(-1)bni_58 + (-1)Bound*bni_58] ≥ 0∧0 = 0∧[(-1)bso_59] ≥ 0)
We simplified constraint (19) using rule (IDP_SMT_SPLIT) which results in the following new constraint:
(20) (x1[2] ≥ 0 ⇒ (UIncreasing(COND_56_1_MAIN_INVOKEMETHOD(>(x1[2], 0), 471_0_test_Return, x0[2], x1[2])), ≥)∧[bni_58] = 0∧[(-1)bni_58 + (-1)Bound*bni_58] ≥ 0∧0 = 0∧[(-1)bso_59] ≥ 0)
For Pair
COND_56_1_MAIN_INVOKEMETHOD(
TRUE,
471_0_test_Return,
x0,
x1) →
48_0_MAIN_GE(
x0,
+(
x1,
1)) the following chains were created:
- We consider the chain COND_56_1_MAIN_INVOKEMETHOD(TRUE, 471_0_test_Return, x0[3], x1[3]) → 48_0_MAIN_GE(x0[3], +(x1[3], 1)) which results in the following constraint:
(21) (COND_56_1_MAIN_INVOKEMETHOD(TRUE, 471_0_test_Return, x0[3], x1[3])≥NonInfC∧COND_56_1_MAIN_INVOKEMETHOD(TRUE, 471_0_test_Return, x0[3], x1[3])≥48_0_MAIN_GE(x0[3], +(x1[3], 1))∧(UIncreasing(48_0_MAIN_GE(x0[3], +(x1[3], 1))), ≥))
We simplified constraint (21) using rule (POLY_CONSTRAINTS) which results in the following new constraint:
(22) ((UIncreasing(48_0_MAIN_GE(x0[3], +(x1[3], 1))), ≥)∧[(-1)bso_61] ≥ 0)
We simplified constraint (22) using rule (IDP_POLY_SIMPLIFY) which results in the following new constraint:
(23) ((UIncreasing(48_0_MAIN_GE(x0[3], +(x1[3], 1))), ≥)∧[(-1)bso_61] ≥ 0)
We simplified constraint (23) using rule (POLY_REMOVE_MIN_MAX) which results in the following new constraint:
(24) ((UIncreasing(48_0_MAIN_GE(x0[3], +(x1[3], 1))), ≥)∧[(-1)bso_61] ≥ 0)
We simplified constraint (24) using rule (IDP_UNRESTRICTED_VARS) which results in the following new constraint:
(25) ((UIncreasing(48_0_MAIN_GE(x0[3], +(x1[3], 1))), ≥)∧0 = 0∧0 = 0∧[(-1)bso_61] ≥ 0)
For Pair
48_0_MAIN_GE(
x0,
x1) →
COND_48_0_MAIN_GE1(
&&(
&&(
&&(
>=(
x1,
100),
>(
x0,
0)),
>(
1,
0)),
<(
0,
-(
x0,
1))),
x0,
x1) the following chains were created:
- We consider the chain 48_0_MAIN_GE(x0[4], x1[4]) → COND_48_0_MAIN_GE1(&&(&&(&&(>=(x1[4], 100), >(x0[4], 0)), >(1, 0)), <(0, -(x0[4], 1))), x0[4], x1[4]), COND_48_0_MAIN_GE1(TRUE, x0[5], x1[5]) → 48_0_MAIN_GE(-(x0[5], 1), -(x0[5], 1)) which results in the following constraint:
(26) (&&(&&(&&(>=(x1[4], 100), >(x0[4], 0)), >(1, 0)), <(0, -(x0[4], 1)))=TRUE∧x0[4]=x0[5]∧x1[4]=x1[5] ⇒ 48_0_MAIN_GE(x0[4], x1[4])≥NonInfC∧48_0_MAIN_GE(x0[4], x1[4])≥COND_48_0_MAIN_GE1(&&(&&(&&(>=(x1[4], 100), >(x0[4], 0)), >(1, 0)), <(0, -(x0[4], 1))), x0[4], x1[4])∧(UIncreasing(COND_48_0_MAIN_GE1(&&(&&(&&(>=(x1[4], 100), >(x0[4], 0)), >(1, 0)), <(0, -(x0[4], 1))), x0[4], x1[4])), ≥))
We simplified constraint (26) using rules (IV), (IDP_CONSTANT_FOLD), (DELETE_TRIVIAL_REDUCESTO), (IDP_BOOLEAN) which results in the following new constraint:
(27) (<(0, -(x0[4], 1))=TRUE∧>=(x1[4], 100)=TRUE∧>(x0[4], 0)=TRUE ⇒ 48_0_MAIN_GE(x0[4], x1[4])≥NonInfC∧48_0_MAIN_GE(x0[4], x1[4])≥COND_48_0_MAIN_GE1(&&(&&(&&(>=(x1[4], 100), >(x0[4], 0)), >(1, 0)), <(0, -(x0[4], 1))), x0[4], x1[4])∧(UIncreasing(COND_48_0_MAIN_GE1(&&(&&(&&(>=(x1[4], 100), >(x0[4], 0)), >(1, 0)), <(0, -(x0[4], 1))), x0[4], x1[4])), ≥))
We simplified constraint (27) using rule (POLY_CONSTRAINTS) which results in the following new constraint:
(28) (x0[4] + [-2] ≥ 0∧x1[4] + [-100] ≥ 0∧x0[4] + [-1] ≥ 0 ⇒ (UIncreasing(COND_48_0_MAIN_GE1(&&(&&(&&(>=(x1[4], 100), >(x0[4], 0)), >(1, 0)), <(0, -(x0[4], 1))), x0[4], x1[4])), ≥)∧[(-1)bni_62 + (-1)Bound*bni_62] + [bni_62]x0[4] ≥ 0∧[(-1)bso_63] ≥ 0)
We simplified constraint (28) using rule (IDP_POLY_SIMPLIFY) which results in the following new constraint:
(29) (x0[4] + [-2] ≥ 0∧x1[4] + [-100] ≥ 0∧x0[4] + [-1] ≥ 0 ⇒ (UIncreasing(COND_48_0_MAIN_GE1(&&(&&(&&(>=(x1[4], 100), >(x0[4], 0)), >(1, 0)), <(0, -(x0[4], 1))), x0[4], x1[4])), ≥)∧[(-1)bni_62 + (-1)Bound*bni_62] + [bni_62]x0[4] ≥ 0∧[(-1)bso_63] ≥ 0)
We simplified constraint (29) using rule (POLY_REMOVE_MIN_MAX) which results in the following new constraint:
(30) (x0[4] + [-2] ≥ 0∧x1[4] + [-100] ≥ 0∧x0[4] + [-1] ≥ 0 ⇒ (UIncreasing(COND_48_0_MAIN_GE1(&&(&&(&&(>=(x1[4], 100), >(x0[4], 0)), >(1, 0)), <(0, -(x0[4], 1))), x0[4], x1[4])), ≥)∧[(-1)bni_62 + (-1)Bound*bni_62] + [bni_62]x0[4] ≥ 0∧[(-1)bso_63] ≥ 0)
We simplified constraint (30) using rule (IDP_SMT_SPLIT) which results in the following new constraint:
(31) (x0[4] ≥ 0∧x1[4] + [-100] ≥ 0∧[1] + x0[4] ≥ 0 ⇒ (UIncreasing(COND_48_0_MAIN_GE1(&&(&&(&&(>=(x1[4], 100), >(x0[4], 0)), >(1, 0)), <(0, -(x0[4], 1))), x0[4], x1[4])), ≥)∧[bni_62 + (-1)Bound*bni_62] + [bni_62]x0[4] ≥ 0∧[(-1)bso_63] ≥ 0)
We simplified constraint (31) using rule (IDP_SMT_SPLIT) which results in the following new constraint:
(32) (x0[4] ≥ 0∧x1[4] ≥ 0∧[1] + x0[4] ≥ 0 ⇒ (UIncreasing(COND_48_0_MAIN_GE1(&&(&&(&&(>=(x1[4], 100), >(x0[4], 0)), >(1, 0)), <(0, -(x0[4], 1))), x0[4], x1[4])), ≥)∧[bni_62 + (-1)Bound*bni_62] + [bni_62]x0[4] ≥ 0∧[(-1)bso_63] ≥ 0)
For Pair
COND_48_0_MAIN_GE1(
TRUE,
x0,
x1) →
48_0_MAIN_GE(
-(
x0,
1),
-(
x0,
1)) the following chains were created:
- We consider the chain COND_48_0_MAIN_GE1(TRUE, x0[5], x1[5]) → 48_0_MAIN_GE(-(x0[5], 1), -(x0[5], 1)) which results in the following constraint:
(33) (COND_48_0_MAIN_GE1(TRUE, x0[5], x1[5])≥NonInfC∧COND_48_0_MAIN_GE1(TRUE, x0[5], x1[5])≥48_0_MAIN_GE(-(x0[5], 1), -(x0[5], 1))∧(UIncreasing(48_0_MAIN_GE(-(x0[5], 1), -(x0[5], 1))), ≥))
We simplified constraint (33) using rule (POLY_CONSTRAINTS) which results in the following new constraint:
(34) ((UIncreasing(48_0_MAIN_GE(-(x0[5], 1), -(x0[5], 1))), ≥)∧[1 + (-1)bso_65] ≥ 0)
We simplified constraint (34) using rule (IDP_POLY_SIMPLIFY) which results in the following new constraint:
(35) ((UIncreasing(48_0_MAIN_GE(-(x0[5], 1), -(x0[5], 1))), ≥)∧[1 + (-1)bso_65] ≥ 0)
We simplified constraint (35) using rule (POLY_REMOVE_MIN_MAX) which results in the following new constraint:
(36) ((UIncreasing(48_0_MAIN_GE(-(x0[5], 1), -(x0[5], 1))), ≥)∧[1 + (-1)bso_65] ≥ 0)
We simplified constraint (36) using rule (IDP_UNRESTRICTED_VARS) which results in the following new constraint:
(37) ((UIncreasing(48_0_MAIN_GE(-(x0[5], 1), -(x0[5], 1))), ≥)∧0 = 0∧0 = 0∧[1 + (-1)bso_65] ≥ 0)
To summarize, we get the following constraints P
≥ for the following pairs.
- 48_0_MAIN_GE(x0, x1) → COND_48_0_MAIN_GE(<(x1, 100), x0, x1)
- ([99] + x1[0] ≥ 0∧x1[0] ≥ 0 ⇒ (UIncreasing(COND_48_0_MAIN_GE(<(x1[0], 100), x0[0], x1[0])), ≥)∧[bni_54] = 0∧[(-1)bni_54 + (-1)Bound*bni_54] ≥ 0∧0 = 0∧[(-1)bso_55] ≥ 0)
- ([99] + [-1]x1[0] ≥ 0∧x1[0] ≥ 0 ⇒ (UIncreasing(COND_48_0_MAIN_GE(<(x1[0], 100), x0[0], x1[0])), ≥)∧[bni_54] = 0∧[(-1)bni_54 + (-1)Bound*bni_54] ≥ 0∧0 = 0∧[(-1)bso_55] ≥ 0)
- COND_48_0_MAIN_GE(TRUE, x0, x1) → 56_1_MAIN_INVOKEMETHOD(56_0_test_Load(x1), x0, x1)
- ((UIncreasing(56_1_MAIN_INVOKEMETHOD(56_0_test_Load(x1[1]), x0[1], x1[1])), ≥)∧0 = 0∧0 = 0∧[(-1)bso_57] ≥ 0)
- 56_1_MAIN_INVOKEMETHOD(471_0_test_Return, x0, x1) → COND_56_1_MAIN_INVOKEMETHOD(>(x1, 0), 471_0_test_Return, x0, x1)
- (x1[2] ≥ 0 ⇒ (UIncreasing(COND_56_1_MAIN_INVOKEMETHOD(>(x1[2], 0), 471_0_test_Return, x0[2], x1[2])), ≥)∧[bni_58] = 0∧[(-1)bni_58 + (-1)Bound*bni_58] ≥ 0∧0 = 0∧[(-1)bso_59] ≥ 0)
- COND_56_1_MAIN_INVOKEMETHOD(TRUE, 471_0_test_Return, x0, x1) → 48_0_MAIN_GE(x0, +(x1, 1))
- ((UIncreasing(48_0_MAIN_GE(x0[3], +(x1[3], 1))), ≥)∧0 = 0∧0 = 0∧[(-1)bso_61] ≥ 0)
- 48_0_MAIN_GE(x0, x1) → COND_48_0_MAIN_GE1(&&(&&(&&(>=(x1, 100), >(x0, 0)), >(1, 0)), <(0, -(x0, 1))), x0, x1)
- (x0[4] ≥ 0∧x1[4] ≥ 0∧[1] + x0[4] ≥ 0 ⇒ (UIncreasing(COND_48_0_MAIN_GE1(&&(&&(&&(>=(x1[4], 100), >(x0[4], 0)), >(1, 0)), <(0, -(x0[4], 1))), x0[4], x1[4])), ≥)∧[bni_62 + (-1)Bound*bni_62] + [bni_62]x0[4] ≥ 0∧[(-1)bso_63] ≥ 0)
- COND_48_0_MAIN_GE1(TRUE, x0, x1) → 48_0_MAIN_GE(-(x0, 1), -(x0, 1))
- ((UIncreasing(48_0_MAIN_GE(-(x0[5], 1), -(x0[5], 1))), ≥)∧0 = 0∧0 = 0∧[1 + (-1)bso_65] ≥ 0)
The constraints for P
> respective P
bound 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 P
bound.
Using the following integer polynomial ordering the resulting constraints can be solved
Polynomial interpretation over integers[POLO]:
POL(TRUE) = 0
POL(FALSE) = 0
POL(56_0_test_Load(x1)) = x1
POL(97_0_test_LE(x1, x2)) = [-1] + [2]x2 + [-1]x1
POL(Cond_97_0_test_LE(x1, x2, x3)) = [2] + [2]x3 + x2
POL(>(x1, x2)) = [-1]
POL(0) = 0
POL(+(x1, x2)) = x1 + x2
POL(-1) = [-1]
POL(130_0_test_LE(x1, x2)) = [-1] + [-1]x2
POL(Cond_130_0_test_LE(x1, x2, x3)) = [-1] + [-1]x3 + x2
POL(162_0_test_LE(x1, x2)) = [1] + [-1]x2 + x1
POL(Cond_162_0_test_LE(x1, x2, x3)) = [-1] + [-1]x3 + x2
POL(193_0_test_LE(x1, x2)) = [-1]x2 + [2]x1
POL(Cond_193_0_test_LE(x1, x2, x3)) = [2] + [-1]x3 + x2
POL(221_0_test_LE(x1, x2)) = [-1] + [-1]x2 + [-1]x1
POL(Cond_221_0_test_LE(x1, x2, x3)) = [1] + [-1]x3 + x2
POL(248_0_test_LE(x1, x2)) = [1] + [-1]x2 + [-1]x1
POL(Cond_248_0_test_LE(x1, x2, x3)) = [-1] + [-1]x3 + x2
POL(285_0_test_LE(x1, x2)) = [-1] + [-1]x2 + [-1]x1
POL(Cond_285_0_test_LE(x1, x2, x3)) = [-1] + [-1]x3 + x2
POL(319_0_test_LE(x1, x2)) = [2] + [-1]x2 + [2]x1
POL(Cond_319_0_test_LE(x1, x2, x3)) = [2] + [-1]x3 + x2
POL(354_0_test_LE(x1, x2)) = [-1] + [-1]x2 + x1
POL(Cond_354_0_test_LE(x1, x2, x3)) = [2] + [-1]x3 + x2
POL(386_0_test_LE(x1, x2)) = [-1] + [-1]x2
POL(Cond_386_0_test_LE(x1, x2, x3)) = [-1] + [-1]x3 + x2
POL(426_0_test_LE(x1, x2)) = [-1] + [-1]x2 + [-1]x1
POL(Cond_426_0_test_LE(x1, x2, x3)) = [-1]x3 + x2
POL(465_0_test_LE(x1)) = [-1] + [-1]x1
POL(471_0_test_Return) = 0
POL(Cond_465_0_test_LE(x1, x2)) = [2] + [2]x2
POL(48_0_MAIN_GE(x1, x2)) = [-1] + x1
POL(COND_48_0_MAIN_GE(x1, x2, x3)) = [-1] + x2
POL(<(x1, x2)) = [-1]
POL(100) = [100]
POL(56_1_MAIN_INVOKEMETHOD(x1, x2, x3)) = [-1] + x2
POL(COND_56_1_MAIN_INVOKEMETHOD(x1, x2, x3, x4)) = [-1] + x3
POL(1) = [1]
POL(COND_48_0_MAIN_GE1(x1, x2, x3)) = [-1] + x2
POL(&&(x1, x2)) = [-1]
POL(>=(x1, x2)) = [-1]
POL(-(x1, x2)) = x1 + [-1]x2
The following pairs are in P
>:
COND_48_0_MAIN_GE1(TRUE, x0[5], x1[5]) → 48_0_MAIN_GE(-(x0[5], 1), -(x0[5], 1))
The following pairs are in P
bound:
48_0_MAIN_GE(x0[4], x1[4]) → COND_48_0_MAIN_GE1(&&(&&(&&(>=(x1[4], 100), >(x0[4], 0)), >(1, 0)), <(0, -(x0[4], 1))), x0[4], x1[4])
The following pairs are in P
≥:
48_0_MAIN_GE(x0[0], x1[0]) → COND_48_0_MAIN_GE(<(x1[0], 100), x0[0], x1[0])
COND_48_0_MAIN_GE(TRUE, x0[1], x1[1]) → 56_1_MAIN_INVOKEMETHOD(56_0_test_Load(x1[1]), x0[1], x1[1])
56_1_MAIN_INVOKEMETHOD(471_0_test_Return, x0[2], x1[2]) → COND_56_1_MAIN_INVOKEMETHOD(>(x1[2], 0), 471_0_test_Return, x0[2], x1[2])
COND_56_1_MAIN_INVOKEMETHOD(TRUE, 471_0_test_Return, x0[3], x1[3]) → 48_0_MAIN_GE(x0[3], +(x1[3], 1))
48_0_MAIN_GE(x0[4], x1[4]) → COND_48_0_MAIN_GE1(&&(&&(&&(>=(x1[4], 100), >(x0[4], 0)), >(1, 0)), <(0, -(x0[4], 1))), x0[4], x1[4])
At least the following rules have been oriented under context sensitive arithmetic replacement:
56_0_test_Load(x0)1 → 97_0_test_LE(x0, x0)1
130_0_test_LE(x0, x0)1 → 97_0_test_LE(x0, 0)1
162_0_test_LE(x0, x0)1 → 130_0_test_LE(x0, 0)1
162_0_test_LE(x0, x1)1 → Cond_162_0_test_LE(>(x1, 0), x0, x1)1
Cond_354_0_test_LE(>(x1, 0), x0, x1)1 → 354_0_test_LE(x0, x1)1
471_0_test_Return1 → 465_0_test_LE(0)1
(115) Complex Obligation (AND)
(116) 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, Boolean
The ITRS R consists of the following rules:
56_0_test_Load(
x0) →
97_0_test_LE(
x0,
x0)
97_0_test_LE(
x0,
x1) →
Cond_97_0_test_LE(
x1 > 0,
x0,
x1)
Cond_97_0_test_LE(
TRUE,
x0,
x1) →
97_0_test_LE(
x0,
x1 + -1)
97_0_test_LE(
x0,
0) →
130_0_test_LE(
x0,
x0)
130_0_test_LE(
x0,
x1) →
Cond_130_0_test_LE(
x1 > 0,
x0,
x1)
Cond_130_0_test_LE(
TRUE,
x0,
x1) →
130_0_test_LE(
x0,
x1 + -1)
130_0_test_LE(
x0,
0) →
162_0_test_LE(
x0,
x0)
162_0_test_LE(
x0,
x1) →
Cond_162_0_test_LE(
x1 > 0,
x0,
x1)
Cond_162_0_test_LE(
TRUE,
x0,
x1) →
162_0_test_LE(
x0,
x1 + -1)
162_0_test_LE(
x0,
0) →
193_0_test_LE(
x0,
x0)
193_0_test_LE(
x0,
x1) →
Cond_193_0_test_LE(
x1 > 0,
x0,
x1)
Cond_193_0_test_LE(
TRUE,
x0,
x1) →
193_0_test_LE(
x0,
x1 + -1)
193_0_test_LE(
x0,
0) →
221_0_test_LE(
x0,
x0)
221_0_test_LE(
x0,
x1) →
Cond_221_0_test_LE(
x1 > 0,
x0,
x1)
Cond_221_0_test_LE(
TRUE,
x0,
x1) →
221_0_test_LE(
x0,
x1 + -1)
221_0_test_LE(
x0,
0) →
248_0_test_LE(
x0,
x0)
248_0_test_LE(
x0,
x1) →
Cond_248_0_test_LE(
x1 > 0,
x0,
x1)
Cond_248_0_test_LE(
TRUE,
x0,
x1) →
248_0_test_LE(
x0,
x1 + -1)
248_0_test_LE(
x0,
0) →
285_0_test_LE(
x0,
x0)
285_0_test_LE(
x0,
x1) →
Cond_285_0_test_LE(
x1 > 0,
x0,
x1)
Cond_285_0_test_LE(
TRUE,
x0,
x1) →
285_0_test_LE(
x0,
x1 + -1)
285_0_test_LE(
x0,
0) →
319_0_test_LE(
x0,
x0)
319_0_test_LE(
x0,
x1) →
Cond_319_0_test_LE(
x1 > 0,
x0,
x1)
Cond_319_0_test_LE(
TRUE,
x0,
x1) →
319_0_test_LE(
x0,
x1 + -1)
319_0_test_LE(
x0,
0) →
354_0_test_LE(
x0,
x0)
354_0_test_LE(
x0,
x1) →
Cond_354_0_test_LE(
x1 > 0,
x0,
x1)
Cond_354_0_test_LE(
TRUE,
x0,
x1) →
354_0_test_LE(
x0,
x1 + -1)
354_0_test_LE(
x0,
0) →
386_0_test_LE(
x0,
x0)
386_0_test_LE(
x0,
x1) →
Cond_386_0_test_LE(
x1 > 0,
x0,
x1)
Cond_386_0_test_LE(
TRUE,
x0,
x1) →
386_0_test_LE(
x0,
x1 + -1)
386_0_test_LE(
x0,
0) →
426_0_test_LE(
x0,
x0)
426_0_test_LE(
x0,
x1) →
Cond_426_0_test_LE(
x1 > 0,
x0,
x1)
Cond_426_0_test_LE(
TRUE,
x0,
x1) →
426_0_test_LE(
x0,
x1 + -1)
426_0_test_LE(
x0,
0) →
465_0_test_LE(
x0)
465_0_test_LE(
0) →
471_0_test_Return465_0_test_LE(
x0) →
Cond_465_0_test_LE(
x0 > 0,
x0)
Cond_465_0_test_LE(
TRUE,
x0) →
465_0_test_LE(
x0 + -1)
The integer pair graph contains the following rules and edges:
(0):
48_0_MAIN_GE(
x0[0],
x1[0]) →
COND_48_0_MAIN_GE(
x1[0] < 100,
x0[0],
x1[0])
(1):
COND_48_0_MAIN_GE(
TRUE,
x0[1],
x1[1]) →
56_1_MAIN_INVOKEMETHOD(
56_0_test_Load(
x1[1]),
x0[1],
x1[1])
(2):
56_1_MAIN_INVOKEMETHOD(
471_0_test_Return,
x0[2],
x1[2]) →
COND_56_1_MAIN_INVOKEMETHOD(
x1[2] > 0,
471_0_test_Return,
x0[2],
x1[2])
(3):
COND_56_1_MAIN_INVOKEMETHOD(
TRUE,
471_0_test_Return,
x0[3],
x1[3]) →
48_0_MAIN_GE(
x0[3],
x1[3] + 1)
(4):
48_0_MAIN_GE(
x0[4],
x1[4]) →
COND_48_0_MAIN_GE1(
x1[4] >= 100 && x0[4] > 0 && 1 > 0 && 0 < x0[4] - 1,
x0[4],
x1[4])
(3) -> (0), if ((x0[3] →* x0[0])∧(x1[3] + 1 →* x1[0]))
(0) -> (1), if ((x1[0] < 100 →* TRUE)∧(x0[0] →* x0[1])∧(x1[0] →* x1[1]))
(1) -> (2), if ((56_0_test_Load(x1[1]) →* 471_0_test_Return)∧(x0[1] →* x0[2])∧(x1[1] →* x1[2]))
(2) -> (3), if ((x1[2] > 0 →* TRUE)∧(x0[2] →* x0[3])∧(x1[2] →* x1[3]))
(3) -> (4), if ((x0[3] →* x0[4])∧(x1[3] + 1 →* x1[4]))
The set Q consists of the following terms:
56_0_test_Load(
x0)
97_0_test_LE(
x0,
x1)
Cond_97_0_test_LE(
TRUE,
x0,
x1)
130_0_test_LE(
x0,
x1)
Cond_130_0_test_LE(
TRUE,
x0,
x1)
162_0_test_LE(
x0,
x1)
Cond_162_0_test_LE(
TRUE,
x0,
x1)
193_0_test_LE(
x0,
x1)
Cond_193_0_test_LE(
TRUE,
x0,
x1)
221_0_test_LE(
x0,
x1)
Cond_221_0_test_LE(
TRUE,
x0,
x1)
248_0_test_LE(
x0,
x1)
Cond_248_0_test_LE(
TRUE,
x0,
x1)
285_0_test_LE(
x0,
x1)
Cond_285_0_test_LE(
TRUE,
x0,
x1)
319_0_test_LE(
x0,
x1)
Cond_319_0_test_LE(
TRUE,
x0,
x1)
354_0_test_LE(
x0,
x1)
Cond_354_0_test_LE(
TRUE,
x0,
x1)
386_0_test_LE(
x0,
x1)
Cond_386_0_test_LE(
TRUE,
x0,
x1)
426_0_test_LE(
x0,
x1)
Cond_426_0_test_LE(
TRUE,
x0,
x1)
465_0_test_LE(
x0)
Cond_465_0_test_LE(
TRUE,
x0)
(117) IDependencyGraphProof (EQUIVALENT transformation)
The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 1 SCC with 1 less node.
(118) 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
The ITRS R consists of the following rules:
56_0_test_Load(
x0) →
97_0_test_LE(
x0,
x0)
97_0_test_LE(
x0,
x1) →
Cond_97_0_test_LE(
x1 > 0,
x0,
x1)
Cond_97_0_test_LE(
TRUE,
x0,
x1) →
97_0_test_LE(
x0,
x1 + -1)
97_0_test_LE(
x0,
0) →
130_0_test_LE(
x0,
x0)
130_0_test_LE(
x0,
x1) →
Cond_130_0_test_LE(
x1 > 0,
x0,
x1)
Cond_130_0_test_LE(
TRUE,
x0,
x1) →
130_0_test_LE(
x0,
x1 + -1)
130_0_test_LE(
x0,
0) →
162_0_test_LE(
x0,
x0)
162_0_test_LE(
x0,
x1) →
Cond_162_0_test_LE(
x1 > 0,
x0,
x1)
Cond_162_0_test_LE(
TRUE,
x0,
x1) →
162_0_test_LE(
x0,
x1 + -1)
162_0_test_LE(
x0,
0) →
193_0_test_LE(
x0,
x0)
193_0_test_LE(
x0,
x1) →
Cond_193_0_test_LE(
x1 > 0,
x0,
x1)
Cond_193_0_test_LE(
TRUE,
x0,
x1) →
193_0_test_LE(
x0,
x1 + -1)
193_0_test_LE(
x0,
0) →
221_0_test_LE(
x0,
x0)
221_0_test_LE(
x0,
x1) →
Cond_221_0_test_LE(
x1 > 0,
x0,
x1)
Cond_221_0_test_LE(
TRUE,
x0,
x1) →
221_0_test_LE(
x0,
x1 + -1)
221_0_test_LE(
x0,
0) →
248_0_test_LE(
x0,
x0)
248_0_test_LE(
x0,
x1) →
Cond_248_0_test_LE(
x1 > 0,
x0,
x1)
Cond_248_0_test_LE(
TRUE,
x0,
x1) →
248_0_test_LE(
x0,
x1 + -1)
248_0_test_LE(
x0,
0) →
285_0_test_LE(
x0,
x0)
285_0_test_LE(
x0,
x1) →
Cond_285_0_test_LE(
x1 > 0,
x0,
x1)
Cond_285_0_test_LE(
TRUE,
x0,
x1) →
285_0_test_LE(
x0,
x1 + -1)
285_0_test_LE(
x0,
0) →
319_0_test_LE(
x0,
x0)
319_0_test_LE(
x0,
x1) →
Cond_319_0_test_LE(
x1 > 0,
x0,
x1)
Cond_319_0_test_LE(
TRUE,
x0,
x1) →
319_0_test_LE(
x0,
x1 + -1)
319_0_test_LE(
x0,
0) →
354_0_test_LE(
x0,
x0)
354_0_test_LE(
x0,
x1) →
Cond_354_0_test_LE(
x1 > 0,
x0,
x1)
Cond_354_0_test_LE(
TRUE,
x0,
x1) →
354_0_test_LE(
x0,
x1 + -1)
354_0_test_LE(
x0,
0) →
386_0_test_LE(
x0,
x0)
386_0_test_LE(
x0,
x1) →
Cond_386_0_test_LE(
x1 > 0,
x0,
x1)
Cond_386_0_test_LE(
TRUE,
x0,
x1) →
386_0_test_LE(
x0,
x1 + -1)
386_0_test_LE(
x0,
0) →
426_0_test_LE(
x0,
x0)
426_0_test_LE(
x0,
x1) →
Cond_426_0_test_LE(
x1 > 0,
x0,
x1)
Cond_426_0_test_LE(
TRUE,
x0,
x1) →
426_0_test_LE(
x0,
x1 + -1)
426_0_test_LE(
x0,
0) →
465_0_test_LE(
x0)
465_0_test_LE(
0) →
471_0_test_Return465_0_test_LE(
x0) →
Cond_465_0_test_LE(
x0 > 0,
x0)
Cond_465_0_test_LE(
TRUE,
x0) →
465_0_test_LE(
x0 + -1)
The integer pair graph contains the following rules and edges:
(3):
COND_56_1_MAIN_INVOKEMETHOD(
TRUE,
471_0_test_Return,
x0[3],
x1[3]) →
48_0_MAIN_GE(
x0[3],
x1[3] + 1)
(2):
56_1_MAIN_INVOKEMETHOD(
471_0_test_Return,
x0[2],
x1[2]) →
COND_56_1_MAIN_INVOKEMETHOD(
x1[2] > 0,
471_0_test_Return,
x0[2],
x1[2])
(1):
COND_48_0_MAIN_GE(
TRUE,
x0[1],
x1[1]) →
56_1_MAIN_INVOKEMETHOD(
56_0_test_Load(
x1[1]),
x0[1],
x1[1])
(0):
48_0_MAIN_GE(
x0[0],
x1[0]) →
COND_48_0_MAIN_GE(
x1[0] < 100,
x0[0],
x1[0])
(3) -> (0), if ((x0[3] →* x0[0])∧(x1[3] + 1 →* x1[0]))
(0) -> (1), if ((x1[0] < 100 →* TRUE)∧(x0[0] →* x0[1])∧(x1[0] →* x1[1]))
(1) -> (2), if ((56_0_test_Load(x1[1]) →* 471_0_test_Return)∧(x0[1] →* x0[2])∧(x1[1] →* x1[2]))
(2) -> (3), if ((x1[2] > 0 →* TRUE)∧(x0[2] →* x0[3])∧(x1[2] →* x1[3]))
The set Q consists of the following terms:
56_0_test_Load(
x0)
97_0_test_LE(
x0,
x1)
Cond_97_0_test_LE(
TRUE,
x0,
x1)
130_0_test_LE(
x0,
x1)
Cond_130_0_test_LE(
TRUE,
x0,
x1)
162_0_test_LE(
x0,
x1)
Cond_162_0_test_LE(
TRUE,
x0,
x1)
193_0_test_LE(
x0,
x1)
Cond_193_0_test_LE(
TRUE,
x0,
x1)
221_0_test_LE(
x0,
x1)
Cond_221_0_test_LE(
TRUE,
x0,
x1)
248_0_test_LE(
x0,
x1)
Cond_248_0_test_LE(
TRUE,
x0,
x1)
285_0_test_LE(
x0,
x1)
Cond_285_0_test_LE(
TRUE,
x0,
x1)
319_0_test_LE(
x0,
x1)
Cond_319_0_test_LE(
TRUE,
x0,
x1)
354_0_test_LE(
x0,
x1)
Cond_354_0_test_LE(
TRUE,
x0,
x1)
386_0_test_LE(
x0,
x1)
Cond_386_0_test_LE(
TRUE,
x0,
x1)
426_0_test_LE(
x0,
x1)
Cond_426_0_test_LE(
TRUE,
x0,
x1)
465_0_test_LE(
x0)
Cond_465_0_test_LE(
TRUE,
x0)
(119) 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
COND_56_1_MAIN_INVOKEMETHOD(
TRUE,
471_0_test_Return,
x0[3],
x1[3]) →
48_0_MAIN_GE(
x0[3],
+(
x1[3],
1)) the following chains were created:
- We consider the chain COND_56_1_MAIN_INVOKEMETHOD(TRUE, 471_0_test_Return, x0[3], x1[3]) → 48_0_MAIN_GE(x0[3], +(x1[3], 1)) which results in the following constraint:
(1) (COND_56_1_MAIN_INVOKEMETHOD(TRUE, 471_0_test_Return, x0[3], x1[3])≥NonInfC∧COND_56_1_MAIN_INVOKEMETHOD(TRUE, 471_0_test_Return, x0[3], x1[3])≥48_0_MAIN_GE(x0[3], +(x1[3], 1))∧(UIncreasing(48_0_MAIN_GE(x0[3], +(x1[3], 1))), ≥))
We simplified constraint (1) using rule (POLY_CONSTRAINTS) which results in the following new constraint:
(2) ((UIncreasing(48_0_MAIN_GE(x0[3], +(x1[3], 1))), ≥)∧[1 + (-1)bso_36] ≥ 0)
We simplified constraint (2) using rule (IDP_POLY_SIMPLIFY) which results in the following new constraint:
(3) ((UIncreasing(48_0_MAIN_GE(x0[3], +(x1[3], 1))), ≥)∧[1 + (-1)bso_36] ≥ 0)
We simplified constraint (3) using rule (POLY_REMOVE_MIN_MAX) which results in the following new constraint:
(4) ((UIncreasing(48_0_MAIN_GE(x0[3], +(x1[3], 1))), ≥)∧[1 + (-1)bso_36] ≥ 0)
We simplified constraint (4) using rule (IDP_UNRESTRICTED_VARS) which results in the following new constraint:
(5) ((UIncreasing(48_0_MAIN_GE(x0[3], +(x1[3], 1))), ≥)∧0 = 0∧[1 + (-1)bso_36] ≥ 0)
For Pair
56_1_MAIN_INVOKEMETHOD(
471_0_test_Return,
x0[2],
x1[2]) →
COND_56_1_MAIN_INVOKEMETHOD(
>(
x1[2],
0),
471_0_test_Return,
x0[2],
x1[2]) the following chains were created:
- We consider the chain 56_1_MAIN_INVOKEMETHOD(471_0_test_Return, x0[2], x1[2]) → COND_56_1_MAIN_INVOKEMETHOD(>(x1[2], 0), 471_0_test_Return, x0[2], x1[2]), COND_56_1_MAIN_INVOKEMETHOD(TRUE, 471_0_test_Return, x0[3], x1[3]) → 48_0_MAIN_GE(x0[3], +(x1[3], 1)) which results in the following constraint:
(6) (>(x1[2], 0)=TRUE∧x0[2]=x0[3]∧x1[2]=x1[3] ⇒ 56_1_MAIN_INVOKEMETHOD(471_0_test_Return, x0[2], x1[2])≥NonInfC∧56_1_MAIN_INVOKEMETHOD(471_0_test_Return, x0[2], x1[2])≥COND_56_1_MAIN_INVOKEMETHOD(>(x1[2], 0), 471_0_test_Return, x0[2], x1[2])∧(UIncreasing(COND_56_1_MAIN_INVOKEMETHOD(>(x1[2], 0), 471_0_test_Return, x0[2], x1[2])), ≥))
We simplified constraint (6) using rule (IV) which results in the following new constraint:
(7) (>(x1[2], 0)=TRUE ⇒ 56_1_MAIN_INVOKEMETHOD(471_0_test_Return, x0[2], x1[2])≥NonInfC∧56_1_MAIN_INVOKEMETHOD(471_0_test_Return, x0[2], x1[2])≥COND_56_1_MAIN_INVOKEMETHOD(>(x1[2], 0), 471_0_test_Return, x0[2], x1[2])∧(UIncreasing(COND_56_1_MAIN_INVOKEMETHOD(>(x1[2], 0), 471_0_test_Return, x0[2], x1[2])), ≥))
We simplified constraint (7) using rule (POLY_CONSTRAINTS) which results in the following new constraint:
(8) (x1[2] + [-1] ≥ 0 ⇒ (UIncreasing(COND_56_1_MAIN_INVOKEMETHOD(>(x1[2], 0), 471_0_test_Return, x0[2], x1[2])), ≥)∧[(-1)bni_37 + (-1)Bound*bni_37] + [(-1)bni_37]x1[2] ≥ 0∧[(-1)bso_38] ≥ 0)
We simplified constraint (8) using rule (IDP_POLY_SIMPLIFY) which results in the following new constraint:
(9) (x1[2] + [-1] ≥ 0 ⇒ (UIncreasing(COND_56_1_MAIN_INVOKEMETHOD(>(x1[2], 0), 471_0_test_Return, x0[2], x1[2])), ≥)∧[(-1)bni_37 + (-1)Bound*bni_37] + [(-1)bni_37]x1[2] ≥ 0∧[(-1)bso_38] ≥ 0)
We simplified constraint (9) using rule (POLY_REMOVE_MIN_MAX) which results in the following new constraint:
(10) (x1[2] + [-1] ≥ 0 ⇒ (UIncreasing(COND_56_1_MAIN_INVOKEMETHOD(>(x1[2], 0), 471_0_test_Return, x0[2], x1[2])), ≥)∧[(-1)bni_37 + (-1)Bound*bni_37] + [(-1)bni_37]x1[2] ≥ 0∧[(-1)bso_38] ≥ 0)
We simplified constraint (10) using rule (IDP_SMT_SPLIT) which results in the following new constraint:
(11) (x1[2] ≥ 0 ⇒ (UIncreasing(COND_56_1_MAIN_INVOKEMETHOD(>(x1[2], 0), 471_0_test_Return, x0[2], x1[2])), ≥)∧[(-2)bni_37 + (-1)Bound*bni_37] + [(-1)bni_37]x1[2] ≥ 0∧[(-1)bso_38] ≥ 0)
For Pair
COND_48_0_MAIN_GE(
TRUE,
x0[1],
x1[1]) →
56_1_MAIN_INVOKEMETHOD(
56_0_test_Load(
x1[1]),
x0[1],
x1[1]) the following chains were created:
- We consider the chain COND_48_0_MAIN_GE(TRUE, x0[1], x1[1]) → 56_1_MAIN_INVOKEMETHOD(56_0_test_Load(x1[1]), x0[1], x1[1]) which results in the following constraint:
(12) (COND_48_0_MAIN_GE(TRUE, x0[1], x1[1])≥NonInfC∧COND_48_0_MAIN_GE(TRUE, x0[1], x1[1])≥56_1_MAIN_INVOKEMETHOD(56_0_test_Load(x1[1]), x0[1], x1[1])∧(UIncreasing(56_1_MAIN_INVOKEMETHOD(56_0_test_Load(x1[1]), x0[1], x1[1])), ≥))
We simplified constraint (12) using rule (POLY_CONSTRAINTS) which results in the following new constraint:
(13) ((UIncreasing(56_1_MAIN_INVOKEMETHOD(56_0_test_Load(x1[1]), x0[1], x1[1])), ≥)∧[(-1)bso_40] ≥ 0)
We simplified constraint (13) using rule (IDP_POLY_SIMPLIFY) which results in the following new constraint:
(14) ((UIncreasing(56_1_MAIN_INVOKEMETHOD(56_0_test_Load(x1[1]), x0[1], x1[1])), ≥)∧[(-1)bso_40] ≥ 0)
We simplified constraint (14) using rule (POLY_REMOVE_MIN_MAX) which results in the following new constraint:
(15) ((UIncreasing(56_1_MAIN_INVOKEMETHOD(56_0_test_Load(x1[1]), x0[1], x1[1])), ≥)∧[(-1)bso_40] ≥ 0)
We simplified constraint (15) using rule (IDP_UNRESTRICTED_VARS) which results in the following new constraint:
(16) ((UIncreasing(56_1_MAIN_INVOKEMETHOD(56_0_test_Load(x1[1]), x0[1], x1[1])), ≥)∧0 = 0∧[(-1)bso_40] ≥ 0)
For Pair
48_0_MAIN_GE(
x0[0],
x1[0]) →
COND_48_0_MAIN_GE(
<(
x1[0],
100),
x0[0],
x1[0]) the following chains were created:
- We consider the chain 48_0_MAIN_GE(x0[0], x1[0]) → COND_48_0_MAIN_GE(<(x1[0], 100), x0[0], x1[0]), COND_48_0_MAIN_GE(TRUE, x0[1], x1[1]) → 56_1_MAIN_INVOKEMETHOD(56_0_test_Load(x1[1]), x0[1], x1[1]) which results in the following constraint:
(17) (<(x1[0], 100)=TRUE∧x0[0]=x0[1]∧x1[0]=x1[1] ⇒ 48_0_MAIN_GE(x0[0], x1[0])≥NonInfC∧48_0_MAIN_GE(x0[0], x1[0])≥COND_48_0_MAIN_GE(<(x1[0], 100), x0[0], x1[0])∧(UIncreasing(COND_48_0_MAIN_GE(<(x1[0], 100), x0[0], x1[0])), ≥))
We simplified constraint (17) using rule (IV) which results in the following new constraint:
(18) (<(x1[0], 100)=TRUE ⇒ 48_0_MAIN_GE(x0[0], x1[0])≥NonInfC∧48_0_MAIN_GE(x0[0], x1[0])≥COND_48_0_MAIN_GE(<(x1[0], 100), x0[0], x1[0])∧(UIncreasing(COND_48_0_MAIN_GE(<(x1[0], 100), x0[0], x1[0])), ≥))
We simplified constraint (18) using rule (POLY_CONSTRAINTS) which results in the following new constraint:
(19) ([99] + [-1]x1[0] ≥ 0 ⇒ (UIncreasing(COND_48_0_MAIN_GE(<(x1[0], 100), x0[0], x1[0])), ≥)∧[(-1)bni_41 + (-1)Bound*bni_41] + [(-1)bni_41]x1[0] ≥ 0∧[(-1)bso_42] ≥ 0)
We simplified constraint (19) using rule (IDP_POLY_SIMPLIFY) which results in the following new constraint:
(20) ([99] + [-1]x1[0] ≥ 0 ⇒ (UIncreasing(COND_48_0_MAIN_GE(<(x1[0], 100), x0[0], x1[0])), ≥)∧[(-1)bni_41 + (-1)Bound*bni_41] + [(-1)bni_41]x1[0] ≥ 0∧[(-1)bso_42] ≥ 0)
We simplified constraint (20) using rule (POLY_REMOVE_MIN_MAX) which results in the following new constraint:
(21) ([99] + [-1]x1[0] ≥ 0 ⇒ (UIncreasing(COND_48_0_MAIN_GE(<(x1[0], 100), x0[0], x1[0])), ≥)∧[(-1)bni_41 + (-1)Bound*bni_41] + [(-1)bni_41]x1[0] ≥ 0∧[(-1)bso_42] ≥ 0)
We simplified constraint (21) using rule (IDP_SMT_SPLIT) which results in the following new constraints:
(22) ([99] + [-1]x1[0] ≥ 0∧x1[0] ≥ 0 ⇒ (UIncreasing(COND_48_0_MAIN_GE(<(x1[0], 100), x0[0], x1[0])), ≥)∧[(-1)bni_41 + (-1)Bound*bni_41] + [(-1)bni_41]x1[0] ≥ 0∧[(-1)bso_42] ≥ 0)
(23) ([99] + x1[0] ≥ 0∧x1[0] ≥ 0 ⇒ (UIncreasing(COND_48_0_MAIN_GE(<(x1[0], 100), x0[0], x1[0])), ≥)∧[(-1)bni_41 + (-1)Bound*bni_41] + [bni_41]x1[0] ≥ 0∧[(-1)bso_42] ≥ 0)
To summarize, we get the following constraints P
≥ for the following pairs.
- COND_56_1_MAIN_INVOKEMETHOD(TRUE, 471_0_test_Return, x0[3], x1[3]) → 48_0_MAIN_GE(x0[3], +(x1[3], 1))
- ((UIncreasing(48_0_MAIN_GE(x0[3], +(x1[3], 1))), ≥)∧0 = 0∧[1 + (-1)bso_36] ≥ 0)
- 56_1_MAIN_INVOKEMETHOD(471_0_test_Return, x0[2], x1[2]) → COND_56_1_MAIN_INVOKEMETHOD(>(x1[2], 0), 471_0_test_Return, x0[2], x1[2])
- (x1[2] ≥ 0 ⇒ (UIncreasing(COND_56_1_MAIN_INVOKEMETHOD(>(x1[2], 0), 471_0_test_Return, x0[2], x1[2])), ≥)∧[(-2)bni_37 + (-1)Bound*bni_37] + [(-1)bni_37]x1[2] ≥ 0∧[(-1)bso_38] ≥ 0)
- COND_48_0_MAIN_GE(TRUE, x0[1], x1[1]) → 56_1_MAIN_INVOKEMETHOD(56_0_test_Load(x1[1]), x0[1], x1[1])
- ((UIncreasing(56_1_MAIN_INVOKEMETHOD(56_0_test_Load(x1[1]), x0[1], x1[1])), ≥)∧0 = 0∧[(-1)bso_40] ≥ 0)
- 48_0_MAIN_GE(x0[0], x1[0]) → COND_48_0_MAIN_GE(<(x1[0], 100), x0[0], x1[0])
- ([99] + [-1]x1[0] ≥ 0∧x1[0] ≥ 0 ⇒ (UIncreasing(COND_48_0_MAIN_GE(<(x1[0], 100), x0[0], x1[0])), ≥)∧[(-1)bni_41 + (-1)Bound*bni_41] + [(-1)bni_41]x1[0] ≥ 0∧[(-1)bso_42] ≥ 0)
- ([99] + x1[0] ≥ 0∧x1[0] ≥ 0 ⇒ (UIncreasing(COND_48_0_MAIN_GE(<(x1[0], 100), x0[0], x1[0])), ≥)∧[(-1)bni_41 + (-1)Bound*bni_41] + [bni_41]x1[0] ≥ 0∧[(-1)bso_42] ≥ 0)
The constraints for P
> respective P
bound 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 P
bound.
Using the following integer polynomial ordering the resulting constraints can be solved
Polynomial interpretation over integers[POLO]:
POL(TRUE) = 0
POL(FALSE) = 0
POL(56_0_test_Load(x1)) = [-1] + [-1]x1
POL(97_0_test_LE(x1, x2)) = [-1] + [-1]x2
POL(Cond_97_0_test_LE(x1, x2, x3)) = [-1]x3 + [-1]x2
POL(>(x1, x2)) = [-1]
POL(0) = 0
POL(+(x1, x2)) = x1 + x2
POL(-1) = [-1]
POL(130_0_test_LE(x1, x2)) = [-1]x1
POL(Cond_130_0_test_LE(x1, x2, x3)) = [-1] + [-1]x2
POL(162_0_test_LE(x1, x2)) = [-1] + [-1]x1
POL(Cond_162_0_test_LE(x1, x2, x3)) = [2] + [-1]x2
POL(193_0_test_LE(x1, x2)) = [-1] + x1
POL(Cond_193_0_test_LE(x1, x2, x3)) = [-1] + [-1]x2
POL(221_0_test_LE(x1, x2)) = [1] + [2]x2 + x1
POL(Cond_221_0_test_LE(x1, x2, x3)) = [-1] + [2]x3 + [-1]x2
POL(248_0_test_LE(x1, x2)) = [-1] + [2]x1
POL(Cond_248_0_test_LE(x1, x2, x3)) = [-1] + [-1]x2
POL(285_0_test_LE(x1, x2)) = [1] + [-1]x1
POL(Cond_285_0_test_LE(x1, x2, x3)) = [-1] + [-1]x2
POL(319_0_test_LE(x1, x2)) = 0
POL(Cond_319_0_test_LE(x1, x2, x3)) = [1] + [-1]x2
POL(354_0_test_LE(x1, x2)) = [-1] + [-1]x1
POL(Cond_354_0_test_LE(x1, x2, x3)) = [-1]x2
POL(386_0_test_LE(x1, x2)) = [2] + x1
POL(Cond_386_0_test_LE(x1, x2, x3)) = [-1] + [-1]x2
POL(426_0_test_LE(x1, x2)) = [1] + [-1]x1
POL(Cond_426_0_test_LE(x1, x2, x3)) = [-1] + [-1]x2
POL(465_0_test_LE(x1)) = 0
POL(471_0_test_Return) = [-1]
POL(Cond_465_0_test_LE(x1, x2)) = [-1]x2
POL(COND_56_1_MAIN_INVOKEMETHOD(x1, x2, x3, x4)) = [-1] + [-1]x4
POL(48_0_MAIN_GE(x1, x2)) = [-1] + [-1]x2
POL(1) = [1]
POL(56_1_MAIN_INVOKEMETHOD(x1, x2, x3)) = [-1] + [-1]x3
POL(COND_48_0_MAIN_GE(x1, x2, x3)) = [-1] + [-1]x3
POL(<(x1, x2)) = [-1]
POL(100) = [100]
The following pairs are in P
>:
COND_56_1_MAIN_INVOKEMETHOD(TRUE, 471_0_test_Return, x0[3], x1[3]) → 48_0_MAIN_GE(x0[3], +(x1[3], 1))
The following pairs are in P
bound:
48_0_MAIN_GE(x0[0], x1[0]) → COND_48_0_MAIN_GE(<(x1[0], 100), x0[0], x1[0])
The following pairs are in P
≥:
56_1_MAIN_INVOKEMETHOD(471_0_test_Return, x0[2], x1[2]) → COND_56_1_MAIN_INVOKEMETHOD(>(x1[2], 0), 471_0_test_Return, x0[2], x1[2])
COND_48_0_MAIN_GE(TRUE, x0[1], x1[1]) → 56_1_MAIN_INVOKEMETHOD(56_0_test_Load(x1[1]), x0[1], x1[1])
48_0_MAIN_GE(x0[0], x1[0]) → COND_48_0_MAIN_GE(<(x1[0], 100), x0[0], x1[0])
At least the following rules have been oriented under context sensitive arithmetic replacement:
97_0_test_LE(x0, x0)1 → 56_0_test_Load(x0)1
130_0_test_LE(x0, 0)1 → 162_0_test_LE(x0, x0)1
130_0_test_LE(x0, +(x1, -1))1 → Cond_130_0_test_LE(TRUE, x0, x1)1
285_0_test_LE(x0, x1)1 → Cond_285_0_test_LE(>(x1, 0), x0, x1)1
Cond_354_0_test_LE(>(x1, 0), x0, x1)1 → 354_0_test_LE(x0, x1)1
426_0_test_LE(x0, +(x1, -1))1 → Cond_426_0_test_LE(TRUE, x0, x1)1
465_0_test_LE(0)1 → 471_0_test_Return1
(120) Complex Obligation (AND)
(121) 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
The ITRS R consists of the following rules:
56_0_test_Load(
x0) →
97_0_test_LE(
x0,
x0)
97_0_test_LE(
x0,
x1) →
Cond_97_0_test_LE(
x1 > 0,
x0,
x1)
Cond_97_0_test_LE(
TRUE,
x0,
x1) →
97_0_test_LE(
x0,
x1 + -1)
97_0_test_LE(
x0,
0) →
130_0_test_LE(
x0,
x0)
130_0_test_LE(
x0,
x1) →
Cond_130_0_test_LE(
x1 > 0,
x0,
x1)
Cond_130_0_test_LE(
TRUE,
x0,
x1) →
130_0_test_LE(
x0,
x1 + -1)
130_0_test_LE(
x0,
0) →
162_0_test_LE(
x0,
x0)
162_0_test_LE(
x0,
x1) →
Cond_162_0_test_LE(
x1 > 0,
x0,
x1)
Cond_162_0_test_LE(
TRUE,
x0,
x1) →
162_0_test_LE(
x0,
x1 + -1)
162_0_test_LE(
x0,
0) →
193_0_test_LE(
x0,
x0)
193_0_test_LE(
x0,
x1) →
Cond_193_0_test_LE(
x1 > 0,
x0,
x1)
Cond_193_0_test_LE(
TRUE,
x0,
x1) →
193_0_test_LE(
x0,
x1 + -1)
193_0_test_LE(
x0,
0) →
221_0_test_LE(
x0,
x0)
221_0_test_LE(
x0,
x1) →
Cond_221_0_test_LE(
x1 > 0,
x0,
x1)
Cond_221_0_test_LE(
TRUE,
x0,
x1) →
221_0_test_LE(
x0,
x1 + -1)
221_0_test_LE(
x0,
0) →
248_0_test_LE(
x0,
x0)
248_0_test_LE(
x0,
x1) →
Cond_248_0_test_LE(
x1 > 0,
x0,
x1)
Cond_248_0_test_LE(
TRUE,
x0,
x1) →
248_0_test_LE(
x0,
x1 + -1)
248_0_test_LE(
x0,
0) →
285_0_test_LE(
x0,
x0)
285_0_test_LE(
x0,
x1) →
Cond_285_0_test_LE(
x1 > 0,
x0,
x1)
Cond_285_0_test_LE(
TRUE,
x0,
x1) →
285_0_test_LE(
x0,
x1 + -1)
285_0_test_LE(
x0,
0) →
319_0_test_LE(
x0,
x0)
319_0_test_LE(
x0,
x1) →
Cond_319_0_test_LE(
x1 > 0,
x0,
x1)
Cond_319_0_test_LE(
TRUE,
x0,
x1) →
319_0_test_LE(
x0,
x1 + -1)
319_0_test_LE(
x0,
0) →
354_0_test_LE(
x0,
x0)
354_0_test_LE(
x0,
x1) →
Cond_354_0_test_LE(
x1 > 0,
x0,
x1)
Cond_354_0_test_LE(
TRUE,
x0,
x1) →
354_0_test_LE(
x0,
x1 + -1)
354_0_test_LE(
x0,
0) →
386_0_test_LE(
x0,
x0)
386_0_test_LE(
x0,
x1) →
Cond_386_0_test_LE(
x1 > 0,
x0,
x1)
Cond_386_0_test_LE(
TRUE,
x0,
x1) →
386_0_test_LE(
x0,
x1 + -1)
386_0_test_LE(
x0,
0) →
426_0_test_LE(
x0,
x0)
426_0_test_LE(
x0,
x1) →
Cond_426_0_test_LE(
x1 > 0,
x0,
x1)
Cond_426_0_test_LE(
TRUE,
x0,
x1) →
426_0_test_LE(
x0,
x1 + -1)
426_0_test_LE(
x0,
0) →
465_0_test_LE(
x0)
465_0_test_LE(
0) →
471_0_test_Return465_0_test_LE(
x0) →
Cond_465_0_test_LE(
x0 > 0,
x0)
Cond_465_0_test_LE(
TRUE,
x0) →
465_0_test_LE(
x0 + -1)
The integer pair graph contains the following rules and edges:
(2):
56_1_MAIN_INVOKEMETHOD(
471_0_test_Return,
x0[2],
x1[2]) →
COND_56_1_MAIN_INVOKEMETHOD(
x1[2] > 0,
471_0_test_Return,
x0[2],
x1[2])
(1):
COND_48_0_MAIN_GE(
TRUE,
x0[1],
x1[1]) →
56_1_MAIN_INVOKEMETHOD(
56_0_test_Load(
x1[1]),
x0[1],
x1[1])
(0):
48_0_MAIN_GE(
x0[0],
x1[0]) →
COND_48_0_MAIN_GE(
x1[0] < 100,
x0[0],
x1[0])
(0) -> (1), if ((x1[0] < 100 →* TRUE)∧(x0[0] →* x0[1])∧(x1[0] →* x1[1]))
(1) -> (2), if ((56_0_test_Load(x1[1]) →* 471_0_test_Return)∧(x0[1] →* x0[2])∧(x1[1] →* x1[2]))
The set Q consists of the following terms:
56_0_test_Load(
x0)
97_0_test_LE(
x0,
x1)
Cond_97_0_test_LE(
TRUE,
x0,
x1)
130_0_test_LE(
x0,
x1)
Cond_130_0_test_LE(
TRUE,
x0,
x1)
162_0_test_LE(
x0,
x1)
Cond_162_0_test_LE(
TRUE,
x0,
x1)
193_0_test_LE(
x0,
x1)
Cond_193_0_test_LE(
TRUE,
x0,
x1)
221_0_test_LE(
x0,
x1)
Cond_221_0_test_LE(
TRUE,
x0,
x1)
248_0_test_LE(
x0,
x1)
Cond_248_0_test_LE(
TRUE,
x0,
x1)
285_0_test_LE(
x0,
x1)
Cond_285_0_test_LE(
TRUE,
x0,
x1)
319_0_test_LE(
x0,
x1)
Cond_319_0_test_LE(
TRUE,
x0,
x1)
354_0_test_LE(
x0,
x1)
Cond_354_0_test_LE(
TRUE,
x0,
x1)
386_0_test_LE(
x0,
x1)
Cond_386_0_test_LE(
TRUE,
x0,
x1)
426_0_test_LE(
x0,
x1)
Cond_426_0_test_LE(
TRUE,
x0,
x1)
465_0_test_LE(
x0)
Cond_465_0_test_LE(
TRUE,
x0)
(122) IDependencyGraphProof (EQUIVALENT transformation)
The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 0 SCCs with 3 less nodes.
(123) TRUE
(124) 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
The ITRS R consists of the following rules:
56_0_test_Load(
x0) →
97_0_test_LE(
x0,
x0)
97_0_test_LE(
x0,
x1) →
Cond_97_0_test_LE(
x1 > 0,
x0,
x1)
Cond_97_0_test_LE(
TRUE,
x0,
x1) →
97_0_test_LE(
x0,
x1 + -1)
97_0_test_LE(
x0,
0) →
130_0_test_LE(
x0,
x0)
130_0_test_LE(
x0,
x1) →
Cond_130_0_test_LE(
x1 > 0,
x0,
x1)
Cond_130_0_test_LE(
TRUE,
x0,
x1) →
130_0_test_LE(
x0,
x1 + -1)
130_0_test_LE(
x0,
0) →
162_0_test_LE(
x0,
x0)
162_0_test_LE(
x0,
x1) →
Cond_162_0_test_LE(
x1 > 0,
x0,
x1)
Cond_162_0_test_LE(
TRUE,
x0,
x1) →
162_0_test_LE(
x0,
x1 + -1)
162_0_test_LE(
x0,
0) →
193_0_test_LE(
x0,
x0)
193_0_test_LE(
x0,
x1) →
Cond_193_0_test_LE(
x1 > 0,
x0,
x1)
Cond_193_0_test_LE(
TRUE,
x0,
x1) →
193_0_test_LE(
x0,
x1 + -1)
193_0_test_LE(
x0,
0) →
221_0_test_LE(
x0,
x0)
221_0_test_LE(
x0,
x1) →
Cond_221_0_test_LE(
x1 > 0,
x0,
x1)
Cond_221_0_test_LE(
TRUE,
x0,
x1) →
221_0_test_LE(
x0,
x1 + -1)
221_0_test_LE(
x0,
0) →
248_0_test_LE(
x0,
x0)
248_0_test_LE(
x0,
x1) →
Cond_248_0_test_LE(
x1 > 0,
x0,
x1)
Cond_248_0_test_LE(
TRUE,
x0,
x1) →
248_0_test_LE(
x0,
x1 + -1)
248_0_test_LE(
x0,
0) →
285_0_test_LE(
x0,
x0)
285_0_test_LE(
x0,
x1) →
Cond_285_0_test_LE(
x1 > 0,
x0,
x1)
Cond_285_0_test_LE(
TRUE,
x0,
x1) →
285_0_test_LE(
x0,
x1 + -1)
285_0_test_LE(
x0,
0) →
319_0_test_LE(
x0,
x0)
319_0_test_LE(
x0,
x1) →
Cond_319_0_test_LE(
x1 > 0,
x0,
x1)
Cond_319_0_test_LE(
TRUE,
x0,
x1) →
319_0_test_LE(
x0,
x1 + -1)
319_0_test_LE(
x0,
0) →
354_0_test_LE(
x0,
x0)
354_0_test_LE(
x0,
x1) →
Cond_354_0_test_LE(
x1 > 0,
x0,
x1)
Cond_354_0_test_LE(
TRUE,
x0,
x1) →
354_0_test_LE(
x0,
x1 + -1)
354_0_test_LE(
x0,
0) →
386_0_test_LE(
x0,
x0)
386_0_test_LE(
x0,
x1) →
Cond_386_0_test_LE(
x1 > 0,
x0,
x1)
Cond_386_0_test_LE(
TRUE,
x0,
x1) →
386_0_test_LE(
x0,
x1 + -1)
386_0_test_LE(
x0,
0) →
426_0_test_LE(
x0,
x0)
426_0_test_LE(
x0,
x1) →
Cond_426_0_test_LE(
x1 > 0,
x0,
x1)
Cond_426_0_test_LE(
TRUE,
x0,
x1) →
426_0_test_LE(
x0,
x1 + -1)
426_0_test_LE(
x0,
0) →
465_0_test_LE(
x0)
465_0_test_LE(
0) →
471_0_test_Return465_0_test_LE(
x0) →
Cond_465_0_test_LE(
x0 > 0,
x0)
Cond_465_0_test_LE(
TRUE,
x0) →
465_0_test_LE(
x0 + -1)
The integer pair graph contains the following rules and edges:
(3):
COND_56_1_MAIN_INVOKEMETHOD(
TRUE,
471_0_test_Return,
x0[3],
x1[3]) →
48_0_MAIN_GE(
x0[3],
x1[3] + 1)
(2):
56_1_MAIN_INVOKEMETHOD(
471_0_test_Return,
x0[2],
x1[2]) →
COND_56_1_MAIN_INVOKEMETHOD(
x1[2] > 0,
471_0_test_Return,
x0[2],
x1[2])
(1):
COND_48_0_MAIN_GE(
TRUE,
x0[1],
x1[1]) →
56_1_MAIN_INVOKEMETHOD(
56_0_test_Load(
x1[1]),
x0[1],
x1[1])
(1) -> (2), if ((56_0_test_Load(x1[1]) →* 471_0_test_Return)∧(x0[1] →* x0[2])∧(x1[1] →* x1[2]))
(2) -> (3), if ((x1[2] > 0 →* TRUE)∧(x0[2] →* x0[3])∧(x1[2] →* x1[3]))
The set Q consists of the following terms:
56_0_test_Load(
x0)
97_0_test_LE(
x0,
x1)
Cond_97_0_test_LE(
TRUE,
x0,
x1)
130_0_test_LE(
x0,
x1)
Cond_130_0_test_LE(
TRUE,
x0,
x1)
162_0_test_LE(
x0,
x1)
Cond_162_0_test_LE(
TRUE,
x0,
x1)
193_0_test_LE(
x0,
x1)
Cond_193_0_test_LE(
TRUE,
x0,
x1)
221_0_test_LE(
x0,
x1)
Cond_221_0_test_LE(
TRUE,
x0,
x1)
248_0_test_LE(
x0,
x1)
Cond_248_0_test_LE(
TRUE,
x0,
x1)
285_0_test_LE(
x0,
x1)
Cond_285_0_test_LE(
TRUE,
x0,
x1)
319_0_test_LE(
x0,
x1)
Cond_319_0_test_LE(
TRUE,
x0,
x1)
354_0_test_LE(
x0,
x1)
Cond_354_0_test_LE(
TRUE,
x0,
x1)
386_0_test_LE(
x0,
x1)
Cond_386_0_test_LE(
TRUE,
x0,
x1)
426_0_test_LE(
x0,
x1)
Cond_426_0_test_LE(
TRUE,
x0,
x1)
465_0_test_LE(
x0)
Cond_465_0_test_LE(
TRUE,
x0)
(125) IDependencyGraphProof (EQUIVALENT transformation)
The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 0 SCCs with 3 less nodes.
(126) TRUE
(127) 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
The ITRS R consists of the following rules:
56_0_test_Load(
x0) →
97_0_test_LE(
x0,
x0)
97_0_test_LE(
x0,
x1) →
Cond_97_0_test_LE(
x1 > 0,
x0,
x1)
Cond_97_0_test_LE(
TRUE,
x0,
x1) →
97_0_test_LE(
x0,
x1 + -1)
97_0_test_LE(
x0,
0) →
130_0_test_LE(
x0,
x0)
130_0_test_LE(
x0,
x1) →
Cond_130_0_test_LE(
x1 > 0,
x0,
x1)
Cond_130_0_test_LE(
TRUE,
x0,
x1) →
130_0_test_LE(
x0,
x1 + -1)
130_0_test_LE(
x0,
0) →
162_0_test_LE(
x0,
x0)
162_0_test_LE(
x0,
x1) →
Cond_162_0_test_LE(
x1 > 0,
x0,
x1)
Cond_162_0_test_LE(
TRUE,
x0,
x1) →
162_0_test_LE(
x0,
x1 + -1)
162_0_test_LE(
x0,
0) →
193_0_test_LE(
x0,
x0)
193_0_test_LE(
x0,
x1) →
Cond_193_0_test_LE(
x1 > 0,
x0,
x1)
Cond_193_0_test_LE(
TRUE,
x0,
x1) →
193_0_test_LE(
x0,
x1 + -1)
193_0_test_LE(
x0,
0) →
221_0_test_LE(
x0,
x0)
221_0_test_LE(
x0,
x1) →
Cond_221_0_test_LE(
x1 > 0,
x0,
x1)
Cond_221_0_test_LE(
TRUE,
x0,
x1) →
221_0_test_LE(
x0,
x1 + -1)
221_0_test_LE(
x0,
0) →
248_0_test_LE(
x0,
x0)
248_0_test_LE(
x0,
x1) →
Cond_248_0_test_LE(
x1 > 0,
x0,
x1)
Cond_248_0_test_LE(
TRUE,
x0,
x1) →
248_0_test_LE(
x0,
x1 + -1)
248_0_test_LE(
x0,
0) →
285_0_test_LE(
x0,
x0)
285_0_test_LE(
x0,
x1) →
Cond_285_0_test_LE(
x1 > 0,
x0,
x1)
Cond_285_0_test_LE(
TRUE,
x0,
x1) →
285_0_test_LE(
x0,
x1 + -1)
285_0_test_LE(
x0,
0) →
319_0_test_LE(
x0,
x0)
319_0_test_LE(
x0,
x1) →
Cond_319_0_test_LE(
x1 > 0,
x0,
x1)
Cond_319_0_test_LE(
TRUE,
x0,
x1) →
319_0_test_LE(
x0,
x1 + -1)
319_0_test_LE(
x0,
0) →
354_0_test_LE(
x0,
x0)
354_0_test_LE(
x0,
x1) →
Cond_354_0_test_LE(
x1 > 0,
x0,
x1)
Cond_354_0_test_LE(
TRUE,
x0,
x1) →
354_0_test_LE(
x0,
x1 + -1)
354_0_test_LE(
x0,
0) →
386_0_test_LE(
x0,
x0)
386_0_test_LE(
x0,
x1) →
Cond_386_0_test_LE(
x1 > 0,
x0,
x1)
Cond_386_0_test_LE(
TRUE,
x0,
x1) →
386_0_test_LE(
x0,
x1 + -1)
386_0_test_LE(
x0,
0) →
426_0_test_LE(
x0,
x0)
426_0_test_LE(
x0,
x1) →
Cond_426_0_test_LE(
x1 > 0,
x0,
x1)
Cond_426_0_test_LE(
TRUE,
x0,
x1) →
426_0_test_LE(
x0,
x1 + -1)
426_0_test_LE(
x0,
0) →
465_0_test_LE(
x0)
465_0_test_LE(
0) →
471_0_test_Return465_0_test_LE(
x0) →
Cond_465_0_test_LE(
x0 > 0,
x0)
Cond_465_0_test_LE(
TRUE,
x0) →
465_0_test_LE(
x0 + -1)
The integer pair graph contains the following rules and edges:
(0):
48_0_MAIN_GE(
x0[0],
x1[0]) →
COND_48_0_MAIN_GE(
x1[0] < 100,
x0[0],
x1[0])
(1):
COND_48_0_MAIN_GE(
TRUE,
x0[1],
x1[1]) →
56_1_MAIN_INVOKEMETHOD(
56_0_test_Load(
x1[1]),
x0[1],
x1[1])
(2):
56_1_MAIN_INVOKEMETHOD(
471_0_test_Return,
x0[2],
x1[2]) →
COND_56_1_MAIN_INVOKEMETHOD(
x1[2] > 0,
471_0_test_Return,
x0[2],
x1[2])
(3):
COND_56_1_MAIN_INVOKEMETHOD(
TRUE,
471_0_test_Return,
x0[3],
x1[3]) →
48_0_MAIN_GE(
x0[3],
x1[3] + 1)
(5):
COND_48_0_MAIN_GE1(
TRUE,
x0[5],
x1[5]) →
48_0_MAIN_GE(
x0[5] - 1,
x0[5] - 1)
(3) -> (0), if ((x0[3] →* x0[0])∧(x1[3] + 1 →* x1[0]))
(5) -> (0), if ((x0[5] - 1 →* x0[0])∧(x0[5] - 1 →* x1[0]))
(0) -> (1), if ((x1[0] < 100 →* TRUE)∧(x0[0] →* x0[1])∧(x1[0] →* x1[1]))
(1) -> (2), if ((56_0_test_Load(x1[1]) →* 471_0_test_Return)∧(x0[1] →* x0[2])∧(x1[1] →* x1[2]))
(2) -> (3), if ((x1[2] > 0 →* TRUE)∧(x0[2] →* x0[3])∧(x1[2] →* x1[3]))
The set Q consists of the following terms:
56_0_test_Load(
x0)
97_0_test_LE(
x0,
x1)
Cond_97_0_test_LE(
TRUE,
x0,
x1)
130_0_test_LE(
x0,
x1)
Cond_130_0_test_LE(
TRUE,
x0,
x1)
162_0_test_LE(
x0,
x1)
Cond_162_0_test_LE(
TRUE,
x0,
x1)
193_0_test_LE(
x0,
x1)
Cond_193_0_test_LE(
TRUE,
x0,
x1)
221_0_test_LE(
x0,
x1)
Cond_221_0_test_LE(
TRUE,
x0,
x1)
248_0_test_LE(
x0,
x1)
Cond_248_0_test_LE(
TRUE,
x0,
x1)
285_0_test_LE(
x0,
x1)
Cond_285_0_test_LE(
TRUE,
x0,
x1)
319_0_test_LE(
x0,
x1)
Cond_319_0_test_LE(
TRUE,
x0,
x1)
354_0_test_LE(
x0,
x1)
Cond_354_0_test_LE(
TRUE,
x0,
x1)
386_0_test_LE(
x0,
x1)
Cond_386_0_test_LE(
TRUE,
x0,
x1)
426_0_test_LE(
x0,
x1)
Cond_426_0_test_LE(
TRUE,
x0,
x1)
465_0_test_LE(
x0)
Cond_465_0_test_LE(
TRUE,
x0)
(128) IDependencyGraphProof (EQUIVALENT transformation)
The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 1 SCC with 1 less node.
(129) 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
The ITRS R consists of the following rules:
56_0_test_Load(
x0) →
97_0_test_LE(
x0,
x0)
97_0_test_LE(
x0,
x1) →
Cond_97_0_test_LE(
x1 > 0,
x0,
x1)
Cond_97_0_test_LE(
TRUE,
x0,
x1) →
97_0_test_LE(
x0,
x1 + -1)
97_0_test_LE(
x0,
0) →
130_0_test_LE(
x0,
x0)
130_0_test_LE(
x0,
x1) →
Cond_130_0_test_LE(
x1 > 0,
x0,
x1)
Cond_130_0_test_LE(
TRUE,
x0,
x1) →
130_0_test_LE(
x0,
x1 + -1)
130_0_test_LE(
x0,
0) →
162_0_test_LE(
x0,
x0)
162_0_test_LE(
x0,
x1) →
Cond_162_0_test_LE(
x1 > 0,
x0,
x1)
Cond_162_0_test_LE(
TRUE,
x0,
x1) →
162_0_test_LE(
x0,
x1 + -1)
162_0_test_LE(
x0,
0) →
193_0_test_LE(
x0,
x0)
193_0_test_LE(
x0,
x1) →
Cond_193_0_test_LE(
x1 > 0,
x0,
x1)
Cond_193_0_test_LE(
TRUE,
x0,
x1) →
193_0_test_LE(
x0,
x1 + -1)
193_0_test_LE(
x0,
0) →
221_0_test_LE(
x0,
x0)
221_0_test_LE(
x0,
x1) →
Cond_221_0_test_LE(
x1 > 0,
x0,
x1)
Cond_221_0_test_LE(
TRUE,
x0,
x1) →
221_0_test_LE(
x0,
x1 + -1)
221_0_test_LE(
x0,
0) →
248_0_test_LE(
x0,
x0)
248_0_test_LE(
x0,
x1) →
Cond_248_0_test_LE(
x1 > 0,
x0,
x1)
Cond_248_0_test_LE(
TRUE,
x0,
x1) →
248_0_test_LE(
x0,
x1 + -1)
248_0_test_LE(
x0,
0) →
285_0_test_LE(
x0,
x0)
285_0_test_LE(
x0,
x1) →
Cond_285_0_test_LE(
x1 > 0,
x0,
x1)
Cond_285_0_test_LE(
TRUE,
x0,
x1) →
285_0_test_LE(
x0,
x1 + -1)
285_0_test_LE(
x0,
0) →
319_0_test_LE(
x0,
x0)
319_0_test_LE(
x0,
x1) →
Cond_319_0_test_LE(
x1 > 0,
x0,
x1)
Cond_319_0_test_LE(
TRUE,
x0,
x1) →
319_0_test_LE(
x0,
x1 + -1)
319_0_test_LE(
x0,
0) →
354_0_test_LE(
x0,
x0)
354_0_test_LE(
x0,
x1) →
Cond_354_0_test_LE(
x1 > 0,
x0,
x1)
Cond_354_0_test_LE(
TRUE,
x0,
x1) →
354_0_test_LE(
x0,
x1 + -1)
354_0_test_LE(
x0,
0) →
386_0_test_LE(
x0,
x0)
386_0_test_LE(
x0,
x1) →
Cond_386_0_test_LE(
x1 > 0,
x0,
x1)
Cond_386_0_test_LE(
TRUE,
x0,
x1) →
386_0_test_LE(
x0,
x1 + -1)
386_0_test_LE(
x0,
0) →
426_0_test_LE(
x0,
x0)
426_0_test_LE(
x0,
x1) →
Cond_426_0_test_LE(
x1 > 0,
x0,
x1)
Cond_426_0_test_LE(
TRUE,
x0,
x1) →
426_0_test_LE(
x0,
x1 + -1)
426_0_test_LE(
x0,
0) →
465_0_test_LE(
x0)
465_0_test_LE(
0) →
471_0_test_Return465_0_test_LE(
x0) →
Cond_465_0_test_LE(
x0 > 0,
x0)
Cond_465_0_test_LE(
TRUE,
x0) →
465_0_test_LE(
x0 + -1)
The integer pair graph contains the following rules and edges:
(3):
COND_56_1_MAIN_INVOKEMETHOD(
TRUE,
471_0_test_Return,
x0[3],
x1[3]) →
48_0_MAIN_GE(
x0[3],
x1[3] + 1)
(2):
56_1_MAIN_INVOKEMETHOD(
471_0_test_Return,
x0[2],
x1[2]) →
COND_56_1_MAIN_INVOKEMETHOD(
x1[2] > 0,
471_0_test_Return,
x0[2],
x1[2])
(1):
COND_48_0_MAIN_GE(
TRUE,
x0[1],
x1[1]) →
56_1_MAIN_INVOKEMETHOD(
56_0_test_Load(
x1[1]),
x0[1],
x1[1])
(0):
48_0_MAIN_GE(
x0[0],
x1[0]) →
COND_48_0_MAIN_GE(
x1[0] < 100,
x0[0],
x1[0])
(3) -> (0), if ((x0[3] →* x0[0])∧(x1[3] + 1 →* x1[0]))
(0) -> (1), if ((x1[0] < 100 →* TRUE)∧(x0[0] →* x0[1])∧(x1[0] →* x1[1]))
(1) -> (2), if ((56_0_test_Load(x1[1]) →* 471_0_test_Return)∧(x0[1] →* x0[2])∧(x1[1] →* x1[2]))
(2) -> (3), if ((x1[2] > 0 →* TRUE)∧(x0[2] →* x0[3])∧(x1[2] →* x1[3]))
The set Q consists of the following terms:
56_0_test_Load(
x0)
97_0_test_LE(
x0,
x1)
Cond_97_0_test_LE(
TRUE,
x0,
x1)
130_0_test_LE(
x0,
x1)
Cond_130_0_test_LE(
TRUE,
x0,
x1)
162_0_test_LE(
x0,
x1)
Cond_162_0_test_LE(
TRUE,
x0,
x1)
193_0_test_LE(
x0,
x1)
Cond_193_0_test_LE(
TRUE,
x0,
x1)
221_0_test_LE(
x0,
x1)
Cond_221_0_test_LE(
TRUE,
x0,
x1)
248_0_test_LE(
x0,
x1)
Cond_248_0_test_LE(
TRUE,
x0,
x1)
285_0_test_LE(
x0,
x1)
Cond_285_0_test_LE(
TRUE,
x0,
x1)
319_0_test_LE(
x0,
x1)
Cond_319_0_test_LE(
TRUE,
x0,
x1)
354_0_test_LE(
x0,
x1)
Cond_354_0_test_LE(
TRUE,
x0,
x1)
386_0_test_LE(
x0,
x1)
Cond_386_0_test_LE(
TRUE,
x0,
x1)
426_0_test_LE(
x0,
x1)
Cond_426_0_test_LE(
TRUE,
x0,
x1)
465_0_test_LE(
x0)
Cond_465_0_test_LE(
TRUE,
x0)
(130) 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
COND_56_1_MAIN_INVOKEMETHOD(
TRUE,
471_0_test_Return,
x0[3],
x1[3]) →
48_0_MAIN_GE(
x0[3],
+(
x1[3],
1)) the following chains were created:
- We consider the chain COND_56_1_MAIN_INVOKEMETHOD(TRUE, 471_0_test_Return, x0[3], x1[3]) → 48_0_MAIN_GE(x0[3], +(x1[3], 1)) which results in the following constraint:
(1) (COND_56_1_MAIN_INVOKEMETHOD(TRUE, 471_0_test_Return, x0[3], x1[3])≥NonInfC∧COND_56_1_MAIN_INVOKEMETHOD(TRUE, 471_0_test_Return, x0[3], x1[3])≥48_0_MAIN_GE(x0[3], +(x1[3], 1))∧(UIncreasing(48_0_MAIN_GE(x0[3], +(x1[3], 1))), ≥))
We simplified constraint (1) using rule (POLY_CONSTRAINTS) which results in the following new constraint:
(2) ((UIncreasing(48_0_MAIN_GE(x0[3], +(x1[3], 1))), ≥)∧[(-1)bso_37] ≥ 0)
We simplified constraint (2) using rule (IDP_POLY_SIMPLIFY) which results in the following new constraint:
(3) ((UIncreasing(48_0_MAIN_GE(x0[3], +(x1[3], 1))), ≥)∧[(-1)bso_37] ≥ 0)
We simplified constraint (3) using rule (POLY_REMOVE_MIN_MAX) which results in the following new constraint:
(4) ((UIncreasing(48_0_MAIN_GE(x0[3], +(x1[3], 1))), ≥)∧[(-1)bso_37] ≥ 0)
We simplified constraint (4) using rule (IDP_UNRESTRICTED_VARS) which results in the following new constraint:
(5) ((UIncreasing(48_0_MAIN_GE(x0[3], +(x1[3], 1))), ≥)∧0 = 0∧[(-1)bso_37] ≥ 0)
For Pair
56_1_MAIN_INVOKEMETHOD(
471_0_test_Return,
x0[2],
x1[2]) →
COND_56_1_MAIN_INVOKEMETHOD(
>(
x1[2],
0),
471_0_test_Return,
x0[2],
x1[2]) the following chains were created:
- We consider the chain 56_1_MAIN_INVOKEMETHOD(471_0_test_Return, x0[2], x1[2]) → COND_56_1_MAIN_INVOKEMETHOD(>(x1[2], 0), 471_0_test_Return, x0[2], x1[2]), COND_56_1_MAIN_INVOKEMETHOD(TRUE, 471_0_test_Return, x0[3], x1[3]) → 48_0_MAIN_GE(x0[3], +(x1[3], 1)) which results in the following constraint:
(6) (>(x1[2], 0)=TRUE∧x0[2]=x0[3]∧x1[2]=x1[3] ⇒ 56_1_MAIN_INVOKEMETHOD(471_0_test_Return, x0[2], x1[2])≥NonInfC∧56_1_MAIN_INVOKEMETHOD(471_0_test_Return, x0[2], x1[2])≥COND_56_1_MAIN_INVOKEMETHOD(>(x1[2], 0), 471_0_test_Return, x0[2], x1[2])∧(UIncreasing(COND_56_1_MAIN_INVOKEMETHOD(>(x1[2], 0), 471_0_test_Return, x0[2], x1[2])), ≥))
We simplified constraint (6) using rule (IV) which results in the following new constraint:
(7) (>(x1[2], 0)=TRUE ⇒ 56_1_MAIN_INVOKEMETHOD(471_0_test_Return, x0[2], x1[2])≥NonInfC∧56_1_MAIN_INVOKEMETHOD(471_0_test_Return, x0[2], x1[2])≥COND_56_1_MAIN_INVOKEMETHOD(>(x1[2], 0), 471_0_test_Return, x0[2], x1[2])∧(UIncreasing(COND_56_1_MAIN_INVOKEMETHOD(>(x1[2], 0), 471_0_test_Return, x0[2], x1[2])), ≥))
We simplified constraint (7) using rule (POLY_CONSTRAINTS) which results in the following new constraint:
(8) (x1[2] + [-1] ≥ 0 ⇒ (UIncreasing(COND_56_1_MAIN_INVOKEMETHOD(>(x1[2], 0), 471_0_test_Return, x0[2], x1[2])), ≥)∧[(-1)bni_38 + (-1)Bound*bni_38] + [(-1)bni_38]x1[2] ≥ 0∧[(-1)bso_39] ≥ 0)
We simplified constraint (8) using rule (IDP_POLY_SIMPLIFY) which results in the following new constraint:
(9) (x1[2] + [-1] ≥ 0 ⇒ (UIncreasing(COND_56_1_MAIN_INVOKEMETHOD(>(x1[2], 0), 471_0_test_Return, x0[2], x1[2])), ≥)∧[(-1)bni_38 + (-1)Bound*bni_38] + [(-1)bni_38]x1[2] ≥ 0∧[(-1)bso_39] ≥ 0)
We simplified constraint (9) using rule (POLY_REMOVE_MIN_MAX) which results in the following new constraint:
(10) (x1[2] + [-1] ≥ 0 ⇒ (UIncreasing(COND_56_1_MAIN_INVOKEMETHOD(>(x1[2], 0), 471_0_test_Return, x0[2], x1[2])), ≥)∧[(-1)bni_38 + (-1)Bound*bni_38] + [(-1)bni_38]x1[2] ≥ 0∧[(-1)bso_39] ≥ 0)
We simplified constraint (10) using rule (IDP_SMT_SPLIT) which results in the following new constraint:
(11) (x1[2] ≥ 0 ⇒ (UIncreasing(COND_56_1_MAIN_INVOKEMETHOD(>(x1[2], 0), 471_0_test_Return, x0[2], x1[2])), ≥)∧[(-2)bni_38 + (-1)Bound*bni_38] + [(-1)bni_38]x1[2] ≥ 0∧[(-1)bso_39] ≥ 0)
For Pair
COND_48_0_MAIN_GE(
TRUE,
x0[1],
x1[1]) →
56_1_MAIN_INVOKEMETHOD(
56_0_test_Load(
x1[1]),
x0[1],
x1[1]) the following chains were created:
- We consider the chain COND_48_0_MAIN_GE(TRUE, x0[1], x1[1]) → 56_1_MAIN_INVOKEMETHOD(56_0_test_Load(x1[1]), x0[1], x1[1]) which results in the following constraint:
(12) (COND_48_0_MAIN_GE(TRUE, x0[1], x1[1])≥NonInfC∧COND_48_0_MAIN_GE(TRUE, x0[1], x1[1])≥56_1_MAIN_INVOKEMETHOD(56_0_test_Load(x1[1]), x0[1], x1[1])∧(UIncreasing(56_1_MAIN_INVOKEMETHOD(56_0_test_Load(x1[1]), x0[1], x1[1])), ≥))
We simplified constraint (12) using rule (POLY_CONSTRAINTS) which results in the following new constraint:
(13) ((UIncreasing(56_1_MAIN_INVOKEMETHOD(56_0_test_Load(x1[1]), x0[1], x1[1])), ≥)∧[(-1)bso_41] ≥ 0)
We simplified constraint (13) using rule (IDP_POLY_SIMPLIFY) which results in the following new constraint:
(14) ((UIncreasing(56_1_MAIN_INVOKEMETHOD(56_0_test_Load(x1[1]), x0[1], x1[1])), ≥)∧[(-1)bso_41] ≥ 0)
We simplified constraint (14) using rule (POLY_REMOVE_MIN_MAX) which results in the following new constraint:
(15) ((UIncreasing(56_1_MAIN_INVOKEMETHOD(56_0_test_Load(x1[1]), x0[1], x1[1])), ≥)∧[(-1)bso_41] ≥ 0)
We simplified constraint (15) using rule (IDP_UNRESTRICTED_VARS) which results in the following new constraint:
(16) ((UIncreasing(56_1_MAIN_INVOKEMETHOD(56_0_test_Load(x1[1]), x0[1], x1[1])), ≥)∧0 = 0∧[(-1)bso_41] ≥ 0)
For Pair
48_0_MAIN_GE(
x0[0],
x1[0]) →
COND_48_0_MAIN_GE(
<(
x1[0],
100),
x0[0],
x1[0]) the following chains were created:
- We consider the chain 48_0_MAIN_GE(x0[0], x1[0]) → COND_48_0_MAIN_GE(<(x1[0], 100), x0[0], x1[0]), COND_48_0_MAIN_GE(TRUE, x0[1], x1[1]) → 56_1_MAIN_INVOKEMETHOD(56_0_test_Load(x1[1]), x0[1], x1[1]) which results in the following constraint:
(17) (<(x1[0], 100)=TRUE∧x0[0]=x0[1]∧x1[0]=x1[1] ⇒ 48_0_MAIN_GE(x0[0], x1[0])≥NonInfC∧48_0_MAIN_GE(x0[0], x1[0])≥COND_48_0_MAIN_GE(<(x1[0], 100), x0[0], x1[0])∧(UIncreasing(COND_48_0_MAIN_GE(<(x1[0], 100), x0[0], x1[0])), ≥))
We simplified constraint (17) using rule (IV) which results in the following new constraint:
(18) (<(x1[0], 100)=TRUE ⇒ 48_0_MAIN_GE(x0[0], x1[0])≥NonInfC∧48_0_MAIN_GE(x0[0], x1[0])≥COND_48_0_MAIN_GE(<(x1[0], 100), x0[0], x1[0])∧(UIncreasing(COND_48_0_MAIN_GE(<(x1[0], 100), x0[0], x1[0])), ≥))
We simplified constraint (18) using rule (POLY_CONSTRAINTS) which results in the following new constraint:
(19) ([99] + [-1]x1[0] ≥ 0 ⇒ (UIncreasing(COND_48_0_MAIN_GE(<(x1[0], 100), x0[0], x1[0])), ≥)∧[(-1)Bound*bni_42] + [(-1)bni_42]x1[0] ≥ 0∧[1 + (-1)bso_43] ≥ 0)
We simplified constraint (19) using rule (IDP_POLY_SIMPLIFY) which results in the following new constraint:
(20) ([99] + [-1]x1[0] ≥ 0 ⇒ (UIncreasing(COND_48_0_MAIN_GE(<(x1[0], 100), x0[0], x1[0])), ≥)∧[(-1)Bound*bni_42] + [(-1)bni_42]x1[0] ≥ 0∧[1 + (-1)bso_43] ≥ 0)
We simplified constraint (20) using rule (POLY_REMOVE_MIN_MAX) which results in the following new constraint:
(21) ([99] + [-1]x1[0] ≥ 0 ⇒ (UIncreasing(COND_48_0_MAIN_GE(<(x1[0], 100), x0[0], x1[0])), ≥)∧[(-1)Bound*bni_42] + [(-1)bni_42]x1[0] ≥ 0∧[1 + (-1)bso_43] ≥ 0)
We simplified constraint (21) using rule (IDP_SMT_SPLIT) which results in the following new constraints:
(22) ([99] + x1[0] ≥ 0∧x1[0] ≥ 0 ⇒ (UIncreasing(COND_48_0_MAIN_GE(<(x1[0], 100), x0[0], x1[0])), ≥)∧[(-1)Bound*bni_42] + [bni_42]x1[0] ≥ 0∧[1 + (-1)bso_43] ≥ 0)
(23) ([99] + [-1]x1[0] ≥ 0∧x1[0] ≥ 0 ⇒ (UIncreasing(COND_48_0_MAIN_GE(<(x1[0], 100), x0[0], x1[0])), ≥)∧[(-1)Bound*bni_42] + [(-1)bni_42]x1[0] ≥ 0∧[1 + (-1)bso_43] ≥ 0)
To summarize, we get the following constraints P
≥ for the following pairs.
- COND_56_1_MAIN_INVOKEMETHOD(TRUE, 471_0_test_Return, x0[3], x1[3]) → 48_0_MAIN_GE(x0[3], +(x1[3], 1))
- ((UIncreasing(48_0_MAIN_GE(x0[3], +(x1[3], 1))), ≥)∧0 = 0∧[(-1)bso_37] ≥ 0)
- 56_1_MAIN_INVOKEMETHOD(471_0_test_Return, x0[2], x1[2]) → COND_56_1_MAIN_INVOKEMETHOD(>(x1[2], 0), 471_0_test_Return, x0[2], x1[2])
- (x1[2] ≥ 0 ⇒ (UIncreasing(COND_56_1_MAIN_INVOKEMETHOD(>(x1[2], 0), 471_0_test_Return, x0[2], x1[2])), ≥)∧[(-2)bni_38 + (-1)Bound*bni_38] + [(-1)bni_38]x1[2] ≥ 0∧[(-1)bso_39] ≥ 0)
- COND_48_0_MAIN_GE(TRUE, x0[1], x1[1]) → 56_1_MAIN_INVOKEMETHOD(56_0_test_Load(x1[1]), x0[1], x1[1])
- ((UIncreasing(56_1_MAIN_INVOKEMETHOD(56_0_test_Load(x1[1]), x0[1], x1[1])), ≥)∧0 = 0∧[(-1)bso_41] ≥ 0)
- 48_0_MAIN_GE(x0[0], x1[0]) → COND_48_0_MAIN_GE(<(x1[0], 100), x0[0], x1[0])
- ([99] + x1[0] ≥ 0∧x1[0] ≥ 0 ⇒ (UIncreasing(COND_48_0_MAIN_GE(<(x1[0], 100), x0[0], x1[0])), ≥)∧[(-1)Bound*bni_42] + [bni_42]x1[0] ≥ 0∧[1 + (-1)bso_43] ≥ 0)
- ([99] + [-1]x1[0] ≥ 0∧x1[0] ≥ 0 ⇒ (UIncreasing(COND_48_0_MAIN_GE(<(x1[0], 100), x0[0], x1[0])), ≥)∧[(-1)Bound*bni_42] + [(-1)bni_42]x1[0] ≥ 0∧[1 + (-1)bso_43] ≥ 0)
The constraints for P
> respective P
bound 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 P
bound.
Using the following integer polynomial ordering the resulting constraints can be solved
Polynomial interpretation over integers[POLO]:
POL(TRUE) = 0
POL(FALSE) = 0
POL(56_0_test_Load(x1)) = 0
POL(97_0_test_LE(x1, x2)) = 0
POL(Cond_97_0_test_LE(x1, x2, x3)) = 0
POL(>(x1, x2)) = 0
POL(0) = 0
POL(+(x1, x2)) = x1 + x2
POL(-1) = [-1]
POL(130_0_test_LE(x1, x2)) = 0
POL(Cond_130_0_test_LE(x1, x2, x3)) = 0
POL(162_0_test_LE(x1, x2)) = 0
POL(Cond_162_0_test_LE(x1, x2, x3)) = 0
POL(193_0_test_LE(x1, x2)) = 0
POL(Cond_193_0_test_LE(x1, x2, x3)) = 0
POL(221_0_test_LE(x1, x2)) = 0
POL(Cond_221_0_test_LE(x1, x2, x3)) = 0
POL(248_0_test_LE(x1, x2)) = 0
POL(Cond_248_0_test_LE(x1, x2, x3)) = 0
POL(285_0_test_LE(x1, x2)) = 0
POL(Cond_285_0_test_LE(x1, x2, x3)) = 0
POL(319_0_test_LE(x1, x2)) = 0
POL(Cond_319_0_test_LE(x1, x2, x3)) = 0
POL(354_0_test_LE(x1, x2)) = 0
POL(Cond_354_0_test_LE(x1, x2, x3)) = 0
POL(386_0_test_LE(x1, x2)) = 0
POL(Cond_386_0_test_LE(x1, x2, x3)) = 0
POL(426_0_test_LE(x1, x2)) = 0
POL(Cond_426_0_test_LE(x1, x2, x3)) = 0
POL(465_0_test_LE(x1)) = 0
POL(471_0_test_Return) = 0
POL(Cond_465_0_test_LE(x1, x2)) = 0
POL(COND_56_1_MAIN_INVOKEMETHOD(x1, x2, x3, x4)) = [-1] + [-1]x4
POL(48_0_MAIN_GE(x1, x2)) = [-1]x2
POL(1) = [1]
POL(56_1_MAIN_INVOKEMETHOD(x1, x2, x3)) = [-1] + [-1]x1 + [-1]x3
POL(COND_48_0_MAIN_GE(x1, x2, x3)) = [-1] + [-1]x3
POL(<(x1, x2)) = 0
POL(100) = [100]
The following pairs are in P
>:
48_0_MAIN_GE(x0[0], x1[0]) → COND_48_0_MAIN_GE(<(x1[0], 100), x0[0], x1[0])
The following pairs are in P
bound:
48_0_MAIN_GE(x0[0], x1[0]) → COND_48_0_MAIN_GE(<(x1[0], 100), x0[0], x1[0])
The following pairs are in P
≥:
COND_56_1_MAIN_INVOKEMETHOD(TRUE, 471_0_test_Return, x0[3], x1[3]) → 48_0_MAIN_GE(x0[3], +(x1[3], 1))
56_1_MAIN_INVOKEMETHOD(471_0_test_Return, x0[2], x1[2]) → COND_56_1_MAIN_INVOKEMETHOD(>(x1[2], 0), 471_0_test_Return, x0[2], x1[2])
COND_48_0_MAIN_GE(TRUE, x0[1], x1[1]) → 56_1_MAIN_INVOKEMETHOD(56_0_test_Load(x1[1]), x0[1], x1[1])
At least the following rules have been oriented under context sensitive arithmetic replacement:
56_0_test_Load(x0)1 ↔ 97_0_test_LE(x0, x0)1
97_0_test_LE(x0, 0)1 ↔ 130_0_test_LE(x0, x0)1
97_0_test_LE(x0, +(x1, -1))1 → Cond_97_0_test_LE(TRUE, x0, x1)1
97_0_test_LE(x0, x1)1 ↔ Cond_97_0_test_LE(>(x1, 0), x0, x1)1
130_0_test_LE(x0, 0)1 ↔ 162_0_test_LE(x0, x0)1
130_0_test_LE(x0, +(x1, -1))1 → Cond_130_0_test_LE(TRUE, x0, x1)1
Cond_130_0_test_LE(>(x1, 0), x0, x1)1 → 130_0_test_LE(x0, x1)1
193_0_test_LE(x0, x0)1 → 162_0_test_LE(x0, 0)1
162_0_test_LE(x0, +(x1, -1))1 → Cond_162_0_test_LE(TRUE, x0, x1)1
162_0_test_LE(x0, x1)1 ↔ Cond_162_0_test_LE(>(x1, 0), x0, x1)1
221_0_test_LE(x0, x0)1 → 193_0_test_LE(x0, 0)1
193_0_test_LE(x0, +(x1, -1))1 → Cond_193_0_test_LE(TRUE, x0, x1)1
193_0_test_LE(x0, x1)1 ↔ Cond_193_0_test_LE(>(x1, 0), x0, x1)1
248_0_test_LE(x0, x0)1 → 221_0_test_LE(x0, 0)1
221_0_test_LE(x0, +(x1, -1))1 → Cond_221_0_test_LE(TRUE, x0, x1)1
221_0_test_LE(x0, x1)1 ↔ Cond_221_0_test_LE(>(x1, 0), x0, x1)1
248_0_test_LE(x0, 0)1 ↔ 285_0_test_LE(x0, x0)1
248_0_test_LE(x0, +(x1, -1))1 → Cond_248_0_test_LE(TRUE, x0, x1)1
Cond_248_0_test_LE(>(x1, 0), x0, x1)1 → 248_0_test_LE(x0, x1)1
285_0_test_LE(x0, 0)1 ↔ 319_0_test_LE(x0, x0)1
Cond_285_0_test_LE(TRUE, x0, x1)1 ↔ 285_0_test_LE(x0, +(x1, -1))1
285_0_test_LE(x0, x1)1 ↔ Cond_285_0_test_LE(>(x1, 0), x0, x1)1
354_0_test_LE(x0, x0)1 → 319_0_test_LE(x0, 0)1
Cond_319_0_test_LE(TRUE, x0, x1)1 ↔ 319_0_test_LE(x0, +(x1, -1))1
Cond_319_0_test_LE(>(x1, 0), x0, x1)1 → 319_0_test_LE(x0, x1)1
386_0_test_LE(x0, x0)1 → 354_0_test_LE(x0, 0)1
Cond_354_0_test_LE(TRUE, x0, x1)1 ↔ 354_0_test_LE(x0, +(x1, -1))1
354_0_test_LE(x0, x1)1 ↔ Cond_354_0_test_LE(>(x1, 0), x0, x1)1
426_0_test_LE(x0, x0)1 → 386_0_test_LE(x0, 0)1
Cond_386_0_test_LE(TRUE, x0, x1)1 ↔ 386_0_test_LE(x0, +(x1, -1))1
386_0_test_LE(x0, x1)1 ↔ Cond_386_0_test_LE(>(x1, 0), x0, x1)1
465_0_test_LE(x0)1 → 426_0_test_LE(x0, 0)1
426_0_test_LE(x0, +(x1, -1))1 → Cond_426_0_test_LE(TRUE, x0, x1)1
Cond_426_0_test_LE(>(x1, 0), x0, x1)1 → 426_0_test_LE(x0, x1)1
465_0_test_LE(0)1 ↔ 471_0_test_Return1
465_0_test_LE(x0)1 ↔ Cond_465_0_test_LE(>(x0, 0), x0)1
Cond_465_0_test_LE(TRUE, x0)1 ↔ 465_0_test_LE(+(x0, -1))1
(131) 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
The ITRS R consists of the following rules:
56_0_test_Load(
x0) →
97_0_test_LE(
x0,
x0)
97_0_test_LE(
x0,
x1) →
Cond_97_0_test_LE(
x1 > 0,
x0,
x1)
Cond_97_0_test_LE(
TRUE,
x0,
x1) →
97_0_test_LE(
x0,
x1 + -1)
97_0_test_LE(
x0,
0) →
130_0_test_LE(
x0,
x0)
130_0_test_LE(
x0,
x1) →
Cond_130_0_test_LE(
x1 > 0,
x0,
x1)
Cond_130_0_test_LE(
TRUE,
x0,
x1) →
130_0_test_LE(
x0,
x1 + -1)
130_0_test_LE(
x0,
0) →
162_0_test_LE(
x0,
x0)
162_0_test_LE(
x0,
x1) →
Cond_162_0_test_LE(
x1 > 0,
x0,
x1)
Cond_162_0_test_LE(
TRUE,
x0,
x1) →
162_0_test_LE(
x0,
x1 + -1)
162_0_test_LE(
x0,
0) →
193_0_test_LE(
x0,
x0)
193_0_test_LE(
x0,
x1) →
Cond_193_0_test_LE(
x1 > 0,
x0,
x1)
Cond_193_0_test_LE(
TRUE,
x0,
x1) →
193_0_test_LE(
x0,
x1 + -1)
193_0_test_LE(
x0,
0) →
221_0_test_LE(
x0,
x0)
221_0_test_LE(
x0,
x1) →
Cond_221_0_test_LE(
x1 > 0,
x0,
x1)
Cond_221_0_test_LE(
TRUE,
x0,
x1) →
221_0_test_LE(
x0,
x1 + -1)
221_0_test_LE(
x0,
0) →
248_0_test_LE(
x0,
x0)
248_0_test_LE(
x0,
x1) →
Cond_248_0_test_LE(
x1 > 0,
x0,
x1)
Cond_248_0_test_LE(
TRUE,
x0,
x1) →
248_0_test_LE(
x0,
x1 + -1)
248_0_test_LE(
x0,
0) →
285_0_test_LE(
x0,
x0)
285_0_test_LE(
x0,
x1) →
Cond_285_0_test_LE(
x1 > 0,
x0,
x1)
Cond_285_0_test_LE(
TRUE,
x0,
x1) →
285_0_test_LE(
x0,
x1 + -1)
285_0_test_LE(
x0,
0) →
319_0_test_LE(
x0,
x0)
319_0_test_LE(
x0,
x1) →
Cond_319_0_test_LE(
x1 > 0,
x0,
x1)
Cond_319_0_test_LE(
TRUE,
x0,
x1) →
319_0_test_LE(
x0,
x1 + -1)
319_0_test_LE(
x0,
0) →
354_0_test_LE(
x0,
x0)
354_0_test_LE(
x0,
x1) →
Cond_354_0_test_LE(
x1 > 0,
x0,
x1)
Cond_354_0_test_LE(
TRUE,
x0,
x1) →
354_0_test_LE(
x0,
x1 + -1)
354_0_test_LE(
x0,
0) →
386_0_test_LE(
x0,
x0)
386_0_test_LE(
x0,
x1) →
Cond_386_0_test_LE(
x1 > 0,
x0,
x1)
Cond_386_0_test_LE(
TRUE,
x0,
x1) →
386_0_test_LE(
x0,
x1 + -1)
386_0_test_LE(
x0,
0) →
426_0_test_LE(
x0,
x0)
426_0_test_LE(
x0,
x1) →
Cond_426_0_test_LE(
x1 > 0,
x0,
x1)
Cond_426_0_test_LE(
TRUE,
x0,
x1) →
426_0_test_LE(
x0,
x1 + -1)
426_0_test_LE(
x0,
0) →
465_0_test_LE(
x0)
465_0_test_LE(
0) →
471_0_test_Return465_0_test_LE(
x0) →
Cond_465_0_test_LE(
x0 > 0,
x0)
Cond_465_0_test_LE(
TRUE,
x0) →
465_0_test_LE(
x0 + -1)
The integer pair graph contains the following rules and edges:
(3):
COND_56_1_MAIN_INVOKEMETHOD(
TRUE,
471_0_test_Return,
x0[3],
x1[3]) →
48_0_MAIN_GE(
x0[3],
x1[3] + 1)
(2):
56_1_MAIN_INVOKEMETHOD(
471_0_test_Return,
x0[2],
x1[2]) →
COND_56_1_MAIN_INVOKEMETHOD(
x1[2] > 0,
471_0_test_Return,
x0[2],
x1[2])
(1):
COND_48_0_MAIN_GE(
TRUE,
x0[1],
x1[1]) →
56_1_MAIN_INVOKEMETHOD(
56_0_test_Load(
x1[1]),
x0[1],
x1[1])
(1) -> (2), if ((56_0_test_Load(x1[1]) →* 471_0_test_Return)∧(x0[1] →* x0[2])∧(x1[1] →* x1[2]))
(2) -> (3), if ((x1[2] > 0 →* TRUE)∧(x0[2] →* x0[3])∧(x1[2] →* x1[3]))
The set Q consists of the following terms:
56_0_test_Load(
x0)
97_0_test_LE(
x0,
x1)
Cond_97_0_test_LE(
TRUE,
x0,
x1)
130_0_test_LE(
x0,
x1)
Cond_130_0_test_LE(
TRUE,
x0,
x1)
162_0_test_LE(
x0,
x1)
Cond_162_0_test_LE(
TRUE,
x0,
x1)
193_0_test_LE(
x0,
x1)
Cond_193_0_test_LE(
TRUE,
x0,
x1)
221_0_test_LE(
x0,
x1)
Cond_221_0_test_LE(
TRUE,
x0,
x1)
248_0_test_LE(
x0,
x1)
Cond_248_0_test_LE(
TRUE,
x0,
x1)
285_0_test_LE(
x0,
x1)
Cond_285_0_test_LE(
TRUE,
x0,
x1)
319_0_test_LE(
x0,
x1)
Cond_319_0_test_LE(
TRUE,
x0,
x1)
354_0_test_LE(
x0,
x1)
Cond_354_0_test_LE(
TRUE,
x0,
x1)
386_0_test_LE(
x0,
x1)
Cond_386_0_test_LE(
TRUE,
x0,
x1)
426_0_test_LE(
x0,
x1)
Cond_426_0_test_LE(
TRUE,
x0,
x1)
465_0_test_LE(
x0)
Cond_465_0_test_LE(
TRUE,
x0)
(132) IDependencyGraphProof (EQUIVALENT transformation)
The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 0 SCCs with 3 less nodes.
(133) TRUE