(0) Obligation:

JBC Problem based on JBC Program:
Manifest-Version: 1.0 Created-By: 1.6.0_25 (Sun Microsystems Inc.) Main-Class: BinarySearch/BinarySearch
package BinarySearch;

public class BinarySearch {
public static void main(String[] argv) {
Random.args = argv;

int[] data = createArray();
binarySearch(data, Random.random());
}

public static boolean binarySearch(int[] data, int val) {
return binarySearch(data, val, 0, data.length);
}

private static boolean binarySearch(int[] data, int val, int l, int u) {
if (l > u) {
return false;
}

int mid = l + (u - l)/2;
if (data[mid] == val) {
return true;
} else {
if (binarySearch(data, val, l, mid - 1)) {
return true;
}
return binarySearch(data, val, mid + 1, u);
}
}

public static int[] createArray() {
int[] data = new int[Random.random()];
for (int i = 0; i < data.length; i++) {
data[i] = Random.random();
}
return data;
}
}


package BinarySearch;

public class Random {
static String[] args;
static int index = 0;

public static int random() {
final String string = args[index];
index++;
return string.length();
}
}


(1) JBCToGraph (SOUND transformation)

Constructed TerminationGraph.

(2) Obligation:

Termination Graph based on JBC Program:
BinarySearch.BinarySearch.main([Ljava/lang/String;)V: Graph of 156 nodes with 0 SCCs.

BinarySearch.BinarySearch.createArray()[I: Graph of 180 nodes with 1 SCC.

BinarySearch.BinarySearch.binarySearch([IIII)Z: Graph of 148 nodes with 0 SCCs.


(3) TerminationGraphToSCCProof (SOUND transformation)

Splitted TerminationGraph to 2 SCCss.

(4) Complex Obligation (AND)

(5) Obligation:

SCC of termination graph based on JBC Program.
SCC contains nodes from the following methods: BinarySearch.BinarySearch.binarySearch([IIII)Z
SCC calls the following helper methods: BinarySearch.BinarySearch.binarySearch([IIII)Z
Performed SCC analyses: UsedFieldsAnalysis

(6) SCCToIDPv1Proof (SOUND transformation)

Transformed FIGraph SCCs to IDPs. Log:

Generated 58 rules for P and 105 rules for R.


P rules:
1869_0_binarySearch_Load(EOS(STATIC_1869), java.lang.Object(ARRAY(i540)), i541, i542, i543, i542) → 1871_0_binarySearch_LE(EOS(STATIC_1871), java.lang.Object(ARRAY(i540)), i541, i542, i543, i542, i543)
1871_0_binarySearch_LE(EOS(STATIC_1871), java.lang.Object(ARRAY(i540)), i541, i542, i543, i542, i543) → 1872_0_binarySearch_LE(EOS(STATIC_1872), java.lang.Object(ARRAY(i540)), i541, i542, i543, i542, i543)
1872_0_binarySearch_LE(EOS(STATIC_1872), java.lang.Object(ARRAY(i540)), i541, i542, i543, i542, i543) → 1875_0_binarySearch_Load(EOS(STATIC_1875), java.lang.Object(ARRAY(i540)), i541, i542, i543) | <=(i542, i543)
1875_0_binarySearch_Load(EOS(STATIC_1875), java.lang.Object(ARRAY(i540)), i541, i542, i543) → 1878_0_binarySearch_Load(EOS(STATIC_1878), java.lang.Object(ARRAY(i540)), i541, i542, i543, i542)
1878_0_binarySearch_Load(EOS(STATIC_1878), java.lang.Object(ARRAY(i540)), i541, i542, i543, i542) → 1882_0_binarySearch_Load(EOS(STATIC_1882), java.lang.Object(ARRAY(i540)), i541, i542, i543, i542, i543)
1882_0_binarySearch_Load(EOS(STATIC_1882), java.lang.Object(ARRAY(i540)), i541, i542, i543, i542, i543) → 1885_0_binarySearch_IntArithmetic(EOS(STATIC_1885), java.lang.Object(ARRAY(i540)), i541, i542, i543, i542, i543, i542)
1885_0_binarySearch_IntArithmetic(EOS(STATIC_1885), java.lang.Object(ARRAY(i540)), i541, i542, i543, i542, i543, i542) → 1891_0_binarySearch_ConstantStackPush(EOS(STATIC_1891), java.lang.Object(ARRAY(i540)), i541, i542, i543, i542, -(i543, i542))
1891_0_binarySearch_ConstantStackPush(EOS(STATIC_1891), java.lang.Object(ARRAY(i540)), i541, i542, i543, i542, i555) → 1894_0_binarySearch_IntArithmetic(EOS(STATIC_1894), java.lang.Object(ARRAY(i540)), i541, i542, i543, i542, i555, 2)
1894_0_binarySearch_IntArithmetic(EOS(STATIC_1894), java.lang.Object(ARRAY(i540)), i541, i542, i543, i542, i555, matching1) → 1899_0_binarySearch_IntArithmetic(EOS(STATIC_1899), java.lang.Object(ARRAY(i540)), i541, i542, i543, i542, /(i555, 2)) | =(matching1, 2)
1899_0_binarySearch_IntArithmetic(EOS(STATIC_1899), java.lang.Object(ARRAY(i540)), i541, i542, i543, i542, i558) → 1902_0_binarySearch_Store(EOS(STATIC_1902), java.lang.Object(ARRAY(i540)), i541, i542, i543, +(i542, i558))
1902_0_binarySearch_Store(EOS(STATIC_1902), java.lang.Object(ARRAY(i540)), i541, i542, i543, i561) → 1907_0_binarySearch_Load(EOS(STATIC_1907), java.lang.Object(ARRAY(i540)), i541, i542, i543, i561)
1907_0_binarySearch_Load(EOS(STATIC_1907), java.lang.Object(ARRAY(i540)), i541, i542, i543, i561) → 1910_0_binarySearch_Load(EOS(STATIC_1910), java.lang.Object(ARRAY(i540)), i541, i542, i543, i561, java.lang.Object(ARRAY(i540)))
1910_0_binarySearch_Load(EOS(STATIC_1910), java.lang.Object(ARRAY(i540)), i541, i542, i543, i561, java.lang.Object(ARRAY(i540))) → 1912_0_binarySearch_ArrayAccess(EOS(STATIC_1912), java.lang.Object(ARRAY(i540)), i541, i542, i543, i561, java.lang.Object(ARRAY(i540)), i561)
1912_0_binarySearch_ArrayAccess(EOS(STATIC_1912), java.lang.Object(ARRAY(i540)), i541, i542, i543, i567, java.lang.Object(ARRAY(i540)), i567) → 1915_0_binarySearch_ArrayAccess(EOS(STATIC_1915), java.lang.Object(ARRAY(i540)), i541, i542, i543, i567, java.lang.Object(ARRAY(i540)), i567)
1915_0_binarySearch_ArrayAccess(EOS(STATIC_1915), java.lang.Object(ARRAY(i540)), i541, i542, i543, i567, java.lang.Object(ARRAY(i540)), i567) → 1919_0_binarySearch_ArrayAccess(EOS(STATIC_1919), java.lang.Object(ARRAY(i540)), i541, i542, i543, i567, java.lang.Object(ARRAY(i540)), i567)
1919_0_binarySearch_ArrayAccess(EOS(STATIC_1919), java.lang.Object(ARRAY(i540)), i541, i542, i543, i567, java.lang.Object(ARRAY(i540)), i567) → 1921_0_binarySearch_Load(EOS(STATIC_1921), java.lang.Object(ARRAY(i540)), i541, i542, i543, i567, i568) | <(i567, i540)
1921_0_binarySearch_Load(EOS(STATIC_1921), java.lang.Object(ARRAY(i540)), i541, i542, i543, i567, i568) → 1925_0_binarySearch_NE(EOS(STATIC_1925), java.lang.Object(ARRAY(i540)), i541, i542, i543, i567, i568, i541)
1925_0_binarySearch_NE(EOS(STATIC_1925), java.lang.Object(ARRAY(i540)), i541, i542, i543, i567, i568, i541) → 1927_0_binarySearch_NE(EOS(STATIC_1927), java.lang.Object(ARRAY(i540)), i541, i542, i543, i567, i568, i541)
1927_0_binarySearch_NE(EOS(STATIC_1927), java.lang.Object(ARRAY(i540)), i541, i542, i543, i567, i568, i541) → 1934_0_binarySearch_Load(EOS(STATIC_1934), java.lang.Object(ARRAY(i540)), i541, i542, i543, i567) | !(=(i568, i541))
1934_0_binarySearch_Load(EOS(STATIC_1934), java.lang.Object(ARRAY(i540)), i541, i542, i543, i567) → 1940_0_binarySearch_Load(EOS(STATIC_1940), java.lang.Object(ARRAY(i540)), i541, i542, i543, i567, java.lang.Object(ARRAY(i540)))
1940_0_binarySearch_Load(EOS(STATIC_1940), java.lang.Object(ARRAY(i540)), i541, i542, i543, i567, java.lang.Object(ARRAY(i540))) → 1945_0_binarySearch_Load(EOS(STATIC_1945), java.lang.Object(ARRAY(i540)), i541, i542, i543, i567, java.lang.Object(ARRAY(i540)), i541)
1945_0_binarySearch_Load(EOS(STATIC_1945), java.lang.Object(ARRAY(i540)), i541, i542, i543, i567, java.lang.Object(ARRAY(i540)), i541) → 1951_0_binarySearch_Load(EOS(STATIC_1951), java.lang.Object(ARRAY(i540)), i541, i543, i567, java.lang.Object(ARRAY(i540)), i541, i542)
1951_0_binarySearch_Load(EOS(STATIC_1951), java.lang.Object(ARRAY(i540)), i541, i543, i567, java.lang.Object(ARRAY(i540)), i541, i542) → 1959_0_binarySearch_ConstantStackPush(EOS(STATIC_1959), java.lang.Object(ARRAY(i540)), i541, i543, i567, java.lang.Object(ARRAY(i540)), i541, i542, i567)
1959_0_binarySearch_ConstantStackPush(EOS(STATIC_1959), java.lang.Object(ARRAY(i540)), i541, i543, i567, java.lang.Object(ARRAY(i540)), i541, i542, i567) → 1965_0_binarySearch_IntArithmetic(EOS(STATIC_1965), java.lang.Object(ARRAY(i540)), i541, i543, i567, java.lang.Object(ARRAY(i540)), i541, i542, i567, 1)
1965_0_binarySearch_IntArithmetic(EOS(STATIC_1965), java.lang.Object(ARRAY(i540)), i541, i543, i567, java.lang.Object(ARRAY(i540)), i541, i542, i567, matching1) → 1970_0_binarySearch_InvokeMethod(EOS(STATIC_1970), java.lang.Object(ARRAY(i540)), i541, i543, i567, java.lang.Object(ARRAY(i540)), i541, i542, -(i567, 1)) | &&(>=(i567, 0), =(matching1, 1))
1970_0_binarySearch_InvokeMethod(EOS(STATIC_1970), java.lang.Object(ARRAY(i540)), i541, i543, i567, java.lang.Object(ARRAY(i540)), i541, i542, i579) → 1975_1_binarySearch_InvokeMethod(1975_0_binarySearch_Load(EOS(STATIC_1975), java.lang.Object(ARRAY(i540)), i541, i542, i579), java.lang.Object(ARRAY(i540)), i541, i543, i567, java.lang.Object(ARRAY(i540)), i541, i542, i579)
1975_0_binarySearch_Load(EOS(STATIC_1975), java.lang.Object(ARRAY(i540)), i541, i542, i579) → 1980_0_binarySearch_Load(EOS(STATIC_1980), java.lang.Object(ARRAY(i540)), i541, i542, i579)
1975_1_binarySearch_InvokeMethod(1880_0_binarySearch_Return(EOS(STATIC_1880), java.lang.Object(ARRAY(i588)), i589, i590, i591, matching1), java.lang.Object(ARRAY(i588)), i589, i543, i567, java.lang.Object(ARRAY(i588)), i589, i590, i591) → 1997_0_binarySearch_Return(EOS(STATIC_1997), java.lang.Object(ARRAY(i588)), i589, i543, i567, java.lang.Object(ARRAY(i588)), i589, i590, i591, java.lang.Object(ARRAY(i588)), i589, i590, i591, 0) | =(matching1, 0)
1975_1_binarySearch_InvokeMethod(1942_0_binarySearch_Return(EOS(STATIC_1942), java.lang.Object(ARRAY(i601)), i602, i603, i604, i597, matching1), java.lang.Object(ARRAY(i601)), i602, i543, i567, java.lang.Object(ARRAY(i601)), i602, i603, i604) → 1998_0_binarySearch_Return(EOS(STATIC_1998), java.lang.Object(ARRAY(i601)), i602, i543, i567, java.lang.Object(ARRAY(i601)), i602, i603, i604, java.lang.Object(ARRAY(i601)), i602, i603, i604, i597, 1) | =(matching1, 1)
1975_1_binarySearch_InvokeMethod(2294_0_binarySearch_Return(EOS(STATIC_2294), java.lang.Object(ARRAY(i1099)), i1100, i1102, i1098, matching1), java.lang.Object(ARRAY(i1099)), i1100, i543, i567, java.lang.Object(ARRAY(i1099)), i1100, i1101, i1102) → 2332_0_binarySearch_Return(EOS(STATIC_2332), java.lang.Object(ARRAY(i1099)), i1100, i543, i567, java.lang.Object(ARRAY(i1099)), i1100, i1101, i1102, java.lang.Object(ARRAY(i1099)), i1100, i1102, i1098, 1) | =(matching1, 1)
1975_1_binarySearch_InvokeMethod(2385_0_binarySearch_Return(EOS(STATIC_2385), matching1), java.lang.Object(ARRAY(i1294)), i1295, i543, i567, java.lang.Object(ARRAY(i1294)), i1295, i1296, i1297) → 2440_0_binarySearch_Return(EOS(STATIC_2440), java.lang.Object(ARRAY(i1294)), i1295, i543, i567, java.lang.Object(ARRAY(i1294)), i1295, i1296, i1297, 0) | =(matching1, 0)
1975_1_binarySearch_InvokeMethod(2397_0_binarySearch_Return(EOS(STATIC_2397), matching1), java.lang.Object(ARRAY(i1330)), i1331, i543, i567, java.lang.Object(ARRAY(i1330)), i1331, i1332, i1333) → 2448_0_binarySearch_Return(EOS(STATIC_2448), java.lang.Object(ARRAY(i1330)), i1331, i543, i567, java.lang.Object(ARRAY(i1330)), i1331, i1332, i1333, 1) | =(matching1, 1)
1975_1_binarySearch_InvokeMethod(2473_0_binarySearch_Return(EOS(STATIC_2473), i1372), java.lang.Object(ARRAY(i1522)), i1523, i543, i567, java.lang.Object(ARRAY(i1522)), i1523, i1524, i1525) → 2543_0_binarySearch_Return(EOS(STATIC_2543), java.lang.Object(ARRAY(i1522)), i1523, i543, i567, java.lang.Object(ARRAY(i1522)), i1523, i1524, i1525, i1372)
1980_0_binarySearch_Load(EOS(STATIC_1980), java.lang.Object(ARRAY(i540)), i541, i542, i579) → 1865_0_binarySearch_Load(EOS(STATIC_1865), java.lang.Object(ARRAY(i540)), i541, i542, i579)
1865_0_binarySearch_Load(EOS(STATIC_1865), java.lang.Object(ARRAY(i540)), i541, i542, i543) → 1869_0_binarySearch_Load(EOS(STATIC_1869), java.lang.Object(ARRAY(i540)), i541, i542, i543, i542)
1997_0_binarySearch_Return(EOS(STATIC_1997), java.lang.Object(ARRAY(i588)), i589, i543, i567, java.lang.Object(ARRAY(i588)), i589, i590, i591, java.lang.Object(ARRAY(i588)), i589, i590, i591, matching1) → 2004_0_binarySearch_EQ(EOS(STATIC_2004), java.lang.Object(ARRAY(i588)), i589, i543, i567, 0) | =(matching1, 0)
2004_0_binarySearch_EQ(EOS(STATIC_2004), java.lang.Object(ARRAY(i588)), i589, i543, i567, matching1) → 2261_0_binarySearch_EQ(EOS(STATIC_2261), java.lang.Object(ARRAY(i588)), i589, i543, i567, 0) | =(matching1, 0)
2261_0_binarySearch_EQ(EOS(STATIC_2261), java.lang.Object(ARRAY(i1013)), i1014, i543, i567, matching1) → 2277_0_binarySearch_EQ(EOS(STATIC_2277), java.lang.Object(ARRAY(i1013)), i1014, i543, i567, 0) | =(matching1, 0)
2277_0_binarySearch_EQ(EOS(STATIC_2277), java.lang.Object(ARRAY(i1013)), i1014, i543, i567, matching1) → 2283_0_binarySearch_Load(EOS(STATIC_2283), java.lang.Object(ARRAY(i1013)), i1014, i543, i567) | =(matching1, 0)
2283_0_binarySearch_Load(EOS(STATIC_2283), java.lang.Object(ARRAY(i1013)), i1014, i543, i567) → 2296_0_binarySearch_Load(EOS(STATIC_2296), i1014, i543, i567, java.lang.Object(ARRAY(i1013)))
2296_0_binarySearch_Load(EOS(STATIC_2296), i1014, i543, i567, java.lang.Object(ARRAY(i1013))) → 2301_0_binarySearch_Load(EOS(STATIC_2301), i543, i567, java.lang.Object(ARRAY(i1013)), i1014)
2301_0_binarySearch_Load(EOS(STATIC_2301), i543, i567, java.lang.Object(ARRAY(i1013)), i1014) → 2319_0_binarySearch_ConstantStackPush(EOS(STATIC_2319), i543, java.lang.Object(ARRAY(i1013)), i1014, i567)
2319_0_binarySearch_ConstantStackPush(EOS(STATIC_2319), i543, java.lang.Object(ARRAY(i1013)), i1014, i567) → 2333_0_binarySearch_IntArithmetic(EOS(STATIC_2333), i543, java.lang.Object(ARRAY(i1013)), i1014, i567, 1)
2333_0_binarySearch_IntArithmetic(EOS(STATIC_2333), i543, java.lang.Object(ARRAY(i1013)), i1014, i567, matching1) → 2334_0_binarySearch_Load(EOS(STATIC_2334), i543, java.lang.Object(ARRAY(i1013)), i1014, +(i567, 1)) | &&(>=(i567, 0), =(matching1, 1))
2334_0_binarySearch_Load(EOS(STATIC_2334), i543, java.lang.Object(ARRAY(i1013)), i1014, i1130) → 2336_0_binarySearch_InvokeMethod(EOS(STATIC_2336), java.lang.Object(ARRAY(i1013)), i1014, i1130, i543)
2336_0_binarySearch_InvokeMethod(EOS(STATIC_2336), java.lang.Object(ARRAY(i1013)), i1014, i1130, i543) → 2337_1_binarySearch_InvokeMethod(2337_0_binarySearch_Load(EOS(STATIC_2337), java.lang.Object(ARRAY(i1013)), i1014, i1130, i543), java.lang.Object(ARRAY(i1013)), i1014, i1130, i543)
2337_0_binarySearch_Load(EOS(STATIC_2337), java.lang.Object(ARRAY(i1013)), i1014, i1130, i543) → 2339_0_binarySearch_Load(EOS(STATIC_2339), java.lang.Object(ARRAY(i1013)), i1014, i1130, i543)
2339_0_binarySearch_Load(EOS(STATIC_2339), java.lang.Object(ARRAY(i1013)), i1014, i1130, i543) → 1865_0_binarySearch_Load(EOS(STATIC_1865), java.lang.Object(ARRAY(i1013)), i1014, i1130, i543)
1998_0_binarySearch_Return(EOS(STATIC_1998), java.lang.Object(ARRAY(i601)), i602, i543, i567, java.lang.Object(ARRAY(i601)), i602, i603, i604, java.lang.Object(ARRAY(i601)), i602, i603, i604, i597, matching1) → 2006_0_binarySearch_EQ(EOS(STATIC_2006), java.lang.Object(ARRAY(i601)), i602, i543, i567, 1) | =(matching1, 1)
2006_0_binarySearch_EQ(EOS(STATIC_2006), java.lang.Object(ARRAY(i601)), i602, i543, i567, matching1) → 2059_0_binarySearch_EQ(EOS(STATIC_2059), java.lang.Object(ARRAY(i601)), i602, i543, i567, 1) | =(matching1, 1)
2059_0_binarySearch_EQ(EOS(STATIC_2059), java.lang.Object(ARRAY(i619)), i620, i543, i567, matching1) → 2261_0_binarySearch_EQ(EOS(STATIC_2261), java.lang.Object(ARRAY(i619)), i620, i543, i567, 1) | =(matching1, 1)
2332_0_binarySearch_Return(EOS(STATIC_2332), java.lang.Object(ARRAY(i1099)), i1100, i543, i567, java.lang.Object(ARRAY(i1099)), i1100, i1101, i1102, java.lang.Object(ARRAY(i1099)), i1100, i1102, i1098, matching1) → 2050_0_binarySearch_Return(EOS(STATIC_2050), java.lang.Object(ARRAY(i1099)), i1100, i543, i567, java.lang.Object(ARRAY(i1099)), i1100, i1101, i1102, java.lang.Object(ARRAY(i1099)), i1100, i1102, i1098, 1) | =(matching1, 1)
2050_0_binarySearch_Return(EOS(STATIC_2050), java.lang.Object(ARRAY(i619)), i620, i543, i567, java.lang.Object(ARRAY(i619)), i620, i621, i622, java.lang.Object(ARRAY(i619)), i620, i622, i618, matching1) → 2059_0_binarySearch_EQ(EOS(STATIC_2059), java.lang.Object(ARRAY(i619)), i620, i543, i567, 1) | =(matching1, 1)
2440_0_binarySearch_Return(EOS(STATIC_2440), java.lang.Object(ARRAY(i1294)), i1295, i543, i567, java.lang.Object(ARRAY(i1294)), i1295, i1296, i1297, matching1) → 2232_0_binarySearch_Return(EOS(STATIC_2232), java.lang.Object(ARRAY(i1294)), i1295, i543, i567, java.lang.Object(ARRAY(i1294)), i1295, i1296, i1297, 0) | =(matching1, 0)
2232_0_binarySearch_Return(EOS(STATIC_2232), java.lang.Object(ARRAY(i901)), i902, i543, i567, java.lang.Object(ARRAY(i901)), i902, i903, i907, i906) → 2260_0_binarySearch_EQ(EOS(STATIC_2260), java.lang.Object(ARRAY(i901)), i902, i543, i567, i906)
2260_0_binarySearch_EQ(EOS(STATIC_2260), java.lang.Object(ARRAY(i901)), i902, i543, i567, i906) → 2261_0_binarySearch_EQ(EOS(STATIC_2261), java.lang.Object(ARRAY(i901)), i902, i543, i567, i906)
2448_0_binarySearch_Return(EOS(STATIC_2448), java.lang.Object(ARRAY(i1330)), i1331, i543, i567, java.lang.Object(ARRAY(i1330)), i1331, i1332, i1333, matching1) → 2232_0_binarySearch_Return(EOS(STATIC_2232), java.lang.Object(ARRAY(i1330)), i1331, i543, i567, java.lang.Object(ARRAY(i1330)), i1331, i1332, i1333, 1) | =(matching1, 1)
2543_0_binarySearch_Return(EOS(STATIC_2543), java.lang.Object(ARRAY(i1522)), i1523, i543, i567, java.lang.Object(ARRAY(i1522)), i1523, i1524, i1525, i1372) → 2232_0_binarySearch_Return(EOS(STATIC_2232), java.lang.Object(ARRAY(i1522)), i1523, i543, i567, java.lang.Object(ARRAY(i1522)), i1523, i1524, i1525, i1372)
R rules:
1871_0_binarySearch_LE(EOS(STATIC_1871), java.lang.Object(ARRAY(i540)), i541, i542, i543, i542, i543) → 1874_0_binarySearch_LE(EOS(STATIC_1874), java.lang.Object(ARRAY(i540)), i541, i542, i543, i542, i543)
1874_0_binarySearch_LE(EOS(STATIC_1874), java.lang.Object(ARRAY(i540)), i541, i542, i543, i542, i543) → 1877_0_binarySearch_ConstantStackPush(EOS(STATIC_1877), java.lang.Object(ARRAY(i540)), i541, i542, i543) | >(i542, i543)
1877_0_binarySearch_ConstantStackPush(EOS(STATIC_1877), java.lang.Object(ARRAY(i540)), i541, i542, i543) → 1880_0_binarySearch_Return(EOS(STATIC_1880), java.lang.Object(ARRAY(i540)), i541, i542, i543, 0)
1912_0_binarySearch_ArrayAccess(EOS(STATIC_1912), java.lang.Object(ARRAY(i540)), i541, i542, i543, i566, java.lang.Object(ARRAY(i540)), i566) → 1914_0_binarySearch_ArrayAccess(EOS(STATIC_1914), java.lang.Object(ARRAY(i540)), i541, i542, i543, i566, java.lang.Object(ARRAY(i540)), i566)
1914_0_binarySearch_ArrayAccess(EOS(STATIC_1914), java.lang.Object(ARRAY(i540)), i541, i542, i543, i566, java.lang.Object(ARRAY(i540)), i566) → 1917_0_<init>_Load(EOS(STATIC_1917), java.lang.Object(ARRAY(i540)), i541, i542, i543, i566, java.lang.Object(ARRAY(i540)), i566) | <=(i566, -1)
1915_0_binarySearch_ArrayAccess(EOS(STATIC_1915), java.lang.Object(ARRAY(i540)), i541, i542, i543, i567, java.lang.Object(ARRAY(i540)), i567) → 1920_0_binarySearch_ArrayAccess(EOS(STATIC_1920), java.lang.Object(ARRAY(i540)), i541, i542, i543, i567, java.lang.Object(ARRAY(i540)), i567)
1917_0_<init>_Load(EOS(STATIC_1917), java.lang.Object(ARRAY(i540)), i541, i542, i543, i566, java.lang.Object(ARRAY(i540)), i566) → 1924_0_<init>_InvokeMethod(EOS(STATIC_1924), java.lang.Object(ARRAY(i540)), i541, i542, i543, i566, java.lang.Object(ARRAY(i540)), i566)
1920_0_binarySearch_ArrayAccess(EOS(STATIC_1920), java.lang.Object(ARRAY(i540)), i541, i542, i543, i567, java.lang.Object(ARRAY(i540)), i567) → 1923_0_<init>_Load(EOS(STATIC_1923), java.lang.Object(ARRAY(i540)), i541, i542, i543, i567, java.lang.Object(ARRAY(i540)), i567) | >=(i567, i540)
1923_0_<init>_Load(EOS(STATIC_1923), java.lang.Object(ARRAY(i540)), i541, i542, i543, i567, java.lang.Object(ARRAY(i540)), i567) → 1932_0_<init>_InvokeMethod(EOS(STATIC_1932), java.lang.Object(ARRAY(i540)), i541, i542, i543, i567, java.lang.Object(ARRAY(i540)), i567)
1924_0_<init>_InvokeMethod(EOS(STATIC_1924), java.lang.Object(ARRAY(i540)), i541, i542, i543, i566, java.lang.Object(ARRAY(i540)), i566) → 1926_0_<init>_Load(EOS(STATIC_1926), java.lang.Object(ARRAY(i540)), i541, i542, i543, i566, java.lang.Object(ARRAY(i540)), i566)
1925_0_binarySearch_NE(EOS(STATIC_1925), java.lang.Object(ARRAY(i540)), i541, i542, i543, i567, i541, i541) → 1928_0_binarySearch_NE(EOS(STATIC_1928), java.lang.Object(ARRAY(i540)), i541, i542, i543, i567, i541, i541)
1926_0_<init>_Load(EOS(STATIC_1926), java.lang.Object(ARRAY(i540)), i541, i542, i543, i566, java.lang.Object(ARRAY(i540)), i566) → 1939_0_<init>_InvokeMethod(EOS(STATIC_1939), java.lang.Object(ARRAY(i540)), i541, i542, i543, i566, java.lang.Object(ARRAY(i540)), i566)
1928_0_binarySearch_NE(EOS(STATIC_1928), java.lang.Object(ARRAY(i540)), i541, i542, i543, i567, i541, i541) → 1935_0_binarySearch_ConstantStackPush(EOS(STATIC_1935), java.lang.Object(ARRAY(i540)), i541, i542, i543, i567)
1932_0_<init>_InvokeMethod(EOS(STATIC_1932), java.lang.Object(ARRAY(i540)), i541, i542, i543, i567, java.lang.Object(ARRAY(i540)), i567) → 1937_0_<init>_Load(EOS(STATIC_1937), java.lang.Object(ARRAY(i540)), i541, i542, i543, i567, java.lang.Object(ARRAY(i540)), i567)
1935_0_binarySearch_ConstantStackPush(EOS(STATIC_1935), java.lang.Object(ARRAY(i540)), i541, i542, i543, i567) → 1942_0_binarySearch_Return(EOS(STATIC_1942), java.lang.Object(ARRAY(i540)), i541, i542, i543, i567, 1)
1937_0_<init>_Load(EOS(STATIC_1937), java.lang.Object(ARRAY(i540)), i541, i542, i543, i567, java.lang.Object(ARRAY(i540)), i567) → 1950_0_<init>_InvokeMethod(EOS(STATIC_1950), java.lang.Object(ARRAY(i540)), i541, i542, i543, i567, java.lang.Object(ARRAY(i540)), i567)
1939_0_<init>_InvokeMethod(EOS(STATIC_1939), java.lang.Object(ARRAY(i540)), i541, i542, i543, i566, java.lang.Object(ARRAY(i540)), i566) → 1944_0_<init>_Load(EOS(STATIC_1944), java.lang.Object(ARRAY(i540)), i541, i542, i543, i566, java.lang.Object(ARRAY(i540)), i566)
1944_0_<init>_Load(EOS(STATIC_1944), java.lang.Object(ARRAY(i540)), i541, i542, i543, i566, java.lang.Object(ARRAY(i540)), i566) → 1957_0_<init>_InvokeMethod(EOS(STATIC_1957), java.lang.Object(ARRAY(i540)), i541, i542, i543, i566, java.lang.Object(ARRAY(i540)), i566)
1950_0_<init>_InvokeMethod(EOS(STATIC_1950), java.lang.Object(ARRAY(i540)), i541, i542, i543, i567, java.lang.Object(ARRAY(i540)), i567) → 1955_0_<init>_Load(EOS(STATIC_1955), java.lang.Object(ARRAY(i540)), i541, i542, i543, i567, java.lang.Object(ARRAY(i540)), i567)
1955_0_<init>_Load(EOS(STATIC_1955), java.lang.Object(ARRAY(i540)), i541, i542, i543, i567, java.lang.Object(ARRAY(i540)), i567) → 1968_0_<init>_InvokeMethod(EOS(STATIC_1968), java.lang.Object(ARRAY(i540)), i541, i542, i543, i567, java.lang.Object(ARRAY(i540)), i567)
1957_0_<init>_InvokeMethod(EOS(STATIC_1957), java.lang.Object(ARRAY(i540)), i541, i542, i543, i566, java.lang.Object(ARRAY(i540)), i566) → 1964_0_<init>_Load(EOS(STATIC_1964), java.lang.Object(ARRAY(i540)), i541, i542, i543, i566, java.lang.Object(ARRAY(i540)), i566)
1964_0_<init>_Load(EOS(STATIC_1964), java.lang.Object(ARRAY(i540)), i541, i542, i543, i566, java.lang.Object(ARRAY(i540)), i566) → 1974_0_<init>_InvokeMethod(EOS(STATIC_1974), java.lang.Object(ARRAY(i540)), i541, i542, i543, i566, java.lang.Object(ARRAY(i540)), i566)
1968_0_<init>_InvokeMethod(EOS(STATIC_1968), java.lang.Object(ARRAY(i540)), i541, i542, i543, i567, java.lang.Object(ARRAY(i540)), i567) → 1972_0_<init>_Load(EOS(STATIC_1972), java.lang.Object(ARRAY(i540)), i541, i542, i543, i567, java.lang.Object(ARRAY(i540)), i567)
1972_0_<init>_Load(EOS(STATIC_1972), java.lang.Object(ARRAY(i540)), i541, i542, i543, i567, java.lang.Object(ARRAY(i540)), i567) → 1982_0_<init>_InvokeMethod(EOS(STATIC_1982), java.lang.Object(ARRAY(i540)), i541, i542, i543, i567, java.lang.Object(ARRAY(i540)), i567)
1974_0_<init>_InvokeMethod(EOS(STATIC_1974), java.lang.Object(ARRAY(i540)), i541, i542, i543, i566, java.lang.Object(ARRAY(i540)), i566) → 1977_0_<init>_Load(EOS(STATIC_1977), java.lang.Object(ARRAY(i540)), i541, i542, i543, i566, java.lang.Object(ARRAY(i540)), i566)
1975_1_binarySearch_InvokeMethod(2084_0_binarySearch_ArrayAccess(EOS(STATIC_2084), java.lang.Object(ARRAY(i712)), i713, i714, i715, i566, java.lang.Object(ARRAY(i712)), i566), java.lang.Object(ARRAY(i712)), i713, i543, i567, java.lang.Object(ARRAY(i712)), i713, i714, i715) → 2135_0_binarySearch_ArrayAccess(EOS(STATIC_2135), java.lang.Object(ARRAY(i712)), i713, i543, i567, java.lang.Object(ARRAY(i712)), i713, i714, i715, java.lang.Object(ARRAY(i712)), i713, i714, i715, i566, java.lang.Object(ARRAY(i712)), i566)
1975_1_binarySearch_InvokeMethod(2118_0_binarySearch_ArrayAccess(EOS(STATIC_2118), java.lang.Object(ARRAY(i751)), i752, i753, i754, i747, java.lang.Object(ARRAY(i751)), i747), java.lang.Object(ARRAY(i751)), i752, i543, i567, java.lang.Object(ARRAY(i751)), i752, i753, i754) → 2179_0_binarySearch_ArrayAccess(EOS(STATIC_2179), java.lang.Object(ARRAY(i751)), i752, i543, i567, java.lang.Object(ARRAY(i751)), i752, i753, i754, java.lang.Object(ARRAY(i751)), i752, i753, i754, i747, java.lang.Object(ARRAY(i751)), i747)
1975_1_binarySearch_InvokeMethod(2216_0_binarySearch_InvokeMethod(EOS(STATIC_2216), java.lang.Object(ARRAY(i1049)), i1050, i1052, i1048, java.lang.Object(ARRAY(i1049)), i1050, i1051, i785), java.lang.Object(ARRAY(i1049)), i1050, i543, i567, java.lang.Object(ARRAY(i1049)), i1050, i1051, i1052) → 2279_0_binarySearch_InvokeMethod(EOS(STATIC_2279), java.lang.Object(ARRAY(i1049)), i1050, i543, i567, java.lang.Object(ARRAY(i1049)), i1050, i1051, i1052, java.lang.Object(ARRAY(i1049)), i1050, i1052, i1048, java.lang.Object(ARRAY(i1049)), i1050, i1051, i785)
1975_1_binarySearch_InvokeMethod(2291_0_binarySearch_InvokeMethod(EOS(STATIC_2291), java.lang.Object(ARRAY(i1086)), i1087, i1089, i1085, java.lang.Object(ARRAY(i1086)), i1087, i1088, i1052), java.lang.Object(ARRAY(i1086)), i1087, i543, i567, java.lang.Object(ARRAY(i1086)), i1087, i1088, i1089) → 2327_0_binarySearch_InvokeMethod(EOS(STATIC_2327), java.lang.Object(ARRAY(i1086)), i1087, i543, i567, java.lang.Object(ARRAY(i1086)), i1087, i1088, i1089, java.lang.Object(ARRAY(i1086)), i1087, i1089, i1085, java.lang.Object(ARRAY(i1086)), i1087, i1088, i1052)
1975_1_binarySearch_InvokeMethod(2394_0_binarySearch_InvokeMethod(EOS(STATIC_2394), java.lang.Object(ARRAY(i1312)), i1313, i1168, i1315), java.lang.Object(ARRAY(i1312)), i1313, i543, i567, java.lang.Object(ARRAY(i1312)), i1313, i1314, i1315) → 2443_0_binarySearch_InvokeMethod(EOS(STATIC_2443), java.lang.Object(ARRAY(i1312)), i1313, i543, i567, java.lang.Object(ARRAY(i1312)), i1313, i1314, i1315, java.lang.Object(ARRAY(i1312)), i1313, i1168, i1315)
1975_1_binarySearch_InvokeMethod(2465_0_binarySearch_InvokeMethod(EOS(STATIC_2465), java.lang.Object(ARRAY(i1485)), i1486, i1488, i1484, java.lang.Object(ARRAY(i1485)), i1486, i1487, i1315), java.lang.Object(ARRAY(i1485)), i1486, i543, i567, java.lang.Object(ARRAY(i1485)), i1486, i1487, i1488) → 2525_0_binarySearch_InvokeMethod(EOS(STATIC_2525), java.lang.Object(ARRAY(i1485)), i1486, i543, i567, java.lang.Object(ARRAY(i1485)), i1486, i1487, i1488, java.lang.Object(ARRAY(i1485)), i1486, i1488, i1484, java.lang.Object(ARRAY(i1485)), i1486, i1487, i1315)
1975_1_binarySearch_InvokeMethod(2469_0_binarySearch_InvokeMethod(EOS(STATIC_2469), java.lang.Object(ARRAY(i1503)), i1504, i1321, i1506), java.lang.Object(ARRAY(i1503)), i1504, i543, i567, java.lang.Object(ARRAY(i1503)), i1504, i1505, i1506) → 2535_0_binarySearch_InvokeMethod(EOS(STATIC_2535), java.lang.Object(ARRAY(i1503)), i1504, i543, i567, java.lang.Object(ARRAY(i1503)), i1504, i1505, i1506, java.lang.Object(ARRAY(i1503)), i1504, i1321, i1506)
1977_0_<init>_Load(EOS(STATIC_1977), java.lang.Object(ARRAY(i540)), i541, i542, i543, i566, java.lang.Object(ARRAY(i540)), i566) → 1986_0_<init>_InvokeMethod(EOS(STATIC_1986), java.lang.Object(ARRAY(i540)), i541, i542, i543, i566, java.lang.Object(ARRAY(i540)), i566)
1982_0_<init>_InvokeMethod(EOS(STATIC_1982), java.lang.Object(ARRAY(i540)), i541, i542, i543, i567, java.lang.Object(ARRAY(i540)), i567) → 1984_0_<init>_Load(EOS(STATIC_1984), java.lang.Object(ARRAY(i540)), i541, i542, i543, i567, java.lang.Object(ARRAY(i540)), i567)
1984_0_<init>_Load(EOS(STATIC_1984), java.lang.Object(ARRAY(i540)), i541, i542, i543, i567, java.lang.Object(ARRAY(i540)), i567) → 2001_0_<init>_InvokeMethod(EOS(STATIC_2001), java.lang.Object(ARRAY(i540)), i541, i542, i543, i567, java.lang.Object(ARRAY(i540)), i567)
1986_0_<init>_InvokeMethod(EOS(STATIC_1986), java.lang.Object(ARRAY(i540)), i541, i542, i543, i566, java.lang.Object(ARRAY(i540)), i566) → 1996_0_<init>_Load(EOS(STATIC_1996), java.lang.Object(ARRAY(i540)), i541, i542, i543, i566, java.lang.Object(ARRAY(i540)), i566)
1996_0_<init>_Load(EOS(STATIC_1996), java.lang.Object(ARRAY(i540)), i541, i542, i543, i566, java.lang.Object(ARRAY(i540)), i566) → 2003_0_<init>_Load(EOS(STATIC_2003), java.lang.Object(ARRAY(i540)), i541, i542, i543, i566, java.lang.Object(ARRAY(i540)), i566)
2001_0_<init>_InvokeMethod(EOS(STATIC_2001), java.lang.Object(ARRAY(i540)), i541, i542, i543, i567, java.lang.Object(ARRAY(i540)), i567) → 2009_0_<init>_Load(EOS(STATIC_2009), java.lang.Object(ARRAY(i540)), i541, i542, i543, i567, java.lang.Object(ARRAY(i540)), i567)
2003_0_<init>_Load(EOS(STATIC_2003), java.lang.Object(ARRAY(i540)), i541, i542, i543, i566, java.lang.Object(ARRAY(i540)), i566) → 2010_0_<init>_FieldAccess(EOS(STATIC_2010), java.lang.Object(ARRAY(i540)), i541, i542, i543, i566, java.lang.Object(ARRAY(i540)), i566)
2009_0_<init>_Load(EOS(STATIC_2009), java.lang.Object(ARRAY(i540)), i541, i542, i543, i567, java.lang.Object(ARRAY(i540)), i567) → 2016_0_<init>_Load(EOS(STATIC_2016), java.lang.Object(ARRAY(i540)), i541, i542, i543, i567, java.lang.Object(ARRAY(i540)), i567)
2010_0_<init>_FieldAccess(EOS(STATIC_2010), java.lang.Object(ARRAY(i540)), i541, i542, i543, i566, java.lang.Object(ARRAY(i540)), i566) → 2019_0_<init>_Load(EOS(STATIC_2019), java.lang.Object(ARRAY(i540)), i541, i542, i543, i566, java.lang.Object(ARRAY(i540)), i566)
2016_0_<init>_Load(EOS(STATIC_2016), java.lang.Object(ARRAY(i540)), i541, i542, i543, i567, java.lang.Object(ARRAY(i540)), i567) → 2023_0_<init>_FieldAccess(EOS(STATIC_2023), java.lang.Object(ARRAY(i540)), i541, i542, i543, i567, java.lang.Object(ARRAY(i540)), i567)
2019_0_<init>_Load(EOS(STATIC_2019), java.lang.Object(ARRAY(i540)), i541, i542, i543, i566, java.lang.Object(ARRAY(i540)), i566) → 2025_0_<init>_InvokeMethod(EOS(STATIC_2025), java.lang.Object(ARRAY(i540)), i541, i542, i543, i566, java.lang.Object(ARRAY(i540)), i566)
2023_0_<init>_FieldAccess(EOS(STATIC_2023), java.lang.Object(ARRAY(i540)), i541, i542, i543, i567, java.lang.Object(ARRAY(i540)), i567) → 2032_0_<init>_Load(EOS(STATIC_2032), java.lang.Object(ARRAY(i540)), i541, i542, i543, i567, java.lang.Object(ARRAY(i540)), i567)
2025_0_<init>_InvokeMethod(EOS(STATIC_2025), java.lang.Object(ARRAY(i540)), i541, i542, i543, i566, java.lang.Object(ARRAY(i540)), i566) → 2034_0_<init>_StackPop(EOS(STATIC_2034), java.lang.Object(ARRAY(i540)), i541, i542, i543, i566, java.lang.Object(ARRAY(i540)), i566)
2032_0_<init>_Load(EOS(STATIC_2032), java.lang.Object(ARRAY(i540)), i541, i542, i543, i567, java.lang.Object(ARRAY(i540)), i567) → 2043_0_<init>_InvokeMethod(EOS(STATIC_2043), java.lang.Object(ARRAY(i540)), i541, i542, i543, i567, java.lang.Object(ARRAY(i540)), i567)
2034_0_<init>_StackPop(EOS(STATIC_2034), java.lang.Object(ARRAY(i540)), i541, i542, i543, i566, java.lang.Object(ARRAY(i540)), i566) → 2045_0_<init>_Return(EOS(STATIC_2045), java.lang.Object(ARRAY(i540)), i541, i542, i543, i566, java.lang.Object(ARRAY(i540)), i566)
2043_0_<init>_InvokeMethod(EOS(STATIC_2043), java.lang.Object(ARRAY(i540)), i541, i542, i543, i567, java.lang.Object(ARRAY(i540)), i567) → 2052_0_<init>_StackPop(EOS(STATIC_2052), java.lang.Object(ARRAY(i540)), i541, i542, i543, i567, java.lang.Object(ARRAY(i540)), i567)
2045_0_<init>_Return(EOS(STATIC_2045), java.lang.Object(ARRAY(i540)), i541, i542, i543, i566, java.lang.Object(ARRAY(i540)), i566) → 2054_0_<init>_Return(EOS(STATIC_2054), java.lang.Object(ARRAY(i540)), i541, i542, i543, i566, java.lang.Object(ARRAY(i540)), i566)
2052_0_<init>_StackPop(EOS(STATIC_2052), java.lang.Object(ARRAY(i540)), i541, i542, i543, i567, java.lang.Object(ARRAY(i540)), i567) → 2061_0_<init>_Return(EOS(STATIC_2061), java.lang.Object(ARRAY(i540)), i541, i542, i543, i567, java.lang.Object(ARRAY(i540)), i567)
2054_0_<init>_Return(EOS(STATIC_2054), java.lang.Object(ARRAY(i540)), i541, i542, i543, i566, java.lang.Object(ARRAY(i540)), i566) → 2063_0_<init>_Return(EOS(STATIC_2063), java.lang.Object(ARRAY(i540)), i541, i542, i543, i566, java.lang.Object(ARRAY(i540)), i566)
2061_0_<init>_Return(EOS(STATIC_2061), java.lang.Object(ARRAY(i540)), i541, i542, i543, i567, java.lang.Object(ARRAY(i540)), i567) → 2068_0_<init>_Return(EOS(STATIC_2068), java.lang.Object(ARRAY(i540)), i541, i542, i543, i567, java.lang.Object(ARRAY(i540)), i567)
2063_0_<init>_Return(EOS(STATIC_2063), java.lang.Object(ARRAY(i540)), i541, i542, i543, i566, java.lang.Object(ARRAY(i540)), i566) → 2070_0_<init>_Return(EOS(STATIC_2070), java.lang.Object(ARRAY(i540)), i541, i542, i543, i566, java.lang.Object(ARRAY(i540)), i566)
2068_0_<init>_Return(EOS(STATIC_2068), java.lang.Object(ARRAY(i540)), i541, i542, i543, i567, java.lang.Object(ARRAY(i540)), i567) → 2075_0_<init>_Return(EOS(STATIC_2075), java.lang.Object(ARRAY(i540)), i541, i542, i543, i567, java.lang.Object(ARRAY(i540)), i567)
2070_0_<init>_Return(EOS(STATIC_2070), java.lang.Object(ARRAY(i540)), i541, i542, i543, i566, java.lang.Object(ARRAY(i540)), i566) → 2077_0_<init>_Return(EOS(STATIC_2077), java.lang.Object(ARRAY(i540)), i541, i542, i543, i566, java.lang.Object(ARRAY(i540)), i566)
2075_0_<init>_Return(EOS(STATIC_2075), java.lang.Object(ARRAY(i540)), i541, i542, i543, i567, java.lang.Object(ARRAY(i540)), i567) → 2082_0_<init>_Return(EOS(STATIC_2082), java.lang.Object(ARRAY(i540)), i541, i542, i543, i567, java.lang.Object(ARRAY(i540)), i567)
2077_0_<init>_Return(EOS(STATIC_2077), java.lang.Object(ARRAY(i540)), i541, i542, i543, i566, java.lang.Object(ARRAY(i540)), i566) → 2084_0_binarySearch_ArrayAccess(EOS(STATIC_2084), java.lang.Object(ARRAY(i540)), i541, i542, i543, i566, java.lang.Object(ARRAY(i540)), i566)
2082_0_<init>_Return(EOS(STATIC_2082), java.lang.Object(ARRAY(i540)), i541, i542, i543, i567, java.lang.Object(ARRAY(i540)), i567) → 2092_0_<init>_Return(EOS(STATIC_2092), java.lang.Object(ARRAY(i540)), i541, i542, i543, i567, java.lang.Object(ARRAY(i540)), i567)
2092_0_<init>_Return(EOS(STATIC_2092), java.lang.Object(ARRAY(i540)), i541, i542, i543, i567, java.lang.Object(ARRAY(i540)), i567) → 2118_0_binarySearch_ArrayAccess(EOS(STATIC_2118), java.lang.Object(ARRAY(i540)), i541, i542, i543, i567, java.lang.Object(ARRAY(i540)), i567)
2135_0_binarySearch_ArrayAccess(EOS(STATIC_2135), java.lang.Object(ARRAY(i712)), i713, i543, i567, java.lang.Object(ARRAY(i712)), i713, i714, i715, java.lang.Object(ARRAY(i712)), i713, i714, i715, i566, java.lang.Object(ARRAY(i712)), i566) → 2180_0_binarySearch_ArrayAccess(EOS(STATIC_2180), java.lang.Object(ARRAY(i712)), i713, i543, i567, java.lang.Object(ARRAY(i712)), i713, i714, i715, java.lang.Object(ARRAY(i712)), i713, i714, i715, i566, java.lang.Object(ARRAY(i712)), i566)
2179_0_binarySearch_ArrayAccess(EOS(STATIC_2179), java.lang.Object(ARRAY(i751)), i752, i543, i567, java.lang.Object(ARRAY(i751)), i752, i753, i754, java.lang.Object(ARRAY(i751)), i752, i753, i754, i747, java.lang.Object(ARRAY(i751)), i747) → 2180_0_binarySearch_ArrayAccess(EOS(STATIC_2180), java.lang.Object(ARRAY(i751)), i752, i543, i567, java.lang.Object(ARRAY(i751)), i752, i753, i754, java.lang.Object(ARRAY(i751)), i752, i753, i754, i747, java.lang.Object(ARRAY(i751)), i747)
2180_0_binarySearch_ArrayAccess(EOS(STATIC_2180), java.lang.Object(ARRAY(i780)), i781, i543, i567, java.lang.Object(ARRAY(i780)), i781, i782, i785, java.lang.Object(ARRAY(i780)), i781, i782, i785, i786, java.lang.Object(ARRAY(i780)), i786) → 2216_0_binarySearch_InvokeMethod(EOS(STATIC_2216), java.lang.Object(ARRAY(i780)), i781, i543, i567, java.lang.Object(ARRAY(i780)), i781, i782, i785)
2216_0_binarySearch_InvokeMethod(EOS(STATIC_2216), java.lang.Object(ARRAY(i780)), i781, i543, i567, java.lang.Object(ARRAY(i780)), i781, i782, i785) → 2291_0_binarySearch_InvokeMethod(EOS(STATIC_2291), java.lang.Object(ARRAY(i780)), i781, i543, i567, java.lang.Object(ARRAY(i780)), i781, i782, i785)
2261_0_binarySearch_EQ(EOS(STATIC_2261), java.lang.Object(ARRAY(i1013)), i1014, i543, i567, matching1) → 2276_0_binarySearch_EQ(EOS(STATIC_2276), java.lang.Object(ARRAY(i1013)), i1014, i543, i567, 1) | =(matching1, 1)
2276_0_binarySearch_EQ(EOS(STATIC_2276), java.lang.Object(ARRAY(i1013)), i1014, i543, i567, matching1) → 2282_0_binarySearch_ConstantStackPush(EOS(STATIC_2282), java.lang.Object(ARRAY(i1013)), i1014, i543, i567) | &&(>(1, 0), =(matching1, 1))
2279_0_binarySearch_InvokeMethod(EOS(STATIC_2279), java.lang.Object(ARRAY(i1049)), i1050, i543, i567, java.lang.Object(ARRAY(i1049)), i1050, i1051, i1052, java.lang.Object(ARRAY(i1049)), i1050, i1052, i1048, java.lang.Object(ARRAY(i1049)), i1050, i1051, i785) → 2291_0_binarySearch_InvokeMethod(EOS(STATIC_2291), java.lang.Object(ARRAY(i1049)), i1050, i543, i567, java.lang.Object(ARRAY(i1049)), i1050, i1051, i1052)
2282_0_binarySearch_ConstantStackPush(EOS(STATIC_2282), java.lang.Object(ARRAY(i1013)), i1014, i543, i567) → 2294_0_binarySearch_Return(EOS(STATIC_2294), java.lang.Object(ARRAY(i1013)), i1014, i543, i567, 1)
2291_0_binarySearch_InvokeMethod(EOS(STATIC_2291), java.lang.Object(ARRAY(i1049)), i1050, i543, i567, java.lang.Object(ARRAY(i1049)), i1050, i1051, i1052) → 2465_0_binarySearch_InvokeMethod(EOS(STATIC_2465), java.lang.Object(ARRAY(i1049)), i1050, i543, i567, java.lang.Object(ARRAY(i1049)), i1050, i1051, i1052)
2327_0_binarySearch_InvokeMethod(EOS(STATIC_2327), java.lang.Object(ARRAY(i1086)), i1087, i543, i567, java.lang.Object(ARRAY(i1086)), i1087, i1088, i1089, java.lang.Object(ARRAY(i1086)), i1087, i1089, i1085, java.lang.Object(ARRAY(i1086)), i1087, i1088, i1052) → 2279_0_binarySearch_InvokeMethod(EOS(STATIC_2279), java.lang.Object(ARRAY(i1086)), i1087, i543, i567, java.lang.Object(ARRAY(i1086)), i1087, i1088, i1089, java.lang.Object(ARRAY(i1086)), i1087, i1089, i1085, java.lang.Object(ARRAY(i1086)), i1087, i1088, i1052)
2337_1_binarySearch_InvokeMethod(1880_0_binarySearch_Return(EOS(STATIC_1880), java.lang.Object(ARRAY(i1137)), i1138, i1139, i1140, matching1), java.lang.Object(ARRAY(i1137)), i1138, i1139, i1140) → 2368_0_binarySearch_Return(EOS(STATIC_2368), java.lang.Object(ARRAY(i1137)), i1138, i1139, i1140, java.lang.Object(ARRAY(i1137)), i1138, i1139, i1140, 0) | =(matching1, 0)
2337_1_binarySearch_InvokeMethod(1942_0_binarySearch_Return(EOS(STATIC_1942), java.lang.Object(ARRAY(i1144)), i1145, i1146, i1147, i567, matching1), java.lang.Object(ARRAY(i1144)), i1145, i1146, i1147) → 2369_0_binarySearch_Return(EOS(STATIC_2369), java.lang.Object(ARRAY(i1144)), i1145, i1146, i1147, java.lang.Object(ARRAY(i1144)), i1145, i1146, i1147, i567, 1) | =(matching1, 1)
2337_1_binarySearch_InvokeMethod(2084_0_binarySearch_ArrayAccess(EOS(STATIC_2084), java.lang.Object(ARRAY(i1151)), i1152, i1153, i1154, i566, java.lang.Object(ARRAY(i1151)), i566), java.lang.Object(ARRAY(i1151)), i1152, i1153, i1154) → 2371_0_binarySearch_ArrayAccess(EOS(STATIC_2371), java.lang.Object(ARRAY(i1151)), i1152, i1153, i1154, java.lang.Object(ARRAY(i1151)), i1152, i1153, i1154, i566, java.lang.Object(ARRAY(i1151)), i566)
2337_1_binarySearch_InvokeMethod(2118_0_binarySearch_ArrayAccess(EOS(STATIC_2118), java.lang.Object(ARRAY(i1158)), i1159, i1160, i1161, i567, java.lang.Object(ARRAY(i1158)), i567), java.lang.Object(ARRAY(i1158)), i1159, i1160, i1161) → 2377_0_binarySearch_ArrayAccess(EOS(STATIC_2377), java.lang.Object(ARRAY(i1158)), i1159, i1160, i1161, java.lang.Object(ARRAY(i1158)), i1159, i1160, i1161, i567, java.lang.Object(ARRAY(i1158)), i567)
2337_1_binarySearch_InvokeMethod(2216_0_binarySearch_InvokeMethod(EOS(STATIC_2216), java.lang.Object(ARRAY(i1166)), i1167, i1169, i567, java.lang.Object(ARRAY(i1166)), i1167, i1168, i785), java.lang.Object(ARRAY(i1166)), i1167, i1168, i1169) → 2379_0_binarySearch_InvokeMethod(EOS(STATIC_2379), java.lang.Object(ARRAY(i1166)), i1167, i1168, i1169, java.lang.Object(ARRAY(i1166)), i1167, i1169, i567, java.lang.Object(ARRAY(i1166)), i1167, i1168, i785)
2337_1_binarySearch_InvokeMethod(2291_0_binarySearch_InvokeMethod(EOS(STATIC_2291), java.lang.Object(ARRAY(i1173)), i1174, i1176, i567, java.lang.Object(ARRAY(i1173)), i1174, i1175, i1052), java.lang.Object(ARRAY(i1173)), i1174, i1175, i1176) → 2382_0_binarySearch_InvokeMethod(EOS(STATIC_2382), java.lang.Object(ARRAY(i1173)), i1174, i1175, i1176, java.lang.Object(ARRAY(i1173)), i1174, i1176, i567, java.lang.Object(ARRAY(i1173)), i1174, i1175, i1052)
2337_1_binarySearch_InvokeMethod(2294_0_binarySearch_Return(EOS(STATIC_2294), java.lang.Object(ARRAY(i1185)), i1186, i1188, i567, matching1), java.lang.Object(ARRAY(i1185)), i1186, i1187, i1188) → 2383_0_binarySearch_Return(EOS(STATIC_2383), java.lang.Object(ARRAY(i1185)), i1186, i1187, i1188, java.lang.Object(ARRAY(i1185)), i1186, i1188, i567, 1) | =(matching1, 1)
2337_1_binarySearch_InvokeMethod(2385_0_binarySearch_Return(EOS(STATIC_2385), matching1), java.lang.Object(ARRAY(i1301)), i1302, i1303, i1304) → 2441_0_binarySearch_Return(EOS(STATIC_2441), java.lang.Object(ARRAY(i1301)), i1302, i1303, i1304, 0) | =(matching1, 0)
2337_1_binarySearch_InvokeMethod(2394_0_binarySearch_InvokeMethod(EOS(STATIC_2394), java.lang.Object(ARRAY(i1319)), i1320, i1168, i1322), java.lang.Object(ARRAY(i1319)), i1320, i1321, i1322) → 2444_0_binarySearch_InvokeMethod(EOS(STATIC_2444), java.lang.Object(ARRAY(i1319)), i1320, i1321, i1322, java.lang.Object(ARRAY(i1319)), i1320, i1168, i1322)
2337_1_binarySearch_InvokeMethod(2397_0_binarySearch_Return(EOS(STATIC_2397), matching1), java.lang.Object(ARRAY(i1337)), i1338, i1339, i1340) → 2453_0_binarySearch_Return(EOS(STATIC_2453), java.lang.Object(ARRAY(i1337)), i1338, i1339, i1340, 1) | =(matching1, 1)
2337_1_binarySearch_InvokeMethod(2465_0_binarySearch_InvokeMethod(EOS(STATIC_2465), java.lang.Object(ARRAY(i1492)), i1493, i1495, i567, java.lang.Object(ARRAY(i1492)), i1493, i1494, i1315), java.lang.Object(ARRAY(i1492)), i1493, i1494, i1495) → 2529_0_binarySearch_InvokeMethod(EOS(STATIC_2529), java.lang.Object(ARRAY(i1492)), i1493, i1494, i1495, java.lang.Object(ARRAY(i1492)), i1493, i1495, i567, java.lang.Object(ARRAY(i1492)), i1493, i1494, i1315)
2337_1_binarySearch_InvokeMethod(2469_0_binarySearch_InvokeMethod(EOS(STATIC_2469), java.lang.Object(ARRAY(i1510)), i1511, i1321, i1513), java.lang.Object(ARRAY(i1510)), i1511, i1512, i1513) → 2539_0_binarySearch_InvokeMethod(EOS(STATIC_2539), java.lang.Object(ARRAY(i1510)), i1511, i1512, i1513, java.lang.Object(ARRAY(i1510)), i1511, i1321, i1513)
2337_1_binarySearch_InvokeMethod(2473_0_binarySearch_Return(EOS(STATIC_2473), i1372), java.lang.Object(ARRAY(i1529)), i1530, i1531, i1532) → 2545_0_binarySearch_Return(EOS(STATIC_2545), java.lang.Object(ARRAY(i1529)), i1530, i1531, i1532, i1372)
2368_0_binarySearch_Return(EOS(STATIC_2368), java.lang.Object(ARRAY(i1137)), i1138, i1139, i1140, java.lang.Object(ARRAY(i1137)), i1138, i1139, i1140, matching1) → 2385_0_binarySearch_Return(EOS(STATIC_2385), 0) | =(matching1, 0)
2369_0_binarySearch_Return(EOS(STATIC_2369), java.lang.Object(ARRAY(i1144)), i1145, i1146, i1147, java.lang.Object(ARRAY(i1144)), i1145, i1146, i1147, i567, matching1) → 2388_0_binarySearch_Return(EOS(STATIC_2388), 1) | =(matching1, 1)
2371_0_binarySearch_ArrayAccess(EOS(STATIC_2371), java.lang.Object(ARRAY(i1151)), i1152, i1153, i1154, java.lang.Object(ARRAY(i1151)), i1152, i1153, i1154, i566, java.lang.Object(ARRAY(i1151)), i566) → 2378_0_binarySearch_ArrayAccess(EOS(STATIC_2378), java.lang.Object(ARRAY(i1151)), i1152, i1153, i1154, java.lang.Object(ARRAY(i1151)), i1152, i1153, i1154, i566, java.lang.Object(ARRAY(i1151)), i566)
2377_0_binarySearch_ArrayAccess(EOS(STATIC_2377), java.lang.Object(ARRAY(i1158)), i1159, i1160, i1161, java.lang.Object(ARRAY(i1158)), i1159, i1160, i1161, i567, java.lang.Object(ARRAY(i1158)), i567) → 2378_0_binarySearch_ArrayAccess(EOS(STATIC_2378), java.lang.Object(ARRAY(i1158)), i1159, i1160, i1161, java.lang.Object(ARRAY(i1158)), i1159, i1160, i1161, i567, java.lang.Object(ARRAY(i1158)), i567)
2378_0_binarySearch_ArrayAccess(EOS(STATIC_2378), java.lang.Object(ARRAY(i1191)), i1192, i1196, i1193, java.lang.Object(ARRAY(i1191)), i1192, i1196, i1193, i1197, java.lang.Object(ARRAY(i1191)), i1197) → 2390_0_binarySearch_InvokeMethod(EOS(STATIC_2390), java.lang.Object(ARRAY(i1191)), i1192, i1196, i1193)
2379_0_binarySearch_InvokeMethod(EOS(STATIC_2379), java.lang.Object(ARRAY(i1166)), i1167, i1168, i1169, java.lang.Object(ARRAY(i1166)), i1167, i1169, i567, java.lang.Object(ARRAY(i1166)), i1167, i1168, i785) → 2394_0_binarySearch_InvokeMethod(EOS(STATIC_2394), java.lang.Object(ARRAY(i1166)), i1167, i1168, i1169)
2382_0_binarySearch_InvokeMethod(EOS(STATIC_2382), java.lang.Object(ARRAY(i1173)), i1174, i1175, i1176, java.lang.Object(ARRAY(i1173)), i1174, i1176, i567, java.lang.Object(ARRAY(i1173)), i1174, i1175, i1052) → 2379_0_binarySearch_InvokeMethod(EOS(STATIC_2379), java.lang.Object(ARRAY(i1173)), i1174, i1175, i1176, java.lang.Object(ARRAY(i1173)), i1174, i1176, i567, java.lang.Object(ARRAY(i1173)), i1174, i1175, i1052)
2383_0_binarySearch_Return(EOS(STATIC_2383), java.lang.Object(ARRAY(i1185)), i1186, i1187, i1188, java.lang.Object(ARRAY(i1185)), i1186, i1188, i567, matching1) → 2397_0_binarySearch_Return(EOS(STATIC_2397), 1) | =(matching1, 1)
2385_0_binarySearch_Return(EOS(STATIC_2385), matching1) → 2473_0_binarySearch_Return(EOS(STATIC_2473), 0) | =(matching1, 0)
2388_0_binarySearch_Return(EOS(STATIC_2388), matching1) → 2397_0_binarySearch_Return(EOS(STATIC_2397), 1) | =(matching1, 1)
2390_0_binarySearch_InvokeMethod(EOS(STATIC_2390), java.lang.Object(ARRAY(i1191)), i1192, i1196, i1193) → 2394_0_binarySearch_InvokeMethod(EOS(STATIC_2394), java.lang.Object(ARRAY(i1191)), i1192, i1196, i1193)
2394_0_binarySearch_InvokeMethod(EOS(STATIC_2394), java.lang.Object(ARRAY(i1166)), i1167, i1168, i1169) → 2469_0_binarySearch_InvokeMethod(EOS(STATIC_2469), java.lang.Object(ARRAY(i1166)), i1167, i1168, i1169)
2397_0_binarySearch_Return(EOS(STATIC_2397), matching1) → 2473_0_binarySearch_Return(EOS(STATIC_2473), 1) | =(matching1, 1)
2441_0_binarySearch_Return(EOS(STATIC_2441), java.lang.Object(ARRAY(i1301)), i1302, i1303, i1304, matching1) → 2454_0_binarySearch_Return(EOS(STATIC_2454), java.lang.Object(ARRAY(i1301)), i1302, i1303, i1304, 0) | =(matching1, 0)
2443_0_binarySearch_InvokeMethod(EOS(STATIC_2443), java.lang.Object(ARRAY(i1312)), i1313, i543, i567, java.lang.Object(ARRAY(i1312)), i1313, i1314, i1315, java.lang.Object(ARRAY(i1312)), i1313, i1168, i1315) → 2465_0_binarySearch_InvokeMethod(EOS(STATIC_2465), java.lang.Object(ARRAY(i1312)), i1313, i543, i567, java.lang.Object(ARRAY(i1312)), i1313, i1314, i1315)
2444_0_binarySearch_InvokeMethod(EOS(STATIC_2444), java.lang.Object(ARRAY(i1319)), i1320, i1321, i1322, java.lang.Object(ARRAY(i1319)), i1320, i1168, i1322) → 2469_0_binarySearch_InvokeMethod(EOS(STATIC_2469), java.lang.Object(ARRAY(i1319)), i1320, i1321, i1322)
2453_0_binarySearch_Return(EOS(STATIC_2453), java.lang.Object(ARRAY(i1337)), i1338, i1339, i1340, matching1) → 2454_0_binarySearch_Return(EOS(STATIC_2454), java.lang.Object(ARRAY(i1337)), i1338, i1339, i1340, 1) | =(matching1, 1)
2454_0_binarySearch_Return(EOS(STATIC_2454), java.lang.Object(ARRAY(i1367)), i1368, i1373, i1369, i1372) → 2473_0_binarySearch_Return(EOS(STATIC_2473), i1372)
2525_0_binarySearch_InvokeMethod(EOS(STATIC_2525), java.lang.Object(ARRAY(i1485)), i1486, i543, i567, java.lang.Object(ARRAY(i1485)), i1486, i1487, i1488, java.lang.Object(ARRAY(i1485)), i1486, i1488, i1484, java.lang.Object(ARRAY(i1485)), i1486, i1487, i1315) → 2279_0_binarySearch_InvokeMethod(EOS(STATIC_2279), java.lang.Object(ARRAY(i1485)), i1486, i543, i567, java.lang.Object(ARRAY(i1485)), i1486, i1487, i1488, java.lang.Object(ARRAY(i1485)), i1486, i1488, i1484, java.lang.Object(ARRAY(i1485)), i1486, i1487, i1315)
2529_0_binarySearch_InvokeMethod(EOS(STATIC_2529), java.lang.Object(ARRAY(i1492)), i1493, i1494, i1495, java.lang.Object(ARRAY(i1492)), i1493, i1495, i567, java.lang.Object(ARRAY(i1492)), i1493, i1494, i1315) → 2379_0_binarySearch_InvokeMethod(EOS(STATIC_2379), java.lang.Object(ARRAY(i1492)), i1493, i1494, i1495, java.lang.Object(ARRAY(i1492)), i1493, i1495, i567, java.lang.Object(ARRAY(i1492)), i1493, i1494, i1315)
2535_0_binarySearch_InvokeMethod(EOS(STATIC_2535), java.lang.Object(ARRAY(i1503)), i1504, i543, i567, java.lang.Object(ARRAY(i1503)), i1504, i1505, i1506, java.lang.Object(ARRAY(i1503)), i1504, i1321, i1506) → 2443_0_binarySearch_InvokeMethod(EOS(STATIC_2443), java.lang.Object(ARRAY(i1503)), i1504, i543, i567, java.lang.Object(ARRAY(i1503)), i1504, i1505, i1506, java.lang.Object(ARRAY(i1503)), i1504, i1321, i1506)
2539_0_binarySearch_InvokeMethod(EOS(STATIC_2539), java.lang.Object(ARRAY(i1510)), i1511, i1512, i1513, java.lang.Object(ARRAY(i1510)), i1511, i1321, i1513) → 2444_0_binarySearch_InvokeMethod(EOS(STATIC_2444), java.lang.Object(ARRAY(i1510)), i1511, i1512, i1513, java.lang.Object(ARRAY(i1510)), i1511, i1321, i1513)
2545_0_binarySearch_Return(EOS(STATIC_2545), java.lang.Object(ARRAY(i1529)), i1530, i1531, i1532, i1372) → 2454_0_binarySearch_Return(EOS(STATIC_2454), java.lang.Object(ARRAY(i1529)), i1530, i1531, i1532, i1372)

Combined rules. Obtained 7 conditional rules for P and 20 conditional rules for R.


P rules:
1869_0_binarySearch_Load(EOS(STATIC_1869), java.lang.Object(ARRAY(x0)), x1, x2, x3, x2) → 1975_1_binarySearch_InvokeMethod(1869_0_binarySearch_Load(EOS(STATIC_1869), java.lang.Object(ARRAY(x0)), x1, x2, -(+(x2, /(-(x3, x2), 2)), 1), x2), java.lang.Object(ARRAY(x0)), x1, x3, +(x2, /(-(x3, x2), 2)), java.lang.Object(ARRAY(x0)), x1, x2, -(+(x2, /(-(x3, x2), 2)), 1)) | &&(&&(>=(x3, x2), >(x0, +(x2, /(-(x3, x2), 2)))), <=(0, +(x2, /(-(x3, x2), 2))))
1975_1_binarySearch_InvokeMethod(1880_0_binarySearch_Return(EOS(STATIC_1880), java.lang.Object(ARRAY(x0)), x1, x2, x3, 0), java.lang.Object(ARRAY(x0)), x1, x5, x6, java.lang.Object(ARRAY(x0)), x1, x2, x3) → 2337_1_binarySearch_InvokeMethod(1869_0_binarySearch_Load(EOS(STATIC_1869), java.lang.Object(ARRAY(x0)), x1, +(x6, 1), x5, +(x6, 1)), java.lang.Object(ARRAY(x0)), x1, +(x6, 1), x5) | >(+(x6, 1), 0)
1975_1_binarySearch_InvokeMethod(1942_0_binarySearch_Return(EOS(STATIC_1942), java.lang.Object(ARRAY(x0)), x1, x2, x3, x4, x5), java.lang.Object(ARRAY(x0)), x1, x6, x7, java.lang.Object(ARRAY(x0)), x1, x2, x3) → 2337_1_binarySearch_InvokeMethod(1869_0_binarySearch_Load(EOS(STATIC_1869), java.lang.Object(ARRAY(x0)), x1, arith[3], x6, arith[3]), java.lang.Object(ARRAY(x0)), x1, arith[3], x6) | FALSE
1975_1_binarySearch_InvokeMethod(2294_0_binarySearch_Return(EOS(STATIC_2294), java.lang.Object(ARRAY(x0)), x1, x2, x3, x4), java.lang.Object(ARRAY(x0)), x1, x5, x6, java.lang.Object(ARRAY(x0)), x1, x7, x2) → 2337_1_binarySearch_InvokeMethod(1869_0_binarySearch_Load(EOS(STATIC_1869), java.lang.Object(ARRAY(x0)), x1, arith[3], x5, arith[3]), java.lang.Object(ARRAY(x0)), x1, arith[3], x5) | FALSE
1975_1_binarySearch_InvokeMethod(2385_0_binarySearch_Return(EOS(STATIC_2385), 0), java.lang.Object(ARRAY(x1)), x2, x3, x4, java.lang.Object(ARRAY(x1)), x2, x5, x6) → 2337_1_binarySearch_InvokeMethod(1869_0_binarySearch_Load(EOS(STATIC_1869), java.lang.Object(ARRAY(x1)), x2, +(x4, 1), x3, +(x4, 1)), java.lang.Object(ARRAY(x1)), x2, +(x4, 1), x3) | >(+(x4, 1), 0)
1975_1_binarySearch_InvokeMethod(2397_0_binarySearch_Return(EOS(STATIC_2397), x0), java.lang.Object(ARRAY(x1)), x2, x3, x4, java.lang.Object(ARRAY(x1)), x2, x5, x6) → 2337_1_binarySearch_InvokeMethod(1869_0_binarySearch_Load(EOS(STATIC_1869), java.lang.Object(ARRAY(x1)), x2, arith[3], x3, arith[3]), java.lang.Object(ARRAY(x1)), x2, arith[3], x3) | FALSE
1975_1_binarySearch_InvokeMethod(2473_0_binarySearch_Return(EOS(STATIC_2473), 0), java.lang.Object(ARRAY(x1)), x2, x3, x4, java.lang.Object(ARRAY(x1)), x2, x5, x6) → 2337_1_binarySearch_InvokeMethod(1869_0_binarySearch_Load(EOS(STATIC_1869), java.lang.Object(ARRAY(x1)), x2, +(x4, 1), x3, +(x4, 1)), java.lang.Object(ARRAY(x1)), x2, +(x4, 1), x3) | >(+(x4, 1), 0)
R rules:
1975_1_binarySearch_InvokeMethod(2394_0_binarySearch_InvokeMethod(EOS(STATIC_2394), java.lang.Object(ARRAY(x0)), x1, x2, x3), java.lang.Object(ARRAY(x0)), x1, x4, x5, java.lang.Object(ARRAY(x0)), x1, x6, x3) → 2465_0_binarySearch_InvokeMethod(EOS(STATIC_2465), java.lang.Object(ARRAY(x0)), x1, x4, x5, java.lang.Object(ARRAY(x0)), x1, x6, x3)
1975_1_binarySearch_InvokeMethod(2469_0_binarySearch_InvokeMethod(EOS(STATIC_2469), java.lang.Object(ARRAY(x0)), x1, x2, x3), java.lang.Object(ARRAY(x0)), x1, x4, x5, java.lang.Object(ARRAY(x0)), x1, x6, x3) → 2465_0_binarySearch_InvokeMethod(EOS(STATIC_2465), java.lang.Object(ARRAY(x0)), x1, x4, x5, java.lang.Object(ARRAY(x0)), x1, x6, x3)
1975_1_binarySearch_InvokeMethod(2216_0_binarySearch_InvokeMethod(EOS(STATIC_2216), java.lang.Object(ARRAY(x0)), x1, x2, x3, java.lang.Object(ARRAY(x0)), x1, x4, x5), java.lang.Object(ARRAY(x0)), x1, x6, x7, java.lang.Object(ARRAY(x0)), x1, x4, x2) → 2465_0_binarySearch_InvokeMethod(EOS(STATIC_2465), java.lang.Object(ARRAY(x0)), x1, x6, x7, java.lang.Object(ARRAY(x0)), x1, x4, x2)
1975_1_binarySearch_InvokeMethod(2291_0_binarySearch_InvokeMethod(EOS(STATIC_2291), java.lang.Object(ARRAY(x0)), x1, x2, x3, java.lang.Object(ARRAY(x0)), x1, x4, x5), java.lang.Object(ARRAY(x0)), x1, x6, x7, java.lang.Object(ARRAY(x0)), x1, x4, x2) → 2465_0_binarySearch_InvokeMethod(EOS(STATIC_2465), java.lang.Object(ARRAY(x0)), x1, x6, x7, java.lang.Object(ARRAY(x0)), x1, x4, x2)
1975_1_binarySearch_InvokeMethod(2465_0_binarySearch_InvokeMethod(EOS(STATIC_2465), java.lang.Object(ARRAY(x0)), x1, x2, x3, java.lang.Object(ARRAY(x0)), x1, x4, x5), java.lang.Object(ARRAY(x0)), x1, x6, x7, java.lang.Object(ARRAY(x0)), x1, x4, x2) → 2465_0_binarySearch_InvokeMethod(EOS(STATIC_2465), java.lang.Object(ARRAY(x0)), x1, x6, x7, java.lang.Object(ARRAY(x0)), x1, x4, x2)
1975_1_binarySearch_InvokeMethod(2084_0_binarySearch_ArrayAccess(EOS(STATIC_2084), java.lang.Object(ARRAY(x0)), x1, x2, x3, x4, java.lang.Object(ARRAY(x0)), x4), java.lang.Object(ARRAY(x0)), x1, x5, x6, java.lang.Object(ARRAY(x0)), x1, x2, x3) → 2465_0_binarySearch_InvokeMethod(EOS(STATIC_2465), java.lang.Object(ARRAY(x0)), x1, x5, x6, java.lang.Object(ARRAY(x0)), x1, x2, x3)
1975_1_binarySearch_InvokeMethod(2118_0_binarySearch_ArrayAccess(EOS(STATIC_2118), java.lang.Object(ARRAY(x0)), x1, x2, x3, x4, java.lang.Object(ARRAY(x0)), x4), java.lang.Object(ARRAY(x0)), x1, x5, x6, java.lang.Object(ARRAY(x0)), x1, x2, x3) → 2465_0_binarySearch_InvokeMethod(EOS(STATIC_2465), java.lang.Object(ARRAY(x0)), x1, x5, x6, java.lang.Object(ARRAY(x0)), x1, x2, x3)
2337_1_binarySearch_InvokeMethod(2394_0_binarySearch_InvokeMethod(EOS(STATIC_2394), java.lang.Object(ARRAY(x0)), x1, x2, x3), java.lang.Object(ARRAY(x0)), x1, x4, x3) → 2469_0_binarySearch_InvokeMethod(EOS(STATIC_2469), java.lang.Object(ARRAY(x0)), x1, x4, x3)
2337_1_binarySearch_InvokeMethod(2469_0_binarySearch_InvokeMethod(EOS(STATIC_2469), java.lang.Object(ARRAY(x0)), x1, x2, x3), java.lang.Object(ARRAY(x0)), x1, x4, x3) → 2469_0_binarySearch_InvokeMethod(EOS(STATIC_2469), java.lang.Object(ARRAY(x0)), x1, x4, x3)
2337_1_binarySearch_InvokeMethod(1880_0_binarySearch_Return(EOS(STATIC_1880), java.lang.Object(ARRAY(x0)), x1, x2, x3, 0), java.lang.Object(ARRAY(x0)), x1, x2, x3) → 2473_0_binarySearch_Return(EOS(STATIC_2473), 0)
2337_1_binarySearch_InvokeMethod(2216_0_binarySearch_InvokeMethod(EOS(STATIC_2216), java.lang.Object(ARRAY(x0)), x1, x2, x3, java.lang.Object(ARRAY(x0)), x1, x4, x5), java.lang.Object(ARRAY(x0)), x1, x4, x2) → 2469_0_binarySearch_InvokeMethod(EOS(STATIC_2469), java.lang.Object(ARRAY(x0)), x1, x4, x2)
2337_1_binarySearch_InvokeMethod(2291_0_binarySearch_InvokeMethod(EOS(STATIC_2291), java.lang.Object(ARRAY(x0)), x1, x2, x3, java.lang.Object(ARRAY(x0)), x1, x4, x5), java.lang.Object(ARRAY(x0)), x1, x4, x2) → 2469_0_binarySearch_InvokeMethod(EOS(STATIC_2469), java.lang.Object(ARRAY(x0)), x1, x4, x2)
2337_1_binarySearch_InvokeMethod(2465_0_binarySearch_InvokeMethod(EOS(STATIC_2465), java.lang.Object(ARRAY(x0)), x1, x2, x3, java.lang.Object(ARRAY(x0)), x1, x4, x5), java.lang.Object(ARRAY(x0)), x1, x4, x2) → 2469_0_binarySearch_InvokeMethod(EOS(STATIC_2469), java.lang.Object(ARRAY(x0)), x1, x4, x2)
2337_1_binarySearch_InvokeMethod(2084_0_binarySearch_ArrayAccess(EOS(STATIC_2084), java.lang.Object(ARRAY(x0)), x1, x2, x3, x4, java.lang.Object(ARRAY(x0)), x4), java.lang.Object(ARRAY(x0)), x1, x2, x3) → 2469_0_binarySearch_InvokeMethod(EOS(STATIC_2469), java.lang.Object(ARRAY(x0)), x1, x2, x3)
2337_1_binarySearch_InvokeMethod(2118_0_binarySearch_ArrayAccess(EOS(STATIC_2118), java.lang.Object(ARRAY(x0)), x1, x2, x3, x4, java.lang.Object(ARRAY(x0)), x4), java.lang.Object(ARRAY(x0)), x1, x2, x3) → 2469_0_binarySearch_InvokeMethod(EOS(STATIC_2469), java.lang.Object(ARRAY(x0)), x1, x2, x3)
2337_1_binarySearch_InvokeMethod(2294_0_binarySearch_Return(EOS(STATIC_2294), java.lang.Object(ARRAY(x0)), x1, x2, x3, 1), java.lang.Object(ARRAY(x0)), x1, x5, x2) → 2473_0_binarySearch_Return(EOS(STATIC_2473), 1)
2337_1_binarySearch_InvokeMethod(1942_0_binarySearch_Return(EOS(STATIC_1942), java.lang.Object(ARRAY(x0)), x1, x2, x3, x4, 1), java.lang.Object(ARRAY(x0)), x1, x2, x3) → 2473_0_binarySearch_Return(EOS(STATIC_2473), 1)
2337_1_binarySearch_InvokeMethod(2385_0_binarySearch_Return(EOS(STATIC_2385), 0), java.lang.Object(ARRAY(x1)), x2, x3, x4) → 2473_0_binarySearch_Return(EOS(STATIC_2473), 0)
2337_1_binarySearch_InvokeMethod(2397_0_binarySearch_Return(EOS(STATIC_2397), 1), java.lang.Object(ARRAY(x1)), x2, x3, x4) → 2473_0_binarySearch_Return(EOS(STATIC_2473), 1)
2337_1_binarySearch_InvokeMethod(2473_0_binarySearch_Return(EOS(STATIC_2473), x0), java.lang.Object(ARRAY(x1)), x2, x3, x4) → 2473_0_binarySearch_Return(EOS(STATIC_2473), x0)

Filtered ground terms:



1869_0_binarySearch_Load(x1, x2, x3, x4, x5, x6) → 1869_0_binarySearch_Load(x2, x3, x4, x5, x6)
Cond_1975_1_binarySearch_InvokeMethod2(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10) → Cond_1975_1_binarySearch_InvokeMethod2(x1, x3, x4, x5, x6, x7, x8, x9, x10)
2473_0_binarySearch_Return(x1, x2) → 2473_0_binarySearch_Return(x2)
Cond_1975_1_binarySearch_InvokeMethod1(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10) → Cond_1975_1_binarySearch_InvokeMethod1(x1, x3, x4, x5, x6, x7, x8, x9, x10)
2385_0_binarySearch_Return(x1, x2) → 2385_0_binarySearch_Return
1880_0_binarySearch_Return(x1, x2, x3, x4, x5, x6) → 1880_0_binarySearch_Return(x2, x3, x4, x5)
Cond_1869_0_binarySearch_Load(x1, x2, x3, x4, x5, x6, x7) → Cond_1869_0_binarySearch_Load(x1, x3, x4, x5, x6, x7)
2397_0_binarySearch_Return(x1, x2) → 2397_0_binarySearch_Return
1942_0_binarySearch_Return(x1, x2, x3, x4, x5, x6, x7) → 1942_0_binarySearch_Return(x2, x3, x4, x5, x6)
2294_0_binarySearch_Return(x1, x2, x3, x4, x5, x6) → 2294_0_binarySearch_Return(x2, x3, x4, x5)
2469_0_binarySearch_InvokeMethod(x1, x2, x3, x4, x5) → 2469_0_binarySearch_InvokeMethod(x2, x3, x4, x5)
2118_0_binarySearch_ArrayAccess(x1, x2, x3, x4, x5, x6, x7, x8) → 2118_0_binarySearch_ArrayAccess(x2, x3, x4, x5, x6, x7, x8)
2084_0_binarySearch_ArrayAccess(x1, x2, x3, x4, x5, x6, x7, x8) → 2084_0_binarySearch_ArrayAccess(x2, x3, x4, x5, x6, x7, x8)
2465_0_binarySearch_InvokeMethod(x1, x2, x3, x4, x5, x6, x7, x8, x9) → 2465_0_binarySearch_InvokeMethod(x2, x3, x4, x5, x6, x7, x8, x9)
2291_0_binarySearch_InvokeMethod(x1, x2, x3, x4, x5, x6, x7, x8, x9) → 2291_0_binarySearch_InvokeMethod(x2, x3, x4, x5, x6, x7, x8, x9)
2216_0_binarySearch_InvokeMethod(x1, x2, x3, x4, x5, x6, x7, x8, x9) → 2216_0_binarySearch_InvokeMethod(x2, x3, x4, x5, x6, x7, x8, x9)
2394_0_binarySearch_InvokeMethod(x1, x2, x3, x4, x5) → 2394_0_binarySearch_InvokeMethod(x2, x3, x4, x5)

Filtered duplicate args:



1869_0_binarySearch_Load(x1, x2, x3, x4, x5) → 1869_0_binarySearch_Load(x1, x2, x4, x5)
Cond_1869_0_binarySearch_Load(x1, x2, x3, x4, x5, x6) → Cond_1869_0_binarySearch_Load(x1, x2, x3, x5, x6)
1975_1_binarySearch_InvokeMethod(x1, x2, x3, x4, x5, x6, x7, x8, x9) → 1975_1_binarySearch_InvokeMethod(x1, x4, x5, x6, x7, x8, x9)
Cond_1975_1_binarySearch_InvokeMethod(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10) → Cond_1975_1_binarySearch_InvokeMethod(x1, x2, x5, x6)
Cond_1975_1_binarySearch_InvokeMethod1(x1, x2, x3, x4, x5, x6, x7, x8, x9) → Cond_1975_1_binarySearch_InvokeMethod1(x1, x4, x5, x6, x7, x8, x9)
Cond_1975_1_binarySearch_InvokeMethod2(x1, x2, x3, x4, x5, x6, x7, x8, x9) → Cond_1975_1_binarySearch_InvokeMethod2(x1, x4, x5, x6, x7, x8, x9)
2465_0_binarySearch_InvokeMethod(x1, x2, x3, x4, x5, x6, x7, x8) → 2465_0_binarySearch_InvokeMethod(x3, x4, x5, x6, x7, x8)
2216_0_binarySearch_InvokeMethod(x1, x2, x3, x4, x5, x6, x7, x8) → 2216_0_binarySearch_InvokeMethod(x3, x4, x5, x6, x7, x8)
2291_0_binarySearch_InvokeMethod(x1, x2, x3, x4, x5, x6, x7, x8) → 2291_0_binarySearch_InvokeMethod(x3, x4, x5, x6, x7, x8)
2084_0_binarySearch_ArrayAccess(x1, x2, x3, x4, x5, x6, x7) → 2084_0_binarySearch_ArrayAccess(x2, x3, x4, x6, x7)
2118_0_binarySearch_ArrayAccess(x1, x2, x3, x4, x5, x6, x7) → 2118_0_binarySearch_ArrayAccess(x2, x3, x4, x6, x7)

Filtered unneeded arguments:



Cond_1869_0_binarySearch_Load(x1, x2, x3, x4, x5) → Cond_1869_0_binarySearch_Load(x1, x2, x4, x5)
1975_1_binarySearch_InvokeMethod(x1, x2, x3, x4, x5, x6, x7) → 1975_1_binarySearch_InvokeMethod(x1, x2, x3, x4)
2337_1_binarySearch_InvokeMethod(x1, x2, x3, x4, x5) → 2337_1_binarySearch_InvokeMethod(x1)
Cond_1975_1_binarySearch_InvokeMethod1(x1, x2, x3, x4, x5, x6, x7) → Cond_1975_1_binarySearch_InvokeMethod1(x1, x2, x3, x4)
Cond_1975_1_binarySearch_InvokeMethod2(x1, x2, x3, x4, x5, x6, x7) → Cond_1975_1_binarySearch_InvokeMethod2(x1, x2, x3, x4)
1869_0_binarySearch_Load(x1, x2, x3, x4) → 1869_0_binarySearch_Load(x1, x3, x4)
1880_0_binarySearch_Return(x1, x2, x3, x4) → 1880_0_binarySearch_Return(x1)

Combined rules. Obtained 4 conditional rules for P and 20 conditional rules for R.


P rules:
1869_0_binarySearch_Load(java.lang.Object(ARRAY(x0)), x3, x2) → 1975_1_binarySearch_InvokeMethod(1869_0_binarySearch_Load(java.lang.Object(ARRAY(x0)), -(+(x2, /(-(x3, x2), 2)), 1), x2), x3, +(x2, /(-(x3, x2), 2)), java.lang.Object(ARRAY(x0))) | &&(&&(>=(x3, x2), >(x0, +(x2, /(-(x3, x2), 2)))), <=(0, +(x2, /(-(x3, x2), 2))))
1975_1_binarySearch_InvokeMethod(1880_0_binarySearch_Return(java.lang.Object(ARRAY(x0))), x5, x6, java.lang.Object(ARRAY(x0))) → 2337_1_binarySearch_InvokeMethod(1869_0_binarySearch_Load(java.lang.Object(ARRAY(x0)), x5, +(x6, 1))) | >(x6, -1)
1975_1_binarySearch_InvokeMethod(2385_0_binarySearch_Return, x3, x4, java.lang.Object(ARRAY(x1))) → 2337_1_binarySearch_InvokeMethod(1869_0_binarySearch_Load(java.lang.Object(ARRAY(x1)), x3, +(x4, 1))) | >(x4, -1)
1975_1_binarySearch_InvokeMethod(2473_0_binarySearch_Return(0), x3, x4, java.lang.Object(ARRAY(x1))) → 2337_1_binarySearch_InvokeMethod(1869_0_binarySearch_Load(java.lang.Object(ARRAY(x1)), x3, +(x4, 1))) | >(x4, -1)
R rules:
1975_1_binarySearch_InvokeMethod(2394_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x2, x3), x4, x5, java.lang.Object(ARRAY(x0))) → 2465_0_binarySearch_InvokeMethod(x4, x5, java.lang.Object(ARRAY(x0)), x1, x6, x3)
1975_1_binarySearch_InvokeMethod(2469_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x2, x3), x4, x5, java.lang.Object(ARRAY(x0))) → 2465_0_binarySearch_InvokeMethod(x4, x5, java.lang.Object(ARRAY(x0)), x1, x6, x3)
1975_1_binarySearch_InvokeMethod(2216_0_binarySearch_InvokeMethod(x2, x3, java.lang.Object(ARRAY(x0)), x1, x4, x5), x6, x7, java.lang.Object(ARRAY(x0))) → 2465_0_binarySearch_InvokeMethod(x6, x7, java.lang.Object(ARRAY(x0)), x1, x4, x2)
1975_1_binarySearch_InvokeMethod(2291_0_binarySearch_InvokeMethod(x2, x3, java.lang.Object(ARRAY(x0)), x1, x4, x5), x6, x7, java.lang.Object(ARRAY(x0))) → 2465_0_binarySearch_InvokeMethod(x6, x7, java.lang.Object(ARRAY(x0)), x1, x4, x2)
1975_1_binarySearch_InvokeMethod(2465_0_binarySearch_InvokeMethod(x2, x3, java.lang.Object(ARRAY(x0)), x1, x4, x5), x6, x7, java.lang.Object(ARRAY(x0))) → 2465_0_binarySearch_InvokeMethod(x6, x7, java.lang.Object(ARRAY(x0)), x1, x4, x2)
1975_1_binarySearch_InvokeMethod(2084_0_binarySearch_ArrayAccess(x1, x2, x3, java.lang.Object(ARRAY(x0)), x4), x5, x6, java.lang.Object(ARRAY(x0))) → 2465_0_binarySearch_InvokeMethod(x5, x6, java.lang.Object(ARRAY(x0)), x1, x2, x3)
1975_1_binarySearch_InvokeMethod(2118_0_binarySearch_ArrayAccess(x1, x2, x3, java.lang.Object(ARRAY(x0)), x4), x5, x6, java.lang.Object(ARRAY(x0))) → 2465_0_binarySearch_InvokeMethod(x5, x6, java.lang.Object(ARRAY(x0)), x1, x2, x3)
2337_1_binarySearch_InvokeMethod(2394_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x2, x3)) → 2469_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x4, x3)
2337_1_binarySearch_InvokeMethod(2469_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x2, x3)) → 2469_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x4, x3)
2337_1_binarySearch_InvokeMethod(1880_0_binarySearch_Return(java.lang.Object(ARRAY(x0)))) → 2473_0_binarySearch_Return(0)
2337_1_binarySearch_InvokeMethod(2216_0_binarySearch_InvokeMethod(x2, x3, java.lang.Object(ARRAY(x0)), x1, x4, x5)) → 2469_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x4, x2)
2337_1_binarySearch_InvokeMethod(2291_0_binarySearch_InvokeMethod(x2, x3, java.lang.Object(ARRAY(x0)), x1, x4, x5)) → 2469_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x4, x2)
2337_1_binarySearch_InvokeMethod(2465_0_binarySearch_InvokeMethod(x2, x3, java.lang.Object(ARRAY(x0)), x1, x4, x5)) → 2469_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x4, x2)
2337_1_binarySearch_InvokeMethod(2084_0_binarySearch_ArrayAccess(x1, x2, x3, java.lang.Object(ARRAY(x0)), x4)) → 2469_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x2, x3)
2337_1_binarySearch_InvokeMethod(2118_0_binarySearch_ArrayAccess(x1, x2, x3, java.lang.Object(ARRAY(x0)), x4)) → 2469_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x2, x3)
2337_1_binarySearch_InvokeMethod(2294_0_binarySearch_Return(java.lang.Object(ARRAY(x0)), x1, x2, x3)) → 2473_0_binarySearch_Return(1)
2337_1_binarySearch_InvokeMethod(1942_0_binarySearch_Return(java.lang.Object(ARRAY(x0)), x1, x2, x3, x4)) → 2473_0_binarySearch_Return(1)
2337_1_binarySearch_InvokeMethod(2385_0_binarySearch_Return) → 2473_0_binarySearch_Return(0)
2337_1_binarySearch_InvokeMethod(2397_0_binarySearch_Return) → 2473_0_binarySearch_Return(1)
2337_1_binarySearch_InvokeMethod(2473_0_binarySearch_Return(x0)) → 2473_0_binarySearch_Return(x0)

Performed bisimulation on rules. Used the following equivalence classes: {[2394_0_binarySearch_InvokeMethod_4, 2469_0_binarySearch_InvokeMethod_4, 2294_0_binarySearch_Return_4]=2394_0_binarySearch_InvokeMethod_4, [2465_0_binarySearch_InvokeMethod_6, 2216_0_binarySearch_InvokeMethod_6, 2291_0_binarySearch_InvokeMethod_6]=2465_0_binarySearch_InvokeMethod_6, [2084_0_binarySearch_ArrayAccess_5, 2118_0_binarySearch_ArrayAccess_5]=2084_0_binarySearch_ArrayAccess_5, [2385_0_binarySearch_Return, 2397_0_binarySearch_Return]=2385_0_binarySearch_Return}


Finished conversion. Obtained 9 rules for P and 12 rules for R. System has predefined symbols.


P rules:
1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0)), x3, x2) → COND_1869_0_BINARYSEARCH_LOAD(&&(&&(>=(x3, x2), >(x0, +(x2, /(-(x3, x2), 2)))), <=(0, +(x2, /(-(x3, x2), 2)))), java.lang.Object(ARRAY(x0)), x3, x2)
COND_1869_0_BINARYSEARCH_LOAD(TRUE, java.lang.Object(ARRAY(x0)), x3, x2) → 1975_1_BINARYSEARCH_INVOKEMETHOD(1869_0_binarySearch_Load(java.lang.Object(ARRAY(x0)), -(+(x2, /(-(x3, x2), 2)), 1), x2), x3, +(x2, /(-(x3, x2), 2)), java.lang.Object(ARRAY(x0)))
COND_1869_0_BINARYSEARCH_LOAD(TRUE, java.lang.Object(ARRAY(x0)), x3, x2) → 1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0)), -(+(x2, /(-(x3, x2), 2)), 1), x2)
1975_1_BINARYSEARCH_INVOKEMETHOD(1880_0_binarySearch_Return(java.lang.Object(ARRAY(x0))), x5, x6, java.lang.Object(ARRAY(x0))) → COND_1975_1_BINARYSEARCH_INVOKEMETHOD(>(x6, -1), 1880_0_binarySearch_Return(java.lang.Object(ARRAY(x0))), x5, x6, java.lang.Object(ARRAY(x0)))
COND_1975_1_BINARYSEARCH_INVOKEMETHOD(TRUE, 1880_0_binarySearch_Return(java.lang.Object(ARRAY(x0))), x5, x6, java.lang.Object(ARRAY(x0))) → 1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0)), x5, +(x6, 1))
1975_1_BINARYSEARCH_INVOKEMETHOD(2385_0_binarySearch_Return, x3, x4, java.lang.Object(ARRAY(x1))) → COND_1975_1_BINARYSEARCH_INVOKEMETHOD1(>(x4, -1), 2385_0_binarySearch_Return, x3, x4, java.lang.Object(ARRAY(x1)))
COND_1975_1_BINARYSEARCH_INVOKEMETHOD1(TRUE, 2385_0_binarySearch_Return, x3, x4, java.lang.Object(ARRAY(x1))) → 1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x1)), x3, +(x4, 1))
1975_1_BINARYSEARCH_INVOKEMETHOD(2473_0_binarySearch_Return(0), x3, x4, java.lang.Object(ARRAY(x1))) → COND_1975_1_BINARYSEARCH_INVOKEMETHOD2(>(x4, -1), 2473_0_binarySearch_Return(0), x3, x4, java.lang.Object(ARRAY(x1)))
COND_1975_1_BINARYSEARCH_INVOKEMETHOD2(TRUE, 2473_0_binarySearch_Return(0), x3, x4, java.lang.Object(ARRAY(x1))) → 1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x1)), x3, +(x4, 1))
R rules:
1975_1_binarySearch_InvokeMethod(2394_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x2, x3), x4, x5, java.lang.Object(ARRAY(x0))) → 2465_0_binarySearch_InvokeMethod(x4, x5, java.lang.Object(ARRAY(x0)), x1, x6, x3)
1975_1_binarySearch_InvokeMethod(2465_0_binarySearch_InvokeMethod(x2, x3, java.lang.Object(ARRAY(x0)), x1, x4, x5), x6, x7, java.lang.Object(ARRAY(x0))) → 2465_0_binarySearch_InvokeMethod(x6, x7, java.lang.Object(ARRAY(x0)), x1, x4, x2)
1975_1_binarySearch_InvokeMethod(2084_0_binarySearch_ArrayAccess(x1, x2, x3, java.lang.Object(ARRAY(x0)), x4), x5, x6, java.lang.Object(ARRAY(x0))) → 2465_0_binarySearch_InvokeMethod(x5, x6, java.lang.Object(ARRAY(x0)), x1, x2, x3)
2337_1_binarySearch_InvokeMethod(2394_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x2, x3)) → 2394_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x4, x3)
2337_1_binarySearch_InvokeMethod(1880_0_binarySearch_Return(java.lang.Object(ARRAY(x0)))) → 2473_0_binarySearch_Return(0)
2337_1_binarySearch_InvokeMethod(2465_0_binarySearch_InvokeMethod(x2, x3, java.lang.Object(ARRAY(x0)), x1, x4, x5)) → 2394_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x4, x2)
2337_1_binarySearch_InvokeMethod(2084_0_binarySearch_ArrayAccess(x1, x2, x3, java.lang.Object(ARRAY(x0)), x4)) → 2394_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x2, x3)
2337_1_binarySearch_InvokeMethod(2394_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x2, x3)) → 2473_0_binarySearch_Return(1)
2337_1_binarySearch_InvokeMethod(1942_0_binarySearch_Return(java.lang.Object(ARRAY(x0)), x1, x2, x3, x4)) → 2473_0_binarySearch_Return(1)
2337_1_binarySearch_InvokeMethod(2385_0_binarySearch_Return) → 2473_0_binarySearch_Return(0)
2337_1_binarySearch_InvokeMethod(2385_0_binarySearch_Return) → 2473_0_binarySearch_Return(1)
2337_1_binarySearch_InvokeMethod(2473_0_binarySearch_Return(x0)) → 2473_0_binarySearch_Return(x0)

(7) 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:

Boolean, Integer


The ITRS R consists of the following rules:
1975_1_binarySearch_InvokeMethod(2394_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x2, x3), x4, x5, java.lang.Object(ARRAY(x0))) → 2465_0_binarySearch_InvokeMethod(x4, x5, java.lang.Object(ARRAY(x0)), x1, x6, x3)
1975_1_binarySearch_InvokeMethod(2465_0_binarySearch_InvokeMethod(x2, x3, java.lang.Object(ARRAY(x0)), x1, x4, x5), x6, x7, java.lang.Object(ARRAY(x0))) → 2465_0_binarySearch_InvokeMethod(x6, x7, java.lang.Object(ARRAY(x0)), x1, x4, x2)
1975_1_binarySearch_InvokeMethod(2084_0_binarySearch_ArrayAccess(x1, x2, x3, java.lang.Object(ARRAY(x0)), x4), x5, x6, java.lang.Object(ARRAY(x0))) → 2465_0_binarySearch_InvokeMethod(x5, x6, java.lang.Object(ARRAY(x0)), x1, x2, x3)
2337_1_binarySearch_InvokeMethod(2394_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x2, x3)) → 2394_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x4, x3)
2337_1_binarySearch_InvokeMethod(1880_0_binarySearch_Return(java.lang.Object(ARRAY(x0)))) → 2473_0_binarySearch_Return(0)
2337_1_binarySearch_InvokeMethod(2465_0_binarySearch_InvokeMethod(x2, x3, java.lang.Object(ARRAY(x0)), x1, x4, x5)) → 2394_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x4, x2)
2337_1_binarySearch_InvokeMethod(2084_0_binarySearch_ArrayAccess(x1, x2, x3, java.lang.Object(ARRAY(x0)), x4)) → 2394_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x2, x3)
2337_1_binarySearch_InvokeMethod(2394_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x2, x3)) → 2473_0_binarySearch_Return(1)
2337_1_binarySearch_InvokeMethod(1942_0_binarySearch_Return(java.lang.Object(ARRAY(x0)), x1, x2, x3, x4)) → 2473_0_binarySearch_Return(1)
2337_1_binarySearch_InvokeMethod(2385_0_binarySearch_Return) → 2473_0_binarySearch_Return(0)
2337_1_binarySearch_InvokeMethod(2385_0_binarySearch_Return) → 2473_0_binarySearch_Return(1)
2337_1_binarySearch_InvokeMethod(2473_0_binarySearch_Return(x0)) → 2473_0_binarySearch_Return(x0)

The integer pair graph contains the following rules and edges:
(0): 1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[0])), x3[0], x2[0]) → COND_1869_0_BINARYSEARCH_LOAD(x3[0] >= x2[0] && x0[0] > x2[0] + x3[0] - x2[0] / 2 && 0 <= x2[0] + x3[0] - x2[0] / 2, java.lang.Object(ARRAY(x0[0])), x3[0], x2[0])
(1): COND_1869_0_BINARYSEARCH_LOAD(TRUE, java.lang.Object(ARRAY(x0[1])), x3[1], x2[1]) → 1975_1_BINARYSEARCH_INVOKEMETHOD(1869_0_binarySearch_Load(java.lang.Object(ARRAY(x0[1])), x2[1] + x3[1] - x2[1] / 2 - 1, x2[1]), x3[1], x2[1] + x3[1] - x2[1] / 2, java.lang.Object(ARRAY(x0[1])))
(2): COND_1869_0_BINARYSEARCH_LOAD(TRUE, java.lang.Object(ARRAY(x0[2])), x3[2], x2[2]) → 1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[2])), x2[2] + x3[2] - x2[2] / 2 - 1, x2[2])
(3): 1975_1_BINARYSEARCH_INVOKEMETHOD(1880_0_binarySearch_Return(java.lang.Object(ARRAY(x0[3]))), x5[3], x6[3], java.lang.Object(ARRAY(x0[3]))) → COND_1975_1_BINARYSEARCH_INVOKEMETHOD(x6[3] > -1, 1880_0_binarySearch_Return(java.lang.Object(ARRAY(x0[3]))), x5[3], x6[3], java.lang.Object(ARRAY(x0[3])))
(4): COND_1975_1_BINARYSEARCH_INVOKEMETHOD(TRUE, 1880_0_binarySearch_Return(java.lang.Object(ARRAY(x0[4]))), x5[4], x6[4], java.lang.Object(ARRAY(x0[4]))) → 1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[4])), x5[4], x6[4] + 1)
(5): 1975_1_BINARYSEARCH_INVOKEMETHOD(2385_0_binarySearch_Return, x3[5], x4[5], java.lang.Object(ARRAY(x1[5]))) → COND_1975_1_BINARYSEARCH_INVOKEMETHOD1(x4[5] > -1, 2385_0_binarySearch_Return, x3[5], x4[5], java.lang.Object(ARRAY(x1[5])))
(6): COND_1975_1_BINARYSEARCH_INVOKEMETHOD1(TRUE, 2385_0_binarySearch_Return, x3[6], x4[6], java.lang.Object(ARRAY(x1[6]))) → 1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x1[6])), x3[6], x4[6] + 1)
(7): 1975_1_BINARYSEARCH_INVOKEMETHOD(2473_0_binarySearch_Return(0), x3[7], x4[7], java.lang.Object(ARRAY(x1[7]))) → COND_1975_1_BINARYSEARCH_INVOKEMETHOD2(x4[7] > -1, 2473_0_binarySearch_Return(0), x3[7], x4[7], java.lang.Object(ARRAY(x1[7])))
(8): COND_1975_1_BINARYSEARCH_INVOKEMETHOD2(TRUE, 2473_0_binarySearch_Return(0), x3[8], x4[8], java.lang.Object(ARRAY(x1[8]))) → 1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x1[8])), x3[8], x4[8] + 1)

(0) -> (1), if (x3[0] >= x2[0] && x0[0] > x2[0] + x3[0] - x2[0] / 2 && 0 <= x2[0] + x3[0] - x2[0] / 2java.lang.Object(ARRAY(x0[0])) →* java.lang.Object(ARRAY(x0[1]))∧x3[0]* x3[1]x2[0]* x2[1])


(0) -> (2), if (x3[0] >= x2[0] && x0[0] > x2[0] + x3[0] - x2[0] / 2 && 0 <= x2[0] + x3[0] - x2[0] / 2java.lang.Object(ARRAY(x0[0])) →* java.lang.Object(ARRAY(x0[2]))∧x3[0]* x3[2]x2[0]* x2[2])


(1) -> (3), if (1869_0_binarySearch_Load(java.lang.Object(ARRAY(x0[1])), x2[1] + x3[1] - x2[1] / 2 - 1, x2[1]) →* 1880_0_binarySearch_Return(java.lang.Object(ARRAY(x0[3])))∧x3[1]* x5[3]x2[1] + x3[1] - x2[1] / 2* x6[3]java.lang.Object(ARRAY(x0[1])) →* java.lang.Object(ARRAY(x0[3])))


(1) -> (5), if (1869_0_binarySearch_Load(java.lang.Object(ARRAY(x0[1])), x2[1] + x3[1] - x2[1] / 2 - 1, x2[1]) →* 2385_0_binarySearch_Returnx3[1]* x3[5]x2[1] + x3[1] - x2[1] / 2* x4[5]java.lang.Object(ARRAY(x0[1])) →* java.lang.Object(ARRAY(x1[5])))


(1) -> (7), if (1869_0_binarySearch_Load(java.lang.Object(ARRAY(x0[1])), x2[1] + x3[1] - x2[1] / 2 - 1, x2[1]) →* 2473_0_binarySearch_Return(0)∧x3[1]* x3[7]x2[1] + x3[1] - x2[1] / 2* x4[7]java.lang.Object(ARRAY(x0[1])) →* java.lang.Object(ARRAY(x1[7])))


(2) -> (0), if (java.lang.Object(ARRAY(x0[2])) →* java.lang.Object(ARRAY(x0[0]))∧x2[2] + x3[2] - x2[2] / 2 - 1* x3[0]x2[2]* x2[0])


(3) -> (4), if (x6[3] > -11880_0_binarySearch_Return(java.lang.Object(ARRAY(x0[3]))) →* 1880_0_binarySearch_Return(java.lang.Object(ARRAY(x0[4])))∧x5[3]* x5[4]x6[3]* x6[4]java.lang.Object(ARRAY(x0[3])) →* java.lang.Object(ARRAY(x0[4])))


(4) -> (0), if (java.lang.Object(ARRAY(x0[4])) →* java.lang.Object(ARRAY(x0[0]))∧x5[4]* x3[0]x6[4] + 1* x2[0])


(5) -> (6), if (x4[5] > -1x3[5]* x3[6]x4[5]* x4[6]java.lang.Object(ARRAY(x1[5])) →* java.lang.Object(ARRAY(x1[6])))


(6) -> (0), if (java.lang.Object(ARRAY(x1[6])) →* java.lang.Object(ARRAY(x0[0]))∧x3[6]* x3[0]x4[6] + 1* x2[0])


(7) -> (8), if (x4[7] > -1x3[7]* x3[8]x4[7]* x4[8]java.lang.Object(ARRAY(x1[7])) →* java.lang.Object(ARRAY(x1[8])))


(8) -> (0), if (java.lang.Object(ARRAY(x1[8])) →* java.lang.Object(ARRAY(x0[0]))∧x3[8]* x3[0]x4[8] + 1* x2[0])



The set Q consists of the following terms:
1975_1_binarySearch_InvokeMethod(2394_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x2, x3), x4, x5, java.lang.Object(ARRAY(x0)))
1975_1_binarySearch_InvokeMethod(2465_0_binarySearch_InvokeMethod(x0, x1, java.lang.Object(ARRAY(x2)), x3, x4, x5), x6, x7, java.lang.Object(ARRAY(x2)))
1975_1_binarySearch_InvokeMethod(2084_0_binarySearch_ArrayAccess(x0, x1, x2, java.lang.Object(ARRAY(x3)), x4), x5, x6, java.lang.Object(ARRAY(x3)))
2337_1_binarySearch_InvokeMethod(2394_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x2, x3))
2337_1_binarySearch_InvokeMethod(1880_0_binarySearch_Return(java.lang.Object(ARRAY(x0))))
2337_1_binarySearch_InvokeMethod(2465_0_binarySearch_InvokeMethod(x0, x1, java.lang.Object(ARRAY(x2)), x3, x4, x5))
2337_1_binarySearch_InvokeMethod(2084_0_binarySearch_ArrayAccess(x0, x1, x2, java.lang.Object(ARRAY(x3)), x4))
2337_1_binarySearch_InvokeMethod(1942_0_binarySearch_Return(java.lang.Object(ARRAY(x0)), x1, x2, x3, x4))
2337_1_binarySearch_InvokeMethod(2385_0_binarySearch_Return)
2337_1_binarySearch_InvokeMethod(2473_0_binarySearch_Return(x0))

(8) IDPNonInfProof (SOUND transformation)

Used the following options for this NonInfProof:
IDPGPoloSolver: Range: [(-1,2)] IsNat: true Interpretation Shape Heuristic: aprove.DPFramework.IDPProblem.Processors.nonInf.poly.IdpDefaultShapeHeuristic@631ea30a Constraint Generator: NonInfConstraintGenerator: PathGenerator: MetricPathGenerator: Max Left Steps: 1 Max Right Steps: 1

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 1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0)), x3, x2) → COND_1869_0_BINARYSEARCH_LOAD(&&(&&(>=(x3, x2), >(x0, +(x2, /(-(x3, x2), 2)))), <=(0, +(x2, /(-(x3, x2), 2)))), java.lang.Object(ARRAY(x0)), x3, x2) the following chains were created:
  • We consider the chain 1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[0])), x3[0], x2[0]) → COND_1869_0_BINARYSEARCH_LOAD(&&(&&(>=(x3[0], x2[0]), >(x0[0], +(x2[0], /(-(x3[0], x2[0]), 2)))), <=(0, +(x2[0], /(-(x3[0], x2[0]), 2)))), java.lang.Object(ARRAY(x0[0])), x3[0], x2[0]), COND_1869_0_BINARYSEARCH_LOAD(TRUE, java.lang.Object(ARRAY(x0[1])), x3[1], x2[1]) → 1975_1_BINARYSEARCH_INVOKEMETHOD(1869_0_binarySearch_Load(java.lang.Object(ARRAY(x0[1])), -(+(x2[1], /(-(x3[1], x2[1]), 2)), 1), x2[1]), x3[1], +(x2[1], /(-(x3[1], x2[1]), 2)), java.lang.Object(ARRAY(x0[1]))) which results in the following constraint:

    (1)    (&&(&&(>=(x3[0], x2[0]), >(x0[0], +(x2[0], /(-(x3[0], x2[0]), 2)))), <=(0, +(x2[0], /(-(x3[0], x2[0]), 2))))=TRUEjava.lang.Object(ARRAY(x0[0]))=java.lang.Object(ARRAY(x0[1]))∧x3[0]=x3[1]x2[0]=x2[1]1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[0])), x3[0], x2[0])≥NonInfC∧1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[0])), x3[0], x2[0])≥COND_1869_0_BINARYSEARCH_LOAD(&&(&&(>=(x3[0], x2[0]), >(x0[0], +(x2[0], /(-(x3[0], x2[0]), 2)))), <=(0, +(x2[0], /(-(x3[0], x2[0]), 2)))), java.lang.Object(ARRAY(x0[0])), x3[0], x2[0])∧(UIncreasing(COND_1869_0_BINARYSEARCH_LOAD(&&(&&(>=(x3[0], x2[0]), >(x0[0], +(x2[0], /(-(x3[0], x2[0]), 2)))), <=(0, +(x2[0], /(-(x3[0], x2[0]), 2)))), java.lang.Object(ARRAY(x0[0])), x3[0], x2[0])), ≥))



    We simplified constraint (1) using rules (I), (II), (IV) which results in the following new constraint:

    (2)    (&&(&&(>=(x3[0], x2[0]), >(x0[0], +(x2[0], /(-(x3[0], x2[0]), 2)))), <=(0, +(x2[0], /(-(x3[0], x2[0]), 2))))=TRUE1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[0])), x3[0], x2[0])≥NonInfC∧1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[0])), x3[0], x2[0])≥COND_1869_0_BINARYSEARCH_LOAD(&&(&&(>=(x3[0], x2[0]), >(x0[0], +(x2[0], /(-(x3[0], x2[0]), 2)))), <=(0, +(x2[0], /(-(x3[0], x2[0]), 2)))), java.lang.Object(ARRAY(x0[0])), x3[0], x2[0])∧(UIncreasing(COND_1869_0_BINARYSEARCH_LOAD(&&(&&(>=(x3[0], x2[0]), >(x0[0], +(x2[0], /(-(x3[0], x2[0]), 2)))), <=(0, +(x2[0], /(-(x3[0], x2[0]), 2)))), java.lang.Object(ARRAY(x0[0])), x3[0], x2[0])), ≥))



    We simplified constraint (2) using rule (POLY_CONSTRAINTS) which results in the following new constraint:

    (3)    (0 ≥ 0 ⇒ (UIncreasing(COND_1869_0_BINARYSEARCH_LOAD(&&(&&(>=(x3[0], x2[0]), >(x0[0], +(x2[0], /(-(x3[0], x2[0]), 2)))), <=(0, +(x2[0], /(-(x3[0], x2[0]), 2)))), java.lang.Object(ARRAY(x0[0])), x3[0], x2[0])), ≥)∧[(-1)bni_77 + (-1)Bound*bni_77] + [(-1)bni_77]x2[0] + [bni_77]x3[0] ≥ 0∧[(-1)bso_78] ≥ 0)



    We simplified constraint (3) using rule (IDP_POLY_SIMPLIFY) which results in the following new constraint:

    (4)    (0 ≥ 0 ⇒ (UIncreasing(COND_1869_0_BINARYSEARCH_LOAD(&&(&&(>=(x3[0], x2[0]), >(x0[0], +(x2[0], /(-(x3[0], x2[0]), 2)))), <=(0, +(x2[0], /(-(x3[0], x2[0]), 2)))), java.lang.Object(ARRAY(x0[0])), x3[0], x2[0])), ≥)∧[(-1)bni_77 + (-1)Bound*bni_77] + [(-1)bni_77]x2[0] + [bni_77]x3[0] ≥ 0∧[(-1)bso_78] ≥ 0)



    We simplified constraint (4) using rule (POLY_REMOVE_MIN_MAX) which results in the following new constraint:

    (5)    (0 ≥ 0 ⇒ (UIncreasing(COND_1869_0_BINARYSEARCH_LOAD(&&(&&(>=(x3[0], x2[0]), >(x0[0], +(x2[0], /(-(x3[0], x2[0]), 2)))), <=(0, +(x2[0], /(-(x3[0], x2[0]), 2)))), java.lang.Object(ARRAY(x0[0])), x3[0], x2[0])), ≥)∧[(-1)bni_77 + (-1)Bound*bni_77] + [(-1)bni_77]x2[0] + [bni_77]x3[0] ≥ 0∧[(-1)bso_78] ≥ 0)



    We simplified constraint (5) using rule (IDP_UNRESTRICTED_VARS) which results in the following new constraint:

    (6)    (0 ≥ 0 ⇒ (UIncreasing(COND_1869_0_BINARYSEARCH_LOAD(&&(&&(>=(x3[0], x2[0]), >(x0[0], +(x2[0], /(-(x3[0], x2[0]), 2)))), <=(0, +(x2[0], /(-(x3[0], x2[0]), 2)))), java.lang.Object(ARRAY(x0[0])), x3[0], x2[0])), ≥)∧[(-1)bni_77] ≥ 0∧[bni_77] ≥ 0∧0 ≥ 0∧[(-1)bni_77 + (-1)Bound*bni_77] ≥ 0∧0 ≥ 0∧0 ≥ 0∧0 ≥ 0∧[(-1)bso_78] ≥ 0)



  • We consider the chain 1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[0])), x3[0], x2[0]) → COND_1869_0_BINARYSEARCH_LOAD(&&(&&(>=(x3[0], x2[0]), >(x0[0], +(x2[0], /(-(x3[0], x2[0]), 2)))), <=(0, +(x2[0], /(-(x3[0], x2[0]), 2)))), java.lang.Object(ARRAY(x0[0])), x3[0], x2[0]), COND_1869_0_BINARYSEARCH_LOAD(TRUE, java.lang.Object(ARRAY(x0[2])), x3[2], x2[2]) → 1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[2])), -(+(x2[2], /(-(x3[2], x2[2]), 2)), 1), x2[2]) which results in the following constraint:

    (7)    (&&(&&(>=(x3[0], x2[0]), >(x0[0], +(x2[0], /(-(x3[0], x2[0]), 2)))), <=(0, +(x2[0], /(-(x3[0], x2[0]), 2))))=TRUEjava.lang.Object(ARRAY(x0[0]))=java.lang.Object(ARRAY(x0[2]))∧x3[0]=x3[2]x2[0]=x2[2]1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[0])), x3[0], x2[0])≥NonInfC∧1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[0])), x3[0], x2[0])≥COND_1869_0_BINARYSEARCH_LOAD(&&(&&(>=(x3[0], x2[0]), >(x0[0], +(x2[0], /(-(x3[0], x2[0]), 2)))), <=(0, +(x2[0], /(-(x3[0], x2[0]), 2)))), java.lang.Object(ARRAY(x0[0])), x3[0], x2[0])∧(UIncreasing(COND_1869_0_BINARYSEARCH_LOAD(&&(&&(>=(x3[0], x2[0]), >(x0[0], +(x2[0], /(-(x3[0], x2[0]), 2)))), <=(0, +(x2[0], /(-(x3[0], x2[0]), 2)))), java.lang.Object(ARRAY(x0[0])), x3[0], x2[0])), ≥))



    We simplified constraint (7) using rules (I), (II), (IV) which results in the following new constraint:

    (8)    (&&(&&(>=(x3[0], x2[0]), >(x0[0], +(x2[0], /(-(x3[0], x2[0]), 2)))), <=(0, +(x2[0], /(-(x3[0], x2[0]), 2))))=TRUE1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[0])), x3[0], x2[0])≥NonInfC∧1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[0])), x3[0], x2[0])≥COND_1869_0_BINARYSEARCH_LOAD(&&(&&(>=(x3[0], x2[0]), >(x0[0], +(x2[0], /(-(x3[0], x2[0]), 2)))), <=(0, +(x2[0], /(-(x3[0], x2[0]), 2)))), java.lang.Object(ARRAY(x0[0])), x3[0], x2[0])∧(UIncreasing(COND_1869_0_BINARYSEARCH_LOAD(&&(&&(>=(x3[0], x2[0]), >(x0[0], +(x2[0], /(-(x3[0], x2[0]), 2)))), <=(0, +(x2[0], /(-(x3[0], x2[0]), 2)))), java.lang.Object(ARRAY(x0[0])), x3[0], x2[0])), ≥))



    We simplified constraint (8) using rule (POLY_CONSTRAINTS) which results in the following new constraint:

    (9)    (0 ≥ 0 ⇒ (UIncreasing(COND_1869_0_BINARYSEARCH_LOAD(&&(&&(>=(x3[0], x2[0]), >(x0[0], +(x2[0], /(-(x3[0], x2[0]), 2)))), <=(0, +(x2[0], /(-(x3[0], x2[0]), 2)))), java.lang.Object(ARRAY(x0[0])), x3[0], x2[0])), ≥)∧[(-1)bni_77 + (-1)Bound*bni_77] + [(-1)bni_77]x2[0] + [bni_77]x3[0] ≥ 0∧[(-1)bso_78] ≥ 0)



    We simplified constraint (9) using rule (IDP_POLY_SIMPLIFY) which results in the following new constraint:

    (10)    (0 ≥ 0 ⇒ (UIncreasing(COND_1869_0_BINARYSEARCH_LOAD(&&(&&(>=(x3[0], x2[0]), >(x0[0], +(x2[0], /(-(x3[0], x2[0]), 2)))), <=(0, +(x2[0], /(-(x3[0], x2[0]), 2)))), java.lang.Object(ARRAY(x0[0])), x3[0], x2[0])), ≥)∧[(-1)bni_77 + (-1)Bound*bni_77] + [(-1)bni_77]x2[0] + [bni_77]x3[0] ≥ 0∧[(-1)bso_78] ≥ 0)



    We simplified constraint (10) using rule (POLY_REMOVE_MIN_MAX) which results in the following new constraint:

    (11)    (0 ≥ 0 ⇒ (UIncreasing(COND_1869_0_BINARYSEARCH_LOAD(&&(&&(>=(x3[0], x2[0]), >(x0[0], +(x2[0], /(-(x3[0], x2[0]), 2)))), <=(0, +(x2[0], /(-(x3[0], x2[0]), 2)))), java.lang.Object(ARRAY(x0[0])), x3[0], x2[0])), ≥)∧[(-1)bni_77 + (-1)Bound*bni_77] + [(-1)bni_77]x2[0] + [bni_77]x3[0] ≥ 0∧[(-1)bso_78] ≥ 0)



    We simplified constraint (11) using rule (IDP_UNRESTRICTED_VARS) which results in the following new constraint:

    (12)    (0 ≥ 0 ⇒ (UIncreasing(COND_1869_0_BINARYSEARCH_LOAD(&&(&&(>=(x3[0], x2[0]), >(x0[0], +(x2[0], /(-(x3[0], x2[0]), 2)))), <=(0, +(x2[0], /(-(x3[0], x2[0]), 2)))), java.lang.Object(ARRAY(x0[0])), x3[0], x2[0])), ≥)∧[(-1)bni_77] ≥ 0∧[bni_77] ≥ 0∧0 ≥ 0∧[(-1)bni_77 + (-1)Bound*bni_77] ≥ 0∧0 ≥ 0∧0 ≥ 0∧0 ≥ 0∧[(-1)bso_78] ≥ 0)







For Pair COND_1869_0_BINARYSEARCH_LOAD(TRUE, java.lang.Object(ARRAY(x0)), x3, x2) → 1975_1_BINARYSEARCH_INVOKEMETHOD(1869_0_binarySearch_Load(java.lang.Object(ARRAY(x0)), -(+(x2, /(-(x3, x2), 2)), 1), x2), x3, +(x2, /(-(x3, x2), 2)), java.lang.Object(ARRAY(x0))) the following chains were created:
  • We consider the chain 1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[0])), x3[0], x2[0]) → COND_1869_0_BINARYSEARCH_LOAD(&&(&&(>=(x3[0], x2[0]), >(x0[0], +(x2[0], /(-(x3[0], x2[0]), 2)))), <=(0, +(x2[0], /(-(x3[0], x2[0]), 2)))), java.lang.Object(ARRAY(x0[0])), x3[0], x2[0]), COND_1869_0_BINARYSEARCH_LOAD(TRUE, java.lang.Object(ARRAY(x0[1])), x3[1], x2[1]) → 1975_1_BINARYSEARCH_INVOKEMETHOD(1869_0_binarySearch_Load(java.lang.Object(ARRAY(x0[1])), -(+(x2[1], /(-(x3[1], x2[1]), 2)), 1), x2[1]), x3[1], +(x2[1], /(-(x3[1], x2[1]), 2)), java.lang.Object(ARRAY(x0[1]))) which results in the following constraint:

    (13)    (&&(&&(>=(x3[0], x2[0]), >(x0[0], +(x2[0], /(-(x3[0], x2[0]), 2)))), <=(0, +(x2[0], /(-(x3[0], x2[0]), 2))))=TRUEjava.lang.Object(ARRAY(x0[0]))=java.lang.Object(ARRAY(x0[1]))∧x3[0]=x3[1]x2[0]=x2[1]COND_1869_0_BINARYSEARCH_LOAD(TRUE, java.lang.Object(ARRAY(x0[1])), x3[1], x2[1])≥NonInfC∧COND_1869_0_BINARYSEARCH_LOAD(TRUE, java.lang.Object(ARRAY(x0[1])), x3[1], x2[1])≥1975_1_BINARYSEARCH_INVOKEMETHOD(1869_0_binarySearch_Load(java.lang.Object(ARRAY(x0[1])), -(+(x2[1], /(-(x3[1], x2[1]), 2)), 1), x2[1]), x3[1], +(x2[1], /(-(x3[1], x2[1]), 2)), java.lang.Object(ARRAY(x0[1])))∧(UIncreasing(1975_1_BINARYSEARCH_INVOKEMETHOD(1869_0_binarySearch_Load(java.lang.Object(ARRAY(x0[1])), -(+(x2[1], /(-(x3[1], x2[1]), 2)), 1), x2[1]), x3[1], +(x2[1], /(-(x3[1], x2[1]), 2)), java.lang.Object(ARRAY(x0[1])))), ≥))



    We simplified constraint (13) using rules (I), (II), (III) which results in the following new constraint:

    (14)    (&&(&&(>=(x3[0], x2[0]), >(x0[0], +(x2[0], /(-(x3[0], x2[0]), 2)))), <=(0, +(x2[0], /(-(x3[0], x2[0]), 2))))=TRUECOND_1869_0_BINARYSEARCH_LOAD(TRUE, java.lang.Object(ARRAY(x0[0])), x3[0], x2[0])≥NonInfC∧COND_1869_0_BINARYSEARCH_LOAD(TRUE, java.lang.Object(ARRAY(x0[0])), x3[0], x2[0])≥1975_1_BINARYSEARCH_INVOKEMETHOD(1869_0_binarySearch_Load(java.lang.Object(ARRAY(x0[0])), -(+(x2[0], /(-(x3[0], x2[0]), 2)), 1), x2[0]), x3[0], +(x2[0], /(-(x3[0], x2[0]), 2)), java.lang.Object(ARRAY(x0[0])))∧(UIncreasing(1975_1_BINARYSEARCH_INVOKEMETHOD(1869_0_binarySearch_Load(java.lang.Object(ARRAY(x0[1])), -(+(x2[1], /(-(x3[1], x2[1]), 2)), 1), x2[1]), x3[1], +(x2[1], /(-(x3[1], x2[1]), 2)), java.lang.Object(ARRAY(x0[1])))), ≥))



    We simplified constraint (14) using rule (POLY_CONSTRAINTS) which results in the following new constraint:

    (15)    (0 ≥ 0 ⇒ (UIncreasing(1975_1_BINARYSEARCH_INVOKEMETHOD(1869_0_binarySearch_Load(java.lang.Object(ARRAY(x0[1])), -(+(x2[1], /(-(x3[1], x2[1]), 2)), 1), x2[1]), x3[1], +(x2[1], /(-(x3[1], x2[1]), 2)), java.lang.Object(ARRAY(x0[1])))), ≥)∧[(-1)bni_79 + (-1)Bound*bni_79] + [(-1)bni_79]x2[0] + [bni_79]x3[0] ≥ 0∧[2 + (-1)bso_80] + x2[0] ≥ 0)



    We simplified constraint (15) using rule (IDP_POLY_SIMPLIFY) which results in the following new constraint:

    (16)    (0 ≥ 0 ⇒ (UIncreasing(1975_1_BINARYSEARCH_INVOKEMETHOD(1869_0_binarySearch_Load(java.lang.Object(ARRAY(x0[1])), -(+(x2[1], /(-(x3[1], x2[1]), 2)), 1), x2[1]), x3[1], +(x2[1], /(-(x3[1], x2[1]), 2)), java.lang.Object(ARRAY(x0[1])))), ≥)∧[(-1)bni_79 + (-1)Bound*bni_79] + [(-1)bni_79]x2[0] + [bni_79]x3[0] ≥ 0∧[2 + (-1)bso_80] + x2[0] ≥ 0)



    We simplified constraint (16) using rule (POLY_REMOVE_MIN_MAX) which results in the following new constraint:

    (17)    (0 ≥ 0 ⇒ (UIncreasing(1975_1_BINARYSEARCH_INVOKEMETHOD(1869_0_binarySearch_Load(java.lang.Object(ARRAY(x0[1])), -(+(x2[1], /(-(x3[1], x2[1]), 2)), 1), x2[1]), x3[1], +(x2[1], /(-(x3[1], x2[1]), 2)), java.lang.Object(ARRAY(x0[1])))), ≥)∧[(-1)bni_79 + (-1)Bound*bni_79] + [(-1)bni_79]x2[0] + [bni_79]x3[0] ≥ 0∧[2 + (-1)bso_80] + x2[0] ≥ 0)



    We simplified constraint (17) using rule (IDP_UNRESTRICTED_VARS) which results in the following new constraint:

    (18)    (0 ≥ 0 ⇒ (UIncreasing(1975_1_BINARYSEARCH_INVOKEMETHOD(1869_0_binarySearch_Load(java.lang.Object(ARRAY(x0[1])), -(+(x2[1], /(-(x3[1], x2[1]), 2)), 1), x2[1]), x3[1], +(x2[1], /(-(x3[1], x2[1]), 2)), java.lang.Object(ARRAY(x0[1])))), ≥)∧[(-1)bni_79] ≥ 0∧[bni_79] ≥ 0∧0 ≥ 0∧[(-1)bni_79 + (-1)Bound*bni_79] ≥ 0∧[1] ≥ 0∧0 ≥ 0∧0 ≥ 0∧[2 + (-1)bso_80] ≥ 0)







For Pair COND_1869_0_BINARYSEARCH_LOAD(TRUE, java.lang.Object(ARRAY(x0)), x3, x2) → 1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0)), -(+(x2, /(-(x3, x2), 2)), 1), x2) the following chains were created:
  • We consider the chain 1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[0])), x3[0], x2[0]) → COND_1869_0_BINARYSEARCH_LOAD(&&(&&(>=(x3[0], x2[0]), >(x0[0], +(x2[0], /(-(x3[0], x2[0]), 2)))), <=(0, +(x2[0], /(-(x3[0], x2[0]), 2)))), java.lang.Object(ARRAY(x0[0])), x3[0], x2[0]), COND_1869_0_BINARYSEARCH_LOAD(TRUE, java.lang.Object(ARRAY(x0[2])), x3[2], x2[2]) → 1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[2])), -(+(x2[2], /(-(x3[2], x2[2]), 2)), 1), x2[2]) which results in the following constraint:

    (19)    (&&(&&(>=(x3[0], x2[0]), >(x0[0], +(x2[0], /(-(x3[0], x2[0]), 2)))), <=(0, +(x2[0], /(-(x3[0], x2[0]), 2))))=TRUEjava.lang.Object(ARRAY(x0[0]))=java.lang.Object(ARRAY(x0[2]))∧x3[0]=x3[2]x2[0]=x2[2]COND_1869_0_BINARYSEARCH_LOAD(TRUE, java.lang.Object(ARRAY(x0[2])), x3[2], x2[2])≥NonInfC∧COND_1869_0_BINARYSEARCH_LOAD(TRUE, java.lang.Object(ARRAY(x0[2])), x3[2], x2[2])≥1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[2])), -(+(x2[2], /(-(x3[2], x2[2]), 2)), 1), x2[2])∧(UIncreasing(1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[2])), -(+(x2[2], /(-(x3[2], x2[2]), 2)), 1), x2[2])), ≥))



    We simplified constraint (19) using rules (I), (II), (III) which results in the following new constraint:

    (20)    (&&(&&(>=(x3[0], x2[0]), >(x0[0], +(x2[0], /(-(x3[0], x2[0]), 2)))), <=(0, +(x2[0], /(-(x3[0], x2[0]), 2))))=TRUECOND_1869_0_BINARYSEARCH_LOAD(TRUE, java.lang.Object(ARRAY(x0[0])), x3[0], x2[0])≥NonInfC∧COND_1869_0_BINARYSEARCH_LOAD(TRUE, java.lang.Object(ARRAY(x0[0])), x3[0], x2[0])≥1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[0])), -(+(x2[0], /(-(x3[0], x2[0]), 2)), 1), x2[0])∧(UIncreasing(1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[2])), -(+(x2[2], /(-(x3[2], x2[2]), 2)), 1), x2[2])), ≥))



    We simplified constraint (20) using rule (POLY_CONSTRAINTS) which results in the following new constraint:

    (21)    (0 ≥ 0 ⇒ (UIncreasing(1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[2])), -(+(x2[2], /(-(x3[2], x2[2]), 2)), 1), x2[2])), ≥)∧[(-1)bni_81 + (-1)Bound*bni_81] + [(-1)bni_81]x2[0] + [bni_81]x3[0] ≥ 0∧[(-1)bso_82] + x3[0] ≥ 0)



    We simplified constraint (21) using rule (IDP_POLY_SIMPLIFY) which results in the following new constraint:

    (22)    (0 ≥ 0 ⇒ (UIncreasing(1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[2])), -(+(x2[2], /(-(x3[2], x2[2]), 2)), 1), x2[2])), ≥)∧[(-1)bni_81 + (-1)Bound*bni_81] + [(-1)bni_81]x2[0] + [bni_81]x3[0] ≥ 0∧[(-1)bso_82] + x3[0] ≥ 0)



    We simplified constraint (22) using rule (POLY_REMOVE_MIN_MAX) which results in the following new constraint:

    (23)    (0 ≥ 0 ⇒ (UIncreasing(1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[2])), -(+(x2[2], /(-(x3[2], x2[2]), 2)), 1), x2[2])), ≥)∧[(-1)bni_81 + (-1)Bound*bni_81] + [(-1)bni_81]x2[0] + [bni_81]x3[0] ≥ 0∧[(-1)bso_82] + x3[0] ≥ 0)



    We simplified constraint (23) using rule (IDP_UNRESTRICTED_VARS) which results in the following new constraint:

    (24)    (0 ≥ 0 ⇒ (UIncreasing(1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[2])), -(+(x2[2], /(-(x3[2], x2[2]), 2)), 1), x2[2])), ≥)∧[(-1)bni_81] ≥ 0∧[bni_81] ≥ 0∧0 ≥ 0∧[(-1)bni_81 + (-1)Bound*bni_81] ≥ 0∧0 ≥ 0∧[1] ≥ 0∧0 ≥ 0∧[(-1)bso_82] ≥ 0)







For Pair 1975_1_BINARYSEARCH_INVOKEMETHOD(1880_0_binarySearch_Return(java.lang.Object(ARRAY(x0))), x5, x6, java.lang.Object(ARRAY(x0))) → COND_1975_1_BINARYSEARCH_INVOKEMETHOD(>(x6, -1), 1880_0_binarySearch_Return(java.lang.Object(ARRAY(x0))), x5, x6, java.lang.Object(ARRAY(x0))) the following chains were created:
  • We consider the chain 1975_1_BINARYSEARCH_INVOKEMETHOD(1880_0_binarySearch_Return(java.lang.Object(ARRAY(x0[3]))), x5[3], x6[3], java.lang.Object(ARRAY(x0[3]))) → COND_1975_1_BINARYSEARCH_INVOKEMETHOD(>(x6[3], -1), 1880_0_binarySearch_Return(java.lang.Object(ARRAY(x0[3]))), x5[3], x6[3], java.lang.Object(ARRAY(x0[3]))), COND_1975_1_BINARYSEARCH_INVOKEMETHOD(TRUE, 1880_0_binarySearch_Return(java.lang.Object(ARRAY(x0[4]))), x5[4], x6[4], java.lang.Object(ARRAY(x0[4]))) → 1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[4])), x5[4], +(x6[4], 1)) which results in the following constraint:

    (25)    (>(x6[3], -1)=TRUE1880_0_binarySearch_Return(java.lang.Object(ARRAY(x0[3])))=1880_0_binarySearch_Return(java.lang.Object(ARRAY(x0[4])))∧x5[3]=x5[4]x6[3]=x6[4]java.lang.Object(ARRAY(x0[3]))=java.lang.Object(ARRAY(x0[4])) ⇒ 1975_1_BINARYSEARCH_INVOKEMETHOD(1880_0_binarySearch_Return(java.lang.Object(ARRAY(x0[3]))), x5[3], x6[3], java.lang.Object(ARRAY(x0[3])))≥NonInfC∧1975_1_BINARYSEARCH_INVOKEMETHOD(1880_0_binarySearch_Return(java.lang.Object(ARRAY(x0[3]))), x5[3], x6[3], java.lang.Object(ARRAY(x0[3])))≥COND_1975_1_BINARYSEARCH_INVOKEMETHOD(>(x6[3], -1), 1880_0_binarySearch_Return(java.lang.Object(ARRAY(x0[3]))), x5[3], x6[3], java.lang.Object(ARRAY(x0[3])))∧(UIncreasing(COND_1975_1_BINARYSEARCH_INVOKEMETHOD(>(x6[3], -1), 1880_0_binarySearch_Return(java.lang.Object(ARRAY(x0[3]))), x5[3], x6[3], java.lang.Object(ARRAY(x0[3])))), ≥))



    We simplified constraint (25) using rules (I), (II), (IV) which results in the following new constraint:

    (26)    (>(x6[3], -1)=TRUE1975_1_BINARYSEARCH_INVOKEMETHOD(1880_0_binarySearch_Return(java.lang.Object(ARRAY(x0[3]))), x5[3], x6[3], java.lang.Object(ARRAY(x0[3])))≥NonInfC∧1975_1_BINARYSEARCH_INVOKEMETHOD(1880_0_binarySearch_Return(java.lang.Object(ARRAY(x0[3]))), x5[3], x6[3], java.lang.Object(ARRAY(x0[3])))≥COND_1975_1_BINARYSEARCH_INVOKEMETHOD(>(x6[3], -1), 1880_0_binarySearch_Return(java.lang.Object(ARRAY(x0[3]))), x5[3], x6[3], java.lang.Object(ARRAY(x0[3])))∧(UIncreasing(COND_1975_1_BINARYSEARCH_INVOKEMETHOD(>(x6[3], -1), 1880_0_binarySearch_Return(java.lang.Object(ARRAY(x0[3]))), x5[3], x6[3], java.lang.Object(ARRAY(x0[3])))), ≥))



    We simplified constraint (26) using rule (POLY_CONSTRAINTS) which results in the following new constraint:

    (27)    (0 ≥ 0 ⇒ (UIncreasing(COND_1975_1_BINARYSEARCH_INVOKEMETHOD(>(x6[3], -1), 1880_0_binarySearch_Return(java.lang.Object(ARRAY(x0[3]))), x5[3], x6[3], java.lang.Object(ARRAY(x0[3])))), ≥)∧[(-1)bni_83 + (-1)Bound*bni_83] + [(2)bni_83]x6[3] + [bni_83]x5[3] ≥ 0∧[(-1)bso_84] ≥ 0)



    We simplified constraint (27) using rule (IDP_POLY_SIMPLIFY) which results in the following new constraint:

    (28)    (0 ≥ 0 ⇒ (UIncreasing(COND_1975_1_BINARYSEARCH_INVOKEMETHOD(>(x6[3], -1), 1880_0_binarySearch_Return(java.lang.Object(ARRAY(x0[3]))), x5[3], x6[3], java.lang.Object(ARRAY(x0[3])))), ≥)∧[(-1)bni_83 + (-1)Bound*bni_83] + [(2)bni_83]x6[3] + [bni_83]x5[3] ≥ 0∧[(-1)bso_84] ≥ 0)



    We simplified constraint (28) using rule (POLY_REMOVE_MIN_MAX) which results in the following new constraint:

    (29)    (0 ≥ 0 ⇒ (UIncreasing(COND_1975_1_BINARYSEARCH_INVOKEMETHOD(>(x6[3], -1), 1880_0_binarySearch_Return(java.lang.Object(ARRAY(x0[3]))), x5[3], x6[3], java.lang.Object(ARRAY(x0[3])))), ≥)∧[(-1)bni_83 + (-1)Bound*bni_83] + [(2)bni_83]x6[3] + [bni_83]x5[3] ≥ 0∧[(-1)bso_84] ≥ 0)



    We simplified constraint (29) using rule (IDP_UNRESTRICTED_VARS) which results in the following new constraint:

    (30)    (0 ≥ 0 ⇒ (UIncreasing(COND_1975_1_BINARYSEARCH_INVOKEMETHOD(>(x6[3], -1), 1880_0_binarySearch_Return(java.lang.Object(ARRAY(x0[3]))), x5[3], x6[3], java.lang.Object(ARRAY(x0[3])))), ≥)∧0 ≥ 0∧[(2)bni_83] ≥ 0∧[bni_83] ≥ 0∧[(-1)bni_83 + (-1)Bound*bni_83] ≥ 0∧0 ≥ 0∧0 ≥ 0∧0 ≥ 0∧[(-1)bso_84] ≥ 0)







For Pair COND_1975_1_BINARYSEARCH_INVOKEMETHOD(TRUE, 1880_0_binarySearch_Return(java.lang.Object(ARRAY(x0))), x5, x6, java.lang.Object(ARRAY(x0))) → 1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0)), x5, +(x6, 1)) the following chains were created:
  • We consider the chain 1975_1_BINARYSEARCH_INVOKEMETHOD(1880_0_binarySearch_Return(java.lang.Object(ARRAY(x0[3]))), x5[3], x6[3], java.lang.Object(ARRAY(x0[3]))) → COND_1975_1_BINARYSEARCH_INVOKEMETHOD(>(x6[3], -1), 1880_0_binarySearch_Return(java.lang.Object(ARRAY(x0[3]))), x5[3], x6[3], java.lang.Object(ARRAY(x0[3]))), COND_1975_1_BINARYSEARCH_INVOKEMETHOD(TRUE, 1880_0_binarySearch_Return(java.lang.Object(ARRAY(x0[4]))), x5[4], x6[4], java.lang.Object(ARRAY(x0[4]))) → 1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[4])), x5[4], +(x6[4], 1)), 1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[0])), x3[0], x2[0]) → COND_1869_0_BINARYSEARCH_LOAD(&&(&&(>=(x3[0], x2[0]), >(x0[0], +(x2[0], /(-(x3[0], x2[0]), 2)))), <=(0, +(x2[0], /(-(x3[0], x2[0]), 2)))), java.lang.Object(ARRAY(x0[0])), x3[0], x2[0]) which results in the following constraint:

    (31)    (>(x6[3], -1)=TRUE1880_0_binarySearch_Return(java.lang.Object(ARRAY(x0[3])))=1880_0_binarySearch_Return(java.lang.Object(ARRAY(x0[4])))∧x5[3]=x5[4]x6[3]=x6[4]java.lang.Object(ARRAY(x0[3]))=java.lang.Object(ARRAY(x0[4]))∧java.lang.Object(ARRAY(x0[4]))=java.lang.Object(ARRAY(x0[0]))∧x5[4]=x3[0]+(x6[4], 1)=x2[0]COND_1975_1_BINARYSEARCH_INVOKEMETHOD(TRUE, 1880_0_binarySearch_Return(java.lang.Object(ARRAY(x0[4]))), x5[4], x6[4], java.lang.Object(ARRAY(x0[4])))≥NonInfC∧COND_1975_1_BINARYSEARCH_INVOKEMETHOD(TRUE, 1880_0_binarySearch_Return(java.lang.Object(ARRAY(x0[4]))), x5[4], x6[4], java.lang.Object(ARRAY(x0[4])))≥1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[4])), x5[4], +(x6[4], 1))∧(UIncreasing(1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[4])), x5[4], +(x6[4], 1))), ≥))



    We simplified constraint (31) using rules (I), (II), (III), (IV) which results in the following new constraint:

    (32)    (>(x6[3], -1)=TRUECOND_1975_1_BINARYSEARCH_INVOKEMETHOD(TRUE, 1880_0_binarySearch_Return(java.lang.Object(ARRAY(x0[3]))), x5[3], x6[3], java.lang.Object(ARRAY(x0[3])))≥NonInfC∧COND_1975_1_BINARYSEARCH_INVOKEMETHOD(TRUE, 1880_0_binarySearch_Return(java.lang.Object(ARRAY(x0[3]))), x5[3], x6[3], java.lang.Object(ARRAY(x0[3])))≥1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[3])), x5[3], +(x6[3], 1))∧(UIncreasing(1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[4])), x5[4], +(x6[4], 1))), ≥))



    We simplified constraint (32) using rule (POLY_CONSTRAINTS) which results in the following new constraint:

    (33)    (0 ≥ 0 ⇒ (UIncreasing(1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[4])), x5[4], +(x6[4], 1))), ≥)∧[(-1)bni_85 + (-1)Bound*bni_85] + [(2)bni_85]x6[3] + [bni_85]x5[3] ≥ 0∧[(-1)bso_86] + [2]x6[3] ≥ 0)



    We simplified constraint (33) using rule (IDP_POLY_SIMPLIFY) which results in the following new constraint:

    (34)    (0 ≥ 0 ⇒ (UIncreasing(1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[4])), x5[4], +(x6[4], 1))), ≥)∧[(-1)bni_85 + (-1)Bound*bni_85] + [(2)bni_85]x6[3] + [bni_85]x5[3] ≥ 0∧[(-1)bso_86] + [2]x6[3] ≥ 0)



    We simplified constraint (34) using rule (POLY_REMOVE_MIN_MAX) which results in the following new constraint:

    (35)    (0 ≥ 0 ⇒ (UIncreasing(1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[4])), x5[4], +(x6[4], 1))), ≥)∧[(-1)bni_85 + (-1)Bound*bni_85] + [(2)bni_85]x6[3] + [bni_85]x5[3] ≥ 0∧[(-1)bso_86] + [2]x6[3] ≥ 0)



    We simplified constraint (35) using rules (IDP_UNRESTRICTED_VARS), (IDP_POLY_GCD) which results in the following new constraint:

    (36)    (0 ≥ 0 ⇒ (UIncreasing(1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[4])), x5[4], +(x6[4], 1))), ≥)∧0 ≥ 0∧[(2)bni_85] ≥ 0∧[bni_85] ≥ 0∧[(-1)bni_85 + (-1)Bound*bni_85] ≥ 0∧0 ≥ 0∧0 ≥ 0∧[(-1)bso_86] ≥ 0∧[1] ≥ 0)







For Pair 1975_1_BINARYSEARCH_INVOKEMETHOD(2385_0_binarySearch_Return, x3, x4, java.lang.Object(ARRAY(x1))) → COND_1975_1_BINARYSEARCH_INVOKEMETHOD1(>(x4, -1), 2385_0_binarySearch_Return, x3, x4, java.lang.Object(ARRAY(x1))) the following chains were created:
  • We consider the chain 1975_1_BINARYSEARCH_INVOKEMETHOD(2385_0_binarySearch_Return, x3[5], x4[5], java.lang.Object(ARRAY(x1[5]))) → COND_1975_1_BINARYSEARCH_INVOKEMETHOD1(>(x4[5], -1), 2385_0_binarySearch_Return, x3[5], x4[5], java.lang.Object(ARRAY(x1[5]))), COND_1975_1_BINARYSEARCH_INVOKEMETHOD1(TRUE, 2385_0_binarySearch_Return, x3[6], x4[6], java.lang.Object(ARRAY(x1[6]))) → 1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x1[6])), x3[6], +(x4[6], 1)) which results in the following constraint:

    (37)    (>(x4[5], -1)=TRUEx3[5]=x3[6]x4[5]=x4[6]java.lang.Object(ARRAY(x1[5]))=java.lang.Object(ARRAY(x1[6])) ⇒ 1975_1_BINARYSEARCH_INVOKEMETHOD(2385_0_binarySearch_Return, x3[5], x4[5], java.lang.Object(ARRAY(x1[5])))≥NonInfC∧1975_1_BINARYSEARCH_INVOKEMETHOD(2385_0_binarySearch_Return, x3[5], x4[5], java.lang.Object(ARRAY(x1[5])))≥COND_1975_1_BINARYSEARCH_INVOKEMETHOD1(>(x4[5], -1), 2385_0_binarySearch_Return, x3[5], x4[5], java.lang.Object(ARRAY(x1[5])))∧(UIncreasing(COND_1975_1_BINARYSEARCH_INVOKEMETHOD1(>(x4[5], -1), 2385_0_binarySearch_Return, x3[5], x4[5], java.lang.Object(ARRAY(x1[5])))), ≥))



    We simplified constraint (37) using rules (I), (II), (IV) which results in the following new constraint:

    (38)    (>(x4[5], -1)=TRUE1975_1_BINARYSEARCH_INVOKEMETHOD(2385_0_binarySearch_Return, x3[5], x4[5], java.lang.Object(ARRAY(x1[5])))≥NonInfC∧1975_1_BINARYSEARCH_INVOKEMETHOD(2385_0_binarySearch_Return, x3[5], x4[5], java.lang.Object(ARRAY(x1[5])))≥COND_1975_1_BINARYSEARCH_INVOKEMETHOD1(>(x4[5], -1), 2385_0_binarySearch_Return, x3[5], x4[5], java.lang.Object(ARRAY(x1[5])))∧(UIncreasing(COND_1975_1_BINARYSEARCH_INVOKEMETHOD1(>(x4[5], -1), 2385_0_binarySearch_Return, x3[5], x4[5], java.lang.Object(ARRAY(x1[5])))), ≥))



    We simplified constraint (38) using rule (POLY_CONSTRAINTS) which results in the following new constraint:

    (39)    (0 ≥ 0 ⇒ (UIncreasing(COND_1975_1_BINARYSEARCH_INVOKEMETHOD1(>(x4[5], -1), 2385_0_binarySearch_Return, x3[5], x4[5], java.lang.Object(ARRAY(x1[5])))), ≥)∧[(-1)bni_87 + (-1)Bound*bni_87] + [(2)bni_87]x4[5] + [bni_87]x3[5] ≥ 0∧[(-1)bso_88] ≥ 0)



    We simplified constraint (39) using rule (IDP_POLY_SIMPLIFY) which results in the following new constraint:

    (40)    (0 ≥ 0 ⇒ (UIncreasing(COND_1975_1_BINARYSEARCH_INVOKEMETHOD1(>(x4[5], -1), 2385_0_binarySearch_Return, x3[5], x4[5], java.lang.Object(ARRAY(x1[5])))), ≥)∧[(-1)bni_87 + (-1)Bound*bni_87] + [(2)bni_87]x4[5] + [bni_87]x3[5] ≥ 0∧[(-1)bso_88] ≥ 0)



    We simplified constraint (40) using rule (POLY_REMOVE_MIN_MAX) which results in the following new constraint:

    (41)    (0 ≥ 0 ⇒ (UIncreasing(COND_1975_1_BINARYSEARCH_INVOKEMETHOD1(>(x4[5], -1), 2385_0_binarySearch_Return, x3[5], x4[5], java.lang.Object(ARRAY(x1[5])))), ≥)∧[(-1)bni_87 + (-1)Bound*bni_87] + [(2)bni_87]x4[5] + [bni_87]x3[5] ≥ 0∧[(-1)bso_88] ≥ 0)



    We simplified constraint (41) using rule (IDP_UNRESTRICTED_VARS) which results in the following new constraint:

    (42)    (0 ≥ 0 ⇒ (UIncreasing(COND_1975_1_BINARYSEARCH_INVOKEMETHOD1(>(x4[5], -1), 2385_0_binarySearch_Return, x3[5], x4[5], java.lang.Object(ARRAY(x1[5])))), ≥)∧0 ≥ 0∧[(2)bni_87] ≥ 0∧[bni_87] ≥ 0∧[(-1)bni_87 + (-1)Bound*bni_87] ≥ 0∧0 ≥ 0∧0 ≥ 0∧0 ≥ 0∧[(-1)bso_88] ≥ 0)







For Pair COND_1975_1_BINARYSEARCH_INVOKEMETHOD1(TRUE, 2385_0_binarySearch_Return, x3, x4, java.lang.Object(ARRAY(x1))) → 1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x1)), x3, +(x4, 1)) the following chains were created:
  • We consider the chain 1975_1_BINARYSEARCH_INVOKEMETHOD(2385_0_binarySearch_Return, x3[5], x4[5], java.lang.Object(ARRAY(x1[5]))) → COND_1975_1_BINARYSEARCH_INVOKEMETHOD1(>(x4[5], -1), 2385_0_binarySearch_Return, x3[5], x4[5], java.lang.Object(ARRAY(x1[5]))), COND_1975_1_BINARYSEARCH_INVOKEMETHOD1(TRUE, 2385_0_binarySearch_Return, x3[6], x4[6], java.lang.Object(ARRAY(x1[6]))) → 1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x1[6])), x3[6], +(x4[6], 1)), 1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[0])), x3[0], x2[0]) → COND_1869_0_BINARYSEARCH_LOAD(&&(&&(>=(x3[0], x2[0]), >(x0[0], +(x2[0], /(-(x3[0], x2[0]), 2)))), <=(0, +(x2[0], /(-(x3[0], x2[0]), 2)))), java.lang.Object(ARRAY(x0[0])), x3[0], x2[0]) which results in the following constraint:

    (43)    (>(x4[5], -1)=TRUEx3[5]=x3[6]x4[5]=x4[6]java.lang.Object(ARRAY(x1[5]))=java.lang.Object(ARRAY(x1[6]))∧java.lang.Object(ARRAY(x1[6]))=java.lang.Object(ARRAY(x0[0]))∧x3[6]=x3[0]+(x4[6], 1)=x2[0]COND_1975_1_BINARYSEARCH_INVOKEMETHOD1(TRUE, 2385_0_binarySearch_Return, x3[6], x4[6], java.lang.Object(ARRAY(x1[6])))≥NonInfC∧COND_1975_1_BINARYSEARCH_INVOKEMETHOD1(TRUE, 2385_0_binarySearch_Return, x3[6], x4[6], java.lang.Object(ARRAY(x1[6])))≥1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x1[6])), x3[6], +(x4[6], 1))∧(UIncreasing(1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x1[6])), x3[6], +(x4[6], 1))), ≥))



    We simplified constraint (43) using rules (I), (II), (III), (IV) which results in the following new constraint:

    (44)    (>(x4[5], -1)=TRUECOND_1975_1_BINARYSEARCH_INVOKEMETHOD1(TRUE, 2385_0_binarySearch_Return, x3[5], x4[5], java.lang.Object(ARRAY(x1[5])))≥NonInfC∧COND_1975_1_BINARYSEARCH_INVOKEMETHOD1(TRUE, 2385_0_binarySearch_Return, x3[5], x4[5], java.lang.Object(ARRAY(x1[5])))≥1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x1[5])), x3[5], +(x4[5], 1))∧(UIncreasing(1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x1[6])), x3[6], +(x4[6], 1))), ≥))



    We simplified constraint (44) using rule (POLY_CONSTRAINTS) which results in the following new constraint:

    (45)    (0 ≥ 0 ⇒ (UIncreasing(1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x1[6])), x3[6], +(x4[6], 1))), ≥)∧[(-1)bni_89 + (-1)Bound*bni_89] + [(2)bni_89]x4[5] + [bni_89]x3[5] ≥ 0∧[(-1)bso_90] + [2]x4[5] ≥ 0)



    We simplified constraint (45) using rule (IDP_POLY_SIMPLIFY) which results in the following new constraint:

    (46)    (0 ≥ 0 ⇒ (UIncreasing(1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x1[6])), x3[6], +(x4[6], 1))), ≥)∧[(-1)bni_89 + (-1)Bound*bni_89] + [(2)bni_89]x4[5] + [bni_89]x3[5] ≥ 0∧[(-1)bso_90] + [2]x4[5] ≥ 0)



    We simplified constraint (46) using rule (POLY_REMOVE_MIN_MAX) which results in the following new constraint:

    (47)    (0 ≥ 0 ⇒ (UIncreasing(1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x1[6])), x3[6], +(x4[6], 1))), ≥)∧[(-1)bni_89 + (-1)Bound*bni_89] + [(2)bni_89]x4[5] + [bni_89]x3[5] ≥ 0∧[(-1)bso_90] + [2]x4[5] ≥ 0)



    We simplified constraint (47) using rules (IDP_UNRESTRICTED_VARS), (IDP_POLY_GCD) which results in the following new constraint:

    (48)    (0 ≥ 0 ⇒ (UIncreasing(1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x1[6])), x3[6], +(x4[6], 1))), ≥)∧0 ≥ 0∧[(2)bni_89] ≥ 0∧[bni_89] ≥ 0∧[(-1)bni_89 + (-1)Bound*bni_89] ≥ 0∧0 ≥ 0∧0 ≥ 0∧[(-1)bso_90] ≥ 0∧[1] ≥ 0)







For Pair 1975_1_BINARYSEARCH_INVOKEMETHOD(2473_0_binarySearch_Return(0), x3, x4, java.lang.Object(ARRAY(x1))) → COND_1975_1_BINARYSEARCH_INVOKEMETHOD2(>(x4, -1), 2473_0_binarySearch_Return(0), x3, x4, java.lang.Object(ARRAY(x1))) the following chains were created:
  • We consider the chain 1975_1_BINARYSEARCH_INVOKEMETHOD(2473_0_binarySearch_Return(0), x3[7], x4[7], java.lang.Object(ARRAY(x1[7]))) → COND_1975_1_BINARYSEARCH_INVOKEMETHOD2(>(x4[7], -1), 2473_0_binarySearch_Return(0), x3[7], x4[7], java.lang.Object(ARRAY(x1[7]))), COND_1975_1_BINARYSEARCH_INVOKEMETHOD2(TRUE, 2473_0_binarySearch_Return(0), x3[8], x4[8], java.lang.Object(ARRAY(x1[8]))) → 1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x1[8])), x3[8], +(x4[8], 1)) which results in the following constraint:

    (49)    (>(x4[7], -1)=TRUEx3[7]=x3[8]x4[7]=x4[8]java.lang.Object(ARRAY(x1[7]))=java.lang.Object(ARRAY(x1[8])) ⇒ 1975_1_BINARYSEARCH_INVOKEMETHOD(2473_0_binarySearch_Return(0), x3[7], x4[7], java.lang.Object(ARRAY(x1[7])))≥NonInfC∧1975_1_BINARYSEARCH_INVOKEMETHOD(2473_0_binarySearch_Return(0), x3[7], x4[7], java.lang.Object(ARRAY(x1[7])))≥COND_1975_1_BINARYSEARCH_INVOKEMETHOD2(>(x4[7], -1), 2473_0_binarySearch_Return(0), x3[7], x4[7], java.lang.Object(ARRAY(x1[7])))∧(UIncreasing(COND_1975_1_BINARYSEARCH_INVOKEMETHOD2(>(x4[7], -1), 2473_0_binarySearch_Return(0), x3[7], x4[7], java.lang.Object(ARRAY(x1[7])))), ≥))



    We simplified constraint (49) using rules (I), (II), (IV) which results in the following new constraint:

    (50)    (>(x4[7], -1)=TRUE1975_1_BINARYSEARCH_INVOKEMETHOD(2473_0_binarySearch_Return(0), x3[7], x4[7], java.lang.Object(ARRAY(x1[7])))≥NonInfC∧1975_1_BINARYSEARCH_INVOKEMETHOD(2473_0_binarySearch_Return(0), x3[7], x4[7], java.lang.Object(ARRAY(x1[7])))≥COND_1975_1_BINARYSEARCH_INVOKEMETHOD2(>(x4[7], -1), 2473_0_binarySearch_Return(0), x3[7], x4[7], java.lang.Object(ARRAY(x1[7])))∧(UIncreasing(COND_1975_1_BINARYSEARCH_INVOKEMETHOD2(>(x4[7], -1), 2473_0_binarySearch_Return(0), x3[7], x4[7], java.lang.Object(ARRAY(x1[7])))), ≥))



    We simplified constraint (50) using rule (POLY_CONSTRAINTS) which results in the following new constraint:

    (51)    (0 ≥ 0 ⇒ (UIncreasing(COND_1975_1_BINARYSEARCH_INVOKEMETHOD2(>(x4[7], -1), 2473_0_binarySearch_Return(0), x3[7], x4[7], java.lang.Object(ARRAY(x1[7])))), ≥)∧[(-1)bni_91 + (-1)Bound*bni_91] + [(2)bni_91]x4[7] + [bni_91]x3[7] ≥ 0∧[(-1)bso_92] ≥ 0)



    We simplified constraint (51) using rule (IDP_POLY_SIMPLIFY) which results in the following new constraint:

    (52)    (0 ≥ 0 ⇒ (UIncreasing(COND_1975_1_BINARYSEARCH_INVOKEMETHOD2(>(x4[7], -1), 2473_0_binarySearch_Return(0), x3[7], x4[7], java.lang.Object(ARRAY(x1[7])))), ≥)∧[(-1)bni_91 + (-1)Bound*bni_91] + [(2)bni_91]x4[7] + [bni_91]x3[7] ≥ 0∧[(-1)bso_92] ≥ 0)



    We simplified constraint (52) using rule (POLY_REMOVE_MIN_MAX) which results in the following new constraint:

    (53)    (0 ≥ 0 ⇒ (UIncreasing(COND_1975_1_BINARYSEARCH_INVOKEMETHOD2(>(x4[7], -1), 2473_0_binarySearch_Return(0), x3[7], x4[7], java.lang.Object(ARRAY(x1[7])))), ≥)∧[(-1)bni_91 + (-1)Bound*bni_91] + [(2)bni_91]x4[7] + [bni_91]x3[7] ≥ 0∧[(-1)bso_92] ≥ 0)



    We simplified constraint (53) using rule (IDP_UNRESTRICTED_VARS) which results in the following new constraint:

    (54)    (0 ≥ 0 ⇒ (UIncreasing(COND_1975_1_BINARYSEARCH_INVOKEMETHOD2(>(x4[7], -1), 2473_0_binarySearch_Return(0), x3[7], x4[7], java.lang.Object(ARRAY(x1[7])))), ≥)∧0 ≥ 0∧[(2)bni_91] ≥ 0∧[bni_91] ≥ 0∧[(-1)bni_91 + (-1)Bound*bni_91] ≥ 0∧0 ≥ 0∧0 ≥ 0∧0 ≥ 0∧[(-1)bso_92] ≥ 0)







For Pair COND_1975_1_BINARYSEARCH_INVOKEMETHOD2(TRUE, 2473_0_binarySearch_Return(0), x3, x4, java.lang.Object(ARRAY(x1))) → 1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x1)), x3, +(x4, 1)) the following chains were created:
  • We consider the chain 1975_1_BINARYSEARCH_INVOKEMETHOD(2473_0_binarySearch_Return(0), x3[7], x4[7], java.lang.Object(ARRAY(x1[7]))) → COND_1975_1_BINARYSEARCH_INVOKEMETHOD2(>(x4[7], -1), 2473_0_binarySearch_Return(0), x3[7], x4[7], java.lang.Object(ARRAY(x1[7]))), COND_1975_1_BINARYSEARCH_INVOKEMETHOD2(TRUE, 2473_0_binarySearch_Return(0), x3[8], x4[8], java.lang.Object(ARRAY(x1[8]))) → 1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x1[8])), x3[8], +(x4[8], 1)), 1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[0])), x3[0], x2[0]) → COND_1869_0_BINARYSEARCH_LOAD(&&(&&(>=(x3[0], x2[0]), >(x0[0], +(x2[0], /(-(x3[0], x2[0]), 2)))), <=(0, +(x2[0], /(-(x3[0], x2[0]), 2)))), java.lang.Object(ARRAY(x0[0])), x3[0], x2[0]) which results in the following constraint:

    (55)    (>(x4[7], -1)=TRUEx3[7]=x3[8]x4[7]=x4[8]java.lang.Object(ARRAY(x1[7]))=java.lang.Object(ARRAY(x1[8]))∧java.lang.Object(ARRAY(x1[8]))=java.lang.Object(ARRAY(x0[0]))∧x3[8]=x3[0]+(x4[8], 1)=x2[0]COND_1975_1_BINARYSEARCH_INVOKEMETHOD2(TRUE, 2473_0_binarySearch_Return(0), x3[8], x4[8], java.lang.Object(ARRAY(x1[8])))≥NonInfC∧COND_1975_1_BINARYSEARCH_INVOKEMETHOD2(TRUE, 2473_0_binarySearch_Return(0), x3[8], x4[8], java.lang.Object(ARRAY(x1[8])))≥1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x1[8])), x3[8], +(x4[8], 1))∧(UIncreasing(1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x1[8])), x3[8], +(x4[8], 1))), ≥))



    We simplified constraint (55) using rules (I), (II), (III), (IV) which results in the following new constraint:

    (56)    (>(x4[7], -1)=TRUECOND_1975_1_BINARYSEARCH_INVOKEMETHOD2(TRUE, 2473_0_binarySearch_Return(0), x3[7], x4[7], java.lang.Object(ARRAY(x1[7])))≥NonInfC∧COND_1975_1_BINARYSEARCH_INVOKEMETHOD2(TRUE, 2473_0_binarySearch_Return(0), x3[7], x4[7], java.lang.Object(ARRAY(x1[7])))≥1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x1[7])), x3[7], +(x4[7], 1))∧(UIncreasing(1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x1[8])), x3[8], +(x4[8], 1))), ≥))



    We simplified constraint (56) using rule (POLY_CONSTRAINTS) which results in the following new constraint:

    (57)    (0 ≥ 0 ⇒ (UIncreasing(1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x1[8])), x3[8], +(x4[8], 1))), ≥)∧[(-1)bni_93 + (-1)Bound*bni_93] + [(2)bni_93]x4[7] + [bni_93]x3[7] ≥ 0∧[(-1)bso_94] + [2]x4[7] ≥ 0)



    We simplified constraint (57) using rule (IDP_POLY_SIMPLIFY) which results in the following new constraint:

    (58)    (0 ≥ 0 ⇒ (UIncreasing(1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x1[8])), x3[8], +(x4[8], 1))), ≥)∧[(-1)bni_93 + (-1)Bound*bni_93] + [(2)bni_93]x4[7] + [bni_93]x3[7] ≥ 0∧[(-1)bso_94] + [2]x4[7] ≥ 0)



    We simplified constraint (58) using rule (POLY_REMOVE_MIN_MAX) which results in the following new constraint:

    (59)    (0 ≥ 0 ⇒ (UIncreasing(1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x1[8])), x3[8], +(x4[8], 1))), ≥)∧[(-1)bni_93 + (-1)Bound*bni_93] + [(2)bni_93]x4[7] + [bni_93]x3[7] ≥ 0∧[(-1)bso_94] + [2]x4[7] ≥ 0)



    We simplified constraint (59) using rules (IDP_UNRESTRICTED_VARS), (IDP_POLY_GCD) which results in the following new constraint:

    (60)    (0 ≥ 0 ⇒ (UIncreasing(1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x1[8])), x3[8], +(x4[8], 1))), ≥)∧0 ≥ 0∧[(2)bni_93] ≥ 0∧[bni_93] ≥ 0∧[(-1)bni_93 + (-1)Bound*bni_93] ≥ 0∧0 ≥ 0∧0 ≥ 0∧[(-1)bso_94] ≥ 0∧[1] ≥ 0)







To summarize, we get the following constraints P for the following pairs.
  • 1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0)), x3, x2) → COND_1869_0_BINARYSEARCH_LOAD(&&(&&(>=(x3, x2), >(x0, +(x2, /(-(x3, x2), 2)))), <=(0, +(x2, /(-(x3, x2), 2)))), java.lang.Object(ARRAY(x0)), x3, x2)
    • (0 ≥ 0 ⇒ (UIncreasing(COND_1869_0_BINARYSEARCH_LOAD(&&(&&(>=(x3[0], x2[0]), >(x0[0], +(x2[0], /(-(x3[0], x2[0]), 2)))), <=(0, +(x2[0], /(-(x3[0], x2[0]), 2)))), java.lang.Object(ARRAY(x0[0])), x3[0], x2[0])), ≥)∧[(-1)bni_77] ≥ 0∧[bni_77] ≥ 0∧0 ≥ 0∧[(-1)bni_77 + (-1)Bound*bni_77] ≥ 0∧0 ≥ 0∧0 ≥ 0∧0 ≥ 0∧[(-1)bso_78] ≥ 0)
    • (0 ≥ 0 ⇒ (UIncreasing(COND_1869_0_BINARYSEARCH_LOAD(&&(&&(>=(x3[0], x2[0]), >(x0[0], +(x2[0], /(-(x3[0], x2[0]), 2)))), <=(0, +(x2[0], /(-(x3[0], x2[0]), 2)))), java.lang.Object(ARRAY(x0[0])), x3[0], x2[0])), ≥)∧[(-1)bni_77] ≥ 0∧[bni_77] ≥ 0∧0 ≥ 0∧[(-1)bni_77 + (-1)Bound*bni_77] ≥ 0∧0 ≥ 0∧0 ≥ 0∧0 ≥ 0∧[(-1)bso_78] ≥ 0)

  • COND_1869_0_BINARYSEARCH_LOAD(TRUE, java.lang.Object(ARRAY(x0)), x3, x2) → 1975_1_BINARYSEARCH_INVOKEMETHOD(1869_0_binarySearch_Load(java.lang.Object(ARRAY(x0)), -(+(x2, /(-(x3, x2), 2)), 1), x2), x3, +(x2, /(-(x3, x2), 2)), java.lang.Object(ARRAY(x0)))
    • (0 ≥ 0 ⇒ (UIncreasing(1975_1_BINARYSEARCH_INVOKEMETHOD(1869_0_binarySearch_Load(java.lang.Object(ARRAY(x0[1])), -(+(x2[1], /(-(x3[1], x2[1]), 2)), 1), x2[1]), x3[1], +(x2[1], /(-(x3[1], x2[1]), 2)), java.lang.Object(ARRAY(x0[1])))), ≥)∧[(-1)bni_79] ≥ 0∧[bni_79] ≥ 0∧0 ≥ 0∧[(-1)bni_79 + (-1)Bound*bni_79] ≥ 0∧[1] ≥ 0∧0 ≥ 0∧0 ≥ 0∧[2 + (-1)bso_80] ≥ 0)

  • COND_1869_0_BINARYSEARCH_LOAD(TRUE, java.lang.Object(ARRAY(x0)), x3, x2) → 1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0)), -(+(x2, /(-(x3, x2), 2)), 1), x2)
    • (0 ≥ 0 ⇒ (UIncreasing(1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[2])), -(+(x2[2], /(-(x3[2], x2[2]), 2)), 1), x2[2])), ≥)∧[(-1)bni_81] ≥ 0∧[bni_81] ≥ 0∧0 ≥ 0∧[(-1)bni_81 + (-1)Bound*bni_81] ≥ 0∧0 ≥ 0∧[1] ≥ 0∧0 ≥ 0∧[(-1)bso_82] ≥ 0)

  • 1975_1_BINARYSEARCH_INVOKEMETHOD(1880_0_binarySearch_Return(java.lang.Object(ARRAY(x0))), x5, x6, java.lang.Object(ARRAY(x0))) → COND_1975_1_BINARYSEARCH_INVOKEMETHOD(>(x6, -1), 1880_0_binarySearch_Return(java.lang.Object(ARRAY(x0))), x5, x6, java.lang.Object(ARRAY(x0)))
    • (0 ≥ 0 ⇒ (UIncreasing(COND_1975_1_BINARYSEARCH_INVOKEMETHOD(>(x6[3], -1), 1880_0_binarySearch_Return(java.lang.Object(ARRAY(x0[3]))), x5[3], x6[3], java.lang.Object(ARRAY(x0[3])))), ≥)∧0 ≥ 0∧[(2)bni_83] ≥ 0∧[bni_83] ≥ 0∧[(-1)bni_83 + (-1)Bound*bni_83] ≥ 0∧0 ≥ 0∧0 ≥ 0∧0 ≥ 0∧[(-1)bso_84] ≥ 0)

  • COND_1975_1_BINARYSEARCH_INVOKEMETHOD(TRUE, 1880_0_binarySearch_Return(java.lang.Object(ARRAY(x0))), x5, x6, java.lang.Object(ARRAY(x0))) → 1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0)), x5, +(x6, 1))
    • (0 ≥ 0 ⇒ (UIncreasing(1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[4])), x5[4], +(x6[4], 1))), ≥)∧0 ≥ 0∧[(2)bni_85] ≥ 0∧[bni_85] ≥ 0∧[(-1)bni_85 + (-1)Bound*bni_85] ≥ 0∧0 ≥ 0∧0 ≥ 0∧[(-1)bso_86] ≥ 0∧[1] ≥ 0)

  • 1975_1_BINARYSEARCH_INVOKEMETHOD(2385_0_binarySearch_Return, x3, x4, java.lang.Object(ARRAY(x1))) → COND_1975_1_BINARYSEARCH_INVOKEMETHOD1(>(x4, -1), 2385_0_binarySearch_Return, x3, x4, java.lang.Object(ARRAY(x1)))
    • (0 ≥ 0 ⇒ (UIncreasing(COND_1975_1_BINARYSEARCH_INVOKEMETHOD1(>(x4[5], -1), 2385_0_binarySearch_Return, x3[5], x4[5], java.lang.Object(ARRAY(x1[5])))), ≥)∧0 ≥ 0∧[(2)bni_87] ≥ 0∧[bni_87] ≥ 0∧[(-1)bni_87 + (-1)Bound*bni_87] ≥ 0∧0 ≥ 0∧0 ≥ 0∧0 ≥ 0∧[(-1)bso_88] ≥ 0)

  • COND_1975_1_BINARYSEARCH_INVOKEMETHOD1(TRUE, 2385_0_binarySearch_Return, x3, x4, java.lang.Object(ARRAY(x1))) → 1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x1)), x3, +(x4, 1))
    • (0 ≥ 0 ⇒ (UIncreasing(1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x1[6])), x3[6], +(x4[6], 1))), ≥)∧0 ≥ 0∧[(2)bni_89] ≥ 0∧[bni_89] ≥ 0∧[(-1)bni_89 + (-1)Bound*bni_89] ≥ 0∧0 ≥ 0∧0 ≥ 0∧[(-1)bso_90] ≥ 0∧[1] ≥ 0)

  • 1975_1_BINARYSEARCH_INVOKEMETHOD(2473_0_binarySearch_Return(0), x3, x4, java.lang.Object(ARRAY(x1))) → COND_1975_1_BINARYSEARCH_INVOKEMETHOD2(>(x4, -1), 2473_0_binarySearch_Return(0), x3, x4, java.lang.Object(ARRAY(x1)))
    • (0 ≥ 0 ⇒ (UIncreasing(COND_1975_1_BINARYSEARCH_INVOKEMETHOD2(>(x4[7], -1), 2473_0_binarySearch_Return(0), x3[7], x4[7], java.lang.Object(ARRAY(x1[7])))), ≥)∧0 ≥ 0∧[(2)bni_91] ≥ 0∧[bni_91] ≥ 0∧[(-1)bni_91 + (-1)Bound*bni_91] ≥ 0∧0 ≥ 0∧0 ≥ 0∧0 ≥ 0∧[(-1)bso_92] ≥ 0)

  • COND_1975_1_BINARYSEARCH_INVOKEMETHOD2(TRUE, 2473_0_binarySearch_Return(0), x3, x4, java.lang.Object(ARRAY(x1))) → 1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x1)), x3, +(x4, 1))
    • (0 ≥ 0 ⇒ (UIncreasing(1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x1[8])), x3[8], +(x4[8], 1))), ≥)∧0 ≥ 0∧[(2)bni_93] ≥ 0∧[bni_93] ≥ 0∧[(-1)bni_93 + (-1)Bound*bni_93] ≥ 0∧0 ≥ 0∧0 ≥ 0∧[(-1)bso_94] ≥ 0∧[1] ≥ 0)




The constraints for P> respective Pbound 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 Pbound.
Using the following integer polynomial ordering the resulting constraints can be solved
Polynomial interpretation over integers with natural coefficients for non-tuple symbols [NONINF][POLO]:

POL(TRUE) = 0   
POL(FALSE) = 0   
POL(1975_1_binarySearch_InvokeMethod(x1, x2, x3, x4)) = 0   
POL(2394_0_binarySearch_InvokeMethod(x1, x2, x3, x4)) = 0   
POL(java.lang.Object(x1)) = 0   
POL(ARRAY(x1)) = 0   
POL(2465_0_binarySearch_InvokeMethod(x1, x2, x3, x4, x5, x6)) = 0   
POL(2084_0_binarySearch_ArrayAccess(x1, x2, x3, x4, x5)) = 0   
POL(2337_1_binarySearch_InvokeMethod(x1)) = 0   
POL(1880_0_binarySearch_Return(x1)) = 0   
POL(2473_0_binarySearch_Return(x1)) = 0   
POL(0) = 0   
POL(1) = 0   
POL(1942_0_binarySearch_Return(x1, x2, x3, x4, x5)) = 0   
POL(2385_0_binarySearch_Return) = 0   
POL(1869_0_BINARYSEARCH_LOAD(x1, x2, x3)) = [-1] + [-1]x3 + x2 + [-1]x1   
POL(COND_1869_0_BINARYSEARCH_LOAD(x1, x2, x3, x4)) = [-1] + [-1]x4 + x3 + [-1]x2 + [2]x1   
POL(&&(x1, x2)) = 0   
POL(>=(x1, x2)) = 0   
POL(>(x1, x2)) = 0   
POL(+(x1, x2)) = 0   
POL(-(x1, x2)) = 0   
POL(2) = 0   
POL(<=(x1, x2)) = 0   
POL(1975_1_BINARYSEARCH_INVOKEMETHOD(x1, x2, x3, x4)) = [-1] + [-1]x4 + [2]x3 + x2 + [-1]x1   
POL(1869_0_binarySearch_Load(x1, x2, x3)) = [2] + [2]x3 + x2   
POL(COND_1975_1_BINARYSEARCH_INVOKEMETHOD(x1, x2, x3, x4, x5)) = [-1] + [-1]x5 + [2]x4 + x3 + [-1]x2   
POL(-1) = 0   
POL(COND_1975_1_BINARYSEARCH_INVOKEMETHOD1(x1, x2, x3, x4, x5)) = [-1] + [-1]x5 + [2]x4 + x3 + [-1]x2   
POL(COND_1975_1_BINARYSEARCH_INVOKEMETHOD2(x1, x2, x3, x4, x5)) = [-1] + [-1]x5 + [2]x4 + x3 + [-1]x2   

The following pairs are in P>:

COND_1869_0_BINARYSEARCH_LOAD(TRUE, java.lang.Object(ARRAY(x0[1])), x3[1], x2[1]) → 1975_1_BINARYSEARCH_INVOKEMETHOD(1869_0_binarySearch_Load(java.lang.Object(ARRAY(x0[1])), -(+(x2[1], /(-(x3[1], x2[1]), 2)), 1), x2[1]), x3[1], +(x2[1], /(-(x3[1], x2[1]), 2)), java.lang.Object(ARRAY(x0[1])))

The following pairs are in Pbound:

1975_1_BINARYSEARCH_INVOKEMETHOD(1880_0_binarySearch_Return(java.lang.Object(ARRAY(x0[3]))), x5[3], x6[3], java.lang.Object(ARRAY(x0[3]))) → COND_1975_1_BINARYSEARCH_INVOKEMETHOD(>(x6[3], -1), 1880_0_binarySearch_Return(java.lang.Object(ARRAY(x0[3]))), x5[3], x6[3], java.lang.Object(ARRAY(x0[3])))
COND_1975_1_BINARYSEARCH_INVOKEMETHOD(TRUE, 1880_0_binarySearch_Return(java.lang.Object(ARRAY(x0[4]))), x5[4], x6[4], java.lang.Object(ARRAY(x0[4]))) → 1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[4])), x5[4], +(x6[4], 1))
1975_1_BINARYSEARCH_INVOKEMETHOD(2385_0_binarySearch_Return, x3[5], x4[5], java.lang.Object(ARRAY(x1[5]))) → COND_1975_1_BINARYSEARCH_INVOKEMETHOD1(>(x4[5], -1), 2385_0_binarySearch_Return, x3[5], x4[5], java.lang.Object(ARRAY(x1[5])))
COND_1975_1_BINARYSEARCH_INVOKEMETHOD1(TRUE, 2385_0_binarySearch_Return, x3[6], x4[6], java.lang.Object(ARRAY(x1[6]))) → 1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x1[6])), x3[6], +(x4[6], 1))
1975_1_BINARYSEARCH_INVOKEMETHOD(2473_0_binarySearch_Return(0), x3[7], x4[7], java.lang.Object(ARRAY(x1[7]))) → COND_1975_1_BINARYSEARCH_INVOKEMETHOD2(>(x4[7], -1), 2473_0_binarySearch_Return(0), x3[7], x4[7], java.lang.Object(ARRAY(x1[7])))
COND_1975_1_BINARYSEARCH_INVOKEMETHOD2(TRUE, 2473_0_binarySearch_Return(0), x3[8], x4[8], java.lang.Object(ARRAY(x1[8]))) → 1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x1[8])), x3[8], +(x4[8], 1))

The following pairs are in P:

1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[0])), x3[0], x2[0]) → COND_1869_0_BINARYSEARCH_LOAD(&&(&&(>=(x3[0], x2[0]), >(x0[0], +(x2[0], /(-(x3[0], x2[0]), 2)))), <=(0, +(x2[0], /(-(x3[0], x2[0]), 2)))), java.lang.Object(ARRAY(x0[0])), x3[0], x2[0])
COND_1869_0_BINARYSEARCH_LOAD(TRUE, java.lang.Object(ARRAY(x0[2])), x3[2], x2[2]) → 1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[2])), -(+(x2[2], /(-(x3[2], x2[2]), 2)), 1), x2[2])
1975_1_BINARYSEARCH_INVOKEMETHOD(1880_0_binarySearch_Return(java.lang.Object(ARRAY(x0[3]))), x5[3], x6[3], java.lang.Object(ARRAY(x0[3]))) → COND_1975_1_BINARYSEARCH_INVOKEMETHOD(>(x6[3], -1), 1880_0_binarySearch_Return(java.lang.Object(ARRAY(x0[3]))), x5[3], x6[3], java.lang.Object(ARRAY(x0[3])))
COND_1975_1_BINARYSEARCH_INVOKEMETHOD(TRUE, 1880_0_binarySearch_Return(java.lang.Object(ARRAY(x0[4]))), x5[4], x6[4], java.lang.Object(ARRAY(x0[4]))) → 1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[4])), x5[4], +(x6[4], 1))
1975_1_BINARYSEARCH_INVOKEMETHOD(2385_0_binarySearch_Return, x3[5], x4[5], java.lang.Object(ARRAY(x1[5]))) → COND_1975_1_BINARYSEARCH_INVOKEMETHOD1(>(x4[5], -1), 2385_0_binarySearch_Return, x3[5], x4[5], java.lang.Object(ARRAY(x1[5])))
COND_1975_1_BINARYSEARCH_INVOKEMETHOD1(TRUE, 2385_0_binarySearch_Return, x3[6], x4[6], java.lang.Object(ARRAY(x1[6]))) → 1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x1[6])), x3[6], +(x4[6], 1))
1975_1_BINARYSEARCH_INVOKEMETHOD(2473_0_binarySearch_Return(0), x3[7], x4[7], java.lang.Object(ARRAY(x1[7]))) → COND_1975_1_BINARYSEARCH_INVOKEMETHOD2(>(x4[7], -1), 2473_0_binarySearch_Return(0), x3[7], x4[7], java.lang.Object(ARRAY(x1[7])))
COND_1975_1_BINARYSEARCH_INVOKEMETHOD2(TRUE, 2473_0_binarySearch_Return(0), x3[8], x4[8], java.lang.Object(ARRAY(x1[8]))) → 1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x1[8])), x3[8], +(x4[8], 1))

At least the following rules have been oriented under context sensitive arithmetic replacement:

&&(TRUE, TRUE)1TRUE1
&&(TRUE, FALSE)1FALSE1
&&(FALSE, TRUE)1FALSE1
&&(FALSE, FALSE)1FALSE1

(9) Complex Obligation (AND)

(10) 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:

Boolean, Integer


The ITRS R consists of the following rules:
1975_1_binarySearch_InvokeMethod(2394_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x2, x3), x4, x5, java.lang.Object(ARRAY(x0))) → 2465_0_binarySearch_InvokeMethod(x4, x5, java.lang.Object(ARRAY(x0)), x1, x6, x3)
1975_1_binarySearch_InvokeMethod(2465_0_binarySearch_InvokeMethod(x2, x3, java.lang.Object(ARRAY(x0)), x1, x4, x5), x6, x7, java.lang.Object(ARRAY(x0))) → 2465_0_binarySearch_InvokeMethod(x6, x7, java.lang.Object(ARRAY(x0)), x1, x4, x2)
1975_1_binarySearch_InvokeMethod(2084_0_binarySearch_ArrayAccess(x1, x2, x3, java.lang.Object(ARRAY(x0)), x4), x5, x6, java.lang.Object(ARRAY(x0))) → 2465_0_binarySearch_InvokeMethod(x5, x6, java.lang.Object(ARRAY(x0)), x1, x2, x3)
2337_1_binarySearch_InvokeMethod(2394_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x2, x3)) → 2394_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x4, x3)
2337_1_binarySearch_InvokeMethod(1880_0_binarySearch_Return(java.lang.Object(ARRAY(x0)))) → 2473_0_binarySearch_Return(0)
2337_1_binarySearch_InvokeMethod(2465_0_binarySearch_InvokeMethod(x2, x3, java.lang.Object(ARRAY(x0)), x1, x4, x5)) → 2394_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x4, x2)
2337_1_binarySearch_InvokeMethod(2084_0_binarySearch_ArrayAccess(x1, x2, x3, java.lang.Object(ARRAY(x0)), x4)) → 2394_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x2, x3)
2337_1_binarySearch_InvokeMethod(2394_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x2, x3)) → 2473_0_binarySearch_Return(1)
2337_1_binarySearch_InvokeMethod(1942_0_binarySearch_Return(java.lang.Object(ARRAY(x0)), x1, x2, x3, x4)) → 2473_0_binarySearch_Return(1)
2337_1_binarySearch_InvokeMethod(2385_0_binarySearch_Return) → 2473_0_binarySearch_Return(0)
2337_1_binarySearch_InvokeMethod(2385_0_binarySearch_Return) → 2473_0_binarySearch_Return(1)
2337_1_binarySearch_InvokeMethod(2473_0_binarySearch_Return(x0)) → 2473_0_binarySearch_Return(x0)

The integer pair graph contains the following rules and edges:
(0): 1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[0])), x3[0], x2[0]) → COND_1869_0_BINARYSEARCH_LOAD(x3[0] >= x2[0] && x0[0] > x2[0] + x3[0] - x2[0] / 2 && 0 <= x2[0] + x3[0] - x2[0] / 2, java.lang.Object(ARRAY(x0[0])), x3[0], x2[0])
(2): COND_1869_0_BINARYSEARCH_LOAD(TRUE, java.lang.Object(ARRAY(x0[2])), x3[2], x2[2]) → 1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[2])), x2[2] + x3[2] - x2[2] / 2 - 1, x2[2])
(3): 1975_1_BINARYSEARCH_INVOKEMETHOD(1880_0_binarySearch_Return(java.lang.Object(ARRAY(x0[3]))), x5[3], x6[3], java.lang.Object(ARRAY(x0[3]))) → COND_1975_1_BINARYSEARCH_INVOKEMETHOD(x6[3] > -1, 1880_0_binarySearch_Return(java.lang.Object(ARRAY(x0[3]))), x5[3], x6[3], java.lang.Object(ARRAY(x0[3])))
(4): COND_1975_1_BINARYSEARCH_INVOKEMETHOD(TRUE, 1880_0_binarySearch_Return(java.lang.Object(ARRAY(x0[4]))), x5[4], x6[4], java.lang.Object(ARRAY(x0[4]))) → 1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[4])), x5[4], x6[4] + 1)
(5): 1975_1_BINARYSEARCH_INVOKEMETHOD(2385_0_binarySearch_Return, x3[5], x4[5], java.lang.Object(ARRAY(x1[5]))) → COND_1975_1_BINARYSEARCH_INVOKEMETHOD1(x4[5] > -1, 2385_0_binarySearch_Return, x3[5], x4[5], java.lang.Object(ARRAY(x1[5])))
(6): COND_1975_1_BINARYSEARCH_INVOKEMETHOD1(TRUE, 2385_0_binarySearch_Return, x3[6], x4[6], java.lang.Object(ARRAY(x1[6]))) → 1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x1[6])), x3[6], x4[6] + 1)
(7): 1975_1_BINARYSEARCH_INVOKEMETHOD(2473_0_binarySearch_Return(0), x3[7], x4[7], java.lang.Object(ARRAY(x1[7]))) → COND_1975_1_BINARYSEARCH_INVOKEMETHOD2(x4[7] > -1, 2473_0_binarySearch_Return(0), x3[7], x4[7], java.lang.Object(ARRAY(x1[7])))
(8): COND_1975_1_BINARYSEARCH_INVOKEMETHOD2(TRUE, 2473_0_binarySearch_Return(0), x3[8], x4[8], java.lang.Object(ARRAY(x1[8]))) → 1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x1[8])), x3[8], x4[8] + 1)

(2) -> (0), if (java.lang.Object(ARRAY(x0[2])) →* java.lang.Object(ARRAY(x0[0]))∧x2[2] + x3[2] - x2[2] / 2 - 1* x3[0]x2[2]* x2[0])


(4) -> (0), if (java.lang.Object(ARRAY(x0[4])) →* java.lang.Object(ARRAY(x0[0]))∧x5[4]* x3[0]x6[4] + 1* x2[0])


(6) -> (0), if (java.lang.Object(ARRAY(x1[6])) →* java.lang.Object(ARRAY(x0[0]))∧x3[6]* x3[0]x4[6] + 1* x2[0])


(8) -> (0), if (java.lang.Object(ARRAY(x1[8])) →* java.lang.Object(ARRAY(x0[0]))∧x3[8]* x3[0]x4[8] + 1* x2[0])


(0) -> (2), if (x3[0] >= x2[0] && x0[0] > x2[0] + x3[0] - x2[0] / 2 && 0 <= x2[0] + x3[0] - x2[0] / 2java.lang.Object(ARRAY(x0[0])) →* java.lang.Object(ARRAY(x0[2]))∧x3[0]* x3[2]x2[0]* x2[2])


(3) -> (4), if (x6[3] > -11880_0_binarySearch_Return(java.lang.Object(ARRAY(x0[3]))) →* 1880_0_binarySearch_Return(java.lang.Object(ARRAY(x0[4])))∧x5[3]* x5[4]x6[3]* x6[4]java.lang.Object(ARRAY(x0[3])) →* java.lang.Object(ARRAY(x0[4])))


(5) -> (6), if (x4[5] > -1x3[5]* x3[6]x4[5]* x4[6]java.lang.Object(ARRAY(x1[5])) →* java.lang.Object(ARRAY(x1[6])))


(7) -> (8), if (x4[7] > -1x3[7]* x3[8]x4[7]* x4[8]java.lang.Object(ARRAY(x1[7])) →* java.lang.Object(ARRAY(x1[8])))



The set Q consists of the following terms:
1975_1_binarySearch_InvokeMethod(2394_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x2, x3), x4, x5, java.lang.Object(ARRAY(x0)))
1975_1_binarySearch_InvokeMethod(2465_0_binarySearch_InvokeMethod(x0, x1, java.lang.Object(ARRAY(x2)), x3, x4, x5), x6, x7, java.lang.Object(ARRAY(x2)))
1975_1_binarySearch_InvokeMethod(2084_0_binarySearch_ArrayAccess(x0, x1, x2, java.lang.Object(ARRAY(x3)), x4), x5, x6, java.lang.Object(ARRAY(x3)))
2337_1_binarySearch_InvokeMethod(2394_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x2, x3))
2337_1_binarySearch_InvokeMethod(1880_0_binarySearch_Return(java.lang.Object(ARRAY(x0))))
2337_1_binarySearch_InvokeMethod(2465_0_binarySearch_InvokeMethod(x0, x1, java.lang.Object(ARRAY(x2)), x3, x4, x5))
2337_1_binarySearch_InvokeMethod(2084_0_binarySearch_ArrayAccess(x0, x1, x2, java.lang.Object(ARRAY(x3)), x4))
2337_1_binarySearch_InvokeMethod(1942_0_binarySearch_Return(java.lang.Object(ARRAY(x0)), x1, x2, x3, x4))
2337_1_binarySearch_InvokeMethod(2385_0_binarySearch_Return)
2337_1_binarySearch_InvokeMethod(2473_0_binarySearch_Return(x0))

(11) IDependencyGraphProof (EQUIVALENT transformation)

The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 1 SCC with 6 less nodes.

(12) 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:
1975_1_binarySearch_InvokeMethod(2394_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x2, x3), x4, x5, java.lang.Object(ARRAY(x0))) → 2465_0_binarySearch_InvokeMethod(x4, x5, java.lang.Object(ARRAY(x0)), x1, x6, x3)
1975_1_binarySearch_InvokeMethod(2465_0_binarySearch_InvokeMethod(x2, x3, java.lang.Object(ARRAY(x0)), x1, x4, x5), x6, x7, java.lang.Object(ARRAY(x0))) → 2465_0_binarySearch_InvokeMethod(x6, x7, java.lang.Object(ARRAY(x0)), x1, x4, x2)
1975_1_binarySearch_InvokeMethod(2084_0_binarySearch_ArrayAccess(x1, x2, x3, java.lang.Object(ARRAY(x0)), x4), x5, x6, java.lang.Object(ARRAY(x0))) → 2465_0_binarySearch_InvokeMethod(x5, x6, java.lang.Object(ARRAY(x0)), x1, x2, x3)
2337_1_binarySearch_InvokeMethod(2394_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x2, x3)) → 2394_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x4, x3)
2337_1_binarySearch_InvokeMethod(1880_0_binarySearch_Return(java.lang.Object(ARRAY(x0)))) → 2473_0_binarySearch_Return(0)
2337_1_binarySearch_InvokeMethod(2465_0_binarySearch_InvokeMethod(x2, x3, java.lang.Object(ARRAY(x0)), x1, x4, x5)) → 2394_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x4, x2)
2337_1_binarySearch_InvokeMethod(2084_0_binarySearch_ArrayAccess(x1, x2, x3, java.lang.Object(ARRAY(x0)), x4)) → 2394_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x2, x3)
2337_1_binarySearch_InvokeMethod(2394_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x2, x3)) → 2473_0_binarySearch_Return(1)
2337_1_binarySearch_InvokeMethod(1942_0_binarySearch_Return(java.lang.Object(ARRAY(x0)), x1, x2, x3, x4)) → 2473_0_binarySearch_Return(1)
2337_1_binarySearch_InvokeMethod(2385_0_binarySearch_Return) → 2473_0_binarySearch_Return(0)
2337_1_binarySearch_InvokeMethod(2385_0_binarySearch_Return) → 2473_0_binarySearch_Return(1)
2337_1_binarySearch_InvokeMethod(2473_0_binarySearch_Return(x0)) → 2473_0_binarySearch_Return(x0)

The integer pair graph contains the following rules and edges:
(2): COND_1869_0_BINARYSEARCH_LOAD(TRUE, java.lang.Object(ARRAY(x0[2])), x3[2], x2[2]) → 1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[2])), x2[2] + x3[2] - x2[2] / 2 - 1, x2[2])
(0): 1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[0])), x3[0], x2[0]) → COND_1869_0_BINARYSEARCH_LOAD(x3[0] >= x2[0] && x0[0] > x2[0] + x3[0] - x2[0] / 2 && 0 <= x2[0] + x3[0] - x2[0] / 2, java.lang.Object(ARRAY(x0[0])), x3[0], x2[0])

(2) -> (0), if (java.lang.Object(ARRAY(x0[2])) →* java.lang.Object(ARRAY(x0[0]))∧x2[2] + x3[2] - x2[2] / 2 - 1* x3[0]x2[2]* x2[0])


(0) -> (2), if (x3[0] >= x2[0] && x0[0] > x2[0] + x3[0] - x2[0] / 2 && 0 <= x2[0] + x3[0] - x2[0] / 2java.lang.Object(ARRAY(x0[0])) →* java.lang.Object(ARRAY(x0[2]))∧x3[0]* x3[2]x2[0]* x2[2])



The set Q consists of the following terms:
1975_1_binarySearch_InvokeMethod(2394_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x2, x3), x4, x5, java.lang.Object(ARRAY(x0)))
1975_1_binarySearch_InvokeMethod(2465_0_binarySearch_InvokeMethod(x0, x1, java.lang.Object(ARRAY(x2)), x3, x4, x5), x6, x7, java.lang.Object(ARRAY(x2)))
1975_1_binarySearch_InvokeMethod(2084_0_binarySearch_ArrayAccess(x0, x1, x2, java.lang.Object(ARRAY(x3)), x4), x5, x6, java.lang.Object(ARRAY(x3)))
2337_1_binarySearch_InvokeMethod(2394_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x2, x3))
2337_1_binarySearch_InvokeMethod(1880_0_binarySearch_Return(java.lang.Object(ARRAY(x0))))
2337_1_binarySearch_InvokeMethod(2465_0_binarySearch_InvokeMethod(x0, x1, java.lang.Object(ARRAY(x2)), x3, x4, x5))
2337_1_binarySearch_InvokeMethod(2084_0_binarySearch_ArrayAccess(x0, x1, x2, java.lang.Object(ARRAY(x3)), x4))
2337_1_binarySearch_InvokeMethod(1942_0_binarySearch_Return(java.lang.Object(ARRAY(x0)), x1, x2, x3, x4))
2337_1_binarySearch_InvokeMethod(2385_0_binarySearch_Return)
2337_1_binarySearch_InvokeMethod(2473_0_binarySearch_Return(x0))

(13) UsableRulesProof (EQUIVALENT transformation)

As all Q-normal forms are R-normal forms we are in the innermost case. Hence, by the usable rules processor [LPAR04] we can delete all non-usable rules [FROCOS05] from R.

(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, Boolean


R is empty.

The integer pair graph contains the following rules and edges:
(2): COND_1869_0_BINARYSEARCH_LOAD(TRUE, java.lang.Object(ARRAY(x0[2])), x3[2], x2[2]) → 1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[2])), x2[2] + x3[2] - x2[2] / 2 - 1, x2[2])
(0): 1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[0])), x3[0], x2[0]) → COND_1869_0_BINARYSEARCH_LOAD(x3[0] >= x2[0] && x0[0] > x2[0] + x3[0] - x2[0] / 2 && 0 <= x2[0] + x3[0] - x2[0] / 2, java.lang.Object(ARRAY(x0[0])), x3[0], x2[0])

(2) -> (0), if (java.lang.Object(ARRAY(x0[2])) →* java.lang.Object(ARRAY(x0[0]))∧x2[2] + x3[2] - x2[2] / 2 - 1* x3[0]x2[2]* x2[0])


(0) -> (2), if (x3[0] >= x2[0] && x0[0] > x2[0] + x3[0] - x2[0] / 2 && 0 <= x2[0] + x3[0] - x2[0] / 2java.lang.Object(ARRAY(x0[0])) →* java.lang.Object(ARRAY(x0[2]))∧x3[0]* x3[2]x2[0]* x2[2])



The set Q consists of the following terms:
1975_1_binarySearch_InvokeMethod(2394_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x2, x3), x4, x5, java.lang.Object(ARRAY(x0)))
1975_1_binarySearch_InvokeMethod(2465_0_binarySearch_InvokeMethod(x0, x1, java.lang.Object(ARRAY(x2)), x3, x4, x5), x6, x7, java.lang.Object(ARRAY(x2)))
1975_1_binarySearch_InvokeMethod(2084_0_binarySearch_ArrayAccess(x0, x1, x2, java.lang.Object(ARRAY(x3)), x4), x5, x6, java.lang.Object(ARRAY(x3)))
2337_1_binarySearch_InvokeMethod(2394_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x2, x3))
2337_1_binarySearch_InvokeMethod(1880_0_binarySearch_Return(java.lang.Object(ARRAY(x0))))
2337_1_binarySearch_InvokeMethod(2465_0_binarySearch_InvokeMethod(x0, x1, java.lang.Object(ARRAY(x2)), x3, x4, x5))
2337_1_binarySearch_InvokeMethod(2084_0_binarySearch_ArrayAccess(x0, x1, x2, java.lang.Object(ARRAY(x3)), x4))
2337_1_binarySearch_InvokeMethod(1942_0_binarySearch_Return(java.lang.Object(ARRAY(x0)), x1, x2, x3, x4))
2337_1_binarySearch_InvokeMethod(2385_0_binarySearch_Return)
2337_1_binarySearch_InvokeMethod(2473_0_binarySearch_Return(x0))

(15) IDPNonInfProof (SOUND transformation)

Used the following options for this NonInfProof:
IDPGPoloSolver: Range: [(-1,2)] IsNat: false Interpretation Shape Heuristic: aprove.DPFramework.IDPProblem.Processors.nonInf.poly.IdpDefaultShapeHeuristic@382d79a8 Constraint Generator: NonInfConstraintGenerator: PathGenerator: MetricPathGenerator: Max Left Steps: 1 Max Right Steps: 1

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_1869_0_BINARYSEARCH_LOAD(TRUE, java.lang.Object(ARRAY(x0[2])), x3[2], x2[2]) → 1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[2])), -(+(x2[2], /(-(x3[2], x2[2]), 2)), 1), x2[2]) the following chains were created:
  • We consider the chain 1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[0])), x3[0], x2[0]) → COND_1869_0_BINARYSEARCH_LOAD(&&(&&(>=(x3[0], x2[0]), >(x0[0], +(x2[0], /(-(x3[0], x2[0]), 2)))), <=(0, +(x2[0], /(-(x3[0], x2[0]), 2)))), java.lang.Object(ARRAY(x0[0])), x3[0], x2[0]), COND_1869_0_BINARYSEARCH_LOAD(TRUE, java.lang.Object(ARRAY(x0[2])), x3[2], x2[2]) → 1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[2])), -(+(x2[2], /(-(x3[2], x2[2]), 2)), 1), x2[2]) which results in the following constraint:

    (1)    (&&(&&(>=(x3[0], x2[0]), >(x0[0], +(x2[0], /(-(x3[0], x2[0]), 2)))), <=(0, +(x2[0], /(-(x3[0], x2[0]), 2))))=TRUEjava.lang.Object(ARRAY(x0[0]))=java.lang.Object(ARRAY(x0[2]))∧x3[0]=x3[2]x2[0]=x2[2]COND_1869_0_BINARYSEARCH_LOAD(TRUE, java.lang.Object(ARRAY(x0[2])), x3[2], x2[2])≥NonInfC∧COND_1869_0_BINARYSEARCH_LOAD(TRUE, java.lang.Object(ARRAY(x0[2])), x3[2], x2[2])≥1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[2])), -(+(x2[2], /(-(x3[2], x2[2]), 2)), 1), x2[2])∧(UIncreasing(1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[2])), -(+(x2[2], /(-(x3[2], x2[2]), 2)), 1), x2[2])), ≥))



    We simplified constraint (1) using rules (I), (II), (III), (IDP_BOOLEAN) which results in the following new constraint:

    (2)    (<=(0, +(x2[0], /(-(x3[0], x2[0]), 2)))=TRUE>=(x3[0], x2[0])=TRUE>(x0[0], +(x2[0], /(-(x3[0], x2[0]), 2)))=TRUECOND_1869_0_BINARYSEARCH_LOAD(TRUE, java.lang.Object(ARRAY(x0[0])), x3[0], x2[0])≥NonInfC∧COND_1869_0_BINARYSEARCH_LOAD(TRUE, java.lang.Object(ARRAY(x0[0])), x3[0], x2[0])≥1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[0])), -(+(x2[0], /(-(x3[0], x2[0]), 2)), 1), x2[0])∧(UIncreasing(1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[2])), -(+(x2[2], /(-(x3[2], x2[2]), 2)), 1), x2[2])), ≥))



    We simplified constraint (2) using rule (POLY_CONSTRAINTS) which results in the following new constraint:

    (3)    (x2[0] + [-1] + max{x3[0] + [-1]x2[0], [-1]x3[0] + x2[0]} ≥ 0∧x3[0] + [-1]x2[0] ≥ 0∧x0[0] + [-1]x2[0] + [-1]max{x3[0] + [-1]x2[0], [-1]x3[0] + x2[0]} ≥ 0 ⇒ (UIncreasing(1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[2])), -(+(x2[2], /(-(x3[2], x2[2]), 2)), 1), x2[2])), ≥)∧[(-1)bni_23 + (-1)Bound*bni_23] + [(-1)bni_23]x2[0] + [bni_23]x3[0] ≥ 0∧[(-1)bso_27] + [-1]x2[0] + x3[0] + [-1]max{x3[0] + [-1]x2[0], [-1]x3[0] + x2[0]} ≥ 0)



    We simplified constraint (3) using rule (IDP_POLY_SIMPLIFY) which results in the following new constraint:

    (4)    (x2[0] + [-1] + max{x3[0] + [-1]x2[0], [-1]x3[0] + x2[0]} ≥ 0∧x3[0] + [-1]x2[0] ≥ 0∧x0[0] + [-1]x2[0] + [-1]max{x3[0] + [-1]x2[0], [-1]x3[0] + x2[0]} ≥ 0 ⇒ (UIncreasing(1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[2])), -(+(x2[2], /(-(x3[2], x2[2]), 2)), 1), x2[2])), ≥)∧[(-1)bni_23 + (-1)Bound*bni_23] + [(-1)bni_23]x2[0] + [bni_23]x3[0] ≥ 0∧[(-1)bso_27] + [-1]x2[0] + x3[0] + [-1]max{x3[0] + [-1]x2[0], [-1]x3[0] + x2[0]} ≥ 0)



    We simplified constraint (4) using rule (POLY_REMOVE_MIN_MAX) which results in the following new constraint:

    (5)    (x3[0] + [-1]x2[0] ≥ 0∧[2]x3[0] + [-2]x2[0] ≥ 0∧[-1] + x3[0] ≥ 0∧x0[0] + [-1]x3[0] ≥ 0 ⇒ (UIncreasing(1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[2])), -(+(x2[2], /(-(x3[2], x2[2]), 2)), 1), x2[2])), ≥)∧[(-1)bni_23 + (-1)Bound*bni_23] + [(-1)bni_23]x2[0] + [bni_23]x3[0] ≥ 0∧[(-1)bso_27] ≥ 0)



    We simplified constraint (5) using rule (IDP_SMT_SPLIT) which results in the following new constraint:

    (6)    (x3[0] ≥ 0∧[2]x3[0] ≥ 0∧x2[0] + [-1] + x3[0] ≥ 0∧x0[0] + [-1]x2[0] + [-1]x3[0] ≥ 0 ⇒ (UIncreasing(1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[2])), -(+(x2[2], /(-(x3[2], x2[2]), 2)), 1), x2[2])), ≥)∧[(-1)bni_23 + (-1)Bound*bni_23] + [bni_23]x3[0] ≥ 0∧[(-1)bso_27] ≥ 0)



    We simplified constraint (6) using rule (IDP_SMT_SPLIT) which results in the following new constraint:

    (7)    (x3[0] ≥ 0∧[2]x3[0] ≥ 0∧x0[0] + [-1] + [-1]x2[0] ≥ 0∧x2[0] ≥ 0 ⇒ (UIncreasing(1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[2])), -(+(x2[2], /(-(x3[2], x2[2]), 2)), 1), x2[2])), ≥)∧[(-1)bni_23 + (-1)Bound*bni_23] + [bni_23]x3[0] ≥ 0∧[(-1)bso_27] ≥ 0)



    We simplified constraint (7) using rule (IDP_SMT_SPLIT) which results in the following new constraint:

    (8)    (x3[0] ≥ 0∧[2]x3[0] ≥ 0∧x0[0] ≥ 0∧x2[0] ≥ 0 ⇒ (UIncreasing(1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[2])), -(+(x2[2], /(-(x3[2], x2[2]), 2)), 1), x2[2])), ≥)∧[(-1)bni_23 + (-1)Bound*bni_23] + [bni_23]x3[0] ≥ 0∧[(-1)bso_27] ≥ 0)



    We simplified constraint (8) using rule (IDP_POLY_GCD) which results in the following new constraint:

    (9)    (x3[0] ≥ 0∧x0[0] ≥ 0∧x2[0] ≥ 0∧x3[0] ≥ 0 ⇒ (UIncreasing(1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[2])), -(+(x2[2], /(-(x3[2], x2[2]), 2)), 1), x2[2])), ≥)∧[(-1)bni_23 + (-1)Bound*bni_23] + [bni_23]x3[0] ≥ 0∧[(-1)bso_27] ≥ 0)







For Pair 1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[0])), x3[0], x2[0]) → COND_1869_0_BINARYSEARCH_LOAD(&&(&&(>=(x3[0], x2[0]), >(x0[0], +(x2[0], /(-(x3[0], x2[0]), 2)))), <=(0, +(x2[0], /(-(x3[0], x2[0]), 2)))), java.lang.Object(ARRAY(x0[0])), x3[0], x2[0]) the following chains were created:
  • We consider the chain 1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[0])), x3[0], x2[0]) → COND_1869_0_BINARYSEARCH_LOAD(&&(&&(>=(x3[0], x2[0]), >(x0[0], +(x2[0], /(-(x3[0], x2[0]), 2)))), <=(0, +(x2[0], /(-(x3[0], x2[0]), 2)))), java.lang.Object(ARRAY(x0[0])), x3[0], x2[0]), COND_1869_0_BINARYSEARCH_LOAD(TRUE, java.lang.Object(ARRAY(x0[2])), x3[2], x2[2]) → 1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[2])), -(+(x2[2], /(-(x3[2], x2[2]), 2)), 1), x2[2]) which results in the following constraint:

    (10)    (&&(&&(>=(x3[0], x2[0]), >(x0[0], +(x2[0], /(-(x3[0], x2[0]), 2)))), <=(0, +(x2[0], /(-(x3[0], x2[0]), 2))))=TRUEjava.lang.Object(ARRAY(x0[0]))=java.lang.Object(ARRAY(x0[2]))∧x3[0]=x3[2]x2[0]=x2[2]1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[0])), x3[0], x2[0])≥NonInfC∧1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[0])), x3[0], x2[0])≥COND_1869_0_BINARYSEARCH_LOAD(&&(&&(>=(x3[0], x2[0]), >(x0[0], +(x2[0], /(-(x3[0], x2[0]), 2)))), <=(0, +(x2[0], /(-(x3[0], x2[0]), 2)))), java.lang.Object(ARRAY(x0[0])), x3[0], x2[0])∧(UIncreasing(COND_1869_0_BINARYSEARCH_LOAD(&&(&&(>=(x3[0], x2[0]), >(x0[0], +(x2[0], /(-(x3[0], x2[0]), 2)))), <=(0, +(x2[0], /(-(x3[0], x2[0]), 2)))), java.lang.Object(ARRAY(x0[0])), x3[0], x2[0])), ≥))



    We simplified constraint (10) using rules (I), (II), (IV), (IDP_BOOLEAN) which results in the following new constraint:

    (11)    (<=(0, +(x2[0], /(-(x3[0], x2[0]), 2)))=TRUE>=(x3[0], x2[0])=TRUE>(x0[0], +(x2[0], /(-(x3[0], x2[0]), 2)))=TRUE1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[0])), x3[0], x2[0])≥NonInfC∧1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[0])), x3[0], x2[0])≥COND_1869_0_BINARYSEARCH_LOAD(&&(&&(>=(x3[0], x2[0]), >(x0[0], +(x2[0], /(-(x3[0], x2[0]), 2)))), <=(0, +(x2[0], /(-(x3[0], x2[0]), 2)))), java.lang.Object(ARRAY(x0[0])), x3[0], x2[0])∧(UIncreasing(COND_1869_0_BINARYSEARCH_LOAD(&&(&&(>=(x3[0], x2[0]), >(x0[0], +(x2[0], /(-(x3[0], x2[0]), 2)))), <=(0, +(x2[0], /(-(x3[0], x2[0]), 2)))), java.lang.Object(ARRAY(x0[0])), x3[0], x2[0])), ≥))



    We simplified constraint (11) using rule (POLY_CONSTRAINTS) which results in the following new constraint:

    (12)    (x2[0] + [-1] + max{x3[0] + [-1]x2[0], [-1]x3[0] + x2[0]} ≥ 0∧x3[0] + [-1]x2[0] ≥ 0∧x0[0] + [-1]x2[0] + [-1]max{x3[0] + [-1]x2[0], [-1]x3[0] + x2[0]} ≥ 0 ⇒ (UIncreasing(COND_1869_0_BINARYSEARCH_LOAD(&&(&&(>=(x3[0], x2[0]), >(x0[0], +(x2[0], /(-(x3[0], x2[0]), 2)))), <=(0, +(x2[0], /(-(x3[0], x2[0]), 2)))), java.lang.Object(ARRAY(x0[0])), x3[0], x2[0])), ≥)∧[bni_28 + (-1)Bound*bni_28] + [(-1)bni_28]x2[0] + [bni_28]x3[0] ≥ 0∧[1 + (-1)bso_29] ≥ 0)



    We simplified constraint (12) using rule (IDP_POLY_SIMPLIFY) which results in the following new constraint:

    (13)    (x2[0] + [-1] + max{x3[0] + [-1]x2[0], [-1]x3[0] + x2[0]} ≥ 0∧x3[0] + [-1]x2[0] ≥ 0∧x0[0] + [-1]x2[0] + [-1]max{x3[0] + [-1]x2[0], [-1]x3[0] + x2[0]} ≥ 0 ⇒ (UIncreasing(COND_1869_0_BINARYSEARCH_LOAD(&&(&&(>=(x3[0], x2[0]), >(x0[0], +(x2[0], /(-(x3[0], x2[0]), 2)))), <=(0, +(x2[0], /(-(x3[0], x2[0]), 2)))), java.lang.Object(ARRAY(x0[0])), x3[0], x2[0])), ≥)∧[bni_28 + (-1)Bound*bni_28] + [(-1)bni_28]x2[0] + [bni_28]x3[0] ≥ 0∧[1 + (-1)bso_29] ≥ 0)



    We simplified constraint (13) using rule (POLY_REMOVE_MIN_MAX) which results in the following new constraint:

    (14)    (x3[0] + [-1]x2[0] ≥ 0∧[2]x3[0] + [-2]x2[0] ≥ 0∧[-1] + x3[0] ≥ 0∧x0[0] + [-1]x3[0] ≥ 0 ⇒ (UIncreasing(COND_1869_0_BINARYSEARCH_LOAD(&&(&&(>=(x3[0], x2[0]), >(x0[0], +(x2[0], /(-(x3[0], x2[0]), 2)))), <=(0, +(x2[0], /(-(x3[0], x2[0]), 2)))), java.lang.Object(ARRAY(x0[0])), x3[0], x2[0])), ≥)∧[bni_28 + (-1)Bound*bni_28] + [(-1)bni_28]x2[0] + [bni_28]x3[0] ≥ 0∧[1 + (-1)bso_29] ≥ 0)



    We simplified constraint (14) using rule (IDP_SMT_SPLIT) which results in the following new constraint:

    (15)    (x3[0] ≥ 0∧[2]x3[0] ≥ 0∧x2[0] + [-1] + x3[0] ≥ 0∧x0[0] + [-1]x2[0] + [-1]x3[0] ≥ 0 ⇒ (UIncreasing(COND_1869_0_BINARYSEARCH_LOAD(&&(&&(>=(x3[0], x2[0]), >(x0[0], +(x2[0], /(-(x3[0], x2[0]), 2)))), <=(0, +(x2[0], /(-(x3[0], x2[0]), 2)))), java.lang.Object(ARRAY(x0[0])), x3[0], x2[0])), ≥)∧[bni_28 + (-1)Bound*bni_28] + [bni_28]x3[0] ≥ 0∧[1 + (-1)bso_29] ≥ 0)



    We simplified constraint (15) using rule (IDP_SMT_SPLIT) which results in the following new constraint:

    (16)    (x3[0] ≥ 0∧[2]x3[0] ≥ 0∧x0[0] + [-1] + [-1]x2[0] ≥ 0∧x2[0] ≥ 0 ⇒ (UIncreasing(COND_1869_0_BINARYSEARCH_LOAD(&&(&&(>=(x3[0], x2[0]), >(x0[0], +(x2[0], /(-(x3[0], x2[0]), 2)))), <=(0, +(x2[0], /(-(x3[0], x2[0]), 2)))), java.lang.Object(ARRAY(x0[0])), x3[0], x2[0])), ≥)∧[bni_28 + (-1)Bound*bni_28] + [bni_28]x3[0] ≥ 0∧[1 + (-1)bso_29] ≥ 0)



    We simplified constraint (16) using rule (IDP_SMT_SPLIT) which results in the following new constraint:

    (17)    (x3[0] ≥ 0∧[2]x3[0] ≥ 0∧x0[0] ≥ 0∧x2[0] ≥ 0 ⇒ (UIncreasing(COND_1869_0_BINARYSEARCH_LOAD(&&(&&(>=(x3[0], x2[0]), >(x0[0], +(x2[0], /(-(x3[0], x2[0]), 2)))), <=(0, +(x2[0], /(-(x3[0], x2[0]), 2)))), java.lang.Object(ARRAY(x0[0])), x3[0], x2[0])), ≥)∧[(-1)Bound*bni_28 + bni_28] + [bni_28]x3[0] ≥ 0∧[1 + (-1)bso_29] ≥ 0)



    We simplified constraint (17) using rule (IDP_POLY_GCD) which results in the following new constraint:

    (18)    (x3[0] ≥ 0∧x0[0] ≥ 0∧x2[0] ≥ 0∧x3[0] ≥ 0 ⇒ (UIncreasing(COND_1869_0_BINARYSEARCH_LOAD(&&(&&(>=(x3[0], x2[0]), >(x0[0], +(x2[0], /(-(x3[0], x2[0]), 2)))), <=(0, +(x2[0], /(-(x3[0], x2[0]), 2)))), java.lang.Object(ARRAY(x0[0])), x3[0], x2[0])), ≥)∧[(-1)Bound*bni_28 + bni_28] + [bni_28]x3[0] ≥ 0∧[1 + (-1)bso_29] ≥ 0)







To summarize, we get the following constraints P for the following pairs.
  • COND_1869_0_BINARYSEARCH_LOAD(TRUE, java.lang.Object(ARRAY(x0[2])), x3[2], x2[2]) → 1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[2])), -(+(x2[2], /(-(x3[2], x2[2]), 2)), 1), x2[2])
    • (x3[0] ≥ 0∧x0[0] ≥ 0∧x2[0] ≥ 0∧x3[0] ≥ 0 ⇒ (UIncreasing(1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[2])), -(+(x2[2], /(-(x3[2], x2[2]), 2)), 1), x2[2])), ≥)∧[(-1)bni_23 + (-1)Bound*bni_23] + [bni_23]x3[0] ≥ 0∧[(-1)bso_27] ≥ 0)

  • 1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[0])), x3[0], x2[0]) → COND_1869_0_BINARYSEARCH_LOAD(&&(&&(>=(x3[0], x2[0]), >(x0[0], +(x2[0], /(-(x3[0], x2[0]), 2)))), <=(0, +(x2[0], /(-(x3[0], x2[0]), 2)))), java.lang.Object(ARRAY(x0[0])), x3[0], x2[0])
    • (x3[0] ≥ 0∧x0[0] ≥ 0∧x2[0] ≥ 0∧x3[0] ≥ 0 ⇒ (UIncreasing(COND_1869_0_BINARYSEARCH_LOAD(&&(&&(>=(x3[0], x2[0]), >(x0[0], +(x2[0], /(-(x3[0], x2[0]), 2)))), <=(0, +(x2[0], /(-(x3[0], x2[0]), 2)))), java.lang.Object(ARRAY(x0[0])), x3[0], x2[0])), ≥)∧[(-1)Bound*bni_28 + bni_28] + [bni_28]x3[0] ≥ 0∧[1 + (-1)bso_29] ≥ 0)




The constraints for P> respective Pbound 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 Pbound.
Using the following integer polynomial ordering the resulting constraints can be solved
Polynomial interpretation over integers[POLO]:

POL(TRUE) = 0   
POL(FALSE) = [3]   
POL(COND_1869_0_BINARYSEARCH_LOAD(x1, x2, x3, x4)) = [-1] + [-1]x4 + x3 + [2]x2 + [-1]x1   
POL(java.lang.Object(x1)) = [-1] + [-1]x1   
POL(ARRAY(x1)) = [-1]   
POL(1869_0_BINARYSEARCH_LOAD(x1, x2, x3)) = [1] + [-1]x3 + x2 + [-1]x1   
POL(-(x1, x2)) = x1 + [-1]x2   
POL(+(x1, x2)) = x1 + x2   
POL(2) = [2]   
POL(1) = [1]   
POL(&&(x1, x2)) = [-1]   
POL(>=(x1, x2)) = [-1]   
POL(>(x1, x2)) = [-1]   
POL(<=(x1, x2)) = [-1]   
POL(0) = 0   

Polynomial Interpretations with Context Sensitive Arithemetic Replacement
POL(TermCSAR-Mode @ Context)

POL(/(x1, 2)1 @ {+_2/1}) = max{x1, [-1]x1} + [-1]   
POL(/(x1, 2)-1 @ {+_2/1}) = max{x1, [-1]x1} + [-1]   
POL(/(x1, 2)1 @ {1869_0_BINARYSEARCH_LOAD_3/1, -_2/0, +_2/1}) = max{x1, [-1]x1} + [-1]   

The following pairs are in P>:

1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[0])), x3[0], x2[0]) → COND_1869_0_BINARYSEARCH_LOAD(&&(&&(>=(x3[0], x2[0]), >(x0[0], +(x2[0], /(-(x3[0], x2[0]), 2)))), <=(0, +(x2[0], /(-(x3[0], x2[0]), 2)))), java.lang.Object(ARRAY(x0[0])), x3[0], x2[0])

The following pairs are in Pbound:

COND_1869_0_BINARYSEARCH_LOAD(TRUE, java.lang.Object(ARRAY(x0[2])), x3[2], x2[2]) → 1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[2])), -(+(x2[2], /(-(x3[2], x2[2]), 2)), 1), x2[2])
1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[0])), x3[0], x2[0]) → COND_1869_0_BINARYSEARCH_LOAD(&&(&&(>=(x3[0], x2[0]), >(x0[0], +(x2[0], /(-(x3[0], x2[0]), 2)))), <=(0, +(x2[0], /(-(x3[0], x2[0]), 2)))), java.lang.Object(ARRAY(x0[0])), x3[0], x2[0])

The following pairs are in P:

COND_1869_0_BINARYSEARCH_LOAD(TRUE, java.lang.Object(ARRAY(x0[2])), x3[2], x2[2]) → 1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[2])), -(+(x2[2], /(-(x3[2], x2[2]), 2)), 1), x2[2])

At least the following rules have been oriented under context sensitive arithmetic replacement:

/1
TRUE1&&(TRUE, TRUE)1
FALSE1&&(TRUE, FALSE)1
FALSE1&&(FALSE, TRUE)1
FALSE1&&(FALSE, FALSE)1

(16) 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


R is empty.

The integer pair graph contains the following rules and edges:
(2): COND_1869_0_BINARYSEARCH_LOAD(TRUE, java.lang.Object(ARRAY(x0[2])), x3[2], x2[2]) → 1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[2])), x2[2] + x3[2] - x2[2] / 2 - 1, x2[2])


The set Q consists of the following terms:
1975_1_binarySearch_InvokeMethod(2394_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x2, x3), x4, x5, java.lang.Object(ARRAY(x0)))
1975_1_binarySearch_InvokeMethod(2465_0_binarySearch_InvokeMethod(x0, x1, java.lang.Object(ARRAY(x2)), x3, x4, x5), x6, x7, java.lang.Object(ARRAY(x2)))
1975_1_binarySearch_InvokeMethod(2084_0_binarySearch_ArrayAccess(x0, x1, x2, java.lang.Object(ARRAY(x3)), x4), x5, x6, java.lang.Object(ARRAY(x3)))
2337_1_binarySearch_InvokeMethod(2394_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x2, x3))
2337_1_binarySearch_InvokeMethod(1880_0_binarySearch_Return(java.lang.Object(ARRAY(x0))))
2337_1_binarySearch_InvokeMethod(2465_0_binarySearch_InvokeMethod(x0, x1, java.lang.Object(ARRAY(x2)), x3, x4, x5))
2337_1_binarySearch_InvokeMethod(2084_0_binarySearch_ArrayAccess(x0, x1, x2, java.lang.Object(ARRAY(x3)), x4))
2337_1_binarySearch_InvokeMethod(1942_0_binarySearch_Return(java.lang.Object(ARRAY(x0)), x1, x2, x3, x4))
2337_1_binarySearch_InvokeMethod(2385_0_binarySearch_Return)
2337_1_binarySearch_InvokeMethod(2473_0_binarySearch_Return(x0))

(17) IDependencyGraphProof (EQUIVALENT transformation)

The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 0 SCCs with 1 less node.

(18) TRUE

(19) 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:

Boolean, Integer


The ITRS R consists of the following rules:
1975_1_binarySearch_InvokeMethod(2394_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x2, x3), x4, x5, java.lang.Object(ARRAY(x0))) → 2465_0_binarySearch_InvokeMethod(x4, x5, java.lang.Object(ARRAY(x0)), x1, x6, x3)
1975_1_binarySearch_InvokeMethod(2465_0_binarySearch_InvokeMethod(x2, x3, java.lang.Object(ARRAY(x0)), x1, x4, x5), x6, x7, java.lang.Object(ARRAY(x0))) → 2465_0_binarySearch_InvokeMethod(x6, x7, java.lang.Object(ARRAY(x0)), x1, x4, x2)
1975_1_binarySearch_InvokeMethod(2084_0_binarySearch_ArrayAccess(x1, x2, x3, java.lang.Object(ARRAY(x0)), x4), x5, x6, java.lang.Object(ARRAY(x0))) → 2465_0_binarySearch_InvokeMethod(x5, x6, java.lang.Object(ARRAY(x0)), x1, x2, x3)
2337_1_binarySearch_InvokeMethod(2394_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x2, x3)) → 2394_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x4, x3)
2337_1_binarySearch_InvokeMethod(1880_0_binarySearch_Return(java.lang.Object(ARRAY(x0)))) → 2473_0_binarySearch_Return(0)
2337_1_binarySearch_InvokeMethod(2465_0_binarySearch_InvokeMethod(x2, x3, java.lang.Object(ARRAY(x0)), x1, x4, x5)) → 2394_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x4, x2)
2337_1_binarySearch_InvokeMethod(2084_0_binarySearch_ArrayAccess(x1, x2, x3, java.lang.Object(ARRAY(x0)), x4)) → 2394_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x2, x3)
2337_1_binarySearch_InvokeMethod(2394_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x2, x3)) → 2473_0_binarySearch_Return(1)
2337_1_binarySearch_InvokeMethod(1942_0_binarySearch_Return(java.lang.Object(ARRAY(x0)), x1, x2, x3, x4)) → 2473_0_binarySearch_Return(1)
2337_1_binarySearch_InvokeMethod(2385_0_binarySearch_Return) → 2473_0_binarySearch_Return(0)
2337_1_binarySearch_InvokeMethod(2385_0_binarySearch_Return) → 2473_0_binarySearch_Return(1)
2337_1_binarySearch_InvokeMethod(2473_0_binarySearch_Return(x0)) → 2473_0_binarySearch_Return(x0)

The integer pair graph contains the following rules and edges:
(0): 1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[0])), x3[0], x2[0]) → COND_1869_0_BINARYSEARCH_LOAD(x3[0] >= x2[0] && x0[0] > x2[0] + x3[0] - x2[0] / 2 && 0 <= x2[0] + x3[0] - x2[0] / 2, java.lang.Object(ARRAY(x0[0])), x3[0], x2[0])
(1): COND_1869_0_BINARYSEARCH_LOAD(TRUE, java.lang.Object(ARRAY(x0[1])), x3[1], x2[1]) → 1975_1_BINARYSEARCH_INVOKEMETHOD(1869_0_binarySearch_Load(java.lang.Object(ARRAY(x0[1])), x2[1] + x3[1] - x2[1] / 2 - 1, x2[1]), x3[1], x2[1] + x3[1] - x2[1] / 2, java.lang.Object(ARRAY(x0[1])))
(2): COND_1869_0_BINARYSEARCH_LOAD(TRUE, java.lang.Object(ARRAY(x0[2])), x3[2], x2[2]) → 1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[2])), x2[2] + x3[2] - x2[2] / 2 - 1, x2[2])

(2) -> (0), if (java.lang.Object(ARRAY(x0[2])) →* java.lang.Object(ARRAY(x0[0]))∧x2[2] + x3[2] - x2[2] / 2 - 1* x3[0]x2[2]* x2[0])


(0) -> (1), if (x3[0] >= x2[0] && x0[0] > x2[0] + x3[0] - x2[0] / 2 && 0 <= x2[0] + x3[0] - x2[0] / 2java.lang.Object(ARRAY(x0[0])) →* java.lang.Object(ARRAY(x0[1]))∧x3[0]* x3[1]x2[0]* x2[1])


(0) -> (2), if (x3[0] >= x2[0] && x0[0] > x2[0] + x3[0] - x2[0] / 2 && 0 <= x2[0] + x3[0] - x2[0] / 2java.lang.Object(ARRAY(x0[0])) →* java.lang.Object(ARRAY(x0[2]))∧x3[0]* x3[2]x2[0]* x2[2])



The set Q consists of the following terms:
1975_1_binarySearch_InvokeMethod(2394_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x2, x3), x4, x5, java.lang.Object(ARRAY(x0)))
1975_1_binarySearch_InvokeMethod(2465_0_binarySearch_InvokeMethod(x0, x1, java.lang.Object(ARRAY(x2)), x3, x4, x5), x6, x7, java.lang.Object(ARRAY(x2)))
1975_1_binarySearch_InvokeMethod(2084_0_binarySearch_ArrayAccess(x0, x1, x2, java.lang.Object(ARRAY(x3)), x4), x5, x6, java.lang.Object(ARRAY(x3)))
2337_1_binarySearch_InvokeMethod(2394_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x2, x3))
2337_1_binarySearch_InvokeMethod(1880_0_binarySearch_Return(java.lang.Object(ARRAY(x0))))
2337_1_binarySearch_InvokeMethod(2465_0_binarySearch_InvokeMethod(x0, x1, java.lang.Object(ARRAY(x2)), x3, x4, x5))
2337_1_binarySearch_InvokeMethod(2084_0_binarySearch_ArrayAccess(x0, x1, x2, java.lang.Object(ARRAY(x3)), x4))
2337_1_binarySearch_InvokeMethod(1942_0_binarySearch_Return(java.lang.Object(ARRAY(x0)), x1, x2, x3, x4))
2337_1_binarySearch_InvokeMethod(2385_0_binarySearch_Return)
2337_1_binarySearch_InvokeMethod(2473_0_binarySearch_Return(x0))

(20) IDependencyGraphProof (EQUIVALENT transformation)

The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 1 SCC with 1 less node.

(21) 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:
1975_1_binarySearch_InvokeMethod(2394_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x2, x3), x4, x5, java.lang.Object(ARRAY(x0))) → 2465_0_binarySearch_InvokeMethod(x4, x5, java.lang.Object(ARRAY(x0)), x1, x6, x3)
1975_1_binarySearch_InvokeMethod(2465_0_binarySearch_InvokeMethod(x2, x3, java.lang.Object(ARRAY(x0)), x1, x4, x5), x6, x7, java.lang.Object(ARRAY(x0))) → 2465_0_binarySearch_InvokeMethod(x6, x7, java.lang.Object(ARRAY(x0)), x1, x4, x2)
1975_1_binarySearch_InvokeMethod(2084_0_binarySearch_ArrayAccess(x1, x2, x3, java.lang.Object(ARRAY(x0)), x4), x5, x6, java.lang.Object(ARRAY(x0))) → 2465_0_binarySearch_InvokeMethod(x5, x6, java.lang.Object(ARRAY(x0)), x1, x2, x3)
2337_1_binarySearch_InvokeMethod(2394_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x2, x3)) → 2394_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x4, x3)
2337_1_binarySearch_InvokeMethod(1880_0_binarySearch_Return(java.lang.Object(ARRAY(x0)))) → 2473_0_binarySearch_Return(0)
2337_1_binarySearch_InvokeMethod(2465_0_binarySearch_InvokeMethod(x2, x3, java.lang.Object(ARRAY(x0)), x1, x4, x5)) → 2394_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x4, x2)
2337_1_binarySearch_InvokeMethod(2084_0_binarySearch_ArrayAccess(x1, x2, x3, java.lang.Object(ARRAY(x0)), x4)) → 2394_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x2, x3)
2337_1_binarySearch_InvokeMethod(2394_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x2, x3)) → 2473_0_binarySearch_Return(1)
2337_1_binarySearch_InvokeMethod(1942_0_binarySearch_Return(java.lang.Object(ARRAY(x0)), x1, x2, x3, x4)) → 2473_0_binarySearch_Return(1)
2337_1_binarySearch_InvokeMethod(2385_0_binarySearch_Return) → 2473_0_binarySearch_Return(0)
2337_1_binarySearch_InvokeMethod(2385_0_binarySearch_Return) → 2473_0_binarySearch_Return(1)
2337_1_binarySearch_InvokeMethod(2473_0_binarySearch_Return(x0)) → 2473_0_binarySearch_Return(x0)

The integer pair graph contains the following rules and edges:
(2): COND_1869_0_BINARYSEARCH_LOAD(TRUE, java.lang.Object(ARRAY(x0[2])), x3[2], x2[2]) → 1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[2])), x2[2] + x3[2] - x2[2] / 2 - 1, x2[2])
(0): 1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[0])), x3[0], x2[0]) → COND_1869_0_BINARYSEARCH_LOAD(x3[0] >= x2[0] && x0[0] > x2[0] + x3[0] - x2[0] / 2 && 0 <= x2[0] + x3[0] - x2[0] / 2, java.lang.Object(ARRAY(x0[0])), x3[0], x2[0])

(2) -> (0), if (java.lang.Object(ARRAY(x0[2])) →* java.lang.Object(ARRAY(x0[0]))∧x2[2] + x3[2] - x2[2] / 2 - 1* x3[0]x2[2]* x2[0])


(0) -> (2), if (x3[0] >= x2[0] && x0[0] > x2[0] + x3[0] - x2[0] / 2 && 0 <= x2[0] + x3[0] - x2[0] / 2java.lang.Object(ARRAY(x0[0])) →* java.lang.Object(ARRAY(x0[2]))∧x3[0]* x3[2]x2[0]* x2[2])



The set Q consists of the following terms:
1975_1_binarySearch_InvokeMethod(2394_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x2, x3), x4, x5, java.lang.Object(ARRAY(x0)))
1975_1_binarySearch_InvokeMethod(2465_0_binarySearch_InvokeMethod(x0, x1, java.lang.Object(ARRAY(x2)), x3, x4, x5), x6, x7, java.lang.Object(ARRAY(x2)))
1975_1_binarySearch_InvokeMethod(2084_0_binarySearch_ArrayAccess(x0, x1, x2, java.lang.Object(ARRAY(x3)), x4), x5, x6, java.lang.Object(ARRAY(x3)))
2337_1_binarySearch_InvokeMethod(2394_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x2, x3))
2337_1_binarySearch_InvokeMethod(1880_0_binarySearch_Return(java.lang.Object(ARRAY(x0))))
2337_1_binarySearch_InvokeMethod(2465_0_binarySearch_InvokeMethod(x0, x1, java.lang.Object(ARRAY(x2)), x3, x4, x5))
2337_1_binarySearch_InvokeMethod(2084_0_binarySearch_ArrayAccess(x0, x1, x2, java.lang.Object(ARRAY(x3)), x4))
2337_1_binarySearch_InvokeMethod(1942_0_binarySearch_Return(java.lang.Object(ARRAY(x0)), x1, x2, x3, x4))
2337_1_binarySearch_InvokeMethod(2385_0_binarySearch_Return)
2337_1_binarySearch_InvokeMethod(2473_0_binarySearch_Return(x0))

(22) UsableRulesProof (EQUIVALENT transformation)

As all Q-normal forms are R-normal forms we are in the innermost case. Hence, by the usable rules processor [LPAR04] we can delete all non-usable rules [FROCOS05] from R.

(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, Boolean


R is empty.

The integer pair graph contains the following rules and edges:
(2): COND_1869_0_BINARYSEARCH_LOAD(TRUE, java.lang.Object(ARRAY(x0[2])), x3[2], x2[2]) → 1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[2])), x2[2] + x3[2] - x2[2] / 2 - 1, x2[2])
(0): 1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[0])), x3[0], x2[0]) → COND_1869_0_BINARYSEARCH_LOAD(x3[0] >= x2[0] && x0[0] > x2[0] + x3[0] - x2[0] / 2 && 0 <= x2[0] + x3[0] - x2[0] / 2, java.lang.Object(ARRAY(x0[0])), x3[0], x2[0])

(2) -> (0), if (java.lang.Object(ARRAY(x0[2])) →* java.lang.Object(ARRAY(x0[0]))∧x2[2] + x3[2] - x2[2] / 2 - 1* x3[0]x2[2]* x2[0])


(0) -> (2), if (x3[0] >= x2[0] && x0[0] > x2[0] + x3[0] - x2[0] / 2 && 0 <= x2[0] + x3[0] - x2[0] / 2java.lang.Object(ARRAY(x0[0])) →* java.lang.Object(ARRAY(x0[2]))∧x3[0]* x3[2]x2[0]* x2[2])



The set Q consists of the following terms:
1975_1_binarySearch_InvokeMethod(2394_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x2, x3), x4, x5, java.lang.Object(ARRAY(x0)))
1975_1_binarySearch_InvokeMethod(2465_0_binarySearch_InvokeMethod(x0, x1, java.lang.Object(ARRAY(x2)), x3, x4, x5), x6, x7, java.lang.Object(ARRAY(x2)))
1975_1_binarySearch_InvokeMethod(2084_0_binarySearch_ArrayAccess(x0, x1, x2, java.lang.Object(ARRAY(x3)), x4), x5, x6, java.lang.Object(ARRAY(x3)))
2337_1_binarySearch_InvokeMethod(2394_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x2, x3))
2337_1_binarySearch_InvokeMethod(1880_0_binarySearch_Return(java.lang.Object(ARRAY(x0))))
2337_1_binarySearch_InvokeMethod(2465_0_binarySearch_InvokeMethod(x0, x1, java.lang.Object(ARRAY(x2)), x3, x4, x5))
2337_1_binarySearch_InvokeMethod(2084_0_binarySearch_ArrayAccess(x0, x1, x2, java.lang.Object(ARRAY(x3)), x4))
2337_1_binarySearch_InvokeMethod(1942_0_binarySearch_Return(java.lang.Object(ARRAY(x0)), x1, x2, x3, x4))
2337_1_binarySearch_InvokeMethod(2385_0_binarySearch_Return)
2337_1_binarySearch_InvokeMethod(2473_0_binarySearch_Return(x0))

(24) IDPNonInfProof (SOUND transformation)

Used the following options for this NonInfProof:
IDPGPoloSolver: Range: [(-1,2)] IsNat: false Interpretation Shape Heuristic: aprove.DPFramework.IDPProblem.Processors.nonInf.poly.IdpDefaultShapeHeuristic@382d79a8 Constraint Generator: NonInfConstraintGenerator: PathGenerator: MetricPathGenerator: Max Left Steps: 1 Max Right Steps: 1

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_1869_0_BINARYSEARCH_LOAD(TRUE, java.lang.Object(ARRAY(x0[2])), x3[2], x2[2]) → 1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[2])), -(+(x2[2], /(-(x3[2], x2[2]), 2)), 1), x2[2]) the following chains were created:
  • We consider the chain 1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[0])), x3[0], x2[0]) → COND_1869_0_BINARYSEARCH_LOAD(&&(&&(>=(x3[0], x2[0]), >(x0[0], +(x2[0], /(-(x3[0], x2[0]), 2)))), <=(0, +(x2[0], /(-(x3[0], x2[0]), 2)))), java.lang.Object(ARRAY(x0[0])), x3[0], x2[0]), COND_1869_0_BINARYSEARCH_LOAD(TRUE, java.lang.Object(ARRAY(x0[2])), x3[2], x2[2]) → 1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[2])), -(+(x2[2], /(-(x3[2], x2[2]), 2)), 1), x2[2]) which results in the following constraint:

    (1)    (&&(&&(>=(x3[0], x2[0]), >(x0[0], +(x2[0], /(-(x3[0], x2[0]), 2)))), <=(0, +(x2[0], /(-(x3[0], x2[0]), 2))))=TRUEjava.lang.Object(ARRAY(x0[0]))=java.lang.Object(ARRAY(x0[2]))∧x3[0]=x3[2]x2[0]=x2[2]COND_1869_0_BINARYSEARCH_LOAD(TRUE, java.lang.Object(ARRAY(x0[2])), x3[2], x2[2])≥NonInfC∧COND_1869_0_BINARYSEARCH_LOAD(TRUE, java.lang.Object(ARRAY(x0[2])), x3[2], x2[2])≥1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[2])), -(+(x2[2], /(-(x3[2], x2[2]), 2)), 1), x2[2])∧(UIncreasing(1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[2])), -(+(x2[2], /(-(x3[2], x2[2]), 2)), 1), x2[2])), ≥))



    We simplified constraint (1) using rules (I), (II), (III), (IDP_BOOLEAN) which results in the following new constraint:

    (2)    (<=(0, +(x2[0], /(-(x3[0], x2[0]), 2)))=TRUE>=(x3[0], x2[0])=TRUE>(x0[0], +(x2[0], /(-(x3[0], x2[0]), 2)))=TRUECOND_1869_0_BINARYSEARCH_LOAD(TRUE, java.lang.Object(ARRAY(x0[0])), x3[0], x2[0])≥NonInfC∧COND_1869_0_BINARYSEARCH_LOAD(TRUE, java.lang.Object(ARRAY(x0[0])), x3[0], x2[0])≥1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[0])), -(+(x2[0], /(-(x3[0], x2[0]), 2)), 1), x2[0])∧(UIncreasing(1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[2])), -(+(x2[2], /(-(x3[2], x2[2]), 2)), 1), x2[2])), ≥))



    We simplified constraint (2) using rule (POLY_CONSTRAINTS) which results in the following new constraint:

    (3)    (x2[0] + [-1] + max{x3[0] + [-1]x2[0], [-1]x3[0] + x2[0]} ≥ 0∧x3[0] + [-1]x2[0] ≥ 0∧x0[0] + [-1]x2[0] + [-1]max{x3[0] + [-1]x2[0], [-1]x3[0] + x2[0]} ≥ 0 ⇒ (UIncreasing(1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[2])), -(+(x2[2], /(-(x3[2], x2[2]), 2)), 1), x2[2])), ≥)∧[(-1)Bound*bni_23] + [(-1)bni_23]x2[0] + [bni_23]x3[0] ≥ 0∧[2 + (-1)bso_27] + [-1]x2[0] + x3[0] + [-1]max{x3[0] + [-1]x2[0], [-1]x3[0] + x2[0]} ≥ 0)



    We simplified constraint (3) using rule (IDP_POLY_SIMPLIFY) which results in the following new constraint:

    (4)    (x2[0] + [-1] + max{x3[0] + [-1]x2[0], [-1]x3[0] + x2[0]} ≥ 0∧x3[0] + [-1]x2[0] ≥ 0∧x0[0] + [-1]x2[0] + [-1]max{x3[0] + [-1]x2[0], [-1]x3[0] + x2[0]} ≥ 0 ⇒ (UIncreasing(1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[2])), -(+(x2[2], /(-(x3[2], x2[2]), 2)), 1), x2[2])), ≥)∧[(-1)Bound*bni_23] + [(-1)bni_23]x2[0] + [bni_23]x3[0] ≥ 0∧[2 + (-1)bso_27] + [-1]x2[0] + x3[0] + [-1]max{x3[0] + [-1]x2[0], [-1]x3[0] + x2[0]} ≥ 0)



    We simplified constraint (4) using rule (POLY_REMOVE_MIN_MAX) which results in the following new constraint:

    (5)    (x3[0] + [-1]x2[0] ≥ 0∧[2]x3[0] + [-2]x2[0] ≥ 0∧[-1] + x3[0] ≥ 0∧x0[0] + [-1]x3[0] ≥ 0 ⇒ (UIncreasing(1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[2])), -(+(x2[2], /(-(x3[2], x2[2]), 2)), 1), x2[2])), ≥)∧[(-1)Bound*bni_23] + [(-1)bni_23]x2[0] + [bni_23]x3[0] ≥ 0∧[2 + (-1)bso_27] ≥ 0)



    We simplified constraint (5) using rule (IDP_SMT_SPLIT) which results in the following new constraint:

    (6)    (x3[0] ≥ 0∧[2]x3[0] ≥ 0∧x2[0] + [-1] + x3[0] ≥ 0∧x0[0] + [-1]x2[0] + [-1]x3[0] ≥ 0 ⇒ (UIncreasing(1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[2])), -(+(x2[2], /(-(x3[2], x2[2]), 2)), 1), x2[2])), ≥)∧[(-1)Bound*bni_23] + [bni_23]x3[0] ≥ 0∧[2 + (-1)bso_27] ≥ 0)



    We simplified constraint (6) using rule (IDP_SMT_SPLIT) which results in the following new constraint:

    (7)    (x3[0] ≥ 0∧[2]x3[0] ≥ 0∧x0[0] + [-1] + [-1]x2[0] ≥ 0∧x2[0] ≥ 0 ⇒ (UIncreasing(1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[2])), -(+(x2[2], /(-(x3[2], x2[2]), 2)), 1), x2[2])), ≥)∧[(-1)Bound*bni_23] + [bni_23]x3[0] ≥ 0∧[2 + (-1)bso_27] ≥ 0)



    We simplified constraint (7) using rule (IDP_SMT_SPLIT) which results in the following new constraint:

    (8)    (x3[0] ≥ 0∧[2]x3[0] ≥ 0∧x0[0] ≥ 0∧x2[0] ≥ 0 ⇒ (UIncreasing(1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[2])), -(+(x2[2], /(-(x3[2], x2[2]), 2)), 1), x2[2])), ≥)∧[(-1)Bound*bni_23] + [bni_23]x3[0] ≥ 0∧[2 + (-1)bso_27] ≥ 0)



    We simplified constraint (8) using rule (IDP_POLY_GCD) which results in the following new constraint:

    (9)    (x3[0] ≥ 0∧x0[0] ≥ 0∧x2[0] ≥ 0∧x3[0] ≥ 0 ⇒ (UIncreasing(1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[2])), -(+(x2[2], /(-(x3[2], x2[2]), 2)), 1), x2[2])), ≥)∧[(-1)Bound*bni_23] + [bni_23]x3[0] ≥ 0∧[2 + (-1)bso_27] ≥ 0)







For Pair 1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[0])), x3[0], x2[0]) → COND_1869_0_BINARYSEARCH_LOAD(&&(&&(>=(x3[0], x2[0]), >(x0[0], +(x2[0], /(-(x3[0], x2[0]), 2)))), <=(0, +(x2[0], /(-(x3[0], x2[0]), 2)))), java.lang.Object(ARRAY(x0[0])), x3[0], x2[0]) the following chains were created:
  • We consider the chain 1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[0])), x3[0], x2[0]) → COND_1869_0_BINARYSEARCH_LOAD(&&(&&(>=(x3[0], x2[0]), >(x0[0], +(x2[0], /(-(x3[0], x2[0]), 2)))), <=(0, +(x2[0], /(-(x3[0], x2[0]), 2)))), java.lang.Object(ARRAY(x0[0])), x3[0], x2[0]), COND_1869_0_BINARYSEARCH_LOAD(TRUE, java.lang.Object(ARRAY(x0[2])), x3[2], x2[2]) → 1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[2])), -(+(x2[2], /(-(x3[2], x2[2]), 2)), 1), x2[2]) which results in the following constraint:

    (10)    (&&(&&(>=(x3[0], x2[0]), >(x0[0], +(x2[0], /(-(x3[0], x2[0]), 2)))), <=(0, +(x2[0], /(-(x3[0], x2[0]), 2))))=TRUEjava.lang.Object(ARRAY(x0[0]))=java.lang.Object(ARRAY(x0[2]))∧x3[0]=x3[2]x2[0]=x2[2]1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[0])), x3[0], x2[0])≥NonInfC∧1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[0])), x3[0], x2[0])≥COND_1869_0_BINARYSEARCH_LOAD(&&(&&(>=(x3[0], x2[0]), >(x0[0], +(x2[0], /(-(x3[0], x2[0]), 2)))), <=(0, +(x2[0], /(-(x3[0], x2[0]), 2)))), java.lang.Object(ARRAY(x0[0])), x3[0], x2[0])∧(UIncreasing(COND_1869_0_BINARYSEARCH_LOAD(&&(&&(>=(x3[0], x2[0]), >(x0[0], +(x2[0], /(-(x3[0], x2[0]), 2)))), <=(0, +(x2[0], /(-(x3[0], x2[0]), 2)))), java.lang.Object(ARRAY(x0[0])), x3[0], x2[0])), ≥))



    We simplified constraint (10) using rules (I), (II), (IV), (IDP_BOOLEAN) which results in the following new constraint:

    (11)    (<=(0, +(x2[0], /(-(x3[0], x2[0]), 2)))=TRUE>=(x3[0], x2[0])=TRUE>(x0[0], +(x2[0], /(-(x3[0], x2[0]), 2)))=TRUE1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[0])), x3[0], x2[0])≥NonInfC∧1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[0])), x3[0], x2[0])≥COND_1869_0_BINARYSEARCH_LOAD(&&(&&(>=(x3[0], x2[0]), >(x0[0], +(x2[0], /(-(x3[0], x2[0]), 2)))), <=(0, +(x2[0], /(-(x3[0], x2[0]), 2)))), java.lang.Object(ARRAY(x0[0])), x3[0], x2[0])∧(UIncreasing(COND_1869_0_BINARYSEARCH_LOAD(&&(&&(>=(x3[0], x2[0]), >(x0[0], +(x2[0], /(-(x3[0], x2[0]), 2)))), <=(0, +(x2[0], /(-(x3[0], x2[0]), 2)))), java.lang.Object(ARRAY(x0[0])), x3[0], x2[0])), ≥))



    We simplified constraint (11) using rule (POLY_CONSTRAINTS) which results in the following new constraint:

    (12)    (x2[0] + [-1] + max{x3[0] + [-1]x2[0], [-1]x3[0] + x2[0]} ≥ 0∧x3[0] + [-1]x2[0] ≥ 0∧x0[0] + [-1]x2[0] + [-1]max{x3[0] + [-1]x2[0], [-1]x3[0] + x2[0]} ≥ 0 ⇒ (UIncreasing(COND_1869_0_BINARYSEARCH_LOAD(&&(&&(>=(x3[0], x2[0]), >(x0[0], +(x2[0], /(-(x3[0], x2[0]), 2)))), <=(0, +(x2[0], /(-(x3[0], x2[0]), 2)))), java.lang.Object(ARRAY(x0[0])), x3[0], x2[0])), ≥)∧[(-1)Bound*bni_28] + [(-1)bni_28]x2[0] + [bni_28]x3[0] ≥ 0∧[(-1)bso_29] ≥ 0)



    We simplified constraint (12) using rule (IDP_POLY_SIMPLIFY) which results in the following new constraint:

    (13)    (x2[0] + [-1] + max{x3[0] + [-1]x2[0], [-1]x3[0] + x2[0]} ≥ 0∧x3[0] + [-1]x2[0] ≥ 0∧x0[0] + [-1]x2[0] + [-1]max{x3[0] + [-1]x2[0], [-1]x3[0] + x2[0]} ≥ 0 ⇒ (UIncreasing(COND_1869_0_BINARYSEARCH_LOAD(&&(&&(>=(x3[0], x2[0]), >(x0[0], +(x2[0], /(-(x3[0], x2[0]), 2)))), <=(0, +(x2[0], /(-(x3[0], x2[0]), 2)))), java.lang.Object(ARRAY(x0[0])), x3[0], x2[0])), ≥)∧[(-1)Bound*bni_28] + [(-1)bni_28]x2[0] + [bni_28]x3[0] ≥ 0∧[(-1)bso_29] ≥ 0)



    We simplified constraint (13) using rule (POLY_REMOVE_MIN_MAX) which results in the following new constraint:

    (14)    (x3[0] + [-1]x2[0] ≥ 0∧[2]x3[0] + [-2]x2[0] ≥ 0∧[-1] + x3[0] ≥ 0∧x0[0] + [-1]x3[0] ≥ 0 ⇒ (UIncreasing(COND_1869_0_BINARYSEARCH_LOAD(&&(&&(>=(x3[0], x2[0]), >(x0[0], +(x2[0], /(-(x3[0], x2[0]), 2)))), <=(0, +(x2[0], /(-(x3[0], x2[0]), 2)))), java.lang.Object(ARRAY(x0[0])), x3[0], x2[0])), ≥)∧[(-1)Bound*bni_28] + [(-1)bni_28]x2[0] + [bni_28]x3[0] ≥ 0∧[(-1)bso_29] ≥ 0)



    We simplified constraint (14) using rule (IDP_SMT_SPLIT) which results in the following new constraint:

    (15)    (x3[0] ≥ 0∧[2]x3[0] ≥ 0∧x2[0] + [-1] + x3[0] ≥ 0∧x0[0] + [-1]x2[0] + [-1]x3[0] ≥ 0 ⇒ (UIncreasing(COND_1869_0_BINARYSEARCH_LOAD(&&(&&(>=(x3[0], x2[0]), >(x0[0], +(x2[0], /(-(x3[0], x2[0]), 2)))), <=(0, +(x2[0], /(-(x3[0], x2[0]), 2)))), java.lang.Object(ARRAY(x0[0])), x3[0], x2[0])), ≥)∧[(-1)Bound*bni_28] + [bni_28]x3[0] ≥ 0∧[(-1)bso_29] ≥ 0)



    We simplified constraint (15) using rule (IDP_SMT_SPLIT) which results in the following new constraint:

    (16)    (x3[0] ≥ 0∧[2]x3[0] ≥ 0∧x0[0] + [-1] + [-1]x2[0] ≥ 0∧x2[0] ≥ 0 ⇒ (UIncreasing(COND_1869_0_BINARYSEARCH_LOAD(&&(&&(>=(x3[0], x2[0]), >(x0[0], +(x2[0], /(-(x3[0], x2[0]), 2)))), <=(0, +(x2[0], /(-(x3[0], x2[0]), 2)))), java.lang.Object(ARRAY(x0[0])), x3[0], x2[0])), ≥)∧[(-1)Bound*bni_28] + [bni_28]x3[0] ≥ 0∧[(-1)bso_29] ≥ 0)



    We simplified constraint (16) using rule (IDP_SMT_SPLIT) which results in the following new constraint:

    (17)    (x3[0] ≥ 0∧[2]x3[0] ≥ 0∧x0[0] ≥ 0∧x2[0] ≥ 0 ⇒ (UIncreasing(COND_1869_0_BINARYSEARCH_LOAD(&&(&&(>=(x3[0], x2[0]), >(x0[0], +(x2[0], /(-(x3[0], x2[0]), 2)))), <=(0, +(x2[0], /(-(x3[0], x2[0]), 2)))), java.lang.Object(ARRAY(x0[0])), x3[0], x2[0])), ≥)∧[(-1)Bound*bni_28] + [bni_28]x3[0] ≥ 0∧[(-1)bso_29] ≥ 0)



    We simplified constraint (17) using rule (IDP_POLY_GCD) which results in the following new constraint:

    (18)    (x3[0] ≥ 0∧x0[0] ≥ 0∧x2[0] ≥ 0∧x3[0] ≥ 0 ⇒ (UIncreasing(COND_1869_0_BINARYSEARCH_LOAD(&&(&&(>=(x3[0], x2[0]), >(x0[0], +(x2[0], /(-(x3[0], x2[0]), 2)))), <=(0, +(x2[0], /(-(x3[0], x2[0]), 2)))), java.lang.Object(ARRAY(x0[0])), x3[0], x2[0])), ≥)∧[(-1)Bound*bni_28] + [bni_28]x3[0] ≥ 0∧[(-1)bso_29] ≥ 0)







To summarize, we get the following constraints P for the following pairs.
  • COND_1869_0_BINARYSEARCH_LOAD(TRUE, java.lang.Object(ARRAY(x0[2])), x3[2], x2[2]) → 1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[2])), -(+(x2[2], /(-(x3[2], x2[2]), 2)), 1), x2[2])
    • (x3[0] ≥ 0∧x0[0] ≥ 0∧x2[0] ≥ 0∧x3[0] ≥ 0 ⇒ (UIncreasing(1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[2])), -(+(x2[2], /(-(x3[2], x2[2]), 2)), 1), x2[2])), ≥)∧[(-1)Bound*bni_23] + [bni_23]x3[0] ≥ 0∧[2 + (-1)bso_27] ≥ 0)

  • 1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[0])), x3[0], x2[0]) → COND_1869_0_BINARYSEARCH_LOAD(&&(&&(>=(x3[0], x2[0]), >(x0[0], +(x2[0], /(-(x3[0], x2[0]), 2)))), <=(0, +(x2[0], /(-(x3[0], x2[0]), 2)))), java.lang.Object(ARRAY(x0[0])), x3[0], x2[0])
    • (x3[0] ≥ 0∧x0[0] ≥ 0∧x2[0] ≥ 0∧x3[0] ≥ 0 ⇒ (UIncreasing(COND_1869_0_BINARYSEARCH_LOAD(&&(&&(>=(x3[0], x2[0]), >(x0[0], +(x2[0], /(-(x3[0], x2[0]), 2)))), <=(0, +(x2[0], /(-(x3[0], x2[0]), 2)))), java.lang.Object(ARRAY(x0[0])), x3[0], x2[0])), ≥)∧[(-1)Bound*bni_28] + [bni_28]x3[0] ≥ 0∧[(-1)bso_29] ≥ 0)




The constraints for P> respective Pbound 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 Pbound.
Using the following integer polynomial ordering the resulting constraints can be solved
Polynomial interpretation over integers[POLO]:

POL(TRUE) = [2]   
POL(FALSE) = [3]   
POL(COND_1869_0_BINARYSEARCH_LOAD(x1, x2, x3, x4)) = [2] + [-1]x4 + x3 + [-1]x2 + [-1]x1   
POL(java.lang.Object(x1)) = [-1] + [-1]x1   
POL(ARRAY(x1)) = [-1]   
POL(1869_0_BINARYSEARCH_LOAD(x1, x2, x3)) = [-1]x3 + x2 + [-1]x1   
POL(-(x1, x2)) = x1 + [-1]x2   
POL(+(x1, x2)) = x1 + x2   
POL(2) = [2]   
POL(1) = [1]   
POL(&&(x1, x2)) = [2]   
POL(>=(x1, x2)) = [-1]   
POL(>(x1, x2)) = [-1]   
POL(<=(x1, x2)) = [-1]   
POL(0) = 0   

Polynomial Interpretations with Context Sensitive Arithemetic Replacement
POL(TermCSAR-Mode @ Context)

POL(/(x1, 2)1 @ {+_2/1}) = max{x1, [-1]x1} + [-1]   
POL(/(x1, 2)-1 @ {+_2/1}) = max{x1, [-1]x1} + [-1]   
POL(/(x1, 2)1 @ {1869_0_BINARYSEARCH_LOAD_3/1, -_2/0, +_2/1}) = max{x1, [-1]x1} + [-1]   

The following pairs are in P>:

COND_1869_0_BINARYSEARCH_LOAD(TRUE, java.lang.Object(ARRAY(x0[2])), x3[2], x2[2]) → 1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[2])), -(+(x2[2], /(-(x3[2], x2[2]), 2)), 1), x2[2])

The following pairs are in Pbound:

COND_1869_0_BINARYSEARCH_LOAD(TRUE, java.lang.Object(ARRAY(x0[2])), x3[2], x2[2]) → 1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[2])), -(+(x2[2], /(-(x3[2], x2[2]), 2)), 1), x2[2])
1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[0])), x3[0], x2[0]) → COND_1869_0_BINARYSEARCH_LOAD(&&(&&(>=(x3[0], x2[0]), >(x0[0], +(x2[0], /(-(x3[0], x2[0]), 2)))), <=(0, +(x2[0], /(-(x3[0], x2[0]), 2)))), java.lang.Object(ARRAY(x0[0])), x3[0], x2[0])

The following pairs are in P:

1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[0])), x3[0], x2[0]) → COND_1869_0_BINARYSEARCH_LOAD(&&(&&(>=(x3[0], x2[0]), >(x0[0], +(x2[0], /(-(x3[0], x2[0]), 2)))), <=(0, +(x2[0], /(-(x3[0], x2[0]), 2)))), java.lang.Object(ARRAY(x0[0])), x3[0], x2[0])

At least the following rules have been oriented under context sensitive arithmetic replacement:

/1
&&(TRUE, TRUE)1TRUE1
FALSE1&&(TRUE, FALSE)1
FALSE1&&(FALSE, TRUE)1
FALSE1&&(FALSE, FALSE)1

(25) 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:

Boolean, Integer


R is empty.

The integer pair graph contains the following rules and edges:
(0): 1869_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[0])), x3[0], x2[0]) → COND_1869_0_BINARYSEARCH_LOAD(x3[0] >= x2[0] && x0[0] > x2[0] + x3[0] - x2[0] / 2 && 0 <= x2[0] + x3[0] - x2[0] / 2, java.lang.Object(ARRAY(x0[0])), x3[0], x2[0])


The set Q consists of the following terms:
1975_1_binarySearch_InvokeMethod(2394_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x2, x3), x4, x5, java.lang.Object(ARRAY(x0)))
1975_1_binarySearch_InvokeMethod(2465_0_binarySearch_InvokeMethod(x0, x1, java.lang.Object(ARRAY(x2)), x3, x4, x5), x6, x7, java.lang.Object(ARRAY(x2)))
1975_1_binarySearch_InvokeMethod(2084_0_binarySearch_ArrayAccess(x0, x1, x2, java.lang.Object(ARRAY(x3)), x4), x5, x6, java.lang.Object(ARRAY(x3)))
2337_1_binarySearch_InvokeMethod(2394_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x2, x3))
2337_1_binarySearch_InvokeMethod(1880_0_binarySearch_Return(java.lang.Object(ARRAY(x0))))
2337_1_binarySearch_InvokeMethod(2465_0_binarySearch_InvokeMethod(x0, x1, java.lang.Object(ARRAY(x2)), x3, x4, x5))
2337_1_binarySearch_InvokeMethod(2084_0_binarySearch_ArrayAccess(x0, x1, x2, java.lang.Object(ARRAY(x3)), x4))
2337_1_binarySearch_InvokeMethod(1942_0_binarySearch_Return(java.lang.Object(ARRAY(x0)), x1, x2, x3, x4))
2337_1_binarySearch_InvokeMethod(2385_0_binarySearch_Return)
2337_1_binarySearch_InvokeMethod(2473_0_binarySearch_Return(x0))

(26) IDependencyGraphProof (EQUIVALENT transformation)

The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 0 SCCs with 1 less node.

(27) TRUE

(28) Obligation:

SCC of termination graph based on JBC Program.
SCC contains nodes from the following methods: BinarySearch.BinarySearch.createArray()[I
SCC calls the following helper methods:
Performed SCC analyses: UsedFieldsAnalysis

(29) SCCToIDPv1Proof (SOUND transformation)

Transformed FIGraph SCCs to IDPs. Log:

Generated 30 rules for P and 0 rules for R.


P rules:
1231_0_createArray_Load(EOS(STATIC_1231), java.lang.Object(ARRAY(i77)), i314, i314) → 1238_0_createArray_ArrayLength(EOS(STATIC_1238), java.lang.Object(ARRAY(i77)), i314, i314, java.lang.Object(ARRAY(i77)))
1238_0_createArray_ArrayLength(EOS(STATIC_1238), java.lang.Object(ARRAY(i77)), i314, i314, java.lang.Object(ARRAY(i77))) → 1243_0_createArray_GE(EOS(STATIC_1243), java.lang.Object(ARRAY(i77)), i314, i314, i77) | >=(i77, 0)
1243_0_createArray_GE(EOS(STATIC_1243), java.lang.Object(ARRAY(i77)), i314, i314, i77) → 1252_0_createArray_GE(EOS(STATIC_1252), java.lang.Object(ARRAY(i77)), i314, i314, i77)
1252_0_createArray_GE(EOS(STATIC_1252), java.lang.Object(ARRAY(i77)), i314, i314, i77) → 1264_0_createArray_Load(EOS(STATIC_1264), java.lang.Object(ARRAY(i77)), i314) | <(i314, i77)
1264_0_createArray_Load(EOS(STATIC_1264), java.lang.Object(ARRAY(i77)), i314) → 1272_0_createArray_Load(EOS(STATIC_1272), java.lang.Object(ARRAY(i77)), i314, java.lang.Object(ARRAY(i77)))
1272_0_createArray_Load(EOS(STATIC_1272), java.lang.Object(ARRAY(i77)), i314, java.lang.Object(ARRAY(i77))) → 1280_0_createArray_InvokeMethod(EOS(STATIC_1280), java.lang.Object(ARRAY(i77)), i314, java.lang.Object(ARRAY(i77)), i314)
1280_0_createArray_InvokeMethod(EOS(STATIC_1280), java.lang.Object(ARRAY(i77)), i314, java.lang.Object(ARRAY(i77)), i314) → 1290_0_random_FieldAccess(EOS(STATIC_1290), java.lang.Object(ARRAY(i77)), i314, java.lang.Object(ARRAY(i77)), i314)
1290_0_random_FieldAccess(EOS(STATIC_1290), java.lang.Object(ARRAY(i77)), i314, java.lang.Object(ARRAY(i77)), i314) → 1307_0_random_FieldAccess(EOS(STATIC_1307), java.lang.Object(ARRAY(i77)), i314, java.lang.Object(ARRAY(i77)), i314, java.lang.Object(ARRAY(i75)))
1307_0_random_FieldAccess(EOS(STATIC_1307), java.lang.Object(ARRAY(i77)), i314, java.lang.Object(ARRAY(i77)), i314, java.lang.Object(ARRAY(i75))) → 1317_0_random_ArrayAccess(EOS(STATIC_1317), java.lang.Object(ARRAY(i77)), i314, java.lang.Object(ARRAY(i77)), i314, java.lang.Object(ARRAY(i75)), i313)
1317_0_random_ArrayAccess(EOS(STATIC_1317), java.lang.Object(ARRAY(i77)), i314, java.lang.Object(ARRAY(i77)), i314, java.lang.Object(ARRAY(i75)), i313) → 1325_0_random_ArrayAccess(EOS(STATIC_1325), java.lang.Object(ARRAY(i77)), i314, java.lang.Object(ARRAY(i77)), i314, java.lang.Object(ARRAY(i75)), i313)
1325_0_random_ArrayAccess(EOS(STATIC_1325), java.lang.Object(ARRAY(i77)), i314, java.lang.Object(ARRAY(i77)), i314, java.lang.Object(ARRAY(i75)), i313) → 1334_0_random_Store(EOS(STATIC_1334), java.lang.Object(ARRAY(i77)), i314, java.lang.Object(ARRAY(i77)), i314, o381) | <(i313, i75)
1334_0_random_Store(EOS(STATIC_1334), java.lang.Object(ARRAY(i77)), i314, java.lang.Object(ARRAY(i77)), i314, o381) → 1344_0_random_FieldAccess(EOS(STATIC_1344), java.lang.Object(ARRAY(i77)), i314, java.lang.Object(ARRAY(i77)), i314, o381)
1344_0_random_FieldAccess(EOS(STATIC_1344), java.lang.Object(ARRAY(i77)), i314, java.lang.Object(ARRAY(i77)), i314, o381) → 1351_0_random_ConstantStackPush(EOS(STATIC_1351), java.lang.Object(ARRAY(i77)), i314, java.lang.Object(ARRAY(i77)), i314, o381, i313)
1351_0_random_ConstantStackPush(EOS(STATIC_1351), java.lang.Object(ARRAY(i77)), i314, java.lang.Object(ARRAY(i77)), i314, o381, i313) → 1358_0_random_IntArithmetic(EOS(STATIC_1358), java.lang.Object(ARRAY(i77)), i314, java.lang.Object(ARRAY(i77)), i314, o381, i313, 1)
1358_0_random_IntArithmetic(EOS(STATIC_1358), java.lang.Object(ARRAY(i77)), i314, java.lang.Object(ARRAY(i77)), i314, o381, i313, matching1) → 1364_0_random_FieldAccess(EOS(STATIC_1364), java.lang.Object(ARRAY(i77)), i314, java.lang.Object(ARRAY(i77)), i314, o381, +(i313, 1)) | &&(>(i313, 0), =(matching1, 1))
1364_0_random_FieldAccess(EOS(STATIC_1364), java.lang.Object(ARRAY(i77)), i314, java.lang.Object(ARRAY(i77)), i314, o381, i329) → 1371_0_random_Load(EOS(STATIC_1371), java.lang.Object(ARRAY(i77)), i314, java.lang.Object(ARRAY(i77)), i314, o381)
1371_0_random_Load(EOS(STATIC_1371), java.lang.Object(ARRAY(i77)), i314, java.lang.Object(ARRAY(i77)), i314, o381) → 1381_0_random_InvokeMethod(EOS(STATIC_1381), java.lang.Object(ARRAY(i77)), i314, java.lang.Object(ARRAY(i77)), i314, o381)
1381_0_random_InvokeMethod(EOS(STATIC_1381), java.lang.Object(ARRAY(i77)), i314, java.lang.Object(ARRAY(i77)), i314, java.lang.Object(o411sub)) → 1387_0_random_InvokeMethod(EOS(STATIC_1387), java.lang.Object(ARRAY(i77)), i314, java.lang.Object(ARRAY(i77)), i314, java.lang.Object(o411sub))
1387_0_random_InvokeMethod(EOS(STATIC_1387), java.lang.Object(ARRAY(i77)), i314, java.lang.Object(ARRAY(i77)), i314, java.lang.Object(o411sub)) → 1391_0_length_Load(EOS(STATIC_1391), java.lang.Object(ARRAY(i77)), i314, java.lang.Object(ARRAY(i77)), i314, java.lang.Object(o411sub), java.lang.Object(o411sub))
1391_0_length_Load(EOS(STATIC_1391), java.lang.Object(ARRAY(i77)), i314, java.lang.Object(ARRAY(i77)), i314, java.lang.Object(o411sub), java.lang.Object(o411sub)) → 1404_0_length_FieldAccess(EOS(STATIC_1404), java.lang.Object(ARRAY(i77)), i314, java.lang.Object(ARRAY(i77)), i314, java.lang.Object(o411sub), java.lang.Object(o411sub))
1404_0_length_FieldAccess(EOS(STATIC_1404), java.lang.Object(ARRAY(i77)), i314, java.lang.Object(ARRAY(i77)), i314, java.lang.Object(java.lang.String(o420sub, i361)), java.lang.Object(java.lang.String(o420sub, i361))) → 1408_0_length_FieldAccess(EOS(STATIC_1408), java.lang.Object(ARRAY(i77)), i314, java.lang.Object(ARRAY(i77)), i314, java.lang.Object(java.lang.String(o420sub, i361)), java.lang.Object(java.lang.String(o420sub, i361))) | &&(>=(i361, 0), >=(i362, 0))
1408_0_length_FieldAccess(EOS(STATIC_1408), java.lang.Object(ARRAY(i77)), i314, java.lang.Object(ARRAY(i77)), i314, java.lang.Object(java.lang.String(o420sub, i361)), java.lang.Object(java.lang.String(o420sub, i361))) → 1418_0_length_Return(EOS(STATIC_1418), java.lang.Object(ARRAY(i77)), i314, java.lang.Object(ARRAY(i77)), i314, java.lang.Object(java.lang.String(o420sub, i361)))
1418_0_length_Return(EOS(STATIC_1418), java.lang.Object(ARRAY(i77)), i314, java.lang.Object(ARRAY(i77)), i314, java.lang.Object(java.lang.String(o420sub, i361))) → 1426_0_random_Return(EOS(STATIC_1426), java.lang.Object(ARRAY(i77)), i314, java.lang.Object(ARRAY(i77)), i314)
1426_0_random_Return(EOS(STATIC_1426), java.lang.Object(ARRAY(i77)), i314, java.lang.Object(ARRAY(i77)), i314) → 1432_0_createArray_ArrayAccess(EOS(STATIC_1432), java.lang.Object(ARRAY(i77)), i314, java.lang.Object(ARRAY(i77)), i314)
1432_0_createArray_ArrayAccess(EOS(STATIC_1432), java.lang.Object(ARRAY(i77)), i314, java.lang.Object(ARRAY(i77)), i314) → 1442_0_createArray_ArrayAccess(EOS(STATIC_1442), java.lang.Object(ARRAY(i77)), i314, java.lang.Object(ARRAY(i77)), i314)
1442_0_createArray_ArrayAccess(EOS(STATIC_1442), java.lang.Object(ARRAY(i77)), i314, java.lang.Object(ARRAY(i77)), i314) → 1455_0_createArray_Inc(EOS(STATIC_1455), java.lang.Object(ARRAY(i77)), i314) | <(i314, i77)
1455_0_createArray_Inc(EOS(STATIC_1455), java.lang.Object(ARRAY(i77)), i314) → 1467_0_createArray_JMP(EOS(STATIC_1467), java.lang.Object(ARRAY(i77)), +(i314, 1)) | >=(i314, 0)
1467_0_createArray_JMP(EOS(STATIC_1467), java.lang.Object(ARRAY(i77)), i376) → 1478_0_createArray_Load(EOS(STATIC_1478), java.lang.Object(ARRAY(i77)), i376)
1478_0_createArray_Load(EOS(STATIC_1478), java.lang.Object(ARRAY(i77)), i376) → 1221_0_createArray_Load(EOS(STATIC_1221), java.lang.Object(ARRAY(i77)), i376)
1221_0_createArray_Load(EOS(STATIC_1221), java.lang.Object(ARRAY(i77)), i314) → 1231_0_createArray_Load(EOS(STATIC_1231), java.lang.Object(ARRAY(i77)), i314, i314)
R rules:

Combined rules. Obtained 1 conditional rules for P and 0 conditional rules for R.


P rules:
1231_0_createArray_Load(EOS(STATIC_1231), java.lang.Object(ARRAY(x0)), x1, x1) → 1231_0_createArray_Load(EOS(STATIC_1231), java.lang.Object(ARRAY(x0)), +(x1, 1), +(x1, 1)) | &&(&&(>(+(x1, 1), 0), <(x1, x0)), >(+(x0, 1), 0))
R rules:

Filtered ground terms:



1231_0_createArray_Load(x1, x2, x3, x4) → 1231_0_createArray_Load(x2, x3, x4)
EOS(x1) → EOS
Cond_1231_0_createArray_Load(x1, x2, x3, x4, x5) → Cond_1231_0_createArray_Load(x1, x3, x4, x5)

Filtered duplicate args:



1231_0_createArray_Load(x1, x2, x3) → 1231_0_createArray_Load(x1, x3)
Cond_1231_0_createArray_Load(x1, x2, x3, x4) → Cond_1231_0_createArray_Load(x1, x2, x4)

Combined rules. Obtained 1 conditional rules for P and 0 conditional rules for R.


P rules:
1231_0_createArray_Load(java.lang.Object(ARRAY(x0)), x1) → 1231_0_createArray_Load(java.lang.Object(ARRAY(x0)), +(x1, 1)) | &&(&&(>(x1, -1), <(x1, x0)), >(x0, -1))
R rules:

Finished conversion. Obtained 2 rules for P and 0 rules for R. System has predefined symbols.


P rules:
1231_0_CREATEARRAY_LOAD(java.lang.Object(ARRAY(x0)), x1) → COND_1231_0_CREATEARRAY_LOAD(&&(&&(>(x1, -1), <(x1, x0)), >(x0, -1)), java.lang.Object(ARRAY(x0)), x1)
COND_1231_0_CREATEARRAY_LOAD(TRUE, java.lang.Object(ARRAY(x0)), x1) → 1231_0_CREATEARRAY_LOAD(java.lang.Object(ARRAY(x0)), +(x1, 1))
R rules:

(30) 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:

Boolean, Integer


R is empty.

The integer pair graph contains the following rules and edges:
(0): 1231_0_CREATEARRAY_LOAD(java.lang.Object(ARRAY(x0[0])), x1[0]) → COND_1231_0_CREATEARRAY_LOAD(x1[0] > -1 && x1[0] < x0[0] && x0[0] > -1, java.lang.Object(ARRAY(x0[0])), x1[0])
(1): COND_1231_0_CREATEARRAY_LOAD(TRUE, java.lang.Object(ARRAY(x0[1])), x1[1]) → 1231_0_CREATEARRAY_LOAD(java.lang.Object(ARRAY(x0[1])), x1[1] + 1)

(0) -> (1), if (x1[0] > -1 && x1[0] < x0[0] && x0[0] > -1java.lang.Object(ARRAY(x0[0])) →* java.lang.Object(ARRAY(x0[1]))∧x1[0]* x1[1])


(1) -> (0), if (java.lang.Object(ARRAY(x0[1])) →* java.lang.Object(ARRAY(x0[0]))∧x1[1] + 1* x1[0])



The set Q is empty.

(31) IDPNonInfProof (SOUND transformation)

Used the following options for this NonInfProof:
IDPGPoloSolver: Range: [(-1,2)] IsNat: false Interpretation Shape Heuristic: aprove.DPFramework.IDPProblem.Processors.nonInf.poly.IdpCand1ShapeHeuristic@7df6a4ec Constraint Generator: NonInfConstraintGenerator: PathGenerator: MetricPathGenerator: Max Left Steps: 0 Max Right Steps: 0

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 1231_0_CREATEARRAY_LOAD(java.lang.Object(ARRAY(x0)), x1) → COND_1231_0_CREATEARRAY_LOAD(&&(&&(>(x1, -1), <(x1, x0)), >(x0, -1)), java.lang.Object(ARRAY(x0)), x1) the following chains were created:
  • We consider the chain 1231_0_CREATEARRAY_LOAD(java.lang.Object(ARRAY(x0[0])), x1[0]) → COND_1231_0_CREATEARRAY_LOAD(&&(&&(>(x1[0], -1), <(x1[0], x0[0])), >(x0[0], -1)), java.lang.Object(ARRAY(x0[0])), x1[0]), COND_1231_0_CREATEARRAY_LOAD(TRUE, java.lang.Object(ARRAY(x0[1])), x1[1]) → 1231_0_CREATEARRAY_LOAD(java.lang.Object(ARRAY(x0[1])), +(x1[1], 1)) which results in the following constraint:

    (1)    (&&(&&(>(x1[0], -1), <(x1[0], x0[0])), >(x0[0], -1))=TRUEjava.lang.Object(ARRAY(x0[0]))=java.lang.Object(ARRAY(x0[1]))∧x1[0]=x1[1]1231_0_CREATEARRAY_LOAD(java.lang.Object(ARRAY(x0[0])), x1[0])≥NonInfC∧1231_0_CREATEARRAY_LOAD(java.lang.Object(ARRAY(x0[0])), x1[0])≥COND_1231_0_CREATEARRAY_LOAD(&&(&&(>(x1[0], -1), <(x1[0], x0[0])), >(x0[0], -1)), java.lang.Object(ARRAY(x0[0])), x1[0])∧(UIncreasing(COND_1231_0_CREATEARRAY_LOAD(&&(&&(>(x1[0], -1), <(x1[0], x0[0])), >(x0[0], -1)), java.lang.Object(ARRAY(x0[0])), x1[0])), ≥))



    We simplified constraint (1) using rules (I), (II), (IV), (IDP_BOOLEAN) which results in the following new constraint:

    (2)    (>(x0[0], -1)=TRUE>(x1[0], -1)=TRUE<(x1[0], x0[0])=TRUE1231_0_CREATEARRAY_LOAD(java.lang.Object(ARRAY(x0[0])), x1[0])≥NonInfC∧1231_0_CREATEARRAY_LOAD(java.lang.Object(ARRAY(x0[0])), x1[0])≥COND_1231_0_CREATEARRAY_LOAD(&&(&&(>(x1[0], -1), <(x1[0], x0[0])), >(x0[0], -1)), java.lang.Object(ARRAY(x0[0])), x1[0])∧(UIncreasing(COND_1231_0_CREATEARRAY_LOAD(&&(&&(>(x1[0], -1), <(x1[0], x0[0])), >(x0[0], -1)), java.lang.Object(ARRAY(x0[0])), x1[0])), ≥))



    We simplified constraint (2) using rule (POLY_CONSTRAINTS) which results in the following new constraint:

    (3)    (x0[0] ≥ 0∧x1[0] ≥ 0∧x0[0] + [-1] + [-1]x1[0] ≥ 0 ⇒ (UIncreasing(COND_1231_0_CREATEARRAY_LOAD(&&(&&(>(x1[0], -1), <(x1[0], x0[0])), >(x0[0], -1)), java.lang.Object(ARRAY(x0[0])), x1[0])), ≥)∧[(-1)bni_10 + (-1)Bound*bni_10] + [(-1)bni_10]x1[0] + [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] ≥ 0∧x1[0] ≥ 0∧x0[0] + [-1] + [-1]x1[0] ≥ 0 ⇒ (UIncreasing(COND_1231_0_CREATEARRAY_LOAD(&&(&&(>(x1[0], -1), <(x1[0], x0[0])), >(x0[0], -1)), java.lang.Object(ARRAY(x0[0])), x1[0])), ≥)∧[(-1)bni_10 + (-1)Bound*bni_10] + [(-1)bni_10]x1[0] + [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] ≥ 0∧x1[0] ≥ 0∧x0[0] + [-1] + [-1]x1[0] ≥ 0 ⇒ (UIncreasing(COND_1231_0_CREATEARRAY_LOAD(&&(&&(>(x1[0], -1), <(x1[0], x0[0])), >(x0[0], -1)), java.lang.Object(ARRAY(x0[0])), x1[0])), ≥)∧[(-1)bni_10 + (-1)Bound*bni_10] + [(-1)bni_10]x1[0] + [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)    ([1] + x1[0] + x0[0] ≥ 0∧x1[0] ≥ 0∧x0[0] ≥ 0 ⇒ (UIncreasing(COND_1231_0_CREATEARRAY_LOAD(&&(&&(>(x1[0], -1), <(x1[0], x0[0])), >(x0[0], -1)), java.lang.Object(ARRAY(x0[0])), x1[0])), ≥)∧[(-1)Bound*bni_10] + [bni_10]x0[0] ≥ 0∧[(-1)bso_11] ≥ 0)







For Pair COND_1231_0_CREATEARRAY_LOAD(TRUE, java.lang.Object(ARRAY(x0)), x1) → 1231_0_CREATEARRAY_LOAD(java.lang.Object(ARRAY(x0)), +(x1, 1)) the following chains were created:
  • We consider the chain COND_1231_0_CREATEARRAY_LOAD(TRUE, java.lang.Object(ARRAY(x0[1])), x1[1]) → 1231_0_CREATEARRAY_LOAD(java.lang.Object(ARRAY(x0[1])), +(x1[1], 1)) which results in the following constraint:

    (7)    (COND_1231_0_CREATEARRAY_LOAD(TRUE, java.lang.Object(ARRAY(x0[1])), x1[1])≥NonInfC∧COND_1231_0_CREATEARRAY_LOAD(TRUE, java.lang.Object(ARRAY(x0[1])), x1[1])≥1231_0_CREATEARRAY_LOAD(java.lang.Object(ARRAY(x0[1])), +(x1[1], 1))∧(UIncreasing(1231_0_CREATEARRAY_LOAD(java.lang.Object(ARRAY(x0[1])), +(x1[1], 1))), ≥))



    We simplified constraint (7) using rule (POLY_CONSTRAINTS) which results in the following new constraint:

    (8)    ((UIncreasing(1231_0_CREATEARRAY_LOAD(java.lang.Object(ARRAY(x0[1])), +(x1[1], 1))), ≥)∧[bni_12] = 0∧[1 + (-1)bso_13] ≥ 0)



    We simplified constraint (8) using rule (IDP_POLY_SIMPLIFY) which results in the following new constraint:

    (9)    ((UIncreasing(1231_0_CREATEARRAY_LOAD(java.lang.Object(ARRAY(x0[1])), +(x1[1], 1))), ≥)∧[bni_12] = 0∧[1 + (-1)bso_13] ≥ 0)



    We simplified constraint (9) using rule (POLY_REMOVE_MIN_MAX) which results in the following new constraint:

    (10)    ((UIncreasing(1231_0_CREATEARRAY_LOAD(java.lang.Object(ARRAY(x0[1])), +(x1[1], 1))), ≥)∧[bni_12] = 0∧[1 + (-1)bso_13] ≥ 0)



    We simplified constraint (10) using rule (IDP_UNRESTRICTED_VARS) which results in the following new constraint:

    (11)    ((UIncreasing(1231_0_CREATEARRAY_LOAD(java.lang.Object(ARRAY(x0[1])), +(x1[1], 1))), ≥)∧[bni_12] = 0∧0 = 0∧0 = 0∧[1 + (-1)bso_13] ≥ 0)







To summarize, we get the following constraints P for the following pairs.
  • 1231_0_CREATEARRAY_LOAD(java.lang.Object(ARRAY(x0)), x1) → COND_1231_0_CREATEARRAY_LOAD(&&(&&(>(x1, -1), <(x1, x0)), >(x0, -1)), java.lang.Object(ARRAY(x0)), x1)
    • ([1] + x1[0] + x0[0] ≥ 0∧x1[0] ≥ 0∧x0[0] ≥ 0 ⇒ (UIncreasing(COND_1231_0_CREATEARRAY_LOAD(&&(&&(>(x1[0], -1), <(x1[0], x0[0])), >(x0[0], -1)), java.lang.Object(ARRAY(x0[0])), x1[0])), ≥)∧[(-1)Bound*bni_10] + [bni_10]x0[0] ≥ 0∧[(-1)bso_11] ≥ 0)

  • COND_1231_0_CREATEARRAY_LOAD(TRUE, java.lang.Object(ARRAY(x0)), x1) → 1231_0_CREATEARRAY_LOAD(java.lang.Object(ARRAY(x0)), +(x1, 1))
    • ((UIncreasing(1231_0_CREATEARRAY_LOAD(java.lang.Object(ARRAY(x0[1])), +(x1[1], 1))), ≥)∧[bni_12] = 0∧0 = 0∧0 = 0∧[1 + (-1)bso_13] ≥ 0)




The constraints for P> respective Pbound 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 Pbound.
Using the following integer polynomial ordering the resulting constraints can be solved
Polynomial interpretation over integers[POLO]:

POL(TRUE) = 0   
POL(FALSE) = 0   
POL(1231_0_CREATEARRAY_LOAD(x1, x2)) = [-1] + [-1]x2 + x1   
POL(java.lang.Object(x1)) = x1   
POL(ARRAY(x1)) = x1   
POL(COND_1231_0_CREATEARRAY_LOAD(x1, x2, x3)) = [-1] + [-1]x3 + x2   
POL(&&(x1, x2)) = [-1]   
POL(>(x1, x2)) = [-1]   
POL(-1) = [-1]   
POL(<(x1, x2)) = [-1]   
POL(+(x1, x2)) = x1 + x2   
POL(1) = [1]   

The following pairs are in P>:

COND_1231_0_CREATEARRAY_LOAD(TRUE, java.lang.Object(ARRAY(x0[1])), x1[1]) → 1231_0_CREATEARRAY_LOAD(java.lang.Object(ARRAY(x0[1])), +(x1[1], 1))

The following pairs are in Pbound:

1231_0_CREATEARRAY_LOAD(java.lang.Object(ARRAY(x0[0])), x1[0]) → COND_1231_0_CREATEARRAY_LOAD(&&(&&(>(x1[0], -1), <(x1[0], x0[0])), >(x0[0], -1)), java.lang.Object(ARRAY(x0[0])), x1[0])

The following pairs are in P:

1231_0_CREATEARRAY_LOAD(java.lang.Object(ARRAY(x0[0])), x1[0]) → COND_1231_0_CREATEARRAY_LOAD(&&(&&(>(x1[0], -1), <(x1[0], x0[0])), >(x0[0], -1)), java.lang.Object(ARRAY(x0[0])), x1[0])

There are no usable rules.

(32) Complex Obligation (AND)

(33) 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:

Boolean, Integer


R is empty.

The integer pair graph contains the following rules and edges:
(0): 1231_0_CREATEARRAY_LOAD(java.lang.Object(ARRAY(x0[0])), x1[0]) → COND_1231_0_CREATEARRAY_LOAD(x1[0] > -1 && x1[0] < x0[0] && x0[0] > -1, java.lang.Object(ARRAY(x0[0])), x1[0])


The set Q is empty.

(34) IDependencyGraphProof (EQUIVALENT transformation)

The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 0 SCCs with 1 less node.

(35) TRUE

(36) 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


R is empty.

The integer pair graph contains the following rules and edges:
(1): COND_1231_0_CREATEARRAY_LOAD(TRUE, java.lang.Object(ARRAY(x0[1])), x1[1]) → 1231_0_CREATEARRAY_LOAD(java.lang.Object(ARRAY(x0[1])), x1[1] + 1)


The set Q is empty.

(37) IDependencyGraphProof (EQUIVALENT transformation)

The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 0 SCCs with 1 less node.

(38) TRUE