### (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.

### (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:
1905_0_binarySearch_Load(EOS(STATIC_1905), java.lang.Object(ARRAY(i540)), i541, i542, i543, i542) → 1906_0_binarySearch_LE(EOS(STATIC_1906), java.lang.Object(ARRAY(i540)), i541, i542, i543, i542, i543)
1906_0_binarySearch_LE(EOS(STATIC_1906), java.lang.Object(ARRAY(i540)), i541, i542, i543, i542, i543) → 1907_0_binarySearch_LE(EOS(STATIC_1907), java.lang.Object(ARRAY(i540)), i541, i542, i543, i542, i543)
1907_0_binarySearch_LE(EOS(STATIC_1907), java.lang.Object(ARRAY(i540)), i541, i542, i543, i542, i543) → 1909_0_binarySearch_Load(EOS(STATIC_1909), java.lang.Object(ARRAY(i540)), i541, i542, i543) | <=(i542, i543)
1909_0_binarySearch_Load(EOS(STATIC_1909), java.lang.Object(ARRAY(i540)), i541, i542, i543) → 1911_0_binarySearch_Load(EOS(STATIC_1911), java.lang.Object(ARRAY(i540)), i541, i542, i543, i542)
1911_0_binarySearch_Load(EOS(STATIC_1911), java.lang.Object(ARRAY(i540)), i541, i542, i543, i542) → 1914_0_binarySearch_Load(EOS(STATIC_1914), java.lang.Object(ARRAY(i540)), i541, i542, i543, i542, i543)
1914_0_binarySearch_Load(EOS(STATIC_1914), java.lang.Object(ARRAY(i540)), i541, i542, i543, i542, i543) → 1917_0_binarySearch_IntArithmetic(EOS(STATIC_1917), java.lang.Object(ARRAY(i540)), i541, i542, i543, i542, i543, i542)
1917_0_binarySearch_IntArithmetic(EOS(STATIC_1917), java.lang.Object(ARRAY(i540)), i541, i542, i543, i542, i543, i542) → 1923_0_binarySearch_ConstantStackPush(EOS(STATIC_1923), java.lang.Object(ARRAY(i540)), i541, i542, i543, i542, -(i543, i542))
1923_0_binarySearch_ConstantStackPush(EOS(STATIC_1923), java.lang.Object(ARRAY(i540)), i541, i542, i543, i542, i555) → 1925_0_binarySearch_IntArithmetic(EOS(STATIC_1925), java.lang.Object(ARRAY(i540)), i541, i542, i543, i542, i555, 2)
1925_0_binarySearch_IntArithmetic(EOS(STATIC_1925), java.lang.Object(ARRAY(i540)), i541, i542, i543, i542, i555, matching1) → 1929_0_binarySearch_IntArithmetic(EOS(STATIC_1929), java.lang.Object(ARRAY(i540)), i541, i542, i543, i542, /(i555, 2)) | =(matching1, 2)
1929_0_binarySearch_IntArithmetic(EOS(STATIC_1929), java.lang.Object(ARRAY(i540)), i541, i542, i543, i542, i558) → 1932_0_binarySearch_Store(EOS(STATIC_1932), java.lang.Object(ARRAY(i540)), i541, i542, i543, +(i542, i558))
1932_0_binarySearch_Store(EOS(STATIC_1932), java.lang.Object(ARRAY(i540)), i541, i542, i543, i561) → 1937_0_binarySearch_Load(EOS(STATIC_1937), java.lang.Object(ARRAY(i540)), i541, i542, i543, i561)
1937_0_binarySearch_Load(EOS(STATIC_1937), java.lang.Object(ARRAY(i540)), i541, i542, i543, i561) → 1940_0_binarySearch_Load(EOS(STATIC_1940), java.lang.Object(ARRAY(i540)), i541, i542, i543, i561, java.lang.Object(ARRAY(i540)))
1940_0_binarySearch_Load(EOS(STATIC_1940), java.lang.Object(ARRAY(i540)), i541, i542, i543, i561, java.lang.Object(ARRAY(i540))) → 1942_0_binarySearch_ArrayAccess(EOS(STATIC_1942), java.lang.Object(ARRAY(i540)), i541, i542, i543, i561, java.lang.Object(ARRAY(i540)), i561)
1942_0_binarySearch_ArrayAccess(EOS(STATIC_1942), java.lang.Object(ARRAY(i540)), i541, i542, i543, i568, java.lang.Object(ARRAY(i540)), i568) → 1945_0_binarySearch_ArrayAccess(EOS(STATIC_1945), java.lang.Object(ARRAY(i540)), i541, i542, i543, i568, java.lang.Object(ARRAY(i540)), i568)
1945_0_binarySearch_ArrayAccess(EOS(STATIC_1945), java.lang.Object(ARRAY(i540)), i541, i542, i543, i568, java.lang.Object(ARRAY(i540)), i568) → 1947_0_binarySearch_ArrayAccess(EOS(STATIC_1947), java.lang.Object(ARRAY(i540)), i541, i542, i543, i568, java.lang.Object(ARRAY(i540)), i568)
1947_0_binarySearch_ArrayAccess(EOS(STATIC_1947), java.lang.Object(ARRAY(i540)), i541, i542, i543, i568, java.lang.Object(ARRAY(i540)), i568) → 1950_0_binarySearch_Load(EOS(STATIC_1950), java.lang.Object(ARRAY(i540)), i541, i542, i543, i568, i569) | <(i568, i540)
1950_0_binarySearch_Load(EOS(STATIC_1950), java.lang.Object(ARRAY(i540)), i541, i542, i543, i568, i569) → 1955_0_binarySearch_NE(EOS(STATIC_1955), java.lang.Object(ARRAY(i540)), i541, i542, i543, i568, i569, i541)
1955_0_binarySearch_NE(EOS(STATIC_1955), java.lang.Object(ARRAY(i540)), i541, i542, i543, i568, i569, i541) → 1958_0_binarySearch_NE(EOS(STATIC_1958), java.lang.Object(ARRAY(i540)), i541, i542, i543, i568, i569, i541)
1958_0_binarySearch_NE(EOS(STATIC_1958), java.lang.Object(ARRAY(i540)), i541, i542, i543, i568, i569, i541) → 1964_0_binarySearch_Load(EOS(STATIC_1964), java.lang.Object(ARRAY(i540)), i541, i542, i543, i568) | !(=(i569, i541))
1964_0_binarySearch_Load(EOS(STATIC_1964), java.lang.Object(ARRAY(i540)), i541, i542, i543, i568) → 1970_0_binarySearch_Load(EOS(STATIC_1970), java.lang.Object(ARRAY(i540)), i541, i542, i543, i568, java.lang.Object(ARRAY(i540)))
1970_0_binarySearch_Load(EOS(STATIC_1970), java.lang.Object(ARRAY(i540)), i541, i542, i543, i568, java.lang.Object(ARRAY(i540))) → 1975_0_binarySearch_Load(EOS(STATIC_1975), java.lang.Object(ARRAY(i540)), i541, i542, i543, i568, java.lang.Object(ARRAY(i540)), i541)
1975_0_binarySearch_Load(EOS(STATIC_1975), java.lang.Object(ARRAY(i540)), i541, i542, i543, i568, java.lang.Object(ARRAY(i540)), i541) → 1981_0_binarySearch_Load(EOS(STATIC_1981), java.lang.Object(ARRAY(i540)), i541, i543, i568, java.lang.Object(ARRAY(i540)), i541, i542)
1981_0_binarySearch_Load(EOS(STATIC_1981), java.lang.Object(ARRAY(i540)), i541, i543, i568, java.lang.Object(ARRAY(i540)), i541, i542) → 1990_0_binarySearch_ConstantStackPush(EOS(STATIC_1990), java.lang.Object(ARRAY(i540)), i541, i543, i568, java.lang.Object(ARRAY(i540)), i541, i542, i568)
1990_0_binarySearch_ConstantStackPush(EOS(STATIC_1990), java.lang.Object(ARRAY(i540)), i541, i543, i568, java.lang.Object(ARRAY(i540)), i541, i542, i568) → 1996_0_binarySearch_IntArithmetic(EOS(STATIC_1996), java.lang.Object(ARRAY(i540)), i541, i543, i568, java.lang.Object(ARRAY(i540)), i541, i542, i568, 1)
1996_0_binarySearch_IntArithmetic(EOS(STATIC_1996), java.lang.Object(ARRAY(i540)), i541, i543, i568, java.lang.Object(ARRAY(i540)), i541, i542, i568, matching1) → 1999_0_binarySearch_InvokeMethod(EOS(STATIC_1999), java.lang.Object(ARRAY(i540)), i541, i543, i568, java.lang.Object(ARRAY(i540)), i541, i542, -(i568, 1)) | &&(>=(i568, 0), =(matching1, 1))
1999_0_binarySearch_InvokeMethod(EOS(STATIC_1999), java.lang.Object(ARRAY(i540)), i541, i543, i568, java.lang.Object(ARRAY(i540)), i541, i542, i580) → 2002_1_binarySearch_InvokeMethod(2002_0_binarySearch_Load(EOS(STATIC_2002), java.lang.Object(ARRAY(i540)), i541, i542, i580), java.lang.Object(ARRAY(i540)), i541, i543, i568, java.lang.Object(ARRAY(i540)), i541, i542, i580)
2002_1_binarySearch_InvokeMethod(1912_0_binarySearch_Return(EOS(STATIC_1912), java.lang.Object(ARRAY(i588)), i589, i590, i591, matching1), java.lang.Object(ARRAY(i588)), i589, i543, i568, java.lang.Object(ARRAY(i588)), i589, i590, i591) → 2022_0_binarySearch_Return(EOS(STATIC_2022), java.lang.Object(ARRAY(i588)), i589, i543, i568, java.lang.Object(ARRAY(i588)), i589, i590, i591, java.lang.Object(ARRAY(i588)), i589, i590, i591, 0) | =(matching1, 0)
2002_1_binarySearch_InvokeMethod(1972_0_binarySearch_Return(EOS(STATIC_1972), java.lang.Object(ARRAY(i601)), i602, i603, i604, i597, matching1), java.lang.Object(ARRAY(i601)), i602, i543, i568, java.lang.Object(ARRAY(i601)), i602, i603, i604) → 2023_0_binarySearch_Return(EOS(STATIC_2023), java.lang.Object(ARRAY(i601)), i602, i543, i568, java.lang.Object(ARRAY(i601)), i602, i603, i604, java.lang.Object(ARRAY(i601)), i602, i603, i604, i597, 1) | =(matching1, 1)
2002_1_binarySearch_InvokeMethod(2312_0_binarySearch_Return(EOS(STATIC_2312), java.lang.Object(ARRAY(i1099)), i1100, i1102, i1098, matching1), java.lang.Object(ARRAY(i1099)), i1100, i543, i568, java.lang.Object(ARRAY(i1099)), i1100, i1101, i1102) → 2341_0_binarySearch_Return(EOS(STATIC_2341), java.lang.Object(ARRAY(i1099)), i1100, i543, i568, java.lang.Object(ARRAY(i1099)), i1100, i1101, i1102, java.lang.Object(ARRAY(i1099)), i1100, i1102, i1098, 1) | =(matching1, 1)
2002_1_binarySearch_InvokeMethod(2394_0_binarySearch_Return(EOS(STATIC_2394), matching1), java.lang.Object(ARRAY(i1294)), i1295, i543, i568, java.lang.Object(ARRAY(i1294)), i1295, i1296, i1297) → 2449_0_binarySearch_Return(EOS(STATIC_2449), java.lang.Object(ARRAY(i1294)), i1295, i543, i568, java.lang.Object(ARRAY(i1294)), i1295, i1296, i1297, 0) | =(matching1, 0)
2002_1_binarySearch_InvokeMethod(2405_0_binarySearch_Return(EOS(STATIC_2405), matching1), java.lang.Object(ARRAY(i1330)), i1331, i543, i568, java.lang.Object(ARRAY(i1330)), i1331, i1332, i1333) → 2457_0_binarySearch_Return(EOS(STATIC_2457), java.lang.Object(ARRAY(i1330)), i1331, i543, i568, java.lang.Object(ARRAY(i1330)), i1331, i1332, i1333, 1) | =(matching1, 1)
2002_1_binarySearch_InvokeMethod(2481_0_binarySearch_Return(EOS(STATIC_2481), i1373), java.lang.Object(ARRAY(i1522)), i1523, i543, i568, java.lang.Object(ARRAY(i1522)), i1523, i1524, i1525) → 2555_0_binarySearch_Return(EOS(STATIC_2555), java.lang.Object(ARRAY(i1522)), i1523, i543, i568, java.lang.Object(ARRAY(i1522)), i1523, i1524, i1525, i1373)
1900_0_binarySearch_Load(EOS(STATIC_1900), java.lang.Object(ARRAY(i540)), i541, i542, i543) → 1905_0_binarySearch_Load(EOS(STATIC_1905), java.lang.Object(ARRAY(i540)), i541, i542, i543, i542)
2022_0_binarySearch_Return(EOS(STATIC_2022), java.lang.Object(ARRAY(i588)), i589, i543, i568, java.lang.Object(ARRAY(i588)), i589, i590, i591, java.lang.Object(ARRAY(i588)), i589, i590, i591, matching1) → 2028_0_binarySearch_EQ(EOS(STATIC_2028), java.lang.Object(ARRAY(i588)), i589, i543, i568, 0) | =(matching1, 0)
2028_0_binarySearch_EQ(EOS(STATIC_2028), java.lang.Object(ARRAY(i588)), i589, i543, i568, matching1) → 2282_0_binarySearch_EQ(EOS(STATIC_2282), java.lang.Object(ARRAY(i588)), i589, i543, i568, 0) | =(matching1, 0)
2282_0_binarySearch_EQ(EOS(STATIC_2282), java.lang.Object(ARRAY(i1019)), i1020, i543, i568, matching1) → 2297_0_binarySearch_EQ(EOS(STATIC_2297), java.lang.Object(ARRAY(i1019)), i1020, i543, i568, 0) | =(matching1, 0)
2297_0_binarySearch_EQ(EOS(STATIC_2297), java.lang.Object(ARRAY(i1019)), i1020, i543, i568, matching1) → 2303_0_binarySearch_Load(EOS(STATIC_2303), java.lang.Object(ARRAY(i1019)), i1020, i543, i568) | =(matching1, 0)
2317_0_binarySearch_Load(EOS(STATIC_2317), i543, i568, java.lang.Object(ARRAY(i1019)), i1020) → 2332_0_binarySearch_ConstantStackPush(EOS(STATIC_2332), i543, java.lang.Object(ARRAY(i1019)), i1020, i568)
2332_0_binarySearch_ConstantStackPush(EOS(STATIC_2332), i543, java.lang.Object(ARRAY(i1019)), i1020, i568) → 2342_0_binarySearch_IntArithmetic(EOS(STATIC_2342), i543, java.lang.Object(ARRAY(i1019)), i1020, i568, 1)
2342_0_binarySearch_IntArithmetic(EOS(STATIC_2342), i543, java.lang.Object(ARRAY(i1019)), i1020, i568, matching1) → 2343_0_binarySearch_Load(EOS(STATIC_2343), i543, java.lang.Object(ARRAY(i1019)), i1020, +(i568, 1)) | &&(>=(i568, 0), =(matching1, 1))
2343_0_binarySearch_Load(EOS(STATIC_2343), i543, java.lang.Object(ARRAY(i1019)), i1020, i1130) → 2344_0_binarySearch_InvokeMethod(EOS(STATIC_2344), java.lang.Object(ARRAY(i1019)), i1020, i1130, i543)
2344_0_binarySearch_InvokeMethod(EOS(STATIC_2344), java.lang.Object(ARRAY(i1019)), i1020, i1130, i543) → 2346_1_binarySearch_InvokeMethod(2346_0_binarySearch_Load(EOS(STATIC_2346), java.lang.Object(ARRAY(i1019)), i1020, i1130, i543), java.lang.Object(ARRAY(i1019)), i1020, i1130, i543)
2023_0_binarySearch_Return(EOS(STATIC_2023), java.lang.Object(ARRAY(i601)), i602, i543, i568, java.lang.Object(ARRAY(i601)), i602, i603, i604, java.lang.Object(ARRAY(i601)), i602, i603, i604, i597, matching1) → 2030_0_binarySearch_EQ(EOS(STATIC_2030), java.lang.Object(ARRAY(i601)), i602, i543, i568, 1) | =(matching1, 1)
2030_0_binarySearch_EQ(EOS(STATIC_2030), java.lang.Object(ARRAY(i601)), i602, i543, i568, matching1) → 2083_0_binarySearch_EQ(EOS(STATIC_2083), java.lang.Object(ARRAY(i601)), i602, i543, i568, 1) | =(matching1, 1)
2083_0_binarySearch_EQ(EOS(STATIC_2083), java.lang.Object(ARRAY(i619)), i620, i543, i568, matching1) → 2282_0_binarySearch_EQ(EOS(STATIC_2282), java.lang.Object(ARRAY(i619)), i620, i543, i568, 1) | =(matching1, 1)
2341_0_binarySearch_Return(EOS(STATIC_2341), java.lang.Object(ARRAY(i1099)), i1100, i543, i568, java.lang.Object(ARRAY(i1099)), i1100, i1101, i1102, java.lang.Object(ARRAY(i1099)), i1100, i1102, i1098, matching1) → 2074_0_binarySearch_Return(EOS(STATIC_2074), java.lang.Object(ARRAY(i1099)), i1100, i543, i568, java.lang.Object(ARRAY(i1099)), i1100, i1101, i1102, java.lang.Object(ARRAY(i1099)), i1100, i1102, i1098, 1) | =(matching1, 1)
2074_0_binarySearch_Return(EOS(STATIC_2074), java.lang.Object(ARRAY(i619)), i620, i543, i568, java.lang.Object(ARRAY(i619)), i620, i621, i622, java.lang.Object(ARRAY(i619)), i620, i622, i618, matching1) → 2083_0_binarySearch_EQ(EOS(STATIC_2083), java.lang.Object(ARRAY(i619)), i620, i543, i568, 1) | =(matching1, 1)
2449_0_binarySearch_Return(EOS(STATIC_2449), java.lang.Object(ARRAY(i1294)), i1295, i543, i568, java.lang.Object(ARRAY(i1294)), i1295, i1296, i1297, matching1) → 2255_0_binarySearch_Return(EOS(STATIC_2255), java.lang.Object(ARRAY(i1294)), i1295, i543, i568, java.lang.Object(ARRAY(i1294)), i1295, i1296, i1297, 0) | =(matching1, 0)
2255_0_binarySearch_Return(EOS(STATIC_2255), java.lang.Object(ARRAY(i911)), i912, i543, i568, java.lang.Object(ARRAY(i911)), i912, i913, i917, i916) → 2281_0_binarySearch_EQ(EOS(STATIC_2281), java.lang.Object(ARRAY(i911)), i912, i543, i568, i916)
2281_0_binarySearch_EQ(EOS(STATIC_2281), java.lang.Object(ARRAY(i911)), i912, i543, i568, i916) → 2282_0_binarySearch_EQ(EOS(STATIC_2282), java.lang.Object(ARRAY(i911)), i912, i543, i568, i916)
2457_0_binarySearch_Return(EOS(STATIC_2457), java.lang.Object(ARRAY(i1330)), i1331, i543, i568, java.lang.Object(ARRAY(i1330)), i1331, i1332, i1333, matching1) → 2255_0_binarySearch_Return(EOS(STATIC_2255), java.lang.Object(ARRAY(i1330)), i1331, i543, i568, java.lang.Object(ARRAY(i1330)), i1331, i1332, i1333, 1) | =(matching1, 1)
2555_0_binarySearch_Return(EOS(STATIC_2555), java.lang.Object(ARRAY(i1522)), i1523, i543, i568, java.lang.Object(ARRAY(i1522)), i1523, i1524, i1525, i1373) → 2255_0_binarySearch_Return(EOS(STATIC_2255), java.lang.Object(ARRAY(i1522)), i1523, i543, i568, java.lang.Object(ARRAY(i1522)), i1523, i1524, i1525, i1373)
R rules:
1906_0_binarySearch_LE(EOS(STATIC_1906), java.lang.Object(ARRAY(i540)), i541, i542, i543, i542, i543) → 1908_0_binarySearch_LE(EOS(STATIC_1908), java.lang.Object(ARRAY(i540)), i541, i542, i543, i542, i543)
1908_0_binarySearch_LE(EOS(STATIC_1908), java.lang.Object(ARRAY(i540)), i541, i542, i543, i542, i543) → 1910_0_binarySearch_ConstantStackPush(EOS(STATIC_1910), java.lang.Object(ARRAY(i540)), i541, i542, i543) | >(i542, i543)
1910_0_binarySearch_ConstantStackPush(EOS(STATIC_1910), java.lang.Object(ARRAY(i540)), i541, i542, i543) → 1912_0_binarySearch_Return(EOS(STATIC_1912), java.lang.Object(ARRAY(i540)), i541, i542, i543, 0)
1942_0_binarySearch_ArrayAccess(EOS(STATIC_1942), java.lang.Object(ARRAY(i540)), i541, i542, i543, i567, java.lang.Object(ARRAY(i540)), i567) → 1944_0_binarySearch_ArrayAccess(EOS(STATIC_1944), java.lang.Object(ARRAY(i540)), i541, i542, i543, i567, java.lang.Object(ARRAY(i540)), i567)
1944_0_binarySearch_ArrayAccess(EOS(STATIC_1944), java.lang.Object(ARRAY(i540)), i541, i542, i543, i567, java.lang.Object(ARRAY(i540)), i567) → 1946_0_<init>_Load(EOS(STATIC_1946), java.lang.Object(ARRAY(i540)), i541, i542, i543, i567, java.lang.Object(ARRAY(i540)), i567) | <=(i567, -1)
1945_0_binarySearch_ArrayAccess(EOS(STATIC_1945), java.lang.Object(ARRAY(i540)), i541, i542, i543, i568, java.lang.Object(ARRAY(i540)), i568) → 1948_0_binarySearch_ArrayAccess(EOS(STATIC_1948), java.lang.Object(ARRAY(i540)), i541, i542, i543, i568, java.lang.Object(ARRAY(i540)), i568)
1946_0_<init>_Load(EOS(STATIC_1946), java.lang.Object(ARRAY(i540)), i541, i542, i543, i567, java.lang.Object(ARRAY(i540)), i567) → 1953_0_<init>_InvokeMethod(EOS(STATIC_1953), java.lang.Object(ARRAY(i540)), i541, i542, i543, i567, java.lang.Object(ARRAY(i540)), i567)
1948_0_binarySearch_ArrayAccess(EOS(STATIC_1948), java.lang.Object(ARRAY(i540)), i541, i542, i543, i568, java.lang.Object(ARRAY(i540)), i568) → 1952_0_<init>_Load(EOS(STATIC_1952), java.lang.Object(ARRAY(i540)), i541, i542, i543, i568, java.lang.Object(ARRAY(i540)), i568) | >=(i568, i540)
1952_0_<init>_Load(EOS(STATIC_1952), java.lang.Object(ARRAY(i540)), i541, i542, i543, i568, java.lang.Object(ARRAY(i540)), i568) → 1962_0_<init>_InvokeMethod(EOS(STATIC_1962), java.lang.Object(ARRAY(i540)), i541, i542, i543, i568, java.lang.Object(ARRAY(i540)), i568)
1953_0_<init>_InvokeMethod(EOS(STATIC_1953), java.lang.Object(ARRAY(i540)), i541, i542, i543, i567, java.lang.Object(ARRAY(i540)), i567) → 1957_0_<init>_Load(EOS(STATIC_1957), java.lang.Object(ARRAY(i540)), i541, i542, i543, i567, java.lang.Object(ARRAY(i540)), i567)
1955_0_binarySearch_NE(EOS(STATIC_1955), java.lang.Object(ARRAY(i540)), i541, i542, i543, i568, i541, i541) → 1960_0_binarySearch_NE(EOS(STATIC_1960), java.lang.Object(ARRAY(i540)), i541, i542, i543, i568, i541, i541)
1957_0_<init>_Load(EOS(STATIC_1957), java.lang.Object(ARRAY(i540)), i541, i542, i543, i567, java.lang.Object(ARRAY(i540)), i567) → 1969_0_<init>_InvokeMethod(EOS(STATIC_1969), java.lang.Object(ARRAY(i540)), i541, i542, i543, i567, java.lang.Object(ARRAY(i540)), i567)
1960_0_binarySearch_NE(EOS(STATIC_1960), java.lang.Object(ARRAY(i540)), i541, i542, i543, i568, i541, i541) → 1966_0_binarySearch_ConstantStackPush(EOS(STATIC_1966), java.lang.Object(ARRAY(i540)), i541, i542, i543, i568)
1962_0_<init>_InvokeMethod(EOS(STATIC_1962), java.lang.Object(ARRAY(i540)), i541, i542, i543, i568, java.lang.Object(ARRAY(i540)), i568) → 1967_0_<init>_Load(EOS(STATIC_1967), java.lang.Object(ARRAY(i540)), i541, i542, i543, i568, java.lang.Object(ARRAY(i540)), i568)
1966_0_binarySearch_ConstantStackPush(EOS(STATIC_1966), java.lang.Object(ARRAY(i540)), i541, i542, i543, i568) → 1972_0_binarySearch_Return(EOS(STATIC_1972), java.lang.Object(ARRAY(i540)), i541, i542, i543, i568, 1)
1967_0_<init>_Load(EOS(STATIC_1967), java.lang.Object(ARRAY(i540)), i541, i542, i543, i568, java.lang.Object(ARRAY(i540)), i568) → 1979_0_<init>_InvokeMethod(EOS(STATIC_1979), java.lang.Object(ARRAY(i540)), i541, i542, i543, i568, java.lang.Object(ARRAY(i540)), i568)
1969_0_<init>_InvokeMethod(EOS(STATIC_1969), java.lang.Object(ARRAY(i540)), i541, i542, i543, i567, java.lang.Object(ARRAY(i540)), i567) → 1974_0_<init>_Load(EOS(STATIC_1974), java.lang.Object(ARRAY(i540)), i541, i542, i543, i567, java.lang.Object(ARRAY(i540)), i567)
1974_0_<init>_Load(EOS(STATIC_1974), java.lang.Object(ARRAY(i540)), i541, i542, i543, i567, java.lang.Object(ARRAY(i540)), i567) → 1989_0_<init>_InvokeMethod(EOS(STATIC_1989), java.lang.Object(ARRAY(i540)), i541, i542, i543, i567, java.lang.Object(ARRAY(i540)), i567)
1979_0_<init>_InvokeMethod(EOS(STATIC_1979), java.lang.Object(ARRAY(i540)), i541, i542, i543, i568, java.lang.Object(ARRAY(i540)), i568) → 1987_0_<init>_Load(EOS(STATIC_1987), java.lang.Object(ARRAY(i540)), i541, i542, i543, i568, java.lang.Object(ARRAY(i540)), i568)
1987_0_<init>_Load(EOS(STATIC_1987), java.lang.Object(ARRAY(i540)), i541, i542, i543, i568, java.lang.Object(ARRAY(i540)), i568) → 1998_0_<init>_InvokeMethod(EOS(STATIC_1998), java.lang.Object(ARRAY(i540)), i541, i542, i543, i568, java.lang.Object(ARRAY(i540)), i568)
1989_0_<init>_InvokeMethod(EOS(STATIC_1989), java.lang.Object(ARRAY(i540)), i541, i542, i543, i567, java.lang.Object(ARRAY(i540)), i567) → 1994_0_<init>_Load(EOS(STATIC_1994), java.lang.Object(ARRAY(i540)), i541, i542, i543, i567, java.lang.Object(ARRAY(i540)), i567)
1994_0_<init>_Load(EOS(STATIC_1994), 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)
1998_0_<init>_InvokeMethod(EOS(STATIC_1998), java.lang.Object(ARRAY(i540)), i541, i542, i543, i568, java.lang.Object(ARRAY(i540)), i568) → 2000_0_<init>_Load(EOS(STATIC_2000), java.lang.Object(ARRAY(i540)), i541, i542, i543, i568, java.lang.Object(ARRAY(i540)), i568)
2000_0_<init>_Load(EOS(STATIC_2000), java.lang.Object(ARRAY(i540)), i541, i542, i543, i568, java.lang.Object(ARRAY(i540)), i568) → 2008_0_<init>_InvokeMethod(EOS(STATIC_2008), java.lang.Object(ARRAY(i540)), i541, i542, i543, i568, java.lang.Object(ARRAY(i540)), i568)
2001_0_<init>_InvokeMethod(EOS(STATIC_2001), java.lang.Object(ARRAY(i540)), i541, i542, i543, i567, java.lang.Object(ARRAY(i540)), i567) → 2004_0_<init>_Load(EOS(STATIC_2004), java.lang.Object(ARRAY(i540)), i541, i542, i543, i567, java.lang.Object(ARRAY(i540)), i567)
2002_1_binarySearch_InvokeMethod(2107_0_binarySearch_ArrayAccess(EOS(STATIC_2107), java.lang.Object(ARRAY(i713)), i714, i715, i716, i567, java.lang.Object(ARRAY(i713)), i567), java.lang.Object(ARRAY(i713)), i714, i543, i568, java.lang.Object(ARRAY(i713)), i714, i715, i716) → 2159_0_binarySearch_ArrayAccess(EOS(STATIC_2159), java.lang.Object(ARRAY(i713)), i714, i543, i568, java.lang.Object(ARRAY(i713)), i714, i715, i716, java.lang.Object(ARRAY(i713)), i714, i715, i716, i567, java.lang.Object(ARRAY(i713)), i567)
2002_1_binarySearch_InvokeMethod(2141_0_binarySearch_ArrayAccess(EOS(STATIC_2141), java.lang.Object(ARRAY(i751)), i752, i753, i754, i747, java.lang.Object(ARRAY(i751)), i747), java.lang.Object(ARRAY(i751)), i752, i543, i568, java.lang.Object(ARRAY(i751)), i752, i753, i754) → 2203_0_binarySearch_ArrayAccess(EOS(STATIC_2203), java.lang.Object(ARRAY(i751)), i752, i543, i568, java.lang.Object(ARRAY(i751)), i752, i753, i754, java.lang.Object(ARRAY(i751)), i752, i753, i754, i747, java.lang.Object(ARRAY(i751)), i747)
2002_1_binarySearch_InvokeMethod(2239_0_binarySearch_InvokeMethod(EOS(STATIC_2239), java.lang.Object(ARRAY(i1049)), i1050, i1052, i1048, java.lang.Object(ARRAY(i1049)), i1050, i1051, i786), java.lang.Object(ARRAY(i1049)), i1050, i543, i568, java.lang.Object(ARRAY(i1049)), i1050, i1051, i1052) → 2299_0_binarySearch_InvokeMethod(EOS(STATIC_2299), java.lang.Object(ARRAY(i1049)), i1050, i543, i568, java.lang.Object(ARRAY(i1049)), i1050, i1051, i1052, java.lang.Object(ARRAY(i1049)), i1050, i1052, i1048, java.lang.Object(ARRAY(i1049)), i1050, i1051, i786)
2002_1_binarySearch_InvokeMethod(2309_0_binarySearch_InvokeMethod(EOS(STATIC_2309), java.lang.Object(ARRAY(i1086)), i1087, i1089, i1085, java.lang.Object(ARRAY(i1086)), i1087, i1088, i1052), java.lang.Object(ARRAY(i1086)), i1087, i543, i568, java.lang.Object(ARRAY(i1086)), i1087, i1088, i1089) → 2337_0_binarySearch_InvokeMethod(EOS(STATIC_2337), java.lang.Object(ARRAY(i1086)), i1087, i543, i568, java.lang.Object(ARRAY(i1086)), i1087, i1088, i1089, java.lang.Object(ARRAY(i1086)), i1087, i1089, i1085, java.lang.Object(ARRAY(i1086)), i1087, i1088, i1052)
2002_1_binarySearch_InvokeMethod(2402_0_binarySearch_InvokeMethod(EOS(STATIC_2402), java.lang.Object(ARRAY(i1312)), i1313, i1168, i1315), java.lang.Object(ARRAY(i1312)), i1313, i543, i568, java.lang.Object(ARRAY(i1312)), i1313, i1314, i1315) → 2452_0_binarySearch_InvokeMethod(EOS(STATIC_2452), java.lang.Object(ARRAY(i1312)), i1313, i543, i568, java.lang.Object(ARRAY(i1312)), i1313, i1314, i1315, java.lang.Object(ARRAY(i1312)), i1313, i1168, i1315)
2002_1_binarySearch_InvokeMethod(2474_0_binarySearch_InvokeMethod(EOS(STATIC_2474), java.lang.Object(ARRAY(i1485)), i1486, i1488, i1484, java.lang.Object(ARRAY(i1485)), i1486, i1487, i1315), java.lang.Object(ARRAY(i1485)), i1486, i543, i568, java.lang.Object(ARRAY(i1485)), i1486, i1487, i1488) → 2537_0_binarySearch_InvokeMethod(EOS(STATIC_2537), java.lang.Object(ARRAY(i1485)), i1486, i543, i568, java.lang.Object(ARRAY(i1485)), i1486, i1487, i1488, java.lang.Object(ARRAY(i1485)), i1486, i1488, i1484, java.lang.Object(ARRAY(i1485)), i1486, i1487, i1315)
2002_1_binarySearch_InvokeMethod(2478_0_binarySearch_InvokeMethod(EOS(STATIC_2478), java.lang.Object(ARRAY(i1504)), i1505, i1321, i1507), java.lang.Object(ARRAY(i1504)), i1505, i543, i568, java.lang.Object(ARRAY(i1504)), i1505, i1506, i1507) → 2548_0_binarySearch_InvokeMethod(EOS(STATIC_2548), java.lang.Object(ARRAY(i1504)), i1505, i543, i568, java.lang.Object(ARRAY(i1504)), i1505, i1506, i1507, java.lang.Object(ARRAY(i1504)), i1505, i1321, i1507)
2004_0_<init>_Load(EOS(STATIC_2004), java.lang.Object(ARRAY(i540)), i541, i542, i543, i567, java.lang.Object(ARRAY(i540)), i567) → 2011_0_<init>_InvokeMethod(EOS(STATIC_2011), java.lang.Object(ARRAY(i540)), i541, i542, i543, i567, java.lang.Object(ARRAY(i540)), i567)
2008_0_<init>_InvokeMethod(EOS(STATIC_2008), java.lang.Object(ARRAY(i540)), i541, i542, i543, i568, java.lang.Object(ARRAY(i540)), i568) → 2010_0_<init>_Load(EOS(STATIC_2010), java.lang.Object(ARRAY(i540)), i541, i542, i543, i568, java.lang.Object(ARRAY(i540)), i568)
2010_0_<init>_Load(EOS(STATIC_2010), java.lang.Object(ARRAY(i540)), i541, i542, i543, i568, java.lang.Object(ARRAY(i540)), i568) → 2025_0_<init>_InvokeMethod(EOS(STATIC_2025), java.lang.Object(ARRAY(i540)), i541, i542, i543, i568, java.lang.Object(ARRAY(i540)), i568)
2011_0_<init>_InvokeMethod(EOS(STATIC_2011), java.lang.Object(ARRAY(i540)), i541, i542, i543, i567, java.lang.Object(ARRAY(i540)), i567) → 2021_0_<init>_Load(EOS(STATIC_2021), java.lang.Object(ARRAY(i540)), i541, i542, i543, i567, java.lang.Object(ARRAY(i540)), i567)
2021_0_<init>_Load(EOS(STATIC_2021), java.lang.Object(ARRAY(i540)), i541, i542, i543, i567, java.lang.Object(ARRAY(i540)), i567) → 2026_0_<init>_Load(EOS(STATIC_2026), 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, i568, java.lang.Object(ARRAY(i540)), i568) → 2031_0_<init>_Load(EOS(STATIC_2031), java.lang.Object(ARRAY(i540)), i541, i542, i543, i568, java.lang.Object(ARRAY(i540)), i568)
2026_0_<init>_Load(EOS(STATIC_2026), java.lang.Object(ARRAY(i540)), i541, i542, i543, i567, java.lang.Object(ARRAY(i540)), i567) → 2033_0_<init>_FieldAccess(EOS(STATIC_2033), java.lang.Object(ARRAY(i540)), i541, i542, i543, i567, java.lang.Object(ARRAY(i540)), i567)
2031_0_<init>_Load(EOS(STATIC_2031), java.lang.Object(ARRAY(i540)), i541, i542, i543, i568, java.lang.Object(ARRAY(i540)), i568) → 2039_0_<init>_Load(EOS(STATIC_2039), java.lang.Object(ARRAY(i540)), i541, i542, i543, i568, java.lang.Object(ARRAY(i540)), i568)
2033_0_<init>_FieldAccess(EOS(STATIC_2033), java.lang.Object(ARRAY(i540)), i541, i542, i543, i567, java.lang.Object(ARRAY(i540)), i567) → 2042_0_<init>_Load(EOS(STATIC_2042), java.lang.Object(ARRAY(i540)), i541, i542, i543, i567, java.lang.Object(ARRAY(i540)), i567)
2039_0_<init>_Load(EOS(STATIC_2039), java.lang.Object(ARRAY(i540)), i541, i542, i543, i568, java.lang.Object(ARRAY(i540)), i568) → 2047_0_<init>_FieldAccess(EOS(STATIC_2047), java.lang.Object(ARRAY(i540)), i541, i542, i543, i568, java.lang.Object(ARRAY(i540)), i568)
2042_0_<init>_Load(EOS(STATIC_2042), java.lang.Object(ARRAY(i540)), i541, i542, i543, i567, java.lang.Object(ARRAY(i540)), i567) → 2049_0_<init>_InvokeMethod(EOS(STATIC_2049), java.lang.Object(ARRAY(i540)), i541, i542, i543, i567, java.lang.Object(ARRAY(i540)), i567)
2047_0_<init>_FieldAccess(EOS(STATIC_2047), java.lang.Object(ARRAY(i540)), i541, i542, i543, i568, java.lang.Object(ARRAY(i540)), i568) → 2056_0_<init>_Load(EOS(STATIC_2056), java.lang.Object(ARRAY(i540)), i541, i542, i543, i568, java.lang.Object(ARRAY(i540)), i568)
2049_0_<init>_InvokeMethod(EOS(STATIC_2049), java.lang.Object(ARRAY(i540)), i541, i542, i543, i567, java.lang.Object(ARRAY(i540)), i567) → 2058_0_<init>_StackPop(EOS(STATIC_2058), java.lang.Object(ARRAY(i540)), i541, i542, i543, i567, java.lang.Object(ARRAY(i540)), i567)
2056_0_<init>_Load(EOS(STATIC_2056), java.lang.Object(ARRAY(i540)), i541, i542, i543, i568, java.lang.Object(ARRAY(i540)), i568) → 2067_0_<init>_InvokeMethod(EOS(STATIC_2067), java.lang.Object(ARRAY(i540)), i541, i542, i543, i568, java.lang.Object(ARRAY(i540)), i568)
2058_0_<init>_StackPop(EOS(STATIC_2058), java.lang.Object(ARRAY(i540)), i541, i542, i543, i567, java.lang.Object(ARRAY(i540)), i567) → 2069_0_<init>_Return(EOS(STATIC_2069), java.lang.Object(ARRAY(i540)), i541, i542, i543, i567, java.lang.Object(ARRAY(i540)), i567)
2067_0_<init>_InvokeMethod(EOS(STATIC_2067), java.lang.Object(ARRAY(i540)), i541, i542, i543, i568, java.lang.Object(ARRAY(i540)), i568) → 2077_0_<init>_StackPop(EOS(STATIC_2077), java.lang.Object(ARRAY(i540)), i541, i542, i543, i568, java.lang.Object(ARRAY(i540)), i568)
2069_0_<init>_Return(EOS(STATIC_2069), java.lang.Object(ARRAY(i540)), i541, i542, i543, i567, java.lang.Object(ARRAY(i540)), i567) → 2079_0_<init>_Return(EOS(STATIC_2079), java.lang.Object(ARRAY(i540)), i541, i542, i543, i567, java.lang.Object(ARRAY(i540)), i567)
2077_0_<init>_StackPop(EOS(STATIC_2077), java.lang.Object(ARRAY(i540)), i541, i542, i543, i568, java.lang.Object(ARRAY(i540)), i568) → 2086_0_<init>_Return(EOS(STATIC_2086), java.lang.Object(ARRAY(i540)), i541, i542, i543, i568, java.lang.Object(ARRAY(i540)), i568)
2079_0_<init>_Return(EOS(STATIC_2079), java.lang.Object(ARRAY(i540)), i541, i542, i543, i567, java.lang.Object(ARRAY(i540)), i567) → 2087_0_<init>_Return(EOS(STATIC_2087), java.lang.Object(ARRAY(i540)), i541, i542, i543, i567, java.lang.Object(ARRAY(i540)), i567)
2086_0_<init>_Return(EOS(STATIC_2086), java.lang.Object(ARRAY(i540)), i541, i542, i543, i568, java.lang.Object(ARRAY(i540)), i568) → 2092_0_<init>_Return(EOS(STATIC_2092), java.lang.Object(ARRAY(i540)), i541, i542, i543, i568, java.lang.Object(ARRAY(i540)), i568)
2087_0_<init>_Return(EOS(STATIC_2087), java.lang.Object(ARRAY(i540)), i541, i542, i543, i567, java.lang.Object(ARRAY(i540)), i567) → 2094_0_<init>_Return(EOS(STATIC_2094), 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, i568, java.lang.Object(ARRAY(i540)), i568) → 2099_0_<init>_Return(EOS(STATIC_2099), java.lang.Object(ARRAY(i540)), i541, i542, i543, i568, java.lang.Object(ARRAY(i540)), i568)
2094_0_<init>_Return(EOS(STATIC_2094), java.lang.Object(ARRAY(i540)), i541, i542, i543, i567, java.lang.Object(ARRAY(i540)), i567) → 2100_0_<init>_Return(EOS(STATIC_2100), java.lang.Object(ARRAY(i540)), i541, i542, i543, i567, java.lang.Object(ARRAY(i540)), i567)
2099_0_<init>_Return(EOS(STATIC_2099), java.lang.Object(ARRAY(i540)), i541, i542, i543, i568, java.lang.Object(ARRAY(i540)), i568) → 2106_0_<init>_Return(EOS(STATIC_2106), java.lang.Object(ARRAY(i540)), i541, i542, i543, i568, java.lang.Object(ARRAY(i540)), i568)
2100_0_<init>_Return(EOS(STATIC_2100), java.lang.Object(ARRAY(i540)), i541, i542, i543, i567, java.lang.Object(ARRAY(i540)), i567) → 2107_0_binarySearch_ArrayAccess(EOS(STATIC_2107), java.lang.Object(ARRAY(i540)), i541, i542, i543, i567, java.lang.Object(ARRAY(i540)), i567)
2106_0_<init>_Return(EOS(STATIC_2106), java.lang.Object(ARRAY(i540)), i541, i542, i543, i568, java.lang.Object(ARRAY(i540)), i568) → 2117_0_<init>_Return(EOS(STATIC_2117), java.lang.Object(ARRAY(i540)), i541, i542, i543, i568, java.lang.Object(ARRAY(i540)), i568)
2117_0_<init>_Return(EOS(STATIC_2117), java.lang.Object(ARRAY(i540)), i541, i542, i543, i568, java.lang.Object(ARRAY(i540)), i568) → 2141_0_binarySearch_ArrayAccess(EOS(STATIC_2141), java.lang.Object(ARRAY(i540)), i541, i542, i543, i568, java.lang.Object(ARRAY(i540)), i568)
2159_0_binarySearch_ArrayAccess(EOS(STATIC_2159), java.lang.Object(ARRAY(i713)), i714, i543, i568, java.lang.Object(ARRAY(i713)), i714, i715, i716, java.lang.Object(ARRAY(i713)), i714, i715, i716, i567, java.lang.Object(ARRAY(i713)), i567) → 2204_0_binarySearch_ArrayAccess(EOS(STATIC_2204), java.lang.Object(ARRAY(i713)), i714, i543, i568, java.lang.Object(ARRAY(i713)), i714, i715, i716, java.lang.Object(ARRAY(i713)), i714, i715, i716, i567, java.lang.Object(ARRAY(i713)), i567)
2203_0_binarySearch_ArrayAccess(EOS(STATIC_2203), java.lang.Object(ARRAY(i751)), i752, i543, i568, java.lang.Object(ARRAY(i751)), i752, i753, i754, java.lang.Object(ARRAY(i751)), i752, i753, i754, i747, java.lang.Object(ARRAY(i751)), i747) → 2204_0_binarySearch_ArrayAccess(EOS(STATIC_2204), java.lang.Object(ARRAY(i751)), i752, i543, i568, java.lang.Object(ARRAY(i751)), i752, i753, i754, java.lang.Object(ARRAY(i751)), i752, i753, i754, i747, java.lang.Object(ARRAY(i751)), i747)
2204_0_binarySearch_ArrayAccess(EOS(STATIC_2204), java.lang.Object(ARRAY(i781)), i782, i543, i568, java.lang.Object(ARRAY(i781)), i782, i783, i786, java.lang.Object(ARRAY(i781)), i782, i783, i786, i787, java.lang.Object(ARRAY(i781)), i787) → 2239_0_binarySearch_InvokeMethod(EOS(STATIC_2239), java.lang.Object(ARRAY(i781)), i782, i543, i568, java.lang.Object(ARRAY(i781)), i782, i783, i786)
2239_0_binarySearch_InvokeMethod(EOS(STATIC_2239), java.lang.Object(ARRAY(i781)), i782, i543, i568, java.lang.Object(ARRAY(i781)), i782, i783, i786) → 2309_0_binarySearch_InvokeMethod(EOS(STATIC_2309), java.lang.Object(ARRAY(i781)), i782, i543, i568, java.lang.Object(ARRAY(i781)), i782, i783, i786)
2282_0_binarySearch_EQ(EOS(STATIC_2282), java.lang.Object(ARRAY(i1019)), i1020, i543, i568, matching1) → 2296_0_binarySearch_EQ(EOS(STATIC_2296), java.lang.Object(ARRAY(i1019)), i1020, i543, i568, 1) | =(matching1, 1)
2296_0_binarySearch_EQ(EOS(STATIC_2296), java.lang.Object(ARRAY(i1019)), i1020, i543, i568, matching1) → 2302_0_binarySearch_ConstantStackPush(EOS(STATIC_2302), java.lang.Object(ARRAY(i1019)), i1020, i543, i568) | &&(>(1, 0), =(matching1, 1))
2299_0_binarySearch_InvokeMethod(EOS(STATIC_2299), java.lang.Object(ARRAY(i1049)), i1050, i543, i568, java.lang.Object(ARRAY(i1049)), i1050, i1051, i1052, java.lang.Object(ARRAY(i1049)), i1050, i1052, i1048, java.lang.Object(ARRAY(i1049)), i1050, i1051, i786) → 2309_0_binarySearch_InvokeMethod(EOS(STATIC_2309), java.lang.Object(ARRAY(i1049)), i1050, i543, i568, java.lang.Object(ARRAY(i1049)), i1050, i1051, i1052)
2302_0_binarySearch_ConstantStackPush(EOS(STATIC_2302), java.lang.Object(ARRAY(i1019)), i1020, i543, i568) → 2312_0_binarySearch_Return(EOS(STATIC_2312), java.lang.Object(ARRAY(i1019)), i1020, i543, i568, 1)
2309_0_binarySearch_InvokeMethod(EOS(STATIC_2309), java.lang.Object(ARRAY(i1049)), i1050, i543, i568, java.lang.Object(ARRAY(i1049)), i1050, i1051, i1052) → 2474_0_binarySearch_InvokeMethod(EOS(STATIC_2474), java.lang.Object(ARRAY(i1049)), i1050, i543, i568, java.lang.Object(ARRAY(i1049)), i1050, i1051, i1052)
2337_0_binarySearch_InvokeMethod(EOS(STATIC_2337), java.lang.Object(ARRAY(i1086)), i1087, i543, i568, java.lang.Object(ARRAY(i1086)), i1087, i1088, i1089, java.lang.Object(ARRAY(i1086)), i1087, i1089, i1085, java.lang.Object(ARRAY(i1086)), i1087, i1088, i1052) → 2299_0_binarySearch_InvokeMethod(EOS(STATIC_2299), java.lang.Object(ARRAY(i1086)), i1087, i543, i568, java.lang.Object(ARRAY(i1086)), i1087, i1088, i1089, java.lang.Object(ARRAY(i1086)), i1087, i1089, i1085, java.lang.Object(ARRAY(i1086)), i1087, i1088, i1052)
2346_1_binarySearch_InvokeMethod(1912_0_binarySearch_Return(EOS(STATIC_1912), java.lang.Object(ARRAY(i1137)), i1138, i1139, i1140, matching1), java.lang.Object(ARRAY(i1137)), i1138, i1139, i1140) → 2378_0_binarySearch_Return(EOS(STATIC_2378), java.lang.Object(ARRAY(i1137)), i1138, i1139, i1140, java.lang.Object(ARRAY(i1137)), i1138, i1139, i1140, 0) | =(matching1, 0)
2346_1_binarySearch_InvokeMethod(1972_0_binarySearch_Return(EOS(STATIC_1972), java.lang.Object(ARRAY(i1144)), i1145, i1146, i1148, i568, matching1), java.lang.Object(ARRAY(i1144)), i1145, i1146, i1148) → 2379_0_binarySearch_Return(EOS(STATIC_2379), java.lang.Object(ARRAY(i1144)), i1145, i1146, i1148, java.lang.Object(ARRAY(i1144)), i1145, i1146, i1148, i568, 1) | =(matching1, 1)
2346_1_binarySearch_InvokeMethod(2107_0_binarySearch_ArrayAccess(EOS(STATIC_2107), java.lang.Object(ARRAY(i1152)), i1153, i1154, i1155, i567, java.lang.Object(ARRAY(i1152)), i567), java.lang.Object(ARRAY(i1152)), i1153, i1154, i1155) → 2380_0_binarySearch_ArrayAccess(EOS(STATIC_2380), java.lang.Object(ARRAY(i1152)), i1153, i1154, i1155, java.lang.Object(ARRAY(i1152)), i1153, i1154, i1155, i567, java.lang.Object(ARRAY(i1152)), i567)
2346_1_binarySearch_InvokeMethod(2141_0_binarySearch_ArrayAccess(EOS(STATIC_2141), java.lang.Object(ARRAY(i1159)), i1160, i1161, i1162, i568, java.lang.Object(ARRAY(i1159)), i568), java.lang.Object(ARRAY(i1159)), i1160, i1161, i1162) → 2387_0_binarySearch_ArrayAccess(EOS(STATIC_2387), java.lang.Object(ARRAY(i1159)), i1160, i1161, i1162, java.lang.Object(ARRAY(i1159)), i1160, i1161, i1162, i568, java.lang.Object(ARRAY(i1159)), i568)
2346_1_binarySearch_InvokeMethod(2239_0_binarySearch_InvokeMethod(EOS(STATIC_2239), java.lang.Object(ARRAY(i1166)), i1167, i1169, i568, java.lang.Object(ARRAY(i1166)), i1167, i1168, i786), java.lang.Object(ARRAY(i1166)), i1167, i1168, i1169) → 2389_0_binarySearch_InvokeMethod(EOS(STATIC_2389), java.lang.Object(ARRAY(i1166)), i1167, i1168, i1169, java.lang.Object(ARRAY(i1166)), i1167, i1169, i568, java.lang.Object(ARRAY(i1166)), i1167, i1168, i786)
2346_1_binarySearch_InvokeMethod(2309_0_binarySearch_InvokeMethod(EOS(STATIC_2309), java.lang.Object(ARRAY(i1173)), i1174, i1176, i568, java.lang.Object(ARRAY(i1173)), i1174, i1175, i1052), java.lang.Object(ARRAY(i1173)), i1174, i1175, i1176) → 2392_0_binarySearch_InvokeMethod(EOS(STATIC_2392), java.lang.Object(ARRAY(i1173)), i1174, i1175, i1176, java.lang.Object(ARRAY(i1173)), i1174, i1176, i568, java.lang.Object(ARRAY(i1173)), i1174, i1175, i1052)
2346_1_binarySearch_InvokeMethod(2312_0_binarySearch_Return(EOS(STATIC_2312), java.lang.Object(ARRAY(i1185)), i1186, i1188, i568, matching1), java.lang.Object(ARRAY(i1185)), i1186, i1187, i1188) → 2393_0_binarySearch_Return(EOS(STATIC_2393), java.lang.Object(ARRAY(i1185)), i1186, i1187, i1188, java.lang.Object(ARRAY(i1185)), i1186, i1188, i568, 1) | =(matching1, 1)
2346_1_binarySearch_InvokeMethod(2394_0_binarySearch_Return(EOS(STATIC_2394), matching1), java.lang.Object(ARRAY(i1301)), i1302, i1303, i1304) → 2450_0_binarySearch_Return(EOS(STATIC_2450), java.lang.Object(ARRAY(i1301)), i1302, i1303, i1304, 0) | =(matching1, 0)
2346_1_binarySearch_InvokeMethod(2402_0_binarySearch_InvokeMethod(EOS(STATIC_2402), java.lang.Object(ARRAY(i1319)), i1320, i1168, i1322), java.lang.Object(ARRAY(i1319)), i1320, i1321, i1322) → 2453_0_binarySearch_InvokeMethod(EOS(STATIC_2453), java.lang.Object(ARRAY(i1319)), i1320, i1321, i1322, java.lang.Object(ARRAY(i1319)), i1320, i1168, i1322)
2346_1_binarySearch_InvokeMethod(2405_0_binarySearch_Return(EOS(STATIC_2405), matching1), java.lang.Object(ARRAY(i1337)), i1338, i1339, i1340) → 2462_0_binarySearch_Return(EOS(STATIC_2462), java.lang.Object(ARRAY(i1337)), i1338, i1339, i1340, 1) | =(matching1, 1)
2346_1_binarySearch_InvokeMethod(2474_0_binarySearch_InvokeMethod(EOS(STATIC_2474), java.lang.Object(ARRAY(i1492)), i1493, i1495, i568, java.lang.Object(ARRAY(i1492)), i1493, i1494, i1315), java.lang.Object(ARRAY(i1492)), i1493, i1494, i1495) → 2541_0_binarySearch_InvokeMethod(EOS(STATIC_2541), java.lang.Object(ARRAY(i1492)), i1493, i1494, i1495, java.lang.Object(ARRAY(i1492)), i1493, i1495, i568, java.lang.Object(ARRAY(i1492)), i1493, i1494, i1315)
2346_1_binarySearch_InvokeMethod(2478_0_binarySearch_InvokeMethod(EOS(STATIC_2478), java.lang.Object(ARRAY(i1511)), i1512, i1321, i1514), java.lang.Object(ARRAY(i1511)), i1512, i1513, i1514) → 2550_0_binarySearch_InvokeMethod(EOS(STATIC_2550), java.lang.Object(ARRAY(i1511)), i1512, i1513, i1514, java.lang.Object(ARRAY(i1511)), i1512, i1321, i1514)
2346_1_binarySearch_InvokeMethod(2481_0_binarySearch_Return(EOS(STATIC_2481), i1373), java.lang.Object(ARRAY(i1529)), i1530, i1531, i1532) → 2556_0_binarySearch_Return(EOS(STATIC_2556), java.lang.Object(ARRAY(i1529)), i1530, i1531, i1532, i1373)
2378_0_binarySearch_Return(EOS(STATIC_2378), java.lang.Object(ARRAY(i1137)), i1138, i1139, i1140, java.lang.Object(ARRAY(i1137)), i1138, i1139, i1140, matching1) → 2394_0_binarySearch_Return(EOS(STATIC_2394), 0) | =(matching1, 0)
2379_0_binarySearch_Return(EOS(STATIC_2379), java.lang.Object(ARRAY(i1144)), i1145, i1146, i1148, java.lang.Object(ARRAY(i1144)), i1145, i1146, i1148, i568, matching1) → 2396_0_binarySearch_Return(EOS(STATIC_2396), 1) | =(matching1, 1)
2380_0_binarySearch_ArrayAccess(EOS(STATIC_2380), java.lang.Object(ARRAY(i1152)), i1153, i1154, i1155, java.lang.Object(ARRAY(i1152)), i1153, i1154, i1155, i567, java.lang.Object(ARRAY(i1152)), i567) → 2388_0_binarySearch_ArrayAccess(EOS(STATIC_2388), java.lang.Object(ARRAY(i1152)), i1153, i1154, i1155, java.lang.Object(ARRAY(i1152)), i1153, i1154, i1155, i567, java.lang.Object(ARRAY(i1152)), i567)
2387_0_binarySearch_ArrayAccess(EOS(STATIC_2387), java.lang.Object(ARRAY(i1159)), i1160, i1161, i1162, java.lang.Object(ARRAY(i1159)), i1160, i1161, i1162, i568, java.lang.Object(ARRAY(i1159)), i568) → 2388_0_binarySearch_ArrayAccess(EOS(STATIC_2388), java.lang.Object(ARRAY(i1159)), i1160, i1161, i1162, java.lang.Object(ARRAY(i1159)), i1160, i1161, i1162, i568, java.lang.Object(ARRAY(i1159)), i568)
2388_0_binarySearch_ArrayAccess(EOS(STATIC_2388), java.lang.Object(ARRAY(i1191)), i1192, i1196, i1193, java.lang.Object(ARRAY(i1191)), i1192, i1196, i1193, i1197, java.lang.Object(ARRAY(i1191)), i1197) → 2399_0_binarySearch_InvokeMethod(EOS(STATIC_2399), java.lang.Object(ARRAY(i1191)), i1192, i1196, i1193)
2389_0_binarySearch_InvokeMethod(EOS(STATIC_2389), java.lang.Object(ARRAY(i1166)), i1167, i1168, i1169, java.lang.Object(ARRAY(i1166)), i1167, i1169, i568, java.lang.Object(ARRAY(i1166)), i1167, i1168, i786) → 2402_0_binarySearch_InvokeMethod(EOS(STATIC_2402), java.lang.Object(ARRAY(i1166)), i1167, i1168, i1169)
2392_0_binarySearch_InvokeMethod(EOS(STATIC_2392), java.lang.Object(ARRAY(i1173)), i1174, i1175, i1176, java.lang.Object(ARRAY(i1173)), i1174, i1176, i568, java.lang.Object(ARRAY(i1173)), i1174, i1175, i1052) → 2389_0_binarySearch_InvokeMethod(EOS(STATIC_2389), java.lang.Object(ARRAY(i1173)), i1174, i1175, i1176, java.lang.Object(ARRAY(i1173)), i1174, i1176, i568, java.lang.Object(ARRAY(i1173)), i1174, i1175, i1052)
2393_0_binarySearch_Return(EOS(STATIC_2393), java.lang.Object(ARRAY(i1185)), i1186, i1187, i1188, java.lang.Object(ARRAY(i1185)), i1186, i1188, i568, matching1) → 2405_0_binarySearch_Return(EOS(STATIC_2405), 1) | =(matching1, 1)
2394_0_binarySearch_Return(EOS(STATIC_2394), matching1) → 2481_0_binarySearch_Return(EOS(STATIC_2481), 0) | =(matching1, 0)
2396_0_binarySearch_Return(EOS(STATIC_2396), matching1) → 2405_0_binarySearch_Return(EOS(STATIC_2405), 1) | =(matching1, 1)
2399_0_binarySearch_InvokeMethod(EOS(STATIC_2399), java.lang.Object(ARRAY(i1191)), i1192, i1196, i1193) → 2402_0_binarySearch_InvokeMethod(EOS(STATIC_2402), java.lang.Object(ARRAY(i1191)), i1192, i1196, i1193)
2402_0_binarySearch_InvokeMethod(EOS(STATIC_2402), java.lang.Object(ARRAY(i1166)), i1167, i1168, i1169) → 2478_0_binarySearch_InvokeMethod(EOS(STATIC_2478), java.lang.Object(ARRAY(i1166)), i1167, i1168, i1169)
2405_0_binarySearch_Return(EOS(STATIC_2405), matching1) → 2481_0_binarySearch_Return(EOS(STATIC_2481), 1) | =(matching1, 1)
2450_0_binarySearch_Return(EOS(STATIC_2450), java.lang.Object(ARRAY(i1301)), i1302, i1303, i1304, matching1) → 2463_0_binarySearch_Return(EOS(STATIC_2463), java.lang.Object(ARRAY(i1301)), i1302, i1303, i1304, 0) | =(matching1, 0)
2452_0_binarySearch_InvokeMethod(EOS(STATIC_2452), java.lang.Object(ARRAY(i1312)), i1313, i543, i568, java.lang.Object(ARRAY(i1312)), i1313, i1314, i1315, java.lang.Object(ARRAY(i1312)), i1313, i1168, i1315) → 2474_0_binarySearch_InvokeMethod(EOS(STATIC_2474), java.lang.Object(ARRAY(i1312)), i1313, i543, i568, java.lang.Object(ARRAY(i1312)), i1313, i1314, i1315)
2453_0_binarySearch_InvokeMethod(EOS(STATIC_2453), java.lang.Object(ARRAY(i1319)), i1320, i1321, i1322, java.lang.Object(ARRAY(i1319)), i1320, i1168, i1322) → 2478_0_binarySearch_InvokeMethod(EOS(STATIC_2478), java.lang.Object(ARRAY(i1319)), i1320, i1321, i1322)
2462_0_binarySearch_Return(EOS(STATIC_2462), java.lang.Object(ARRAY(i1337)), i1338, i1339, i1340, matching1) → 2463_0_binarySearch_Return(EOS(STATIC_2463), java.lang.Object(ARRAY(i1337)), i1338, i1339, i1340, 1) | =(matching1, 1)
2463_0_binarySearch_Return(EOS(STATIC_2463), java.lang.Object(ARRAY(i1368)), i1369, i1374, i1370, i1373) → 2481_0_binarySearch_Return(EOS(STATIC_2481), i1373)
2537_0_binarySearch_InvokeMethod(EOS(STATIC_2537), java.lang.Object(ARRAY(i1485)), i1486, i543, i568, java.lang.Object(ARRAY(i1485)), i1486, i1487, i1488, java.lang.Object(ARRAY(i1485)), i1486, i1488, i1484, java.lang.Object(ARRAY(i1485)), i1486, i1487, i1315) → 2299_0_binarySearch_InvokeMethod(EOS(STATIC_2299), java.lang.Object(ARRAY(i1485)), i1486, i543, i568, java.lang.Object(ARRAY(i1485)), i1486, i1487, i1488, java.lang.Object(ARRAY(i1485)), i1486, i1488, i1484, java.lang.Object(ARRAY(i1485)), i1486, i1487, i1315)
2541_0_binarySearch_InvokeMethod(EOS(STATIC_2541), java.lang.Object(ARRAY(i1492)), i1493, i1494, i1495, java.lang.Object(ARRAY(i1492)), i1493, i1495, i568, java.lang.Object(ARRAY(i1492)), i1493, i1494, i1315) → 2389_0_binarySearch_InvokeMethod(EOS(STATIC_2389), java.lang.Object(ARRAY(i1492)), i1493, i1494, i1495, java.lang.Object(ARRAY(i1492)), i1493, i1495, i568, java.lang.Object(ARRAY(i1492)), i1493, i1494, i1315)
2548_0_binarySearch_InvokeMethod(EOS(STATIC_2548), java.lang.Object(ARRAY(i1504)), i1505, i543, i568, java.lang.Object(ARRAY(i1504)), i1505, i1506, i1507, java.lang.Object(ARRAY(i1504)), i1505, i1321, i1507) → 2452_0_binarySearch_InvokeMethod(EOS(STATIC_2452), java.lang.Object(ARRAY(i1504)), i1505, i543, i568, java.lang.Object(ARRAY(i1504)), i1505, i1506, i1507, java.lang.Object(ARRAY(i1504)), i1505, i1321, i1507)
2550_0_binarySearch_InvokeMethod(EOS(STATIC_2550), java.lang.Object(ARRAY(i1511)), i1512, i1513, i1514, java.lang.Object(ARRAY(i1511)), i1512, i1321, i1514) → 2453_0_binarySearch_InvokeMethod(EOS(STATIC_2453), java.lang.Object(ARRAY(i1511)), i1512, i1513, i1514, java.lang.Object(ARRAY(i1511)), i1512, i1321, i1514)
2556_0_binarySearch_Return(EOS(STATIC_2556), java.lang.Object(ARRAY(i1529)), i1530, i1531, i1532, i1373) → 2463_0_binarySearch_Return(EOS(STATIC_2463), java.lang.Object(ARRAY(i1529)), i1530, i1531, i1532, i1373)

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

P rules:
1905_0_binarySearch_Load(EOS(STATIC_1905), java.lang.Object(ARRAY(x0)), x1, x2, x3, x2) → 2002_1_binarySearch_InvokeMethod(1905_0_binarySearch_Load(EOS(STATIC_1905), 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))))
2002_1_binarySearch_InvokeMethod(1912_0_binarySearch_Return(EOS(STATIC_1912), 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) → 2346_1_binarySearch_InvokeMethod(1905_0_binarySearch_Load(EOS(STATIC_1905), java.lang.Object(ARRAY(x0)), x1, +(x6, 1), x5, +(x6, 1)), java.lang.Object(ARRAY(x0)), x1, +(x6, 1), x5) | >(+(x6, 1), 0)
2002_1_binarySearch_InvokeMethod(1972_0_binarySearch_Return(EOS(STATIC_1972), 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) → 2346_1_binarySearch_InvokeMethod(1905_0_binarySearch_Load(EOS(STATIC_1905), java.lang.Object(ARRAY(x0)), x1, arith[3], x6, arith[3]), java.lang.Object(ARRAY(x0)), x1, arith[3], x6) | FALSE
2002_1_binarySearch_InvokeMethod(2312_0_binarySearch_Return(EOS(STATIC_2312), 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) → 2346_1_binarySearch_InvokeMethod(1905_0_binarySearch_Load(EOS(STATIC_1905), java.lang.Object(ARRAY(x0)), x1, arith[3], x5, arith[3]), java.lang.Object(ARRAY(x0)), x1, arith[3], x5) | FALSE
2002_1_binarySearch_InvokeMethod(2394_0_binarySearch_Return(EOS(STATIC_2394), 0), java.lang.Object(ARRAY(x1)), x2, x3, x4, java.lang.Object(ARRAY(x1)), x2, x5, x6) → 2346_1_binarySearch_InvokeMethod(1905_0_binarySearch_Load(EOS(STATIC_1905), java.lang.Object(ARRAY(x1)), x2, +(x4, 1), x3, +(x4, 1)), java.lang.Object(ARRAY(x1)), x2, +(x4, 1), x3) | >(+(x4, 1), 0)
2002_1_binarySearch_InvokeMethod(2405_0_binarySearch_Return(EOS(STATIC_2405), x0), java.lang.Object(ARRAY(x1)), x2, x3, x4, java.lang.Object(ARRAY(x1)), x2, x5, x6) → 2346_1_binarySearch_InvokeMethod(1905_0_binarySearch_Load(EOS(STATIC_1905), java.lang.Object(ARRAY(x1)), x2, arith[3], x3, arith[3]), java.lang.Object(ARRAY(x1)), x2, arith[3], x3) | FALSE
2002_1_binarySearch_InvokeMethod(2481_0_binarySearch_Return(EOS(STATIC_2481), 0), java.lang.Object(ARRAY(x1)), x2, x3, x4, java.lang.Object(ARRAY(x1)), x2, x5, x6) → 2346_1_binarySearch_InvokeMethod(1905_0_binarySearch_Load(EOS(STATIC_1905), 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:
2002_1_binarySearch_InvokeMethod(2402_0_binarySearch_InvokeMethod(EOS(STATIC_2402), java.lang.Object(ARRAY(x0)), x1, x2, x3), java.lang.Object(ARRAY(x0)), x1, x4, x5, java.lang.Object(ARRAY(x0)), x1, x6, x3) → 2474_0_binarySearch_InvokeMethod(EOS(STATIC_2474), java.lang.Object(ARRAY(x0)), x1, x4, x5, java.lang.Object(ARRAY(x0)), x1, x6, x3)
2002_1_binarySearch_InvokeMethod(2478_0_binarySearch_InvokeMethod(EOS(STATIC_2478), java.lang.Object(ARRAY(x0)), x1, x2, x3), java.lang.Object(ARRAY(x0)), x1, x4, x5, java.lang.Object(ARRAY(x0)), x1, x6, x3) → 2474_0_binarySearch_InvokeMethod(EOS(STATIC_2474), java.lang.Object(ARRAY(x0)), x1, x4, x5, java.lang.Object(ARRAY(x0)), x1, x6, x3)
2002_1_binarySearch_InvokeMethod(2239_0_binarySearch_InvokeMethod(EOS(STATIC_2239), 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) → 2474_0_binarySearch_InvokeMethod(EOS(STATIC_2474), java.lang.Object(ARRAY(x0)), x1, x6, x7, java.lang.Object(ARRAY(x0)), x1, x4, x2)
2002_1_binarySearch_InvokeMethod(2309_0_binarySearch_InvokeMethod(EOS(STATIC_2309), 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) → 2474_0_binarySearch_InvokeMethod(EOS(STATIC_2474), java.lang.Object(ARRAY(x0)), x1, x6, x7, java.lang.Object(ARRAY(x0)), x1, x4, x2)
2002_1_binarySearch_InvokeMethod(2474_0_binarySearch_InvokeMethod(EOS(STATIC_2474), 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) → 2474_0_binarySearch_InvokeMethod(EOS(STATIC_2474), java.lang.Object(ARRAY(x0)), x1, x6, x7, java.lang.Object(ARRAY(x0)), x1, x4, x2)
2002_1_binarySearch_InvokeMethod(2107_0_binarySearch_ArrayAccess(EOS(STATIC_2107), 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) → 2474_0_binarySearch_InvokeMethod(EOS(STATIC_2474), java.lang.Object(ARRAY(x0)), x1, x5, x6, java.lang.Object(ARRAY(x0)), x1, x2, x3)
2002_1_binarySearch_InvokeMethod(2141_0_binarySearch_ArrayAccess(EOS(STATIC_2141), 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) → 2474_0_binarySearch_InvokeMethod(EOS(STATIC_2474), java.lang.Object(ARRAY(x0)), x1, x5, x6, java.lang.Object(ARRAY(x0)), x1, x2, x3)
2346_1_binarySearch_InvokeMethod(2402_0_binarySearch_InvokeMethod(EOS(STATIC_2402), java.lang.Object(ARRAY(x0)), x1, x2, x3), java.lang.Object(ARRAY(x0)), x1, x4, x3) → 2478_0_binarySearch_InvokeMethod(EOS(STATIC_2478), java.lang.Object(ARRAY(x0)), x1, x4, x3)
2346_1_binarySearch_InvokeMethod(2478_0_binarySearch_InvokeMethod(EOS(STATIC_2478), java.lang.Object(ARRAY(x0)), x1, x2, x3), java.lang.Object(ARRAY(x0)), x1, x4, x3) → 2478_0_binarySearch_InvokeMethod(EOS(STATIC_2478), java.lang.Object(ARRAY(x0)), x1, x4, x3)
2346_1_binarySearch_InvokeMethod(1912_0_binarySearch_Return(EOS(STATIC_1912), java.lang.Object(ARRAY(x0)), x1, x2, x3, 0), java.lang.Object(ARRAY(x0)), x1, x2, x3) → 2481_0_binarySearch_Return(EOS(STATIC_2481), 0)
2346_1_binarySearch_InvokeMethod(2239_0_binarySearch_InvokeMethod(EOS(STATIC_2239), java.lang.Object(ARRAY(x0)), x1, x2, x3, java.lang.Object(ARRAY(x0)), x1, x4, x5), java.lang.Object(ARRAY(x0)), x1, x4, x2) → 2478_0_binarySearch_InvokeMethod(EOS(STATIC_2478), java.lang.Object(ARRAY(x0)), x1, x4, x2)
2346_1_binarySearch_InvokeMethod(2309_0_binarySearch_InvokeMethod(EOS(STATIC_2309), java.lang.Object(ARRAY(x0)), x1, x2, x3, java.lang.Object(ARRAY(x0)), x1, x4, x5), java.lang.Object(ARRAY(x0)), x1, x4, x2) → 2478_0_binarySearch_InvokeMethod(EOS(STATIC_2478), java.lang.Object(ARRAY(x0)), x1, x4, x2)
2346_1_binarySearch_InvokeMethod(2474_0_binarySearch_InvokeMethod(EOS(STATIC_2474), java.lang.Object(ARRAY(x0)), x1, x2, x3, java.lang.Object(ARRAY(x0)), x1, x4, x5), java.lang.Object(ARRAY(x0)), x1, x4, x2) → 2478_0_binarySearch_InvokeMethod(EOS(STATIC_2478), java.lang.Object(ARRAY(x0)), x1, x4, x2)
2346_1_binarySearch_InvokeMethod(2107_0_binarySearch_ArrayAccess(EOS(STATIC_2107), java.lang.Object(ARRAY(x0)), x1, x2, x3, x4, java.lang.Object(ARRAY(x0)), x4), java.lang.Object(ARRAY(x0)), x1, x2, x3) → 2478_0_binarySearch_InvokeMethod(EOS(STATIC_2478), java.lang.Object(ARRAY(x0)), x1, x2, x3)
2346_1_binarySearch_InvokeMethod(2141_0_binarySearch_ArrayAccess(EOS(STATIC_2141), java.lang.Object(ARRAY(x0)), x1, x2, x3, x4, java.lang.Object(ARRAY(x0)), x4), java.lang.Object(ARRAY(x0)), x1, x2, x3) → 2478_0_binarySearch_InvokeMethod(EOS(STATIC_2478), java.lang.Object(ARRAY(x0)), x1, x2, x3)
2346_1_binarySearch_InvokeMethod(2312_0_binarySearch_Return(EOS(STATIC_2312), java.lang.Object(ARRAY(x0)), x1, x2, x3, 1), java.lang.Object(ARRAY(x0)), x1, x5, x2) → 2481_0_binarySearch_Return(EOS(STATIC_2481), 1)
2346_1_binarySearch_InvokeMethod(1972_0_binarySearch_Return(EOS(STATIC_1972), java.lang.Object(ARRAY(x0)), x1, x2, x3, x4, 1), java.lang.Object(ARRAY(x0)), x1, x2, x3) → 2481_0_binarySearch_Return(EOS(STATIC_2481), 1)
2346_1_binarySearch_InvokeMethod(2394_0_binarySearch_Return(EOS(STATIC_2394), 0), java.lang.Object(ARRAY(x1)), x2, x3, x4) → 2481_0_binarySearch_Return(EOS(STATIC_2481), 0)
2346_1_binarySearch_InvokeMethod(2405_0_binarySearch_Return(EOS(STATIC_2405), 1), java.lang.Object(ARRAY(x1)), x2, x3, x4) → 2481_0_binarySearch_Return(EOS(STATIC_2481), 1)
2346_1_binarySearch_InvokeMethod(2481_0_binarySearch_Return(EOS(STATIC_2481), x0), java.lang.Object(ARRAY(x1)), x2, x3, x4) → 2481_0_binarySearch_Return(EOS(STATIC_2481), x0)

Filtered ground terms:

1905_0_binarySearch_Load(x1, x2, x3, x4, x5, x6) → 1905_0_binarySearch_Load(x2, x3, x4, x5, x6)
Cond_2002_1_binarySearch_InvokeMethod2(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10) → Cond_2002_1_binarySearch_InvokeMethod2(x1, x3, x4, x5, x6, x7, x8, x9, x10)
2481_0_binarySearch_Return(x1, x2) → 2481_0_binarySearch_Return(x2)
Cond_2002_1_binarySearch_InvokeMethod1(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10) → Cond_2002_1_binarySearch_InvokeMethod1(x1, x3, x4, x5, x6, x7, x8, x9, x10)
2394_0_binarySearch_Return(x1, x2) → 2394_0_binarySearch_Return
1912_0_binarySearch_Return(x1, x2, x3, x4, x5, x6) → 1912_0_binarySearch_Return(x2, x3, x4, x5)
Cond_1905_0_binarySearch_Load(x1, x2, x3, x4, x5, x6, x7) → Cond_1905_0_binarySearch_Load(x1, x3, x4, x5, x6, x7)
2405_0_binarySearch_Return(x1, x2) → 2405_0_binarySearch_Return
1972_0_binarySearch_Return(x1, x2, x3, x4, x5, x6, x7) → 1972_0_binarySearch_Return(x2, x3, x4, x5, x6)
2312_0_binarySearch_Return(x1, x2, x3, x4, x5, x6) → 2312_0_binarySearch_Return(x2, x3, x4, x5)
2478_0_binarySearch_InvokeMethod(x1, x2, x3, x4, x5) → 2478_0_binarySearch_InvokeMethod(x2, x3, x4, x5)
2141_0_binarySearch_ArrayAccess(x1, x2, x3, x4, x5, x6, x7, x8) → 2141_0_binarySearch_ArrayAccess(x2, x3, x4, x5, x6, x7, x8)
2107_0_binarySearch_ArrayAccess(x1, x2, x3, x4, x5, x6, x7, x8) → 2107_0_binarySearch_ArrayAccess(x2, x3, x4, x5, x6, x7, x8)
2474_0_binarySearch_InvokeMethod(x1, x2, x3, x4, x5, x6, x7, x8, x9) → 2474_0_binarySearch_InvokeMethod(x2, x3, x4, x5, x6, x7, x8, x9)
2309_0_binarySearch_InvokeMethod(x1, x2, x3, x4, x5, x6, x7, x8, x9) → 2309_0_binarySearch_InvokeMethod(x2, x3, x4, x5, x6, x7, x8, x9)
2239_0_binarySearch_InvokeMethod(x1, x2, x3, x4, x5, x6, x7, x8, x9) → 2239_0_binarySearch_InvokeMethod(x2, x3, x4, x5, x6, x7, x8, x9)
2402_0_binarySearch_InvokeMethod(x1, x2, x3, x4, x5) → 2402_0_binarySearch_InvokeMethod(x2, x3, x4, x5)

Filtered duplicate args:

Cond_1905_0_binarySearch_Load(x1, x2, x3, x4, x5, x6) → Cond_1905_0_binarySearch_Load(x1, x2, x3, x5, x6)
2002_1_binarySearch_InvokeMethod(x1, x2, x3, x4, x5, x6, x7, x8, x9) → 2002_1_binarySearch_InvokeMethod(x1, x4, x5, x6, x7, x8, x9)
Cond_2002_1_binarySearch_InvokeMethod(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10) → Cond_2002_1_binarySearch_InvokeMethod(x1, x2, x5, x6)
Cond_2002_1_binarySearch_InvokeMethod1(x1, x2, x3, x4, x5, x6, x7, x8, x9) → Cond_2002_1_binarySearch_InvokeMethod1(x1, x4, x5, x6, x7, x8, x9)
Cond_2002_1_binarySearch_InvokeMethod2(x1, x2, x3, x4, x5, x6, x7, x8, x9) → Cond_2002_1_binarySearch_InvokeMethod2(x1, x4, x5, x6, x7, x8, x9)
2474_0_binarySearch_InvokeMethod(x1, x2, x3, x4, x5, x6, x7, x8) → 2474_0_binarySearch_InvokeMethod(x3, x4, x5, x6, x7, x8)
2239_0_binarySearch_InvokeMethod(x1, x2, x3, x4, x5, x6, x7, x8) → 2239_0_binarySearch_InvokeMethod(x3, x4, x5, x6, x7, x8)
2309_0_binarySearch_InvokeMethod(x1, x2, x3, x4, x5, x6, x7, x8) → 2309_0_binarySearch_InvokeMethod(x3, x4, x5, x6, x7, x8)
2107_0_binarySearch_ArrayAccess(x1, x2, x3, x4, x5, x6, x7) → 2107_0_binarySearch_ArrayAccess(x2, x3, x4, x6, x7)
2141_0_binarySearch_ArrayAccess(x1, x2, x3, x4, x5, x6, x7) → 2141_0_binarySearch_ArrayAccess(x2, x3, x4, x6, x7)

Filtered unneeded arguments:

2002_1_binarySearch_InvokeMethod(x1, x2, x3, x4, x5, x6, x7) → 2002_1_binarySearch_InvokeMethod(x1, x2, x3, x4)
2346_1_binarySearch_InvokeMethod(x1, x2, x3, x4, x5) → 2346_1_binarySearch_InvokeMethod(x1)
Cond_2002_1_binarySearch_InvokeMethod1(x1, x2, x3, x4, x5, x6, x7) → Cond_2002_1_binarySearch_InvokeMethod1(x1, x2, x3, x4)
Cond_2002_1_binarySearch_InvokeMethod2(x1, x2, x3, x4, x5, x6, x7) → Cond_2002_1_binarySearch_InvokeMethod2(x1, x2, x3, x4)
1912_0_binarySearch_Return(x1, x2, x3, x4) → 1912_0_binarySearch_Return(x1)

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

P rules:
1905_0_binarySearch_Load(java.lang.Object(ARRAY(x0)), x3, x2) → 2002_1_binarySearch_InvokeMethod(1905_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))))
2002_1_binarySearch_InvokeMethod(1912_0_binarySearch_Return(java.lang.Object(ARRAY(x0))), x5, x6, java.lang.Object(ARRAY(x0))) → 2346_1_binarySearch_InvokeMethod(1905_0_binarySearch_Load(java.lang.Object(ARRAY(x0)), x5, +(x6, 1))) | >(x6, -1)
2002_1_binarySearch_InvokeMethod(2394_0_binarySearch_Return, x3, x4, java.lang.Object(ARRAY(x1))) → 2346_1_binarySearch_InvokeMethod(1905_0_binarySearch_Load(java.lang.Object(ARRAY(x1)), x3, +(x4, 1))) | >(x4, -1)
2002_1_binarySearch_InvokeMethod(2481_0_binarySearch_Return(0), x3, x4, java.lang.Object(ARRAY(x1))) → 2346_1_binarySearch_InvokeMethod(1905_0_binarySearch_Load(java.lang.Object(ARRAY(x1)), x3, +(x4, 1))) | >(x4, -1)
R rules:
2002_1_binarySearch_InvokeMethod(2402_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x2, x3), x4, x5, java.lang.Object(ARRAY(x0))) → 2474_0_binarySearch_InvokeMethod(x4, x5, java.lang.Object(ARRAY(x0)), x1, x6, x3)
2002_1_binarySearch_InvokeMethod(2478_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x2, x3), x4, x5, java.lang.Object(ARRAY(x0))) → 2474_0_binarySearch_InvokeMethod(x4, x5, java.lang.Object(ARRAY(x0)), x1, x6, x3)
2002_1_binarySearch_InvokeMethod(2239_0_binarySearch_InvokeMethod(x2, x3, java.lang.Object(ARRAY(x0)), x1, x4, x5), x6, x7, java.lang.Object(ARRAY(x0))) → 2474_0_binarySearch_InvokeMethod(x6, x7, java.lang.Object(ARRAY(x0)), x1, x4, x2)
2002_1_binarySearch_InvokeMethod(2309_0_binarySearch_InvokeMethod(x2, x3, java.lang.Object(ARRAY(x0)), x1, x4, x5), x6, x7, java.lang.Object(ARRAY(x0))) → 2474_0_binarySearch_InvokeMethod(x6, x7, java.lang.Object(ARRAY(x0)), x1, x4, x2)
2002_1_binarySearch_InvokeMethod(2474_0_binarySearch_InvokeMethod(x2, x3, java.lang.Object(ARRAY(x0)), x1, x4, x5), x6, x7, java.lang.Object(ARRAY(x0))) → 2474_0_binarySearch_InvokeMethod(x6, x7, java.lang.Object(ARRAY(x0)), x1, x4, x2)
2002_1_binarySearch_InvokeMethod(2107_0_binarySearch_ArrayAccess(x1, x2, x3, java.lang.Object(ARRAY(x0)), x4), x5, x6, java.lang.Object(ARRAY(x0))) → 2474_0_binarySearch_InvokeMethod(x5, x6, java.lang.Object(ARRAY(x0)), x1, x2, x3)
2002_1_binarySearch_InvokeMethod(2141_0_binarySearch_ArrayAccess(x1, x2, x3, java.lang.Object(ARRAY(x0)), x4), x5, x6, java.lang.Object(ARRAY(x0))) → 2474_0_binarySearch_InvokeMethod(x5, x6, java.lang.Object(ARRAY(x0)), x1, x2, x3)
2346_1_binarySearch_InvokeMethod(2402_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x2, x3)) → 2478_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x4, x3)
2346_1_binarySearch_InvokeMethod(2478_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x2, x3)) → 2478_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x4, x3)
2346_1_binarySearch_InvokeMethod(1912_0_binarySearch_Return(java.lang.Object(ARRAY(x0)))) → 2481_0_binarySearch_Return(0)
2346_1_binarySearch_InvokeMethod(2239_0_binarySearch_InvokeMethod(x2, x3, java.lang.Object(ARRAY(x0)), x1, x4, x5)) → 2478_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x4, x2)
2346_1_binarySearch_InvokeMethod(2309_0_binarySearch_InvokeMethod(x2, x3, java.lang.Object(ARRAY(x0)), x1, x4, x5)) → 2478_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x4, x2)
2346_1_binarySearch_InvokeMethod(2474_0_binarySearch_InvokeMethod(x2, x3, java.lang.Object(ARRAY(x0)), x1, x4, x5)) → 2478_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x4, x2)
2346_1_binarySearch_InvokeMethod(2107_0_binarySearch_ArrayAccess(x1, x2, x3, java.lang.Object(ARRAY(x0)), x4)) → 2478_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x2, x3)
2346_1_binarySearch_InvokeMethod(2141_0_binarySearch_ArrayAccess(x1, x2, x3, java.lang.Object(ARRAY(x0)), x4)) → 2478_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x2, x3)
2346_1_binarySearch_InvokeMethod(2312_0_binarySearch_Return(java.lang.Object(ARRAY(x0)), x1, x2, x3)) → 2481_0_binarySearch_Return(1)
2346_1_binarySearch_InvokeMethod(1972_0_binarySearch_Return(java.lang.Object(ARRAY(x0)), x1, x2, x3, x4)) → 2481_0_binarySearch_Return(1)
2346_1_binarySearch_InvokeMethod(2394_0_binarySearch_Return) → 2481_0_binarySearch_Return(0)
2346_1_binarySearch_InvokeMethod(2405_0_binarySearch_Return) → 2481_0_binarySearch_Return(1)
2346_1_binarySearch_InvokeMethod(2481_0_binarySearch_Return(x0)) → 2481_0_binarySearch_Return(x0)

Performed bisimulation on rules. Used the following equivalence classes: {[2402_0_binarySearch_InvokeMethod_4, 2478_0_binarySearch_InvokeMethod_4, 2312_0_binarySearch_Return_4]=2402_0_binarySearch_InvokeMethod_4, [2474_0_binarySearch_InvokeMethod_6, 2239_0_binarySearch_InvokeMethod_6, 2309_0_binarySearch_InvokeMethod_6]=2474_0_binarySearch_InvokeMethod_6, [2107_0_binarySearch_ArrayAccess_5, 2141_0_binarySearch_ArrayAccess_5]=2107_0_binarySearch_ArrayAccess_5, [2394_0_binarySearch_Return, 2405_0_binarySearch_Return]=2394_0_binarySearch_Return}

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

P rules:
1905_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0)), x3, x2) → COND_1905_0_BINARYSEARCH_LOAD(&&(&&(>=(x3, x2), >(x0, +(x2, /(-(x3, x2), 2)))), <=(0, +(x2, /(-(x3, x2), 2)))), java.lang.Object(ARRAY(x0)), x3, x2)
COND_1905_0_BINARYSEARCH_LOAD(TRUE, java.lang.Object(ARRAY(x0)), x3, x2) → 2002_1_BINARYSEARCH_INVOKEMETHOD(1905_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_1905_0_BINARYSEARCH_LOAD(TRUE, java.lang.Object(ARRAY(x0)), x3, x2) → 1905_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0)), -(+(x2, /(-(x3, x2), 2)), 1), x2)
2002_1_BINARYSEARCH_INVOKEMETHOD(1912_0_binarySearch_Return(java.lang.Object(ARRAY(x0))), x5, x6, java.lang.Object(ARRAY(x0))) → COND_2002_1_BINARYSEARCH_INVOKEMETHOD(>(x6, -1), 1912_0_binarySearch_Return(java.lang.Object(ARRAY(x0))), x5, x6, java.lang.Object(ARRAY(x0)))
COND_2002_1_BINARYSEARCH_INVOKEMETHOD(TRUE, 1912_0_binarySearch_Return(java.lang.Object(ARRAY(x0))), x5, x6, java.lang.Object(ARRAY(x0))) → 1905_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0)), x5, +(x6, 1))
2002_1_BINARYSEARCH_INVOKEMETHOD(2394_0_binarySearch_Return, x3, x4, java.lang.Object(ARRAY(x1))) → COND_2002_1_BINARYSEARCH_INVOKEMETHOD1(>(x4, -1), 2394_0_binarySearch_Return, x3, x4, java.lang.Object(ARRAY(x1)))
COND_2002_1_BINARYSEARCH_INVOKEMETHOD1(TRUE, 2394_0_binarySearch_Return, x3, x4, java.lang.Object(ARRAY(x1))) → 1905_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x1)), x3, +(x4, 1))
2002_1_BINARYSEARCH_INVOKEMETHOD(2481_0_binarySearch_Return(0), x3, x4, java.lang.Object(ARRAY(x1))) → COND_2002_1_BINARYSEARCH_INVOKEMETHOD2(>(x4, -1), 2481_0_binarySearch_Return(0), x3, x4, java.lang.Object(ARRAY(x1)))
COND_2002_1_BINARYSEARCH_INVOKEMETHOD2(TRUE, 2481_0_binarySearch_Return(0), x3, x4, java.lang.Object(ARRAY(x1))) → 1905_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x1)), x3, +(x4, 1))
R rules:
2002_1_binarySearch_InvokeMethod(2402_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x2, x3), x4, x5, java.lang.Object(ARRAY(x0))) → 2474_0_binarySearch_InvokeMethod(x4, x5, java.lang.Object(ARRAY(x0)), x1, x6, x3)
2002_1_binarySearch_InvokeMethod(2474_0_binarySearch_InvokeMethod(x2, x3, java.lang.Object(ARRAY(x0)), x1, x4, x5), x6, x7, java.lang.Object(ARRAY(x0))) → 2474_0_binarySearch_InvokeMethod(x6, x7, java.lang.Object(ARRAY(x0)), x1, x4, x2)
2002_1_binarySearch_InvokeMethod(2107_0_binarySearch_ArrayAccess(x1, x2, x3, java.lang.Object(ARRAY(x0)), x4), x5, x6, java.lang.Object(ARRAY(x0))) → 2474_0_binarySearch_InvokeMethod(x5, x6, java.lang.Object(ARRAY(x0)), x1, x2, x3)
2346_1_binarySearch_InvokeMethod(2402_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x2, x3)) → 2402_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x4, x3)
2346_1_binarySearch_InvokeMethod(1912_0_binarySearch_Return(java.lang.Object(ARRAY(x0)))) → 2481_0_binarySearch_Return(0)
2346_1_binarySearch_InvokeMethod(2474_0_binarySearch_InvokeMethod(x2, x3, java.lang.Object(ARRAY(x0)), x1, x4, x5)) → 2402_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x4, x2)
2346_1_binarySearch_InvokeMethod(2107_0_binarySearch_ArrayAccess(x1, x2, x3, java.lang.Object(ARRAY(x0)), x4)) → 2402_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x2, x3)
2346_1_binarySearch_InvokeMethod(2402_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x2, x3)) → 2481_0_binarySearch_Return(1)
2346_1_binarySearch_InvokeMethod(1972_0_binarySearch_Return(java.lang.Object(ARRAY(x0)), x1, x2, x3, x4)) → 2481_0_binarySearch_Return(1)
2346_1_binarySearch_InvokeMethod(2394_0_binarySearch_Return) → 2481_0_binarySearch_Return(0)
2346_1_binarySearch_InvokeMethod(2394_0_binarySearch_Return) → 2481_0_binarySearch_Return(1)
2346_1_binarySearch_InvokeMethod(2481_0_binarySearch_Return(x0)) → 2481_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:
2002_1_binarySearch_InvokeMethod(2402_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x2, x3), x4, x5, java.lang.Object(ARRAY(x0))) → 2474_0_binarySearch_InvokeMethod(x4, x5, java.lang.Object(ARRAY(x0)), x1, x6, x3)
2002_1_binarySearch_InvokeMethod(2474_0_binarySearch_InvokeMethod(x2, x3, java.lang.Object(ARRAY(x0)), x1, x4, x5), x6, x7, java.lang.Object(ARRAY(x0))) → 2474_0_binarySearch_InvokeMethod(x6, x7, java.lang.Object(ARRAY(x0)), x1, x4, x2)
2002_1_binarySearch_InvokeMethod(2107_0_binarySearch_ArrayAccess(x1, x2, x3, java.lang.Object(ARRAY(x0)), x4), x5, x6, java.lang.Object(ARRAY(x0))) → 2474_0_binarySearch_InvokeMethod(x5, x6, java.lang.Object(ARRAY(x0)), x1, x2, x3)
2346_1_binarySearch_InvokeMethod(2402_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x2, x3)) → 2402_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x4, x3)
2346_1_binarySearch_InvokeMethod(1912_0_binarySearch_Return(java.lang.Object(ARRAY(x0)))) → 2481_0_binarySearch_Return(0)
2346_1_binarySearch_InvokeMethod(2474_0_binarySearch_InvokeMethod(x2, x3, java.lang.Object(ARRAY(x0)), x1, x4, x5)) → 2402_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x4, x2)
2346_1_binarySearch_InvokeMethod(2107_0_binarySearch_ArrayAccess(x1, x2, x3, java.lang.Object(ARRAY(x0)), x4)) → 2402_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x2, x3)
2346_1_binarySearch_InvokeMethod(2402_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x2, x3)) → 2481_0_binarySearch_Return(1)
2346_1_binarySearch_InvokeMethod(1972_0_binarySearch_Return(java.lang.Object(ARRAY(x0)), x1, x2, x3, x4)) → 2481_0_binarySearch_Return(1)
2346_1_binarySearch_InvokeMethod(2394_0_binarySearch_Return) → 2481_0_binarySearch_Return(0)
2346_1_binarySearch_InvokeMethod(2394_0_binarySearch_Return) → 2481_0_binarySearch_Return(1)
2346_1_binarySearch_InvokeMethod(2481_0_binarySearch_Return(x0)) → 2481_0_binarySearch_Return(x0)

The integer pair graph contains the following rules and edges:
(0): 1905_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[0])), x3[0], x2[0]) → COND_1905_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_1905_0_BINARYSEARCH_LOAD(TRUE, java.lang.Object(ARRAY(x0[1])), x3[1], x2[1]) → 2002_1_BINARYSEARCH_INVOKEMETHOD(1905_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_1905_0_BINARYSEARCH_LOAD(TRUE, java.lang.Object(ARRAY(x0[2])), x3[2], x2[2]) → 1905_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[2])), x2[2] + x3[2] - x2[2] / 2 - 1, x2[2])
(3): 2002_1_BINARYSEARCH_INVOKEMETHOD(1912_0_binarySearch_Return(java.lang.Object(ARRAY(x0[3]))), x5[3], x6[3], java.lang.Object(ARRAY(x0[3]))) → COND_2002_1_BINARYSEARCH_INVOKEMETHOD(x6[3] > -1, 1912_0_binarySearch_Return(java.lang.Object(ARRAY(x0[3]))), x5[3], x6[3], java.lang.Object(ARRAY(x0[3])))
(4): COND_2002_1_BINARYSEARCH_INVOKEMETHOD(TRUE, 1912_0_binarySearch_Return(java.lang.Object(ARRAY(x0[4]))), x5[4], x6[4], java.lang.Object(ARRAY(x0[4]))) → 1905_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[4])), x5[4], x6[4] + 1)
(5): 2002_1_BINARYSEARCH_INVOKEMETHOD(2394_0_binarySearch_Return, x3[5], x4[5], java.lang.Object(ARRAY(x1[5]))) → COND_2002_1_BINARYSEARCH_INVOKEMETHOD1(x4[5] > -1, 2394_0_binarySearch_Return, x3[5], x4[5], java.lang.Object(ARRAY(x1[5])))
(6): COND_2002_1_BINARYSEARCH_INVOKEMETHOD1(TRUE, 2394_0_binarySearch_Return, x3[6], x4[6], java.lang.Object(ARRAY(x1[6]))) → 1905_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x1[6])), x3[6], x4[6] + 1)
(7): 2002_1_BINARYSEARCH_INVOKEMETHOD(2481_0_binarySearch_Return(0), x3[7], x4[7], java.lang.Object(ARRAY(x1[7]))) → COND_2002_1_BINARYSEARCH_INVOKEMETHOD2(x4[7] > -1, 2481_0_binarySearch_Return(0), x3[7], x4[7], java.lang.Object(ARRAY(x1[7])))
(8): COND_2002_1_BINARYSEARCH_INVOKEMETHOD2(TRUE, 2481_0_binarySearch_Return(0), x3[8], x4[8], java.lang.Object(ARRAY(x1[8]))) → 1905_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 (1905_0_binarySearch_Load(java.lang.Object(ARRAY(x0[1])), x2[1] + x3[1] - x2[1] / 2 - 1, x2[1]) →* 1912_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 (1905_0_binarySearch_Load(java.lang.Object(ARRAY(x0[1])), x2[1] + x3[1] - x2[1] / 2 - 1, x2[1]) →* 2394_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 (1905_0_binarySearch_Load(java.lang.Object(ARRAY(x0[1])), x2[1] + x3[1] - x2[1] / 2 - 1, x2[1]) →* 2481_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] > -11912_0_binarySearch_Return(java.lang.Object(ARRAY(x0[3]))) →* 1912_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:
2002_1_binarySearch_InvokeMethod(2402_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x2, x3), x4, x5, java.lang.Object(ARRAY(x0)))
2002_1_binarySearch_InvokeMethod(2474_0_binarySearch_InvokeMethod(x0, x1, java.lang.Object(ARRAY(x2)), x3, x4, x5), x6, x7, java.lang.Object(ARRAY(x2)))
2002_1_binarySearch_InvokeMethod(2107_0_binarySearch_ArrayAccess(x0, x1, x2, java.lang.Object(ARRAY(x3)), x4), x5, x6, java.lang.Object(ARRAY(x3)))
2346_1_binarySearch_InvokeMethod(2402_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x2, x3))
2346_1_binarySearch_InvokeMethod(1912_0_binarySearch_Return(java.lang.Object(ARRAY(x0))))
2346_1_binarySearch_InvokeMethod(2474_0_binarySearch_InvokeMethod(x0, x1, java.lang.Object(ARRAY(x2)), x3, x4, x5))
2346_1_binarySearch_InvokeMethod(2107_0_binarySearch_ArrayAccess(x0, x1, x2, java.lang.Object(ARRAY(x3)), x4))
2346_1_binarySearch_InvokeMethod(1972_0_binarySearch_Return(java.lang.Object(ARRAY(x0)), x1, x2, x3, x4))
2346_1_binarySearch_InvokeMethod(2394_0_binarySearch_Return)
2346_1_binarySearch_InvokeMethod(2481_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@3c55e637 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 1905_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0)), x3, x2) → COND_1905_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 1905_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[0])), x3[0], x2[0]) → COND_1905_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_1905_0_BINARYSEARCH_LOAD(TRUE, java.lang.Object(ARRAY(x0[1])), x3[1], x2[1]) → 2002_1_BINARYSEARCH_INVOKEMETHOD(1905_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]1905_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[0])), x3[0], x2[0])≥NonInfC∧1905_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[0])), x3[0], x2[0])≥COND_1905_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_1905_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))))=TRUE1905_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[0])), x3[0], x2[0])≥NonInfC∧1905_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[0])), x3[0], x2[0])≥COND_1905_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_1905_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_1905_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_1905_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_1905_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_1905_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 1905_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[0])), x3[0], x2[0]) → COND_1905_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_1905_0_BINARYSEARCH_LOAD(TRUE, java.lang.Object(ARRAY(x0[2])), x3[2], x2[2]) → 1905_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]1905_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[0])), x3[0], x2[0])≥NonInfC∧1905_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[0])), x3[0], x2[0])≥COND_1905_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_1905_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))))=TRUE1905_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[0])), x3[0], x2[0])≥NonInfC∧1905_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[0])), x3[0], x2[0])≥COND_1905_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_1905_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_1905_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_1905_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_1905_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_1905_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_1905_0_BINARYSEARCH_LOAD(TRUE, java.lang.Object(ARRAY(x0)), x3, x2) → 2002_1_BINARYSEARCH_INVOKEMETHOD(1905_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 1905_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[0])), x3[0], x2[0]) → COND_1905_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_1905_0_BINARYSEARCH_LOAD(TRUE, java.lang.Object(ARRAY(x0[1])), x3[1], x2[1]) → 2002_1_BINARYSEARCH_INVOKEMETHOD(1905_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_1905_0_BINARYSEARCH_LOAD(TRUE, java.lang.Object(ARRAY(x0[1])), x3[1], x2[1])≥NonInfC∧COND_1905_0_BINARYSEARCH_LOAD(TRUE, java.lang.Object(ARRAY(x0[1])), x3[1], x2[1])≥2002_1_BINARYSEARCH_INVOKEMETHOD(1905_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(2002_1_BINARYSEARCH_INVOKEMETHOD(1905_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_1905_0_BINARYSEARCH_LOAD(TRUE, java.lang.Object(ARRAY(x0[0])), x3[0], x2[0])≥NonInfC∧COND_1905_0_BINARYSEARCH_LOAD(TRUE, java.lang.Object(ARRAY(x0[0])), x3[0], x2[0])≥2002_1_BINARYSEARCH_INVOKEMETHOD(1905_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(2002_1_BINARYSEARCH_INVOKEMETHOD(1905_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(2002_1_BINARYSEARCH_INVOKEMETHOD(1905_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(2002_1_BINARYSEARCH_INVOKEMETHOD(1905_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(2002_1_BINARYSEARCH_INVOKEMETHOD(1905_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(2002_1_BINARYSEARCH_INVOKEMETHOD(1905_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_1905_0_BINARYSEARCH_LOAD(TRUE, java.lang.Object(ARRAY(x0)), x3, x2) → 1905_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0)), -(+(x2, /(-(x3, x2), 2)), 1), x2) the following chains were created:
• We consider the chain 1905_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[0])), x3[0], x2[0]) → COND_1905_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_1905_0_BINARYSEARCH_LOAD(TRUE, java.lang.Object(ARRAY(x0[2])), x3[2], x2[2]) → 1905_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_1905_0_BINARYSEARCH_LOAD(TRUE, java.lang.Object(ARRAY(x0[2])), x3[2], x2[2])≥NonInfC∧COND_1905_0_BINARYSEARCH_LOAD(TRUE, java.lang.Object(ARRAY(x0[2])), x3[2], x2[2])≥1905_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[2])), -(+(x2[2], /(-(x3[2], x2[2]), 2)), 1), x2[2])∧(UIncreasing(1905_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_1905_0_BINARYSEARCH_LOAD(TRUE, java.lang.Object(ARRAY(x0[0])), x3[0], x2[0])≥NonInfC∧COND_1905_0_BINARYSEARCH_LOAD(TRUE, java.lang.Object(ARRAY(x0[0])), x3[0], x2[0])≥1905_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[0])), -(+(x2[0], /(-(x3[0], x2[0]), 2)), 1), x2[0])∧(UIncreasing(1905_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(1905_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(1905_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(1905_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(1905_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 2002_1_BINARYSEARCH_INVOKEMETHOD(1912_0_binarySearch_Return(java.lang.Object(ARRAY(x0))), x5, x6, java.lang.Object(ARRAY(x0))) → COND_2002_1_BINARYSEARCH_INVOKEMETHOD(>(x6, -1), 1912_0_binarySearch_Return(java.lang.Object(ARRAY(x0))), x5, x6, java.lang.Object(ARRAY(x0))) the following chains were created:
• We consider the chain 2002_1_BINARYSEARCH_INVOKEMETHOD(1912_0_binarySearch_Return(java.lang.Object(ARRAY(x0[3]))), x5[3], x6[3], java.lang.Object(ARRAY(x0[3]))) → COND_2002_1_BINARYSEARCH_INVOKEMETHOD(>(x6[3], -1), 1912_0_binarySearch_Return(java.lang.Object(ARRAY(x0[3]))), x5[3], x6[3], java.lang.Object(ARRAY(x0[3]))), COND_2002_1_BINARYSEARCH_INVOKEMETHOD(TRUE, 1912_0_binarySearch_Return(java.lang.Object(ARRAY(x0[4]))), x5[4], x6[4], java.lang.Object(ARRAY(x0[4]))) → 1905_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[4])), x5[4], +(x6[4], 1)) which results in the following constraint:

(25)    (>(x6[3], -1)=TRUE1912_0_binarySearch_Return(java.lang.Object(ARRAY(x0[3])))=1912_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])) ⇒ 2002_1_BINARYSEARCH_INVOKEMETHOD(1912_0_binarySearch_Return(java.lang.Object(ARRAY(x0[3]))), x5[3], x6[3], java.lang.Object(ARRAY(x0[3])))≥NonInfC∧2002_1_BINARYSEARCH_INVOKEMETHOD(1912_0_binarySearch_Return(java.lang.Object(ARRAY(x0[3]))), x5[3], x6[3], java.lang.Object(ARRAY(x0[3])))≥COND_2002_1_BINARYSEARCH_INVOKEMETHOD(>(x6[3], -1), 1912_0_binarySearch_Return(java.lang.Object(ARRAY(x0[3]))), x5[3], x6[3], java.lang.Object(ARRAY(x0[3])))∧(UIncreasing(COND_2002_1_BINARYSEARCH_INVOKEMETHOD(>(x6[3], -1), 1912_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)=TRUE2002_1_BINARYSEARCH_INVOKEMETHOD(1912_0_binarySearch_Return(java.lang.Object(ARRAY(x0[3]))), x5[3], x6[3], java.lang.Object(ARRAY(x0[3])))≥NonInfC∧2002_1_BINARYSEARCH_INVOKEMETHOD(1912_0_binarySearch_Return(java.lang.Object(ARRAY(x0[3]))), x5[3], x6[3], java.lang.Object(ARRAY(x0[3])))≥COND_2002_1_BINARYSEARCH_INVOKEMETHOD(>(x6[3], -1), 1912_0_binarySearch_Return(java.lang.Object(ARRAY(x0[3]))), x5[3], x6[3], java.lang.Object(ARRAY(x0[3])))∧(UIncreasing(COND_2002_1_BINARYSEARCH_INVOKEMETHOD(>(x6[3], -1), 1912_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_2002_1_BINARYSEARCH_INVOKEMETHOD(>(x6[3], -1), 1912_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_2002_1_BINARYSEARCH_INVOKEMETHOD(>(x6[3], -1), 1912_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_2002_1_BINARYSEARCH_INVOKEMETHOD(>(x6[3], -1), 1912_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_2002_1_BINARYSEARCH_INVOKEMETHOD(>(x6[3], -1), 1912_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_2002_1_BINARYSEARCH_INVOKEMETHOD(TRUE, 1912_0_binarySearch_Return(java.lang.Object(ARRAY(x0))), x5, x6, java.lang.Object(ARRAY(x0))) → 1905_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0)), x5, +(x6, 1)) the following chains were created:
• We consider the chain 2002_1_BINARYSEARCH_INVOKEMETHOD(1912_0_binarySearch_Return(java.lang.Object(ARRAY(x0[3]))), x5[3], x6[3], java.lang.Object(ARRAY(x0[3]))) → COND_2002_1_BINARYSEARCH_INVOKEMETHOD(>(x6[3], -1), 1912_0_binarySearch_Return(java.lang.Object(ARRAY(x0[3]))), x5[3], x6[3], java.lang.Object(ARRAY(x0[3]))), COND_2002_1_BINARYSEARCH_INVOKEMETHOD(TRUE, 1912_0_binarySearch_Return(java.lang.Object(ARRAY(x0[4]))), x5[4], x6[4], java.lang.Object(ARRAY(x0[4]))) → 1905_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[4])), x5[4], +(x6[4], 1)), 1905_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[0])), x3[0], x2[0]) → COND_1905_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)=TRUE1912_0_binarySearch_Return(java.lang.Object(ARRAY(x0[3])))=1912_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_2002_1_BINARYSEARCH_INVOKEMETHOD(TRUE, 1912_0_binarySearch_Return(java.lang.Object(ARRAY(x0[4]))), x5[4], x6[4], java.lang.Object(ARRAY(x0[4])))≥NonInfC∧COND_2002_1_BINARYSEARCH_INVOKEMETHOD(TRUE, 1912_0_binarySearch_Return(java.lang.Object(ARRAY(x0[4]))), x5[4], x6[4], java.lang.Object(ARRAY(x0[4])))≥1905_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[4])), x5[4], +(x6[4], 1))∧(UIncreasing(1905_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_2002_1_BINARYSEARCH_INVOKEMETHOD(TRUE, 1912_0_binarySearch_Return(java.lang.Object(ARRAY(x0[3]))), x5[3], x6[3], java.lang.Object(ARRAY(x0[3])))≥NonInfC∧COND_2002_1_BINARYSEARCH_INVOKEMETHOD(TRUE, 1912_0_binarySearch_Return(java.lang.Object(ARRAY(x0[3]))), x5[3], x6[3], java.lang.Object(ARRAY(x0[3])))≥1905_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[3])), x5[3], +(x6[3], 1))∧(UIncreasing(1905_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(1905_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(1905_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(1905_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(1905_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 2002_1_BINARYSEARCH_INVOKEMETHOD(2394_0_binarySearch_Return, x3, x4, java.lang.Object(ARRAY(x1))) → COND_2002_1_BINARYSEARCH_INVOKEMETHOD1(>(x4, -1), 2394_0_binarySearch_Return, x3, x4, java.lang.Object(ARRAY(x1))) the following chains were created:
• We consider the chain 2002_1_BINARYSEARCH_INVOKEMETHOD(2394_0_binarySearch_Return, x3[5], x4[5], java.lang.Object(ARRAY(x1[5]))) → COND_2002_1_BINARYSEARCH_INVOKEMETHOD1(>(x4[5], -1), 2394_0_binarySearch_Return, x3[5], x4[5], java.lang.Object(ARRAY(x1[5]))), COND_2002_1_BINARYSEARCH_INVOKEMETHOD1(TRUE, 2394_0_binarySearch_Return, x3[6], x4[6], java.lang.Object(ARRAY(x1[6]))) → 1905_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])) ⇒ 2002_1_BINARYSEARCH_INVOKEMETHOD(2394_0_binarySearch_Return, x3[5], x4[5], java.lang.Object(ARRAY(x1[5])))≥NonInfC∧2002_1_BINARYSEARCH_INVOKEMETHOD(2394_0_binarySearch_Return, x3[5], x4[5], java.lang.Object(ARRAY(x1[5])))≥COND_2002_1_BINARYSEARCH_INVOKEMETHOD1(>(x4[5], -1), 2394_0_binarySearch_Return, x3[5], x4[5], java.lang.Object(ARRAY(x1[5])))∧(UIncreasing(COND_2002_1_BINARYSEARCH_INVOKEMETHOD1(>(x4[5], -1), 2394_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)=TRUE2002_1_BINARYSEARCH_INVOKEMETHOD(2394_0_binarySearch_Return, x3[5], x4[5], java.lang.Object(ARRAY(x1[5])))≥NonInfC∧2002_1_BINARYSEARCH_INVOKEMETHOD(2394_0_binarySearch_Return, x3[5], x4[5], java.lang.Object(ARRAY(x1[5])))≥COND_2002_1_BINARYSEARCH_INVOKEMETHOD1(>(x4[5], -1), 2394_0_binarySearch_Return, x3[5], x4[5], java.lang.Object(ARRAY(x1[5])))∧(UIncreasing(COND_2002_1_BINARYSEARCH_INVOKEMETHOD1(>(x4[5], -1), 2394_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_2002_1_BINARYSEARCH_INVOKEMETHOD1(>(x4[5], -1), 2394_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_2002_1_BINARYSEARCH_INVOKEMETHOD1(>(x4[5], -1), 2394_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_2002_1_BINARYSEARCH_INVOKEMETHOD1(>(x4[5], -1), 2394_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_2002_1_BINARYSEARCH_INVOKEMETHOD1(>(x4[5], -1), 2394_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_2002_1_BINARYSEARCH_INVOKEMETHOD1(TRUE, 2394_0_binarySearch_Return, x3, x4, java.lang.Object(ARRAY(x1))) → 1905_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x1)), x3, +(x4, 1)) the following chains were created:
• We consider the chain 2002_1_BINARYSEARCH_INVOKEMETHOD(2394_0_binarySearch_Return, x3[5], x4[5], java.lang.Object(ARRAY(x1[5]))) → COND_2002_1_BINARYSEARCH_INVOKEMETHOD1(>(x4[5], -1), 2394_0_binarySearch_Return, x3[5], x4[5], java.lang.Object(ARRAY(x1[5]))), COND_2002_1_BINARYSEARCH_INVOKEMETHOD1(TRUE, 2394_0_binarySearch_Return, x3[6], x4[6], java.lang.Object(ARRAY(x1[6]))) → 1905_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x1[6])), x3[6], +(x4[6], 1)), 1905_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[0])), x3[0], x2[0]) → COND_1905_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_2002_1_BINARYSEARCH_INVOKEMETHOD1(TRUE, 2394_0_binarySearch_Return, x3[6], x4[6], java.lang.Object(ARRAY(x1[6])))≥NonInfC∧COND_2002_1_BINARYSEARCH_INVOKEMETHOD1(TRUE, 2394_0_binarySearch_Return, x3[6], x4[6], java.lang.Object(ARRAY(x1[6])))≥1905_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x1[6])), x3[6], +(x4[6], 1))∧(UIncreasing(1905_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_2002_1_BINARYSEARCH_INVOKEMETHOD1(TRUE, 2394_0_binarySearch_Return, x3[5], x4[5], java.lang.Object(ARRAY(x1[5])))≥NonInfC∧COND_2002_1_BINARYSEARCH_INVOKEMETHOD1(TRUE, 2394_0_binarySearch_Return, x3[5], x4[5], java.lang.Object(ARRAY(x1[5])))≥1905_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x1[5])), x3[5], +(x4[5], 1))∧(UIncreasing(1905_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(1905_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(1905_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(1905_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(1905_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 2002_1_BINARYSEARCH_INVOKEMETHOD(2481_0_binarySearch_Return(0), x3, x4, java.lang.Object(ARRAY(x1))) → COND_2002_1_BINARYSEARCH_INVOKEMETHOD2(>(x4, -1), 2481_0_binarySearch_Return(0), x3, x4, java.lang.Object(ARRAY(x1))) the following chains were created:
• We consider the chain 2002_1_BINARYSEARCH_INVOKEMETHOD(2481_0_binarySearch_Return(0), x3[7], x4[7], java.lang.Object(ARRAY(x1[7]))) → COND_2002_1_BINARYSEARCH_INVOKEMETHOD2(>(x4[7], -1), 2481_0_binarySearch_Return(0), x3[7], x4[7], java.lang.Object(ARRAY(x1[7]))), COND_2002_1_BINARYSEARCH_INVOKEMETHOD2(TRUE, 2481_0_binarySearch_Return(0), x3[8], x4[8], java.lang.Object(ARRAY(x1[8]))) → 1905_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])) ⇒ 2002_1_BINARYSEARCH_INVOKEMETHOD(2481_0_binarySearch_Return(0), x3[7], x4[7], java.lang.Object(ARRAY(x1[7])))≥NonInfC∧2002_1_BINARYSEARCH_INVOKEMETHOD(2481_0_binarySearch_Return(0), x3[7], x4[7], java.lang.Object(ARRAY(x1[7])))≥COND_2002_1_BINARYSEARCH_INVOKEMETHOD2(>(x4[7], -1), 2481_0_binarySearch_Return(0), x3[7], x4[7], java.lang.Object(ARRAY(x1[7])))∧(UIncreasing(COND_2002_1_BINARYSEARCH_INVOKEMETHOD2(>(x4[7], -1), 2481_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)=TRUE2002_1_BINARYSEARCH_INVOKEMETHOD(2481_0_binarySearch_Return(0), x3[7], x4[7], java.lang.Object(ARRAY(x1[7])))≥NonInfC∧2002_1_BINARYSEARCH_INVOKEMETHOD(2481_0_binarySearch_Return(0), x3[7], x4[7], java.lang.Object(ARRAY(x1[7])))≥COND_2002_1_BINARYSEARCH_INVOKEMETHOD2(>(x4[7], -1), 2481_0_binarySearch_Return(0), x3[7], x4[7], java.lang.Object(ARRAY(x1[7])))∧(UIncreasing(COND_2002_1_BINARYSEARCH_INVOKEMETHOD2(>(x4[7], -1), 2481_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_2002_1_BINARYSEARCH_INVOKEMETHOD2(>(x4[7], -1), 2481_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_2002_1_BINARYSEARCH_INVOKEMETHOD2(>(x4[7], -1), 2481_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_2002_1_BINARYSEARCH_INVOKEMETHOD2(>(x4[7], -1), 2481_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_2002_1_BINARYSEARCH_INVOKEMETHOD2(>(x4[7], -1), 2481_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_2002_1_BINARYSEARCH_INVOKEMETHOD2(TRUE, 2481_0_binarySearch_Return(0), x3, x4, java.lang.Object(ARRAY(x1))) → 1905_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x1)), x3, +(x4, 1)) the following chains were created:
• We consider the chain 2002_1_BINARYSEARCH_INVOKEMETHOD(2481_0_binarySearch_Return(0), x3[7], x4[7], java.lang.Object(ARRAY(x1[7]))) → COND_2002_1_BINARYSEARCH_INVOKEMETHOD2(>(x4[7], -1), 2481_0_binarySearch_Return(0), x3[7], x4[7], java.lang.Object(ARRAY(x1[7]))), COND_2002_1_BINARYSEARCH_INVOKEMETHOD2(TRUE, 2481_0_binarySearch_Return(0), x3[8], x4[8], java.lang.Object(ARRAY(x1[8]))) → 1905_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x1[8])), x3[8], +(x4[8], 1)), 1905_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[0])), x3[0], x2[0]) → COND_1905_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_2002_1_BINARYSEARCH_INVOKEMETHOD2(TRUE, 2481_0_binarySearch_Return(0), x3[8], x4[8], java.lang.Object(ARRAY(x1[8])))≥NonInfC∧COND_2002_1_BINARYSEARCH_INVOKEMETHOD2(TRUE, 2481_0_binarySearch_Return(0), x3[8], x4[8], java.lang.Object(ARRAY(x1[8])))≥1905_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x1[8])), x3[8], +(x4[8], 1))∧(UIncreasing(1905_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_2002_1_BINARYSEARCH_INVOKEMETHOD2(TRUE, 2481_0_binarySearch_Return(0), x3[7], x4[7], java.lang.Object(ARRAY(x1[7])))≥NonInfC∧COND_2002_1_BINARYSEARCH_INVOKEMETHOD2(TRUE, 2481_0_binarySearch_Return(0), x3[7], x4[7], java.lang.Object(ARRAY(x1[7])))≥1905_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x1[7])), x3[7], +(x4[7], 1))∧(UIncreasing(1905_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(1905_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(1905_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(1905_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(1905_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.
• 1905_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0)), x3, x2) → COND_1905_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_1905_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_1905_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_1905_0_BINARYSEARCH_LOAD(TRUE, java.lang.Object(ARRAY(x0)), x3, x2) → 2002_1_BINARYSEARCH_INVOKEMETHOD(1905_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(2002_1_BINARYSEARCH_INVOKEMETHOD(1905_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_1905_0_BINARYSEARCH_LOAD(TRUE, java.lang.Object(ARRAY(x0)), x3, x2) → 1905_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0)), -(+(x2, /(-(x3, x2), 2)), 1), x2)
• (0 ≥ 0 ⇒ (UIncreasing(1905_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)

• 2002_1_BINARYSEARCH_INVOKEMETHOD(1912_0_binarySearch_Return(java.lang.Object(ARRAY(x0))), x5, x6, java.lang.Object(ARRAY(x0))) → COND_2002_1_BINARYSEARCH_INVOKEMETHOD(>(x6, -1), 1912_0_binarySearch_Return(java.lang.Object(ARRAY(x0))), x5, x6, java.lang.Object(ARRAY(x0)))
• (0 ≥ 0 ⇒ (UIncreasing(COND_2002_1_BINARYSEARCH_INVOKEMETHOD(>(x6[3], -1), 1912_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_2002_1_BINARYSEARCH_INVOKEMETHOD(TRUE, 1912_0_binarySearch_Return(java.lang.Object(ARRAY(x0))), x5, x6, java.lang.Object(ARRAY(x0))) → 1905_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0)), x5, +(x6, 1))
• (0 ≥ 0 ⇒ (UIncreasing(1905_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)

• 2002_1_BINARYSEARCH_INVOKEMETHOD(2394_0_binarySearch_Return, x3, x4, java.lang.Object(ARRAY(x1))) → COND_2002_1_BINARYSEARCH_INVOKEMETHOD1(>(x4, -1), 2394_0_binarySearch_Return, x3, x4, java.lang.Object(ARRAY(x1)))
• (0 ≥ 0 ⇒ (UIncreasing(COND_2002_1_BINARYSEARCH_INVOKEMETHOD1(>(x4[5], -1), 2394_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_2002_1_BINARYSEARCH_INVOKEMETHOD1(TRUE, 2394_0_binarySearch_Return, x3, x4, java.lang.Object(ARRAY(x1))) → 1905_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x1)), x3, +(x4, 1))
• (0 ≥ 0 ⇒ (UIncreasing(1905_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)

• 2002_1_BINARYSEARCH_INVOKEMETHOD(2481_0_binarySearch_Return(0), x3, x4, java.lang.Object(ARRAY(x1))) → COND_2002_1_BINARYSEARCH_INVOKEMETHOD2(>(x4, -1), 2481_0_binarySearch_Return(0), x3, x4, java.lang.Object(ARRAY(x1)))
• (0 ≥ 0 ⇒ (UIncreasing(COND_2002_1_BINARYSEARCH_INVOKEMETHOD2(>(x4[7], -1), 2481_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_2002_1_BINARYSEARCH_INVOKEMETHOD2(TRUE, 2481_0_binarySearch_Return(0), x3, x4, java.lang.Object(ARRAY(x1))) → 1905_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x1)), x3, +(x4, 1))
• (0 ≥ 0 ⇒ (UIncreasing(1905_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(2002_1_binarySearch_InvokeMethod(x1, x2, x3, x4)) = 0
POL(2402_0_binarySearch_InvokeMethod(x1, x2, x3, x4)) = 0
POL(java.lang.Object(x1)) = 0
POL(ARRAY(x1)) = 0
POL(2474_0_binarySearch_InvokeMethod(x1, x2, x3, x4, x5, x6)) = 0
POL(2107_0_binarySearch_ArrayAccess(x1, x2, x3, x4, x5)) = 0
POL(2346_1_binarySearch_InvokeMethod(x1)) = 0
POL(1912_0_binarySearch_Return(x1)) = 0
POL(2481_0_binarySearch_Return(x1)) = 0
POL(0) = 0
POL(1) = 0
POL(1972_0_binarySearch_Return(x1, x2, x3, x4, x5)) = 0
POL(2394_0_binarySearch_Return) = 0
POL(1905_0_BINARYSEARCH_LOAD(x1, x2, x3)) = [-1] + [-1]x3 + x2 + [-1]x1
POL(COND_1905_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(2002_1_BINARYSEARCH_INVOKEMETHOD(x1, x2, x3, x4)) = [-1] + [-1]x4 + [2]x3 + x2 + [-1]x1
POL(1905_0_binarySearch_Load(x1, x2, x3)) = [2] + [2]x3 + x2
POL(COND_2002_1_BINARYSEARCH_INVOKEMETHOD(x1, x2, x3, x4, x5)) = [-1] + [-1]x5 + [2]x4 + x3 + [-1]x2
POL(-1) = 0
POL(COND_2002_1_BINARYSEARCH_INVOKEMETHOD1(x1, x2, x3, x4, x5)) = [-1] + [-1]x5 + [2]x4 + x3 + [-1]x2
POL(COND_2002_1_BINARYSEARCH_INVOKEMETHOD2(x1, x2, x3, x4, x5)) = [-1] + [-1]x5 + [2]x4 + x3 + [-1]x2

The following pairs are in P>:

COND_1905_0_BINARYSEARCH_LOAD(TRUE, java.lang.Object(ARRAY(x0[1])), x3[1], x2[1]) → 2002_1_BINARYSEARCH_INVOKEMETHOD(1905_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:

2002_1_BINARYSEARCH_INVOKEMETHOD(1912_0_binarySearch_Return(java.lang.Object(ARRAY(x0[3]))), x5[3], x6[3], java.lang.Object(ARRAY(x0[3]))) → COND_2002_1_BINARYSEARCH_INVOKEMETHOD(>(x6[3], -1), 1912_0_binarySearch_Return(java.lang.Object(ARRAY(x0[3]))), x5[3], x6[3], java.lang.Object(ARRAY(x0[3])))
COND_2002_1_BINARYSEARCH_INVOKEMETHOD(TRUE, 1912_0_binarySearch_Return(java.lang.Object(ARRAY(x0[4]))), x5[4], x6[4], java.lang.Object(ARRAY(x0[4]))) → 1905_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[4])), x5[4], +(x6[4], 1))
2002_1_BINARYSEARCH_INVOKEMETHOD(2394_0_binarySearch_Return, x3[5], x4[5], java.lang.Object(ARRAY(x1[5]))) → COND_2002_1_BINARYSEARCH_INVOKEMETHOD1(>(x4[5], -1), 2394_0_binarySearch_Return, x3[5], x4[5], java.lang.Object(ARRAY(x1[5])))
COND_2002_1_BINARYSEARCH_INVOKEMETHOD1(TRUE, 2394_0_binarySearch_Return, x3[6], x4[6], java.lang.Object(ARRAY(x1[6]))) → 1905_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x1[6])), x3[6], +(x4[6], 1))
2002_1_BINARYSEARCH_INVOKEMETHOD(2481_0_binarySearch_Return(0), x3[7], x4[7], java.lang.Object(ARRAY(x1[7]))) → COND_2002_1_BINARYSEARCH_INVOKEMETHOD2(>(x4[7], -1), 2481_0_binarySearch_Return(0), x3[7], x4[7], java.lang.Object(ARRAY(x1[7])))
COND_2002_1_BINARYSEARCH_INVOKEMETHOD2(TRUE, 2481_0_binarySearch_Return(0), x3[8], x4[8], java.lang.Object(ARRAY(x1[8]))) → 1905_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x1[8])), x3[8], +(x4[8], 1))

The following pairs are in P:

1905_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[0])), x3[0], x2[0]) → COND_1905_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_1905_0_BINARYSEARCH_LOAD(TRUE, java.lang.Object(ARRAY(x0[2])), x3[2], x2[2]) → 1905_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[2])), -(+(x2[2], /(-(x3[2], x2[2]), 2)), 1), x2[2])
2002_1_BINARYSEARCH_INVOKEMETHOD(1912_0_binarySearch_Return(java.lang.Object(ARRAY(x0[3]))), x5[3], x6[3], java.lang.Object(ARRAY(x0[3]))) → COND_2002_1_BINARYSEARCH_INVOKEMETHOD(>(x6[3], -1), 1912_0_binarySearch_Return(java.lang.Object(ARRAY(x0[3]))), x5[3], x6[3], java.lang.Object(ARRAY(x0[3])))
COND_2002_1_BINARYSEARCH_INVOKEMETHOD(TRUE, 1912_0_binarySearch_Return(java.lang.Object(ARRAY(x0[4]))), x5[4], x6[4], java.lang.Object(ARRAY(x0[4]))) → 1905_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[4])), x5[4], +(x6[4], 1))
2002_1_BINARYSEARCH_INVOKEMETHOD(2394_0_binarySearch_Return, x3[5], x4[5], java.lang.Object(ARRAY(x1[5]))) → COND_2002_1_BINARYSEARCH_INVOKEMETHOD1(>(x4[5], -1), 2394_0_binarySearch_Return, x3[5], x4[5], java.lang.Object(ARRAY(x1[5])))
COND_2002_1_BINARYSEARCH_INVOKEMETHOD1(TRUE, 2394_0_binarySearch_Return, x3[6], x4[6], java.lang.Object(ARRAY(x1[6]))) → 1905_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x1[6])), x3[6], +(x4[6], 1))
2002_1_BINARYSEARCH_INVOKEMETHOD(2481_0_binarySearch_Return(0), x3[7], x4[7], java.lang.Object(ARRAY(x1[7]))) → COND_2002_1_BINARYSEARCH_INVOKEMETHOD2(>(x4[7], -1), 2481_0_binarySearch_Return(0), x3[7], x4[7], java.lang.Object(ARRAY(x1[7])))
COND_2002_1_BINARYSEARCH_INVOKEMETHOD2(TRUE, 2481_0_binarySearch_Return(0), x3[8], x4[8], java.lang.Object(ARRAY(x1[8]))) → 1905_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

### (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:
2002_1_binarySearch_InvokeMethod(2402_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x2, x3), x4, x5, java.lang.Object(ARRAY(x0))) → 2474_0_binarySearch_InvokeMethod(x4, x5, java.lang.Object(ARRAY(x0)), x1, x6, x3)
2002_1_binarySearch_InvokeMethod(2474_0_binarySearch_InvokeMethod(x2, x3, java.lang.Object(ARRAY(x0)), x1, x4, x5), x6, x7, java.lang.Object(ARRAY(x0))) → 2474_0_binarySearch_InvokeMethod(x6, x7, java.lang.Object(ARRAY(x0)), x1, x4, x2)
2002_1_binarySearch_InvokeMethod(2107_0_binarySearch_ArrayAccess(x1, x2, x3, java.lang.Object(ARRAY(x0)), x4), x5, x6, java.lang.Object(ARRAY(x0))) → 2474_0_binarySearch_InvokeMethod(x5, x6, java.lang.Object(ARRAY(x0)), x1, x2, x3)
2346_1_binarySearch_InvokeMethod(2402_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x2, x3)) → 2402_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x4, x3)
2346_1_binarySearch_InvokeMethod(1912_0_binarySearch_Return(java.lang.Object(ARRAY(x0)))) → 2481_0_binarySearch_Return(0)
2346_1_binarySearch_InvokeMethod(2474_0_binarySearch_InvokeMethod(x2, x3, java.lang.Object(ARRAY(x0)), x1, x4, x5)) → 2402_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x4, x2)
2346_1_binarySearch_InvokeMethod(2107_0_binarySearch_ArrayAccess(x1, x2, x3, java.lang.Object(ARRAY(x0)), x4)) → 2402_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x2, x3)
2346_1_binarySearch_InvokeMethod(2402_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x2, x3)) → 2481_0_binarySearch_Return(1)
2346_1_binarySearch_InvokeMethod(1972_0_binarySearch_Return(java.lang.Object(ARRAY(x0)), x1, x2, x3, x4)) → 2481_0_binarySearch_Return(1)
2346_1_binarySearch_InvokeMethod(2394_0_binarySearch_Return) → 2481_0_binarySearch_Return(0)
2346_1_binarySearch_InvokeMethod(2394_0_binarySearch_Return) → 2481_0_binarySearch_Return(1)
2346_1_binarySearch_InvokeMethod(2481_0_binarySearch_Return(x0)) → 2481_0_binarySearch_Return(x0)

The integer pair graph contains the following rules and edges:
(0): 1905_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[0])), x3[0], x2[0]) → COND_1905_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_1905_0_BINARYSEARCH_LOAD(TRUE, java.lang.Object(ARRAY(x0[2])), x3[2], x2[2]) → 1905_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[2])), x2[2] + x3[2] - x2[2] / 2 - 1, x2[2])
(3): 2002_1_BINARYSEARCH_INVOKEMETHOD(1912_0_binarySearch_Return(java.lang.Object(ARRAY(x0[3]))), x5[3], x6[3], java.lang.Object(ARRAY(x0[3]))) → COND_2002_1_BINARYSEARCH_INVOKEMETHOD(x6[3] > -1, 1912_0_binarySearch_Return(java.lang.Object(ARRAY(x0[3]))), x5[3], x6[3], java.lang.Object(ARRAY(x0[3])))
(4): COND_2002_1_BINARYSEARCH_INVOKEMETHOD(TRUE, 1912_0_binarySearch_Return(java.lang.Object(ARRAY(x0[4]))), x5[4], x6[4], java.lang.Object(ARRAY(x0[4]))) → 1905_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[4])), x5[4], x6[4] + 1)
(5): 2002_1_BINARYSEARCH_INVOKEMETHOD(2394_0_binarySearch_Return, x3[5], x4[5], java.lang.Object(ARRAY(x1[5]))) → COND_2002_1_BINARYSEARCH_INVOKEMETHOD1(x4[5] > -1, 2394_0_binarySearch_Return, x3[5], x4[5], java.lang.Object(ARRAY(x1[5])))
(6): COND_2002_1_BINARYSEARCH_INVOKEMETHOD1(TRUE, 2394_0_binarySearch_Return, x3[6], x4[6], java.lang.Object(ARRAY(x1[6]))) → 1905_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x1[6])), x3[6], x4[6] + 1)
(7): 2002_1_BINARYSEARCH_INVOKEMETHOD(2481_0_binarySearch_Return(0), x3[7], x4[7], java.lang.Object(ARRAY(x1[7]))) → COND_2002_1_BINARYSEARCH_INVOKEMETHOD2(x4[7] > -1, 2481_0_binarySearch_Return(0), x3[7], x4[7], java.lang.Object(ARRAY(x1[7])))
(8): COND_2002_1_BINARYSEARCH_INVOKEMETHOD2(TRUE, 2481_0_binarySearch_Return(0), x3[8], x4[8], java.lang.Object(ARRAY(x1[8]))) → 1905_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] > -11912_0_binarySearch_Return(java.lang.Object(ARRAY(x0[3]))) →* 1912_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:
2002_1_binarySearch_InvokeMethod(2402_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x2, x3), x4, x5, java.lang.Object(ARRAY(x0)))
2002_1_binarySearch_InvokeMethod(2474_0_binarySearch_InvokeMethod(x0, x1, java.lang.Object(ARRAY(x2)), x3, x4, x5), x6, x7, java.lang.Object(ARRAY(x2)))
2002_1_binarySearch_InvokeMethod(2107_0_binarySearch_ArrayAccess(x0, x1, x2, java.lang.Object(ARRAY(x3)), x4), x5, x6, java.lang.Object(ARRAY(x3)))
2346_1_binarySearch_InvokeMethod(2402_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x2, x3))
2346_1_binarySearch_InvokeMethod(1912_0_binarySearch_Return(java.lang.Object(ARRAY(x0))))
2346_1_binarySearch_InvokeMethod(2474_0_binarySearch_InvokeMethod(x0, x1, java.lang.Object(ARRAY(x2)), x3, x4, x5))
2346_1_binarySearch_InvokeMethod(2107_0_binarySearch_ArrayAccess(x0, x1, x2, java.lang.Object(ARRAY(x3)), x4))
2346_1_binarySearch_InvokeMethod(1972_0_binarySearch_Return(java.lang.Object(ARRAY(x0)), x1, x2, x3, x4))
2346_1_binarySearch_InvokeMethod(2394_0_binarySearch_Return)
2346_1_binarySearch_InvokeMethod(2481_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:
2002_1_binarySearch_InvokeMethod(2402_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x2, x3), x4, x5, java.lang.Object(ARRAY(x0))) → 2474_0_binarySearch_InvokeMethod(x4, x5, java.lang.Object(ARRAY(x0)), x1, x6, x3)
2002_1_binarySearch_InvokeMethod(2474_0_binarySearch_InvokeMethod(x2, x3, java.lang.Object(ARRAY(x0)), x1, x4, x5), x6, x7, java.lang.Object(ARRAY(x0))) → 2474_0_binarySearch_InvokeMethod(x6, x7, java.lang.Object(ARRAY(x0)), x1, x4, x2)
2002_1_binarySearch_InvokeMethod(2107_0_binarySearch_ArrayAccess(x1, x2, x3, java.lang.Object(ARRAY(x0)), x4), x5, x6, java.lang.Object(ARRAY(x0))) → 2474_0_binarySearch_InvokeMethod(x5, x6, java.lang.Object(ARRAY(x0)), x1, x2, x3)
2346_1_binarySearch_InvokeMethod(2402_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x2, x3)) → 2402_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x4, x3)
2346_1_binarySearch_InvokeMethod(1912_0_binarySearch_Return(java.lang.Object(ARRAY(x0)))) → 2481_0_binarySearch_Return(0)
2346_1_binarySearch_InvokeMethod(2474_0_binarySearch_InvokeMethod(x2, x3, java.lang.Object(ARRAY(x0)), x1, x4, x5)) → 2402_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x4, x2)
2346_1_binarySearch_InvokeMethod(2107_0_binarySearch_ArrayAccess(x1, x2, x3, java.lang.Object(ARRAY(x0)), x4)) → 2402_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x2, x3)
2346_1_binarySearch_InvokeMethod(2402_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x2, x3)) → 2481_0_binarySearch_Return(1)
2346_1_binarySearch_InvokeMethod(1972_0_binarySearch_Return(java.lang.Object(ARRAY(x0)), x1, x2, x3, x4)) → 2481_0_binarySearch_Return(1)
2346_1_binarySearch_InvokeMethod(2394_0_binarySearch_Return) → 2481_0_binarySearch_Return(0)
2346_1_binarySearch_InvokeMethod(2394_0_binarySearch_Return) → 2481_0_binarySearch_Return(1)
2346_1_binarySearch_InvokeMethod(2481_0_binarySearch_Return(x0)) → 2481_0_binarySearch_Return(x0)

The integer pair graph contains the following rules and edges:
(2): COND_1905_0_BINARYSEARCH_LOAD(TRUE, java.lang.Object(ARRAY(x0[2])), x3[2], x2[2]) → 1905_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[2])), x2[2] + x3[2] - x2[2] / 2 - 1, x2[2])
(0): 1905_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[0])), x3[0], x2[0]) → COND_1905_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:
2002_1_binarySearch_InvokeMethod(2402_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x2, x3), x4, x5, java.lang.Object(ARRAY(x0)))
2002_1_binarySearch_InvokeMethod(2474_0_binarySearch_InvokeMethod(x0, x1, java.lang.Object(ARRAY(x2)), x3, x4, x5), x6, x7, java.lang.Object(ARRAY(x2)))
2002_1_binarySearch_InvokeMethod(2107_0_binarySearch_ArrayAccess(x0, x1, x2, java.lang.Object(ARRAY(x3)), x4), x5, x6, java.lang.Object(ARRAY(x3)))
2346_1_binarySearch_InvokeMethod(2402_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x2, x3))
2346_1_binarySearch_InvokeMethod(1912_0_binarySearch_Return(java.lang.Object(ARRAY(x0))))
2346_1_binarySearch_InvokeMethod(2474_0_binarySearch_InvokeMethod(x0, x1, java.lang.Object(ARRAY(x2)), x3, x4, x5))
2346_1_binarySearch_InvokeMethod(2107_0_binarySearch_ArrayAccess(x0, x1, x2, java.lang.Object(ARRAY(x3)), x4))
2346_1_binarySearch_InvokeMethod(1972_0_binarySearch_Return(java.lang.Object(ARRAY(x0)), x1, x2, x3, x4))
2346_1_binarySearch_InvokeMethod(2394_0_binarySearch_Return)
2346_1_binarySearch_InvokeMethod(2481_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_1905_0_BINARYSEARCH_LOAD(TRUE, java.lang.Object(ARRAY(x0[2])), x3[2], x2[2]) → 1905_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[2])), x2[2] + x3[2] - x2[2] / 2 - 1, x2[2])
(0): 1905_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[0])), x3[0], x2[0]) → COND_1905_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:
2002_1_binarySearch_InvokeMethod(2402_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x2, x3), x4, x5, java.lang.Object(ARRAY(x0)))
2002_1_binarySearch_InvokeMethod(2474_0_binarySearch_InvokeMethod(x0, x1, java.lang.Object(ARRAY(x2)), x3, x4, x5), x6, x7, java.lang.Object(ARRAY(x2)))
2002_1_binarySearch_InvokeMethod(2107_0_binarySearch_ArrayAccess(x0, x1, x2, java.lang.Object(ARRAY(x3)), x4), x5, x6, java.lang.Object(ARRAY(x3)))
2346_1_binarySearch_InvokeMethod(2402_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x2, x3))
2346_1_binarySearch_InvokeMethod(1912_0_binarySearch_Return(java.lang.Object(ARRAY(x0))))
2346_1_binarySearch_InvokeMethod(2474_0_binarySearch_InvokeMethod(x0, x1, java.lang.Object(ARRAY(x2)), x3, x4, x5))
2346_1_binarySearch_InvokeMethod(2107_0_binarySearch_ArrayAccess(x0, x1, x2, java.lang.Object(ARRAY(x3)), x4))
2346_1_binarySearch_InvokeMethod(1972_0_binarySearch_Return(java.lang.Object(ARRAY(x0)), x1, x2, x3, x4))
2346_1_binarySearch_InvokeMethod(2394_0_binarySearch_Return)
2346_1_binarySearch_InvokeMethod(2481_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@2cefe7f3 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_1905_0_BINARYSEARCH_LOAD(TRUE, java.lang.Object(ARRAY(x0[2])), x3[2], x2[2]) → 1905_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 1905_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[0])), x3[0], x2[0]) → COND_1905_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_1905_0_BINARYSEARCH_LOAD(TRUE, java.lang.Object(ARRAY(x0[2])), x3[2], x2[2]) → 1905_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_1905_0_BINARYSEARCH_LOAD(TRUE, java.lang.Object(ARRAY(x0[2])), x3[2], x2[2])≥NonInfC∧COND_1905_0_BINARYSEARCH_LOAD(TRUE, java.lang.Object(ARRAY(x0[2])), x3[2], x2[2])≥1905_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[2])), -(+(x2[2], /(-(x3[2], x2[2]), 2)), 1), x2[2])∧(UIncreasing(1905_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_1905_0_BINARYSEARCH_LOAD(TRUE, java.lang.Object(ARRAY(x0[0])), x3[0], x2[0])≥NonInfC∧COND_1905_0_BINARYSEARCH_LOAD(TRUE, java.lang.Object(ARRAY(x0[0])), x3[0], x2[0])≥1905_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[0])), -(+(x2[0], /(-(x3[0], x2[0]), 2)), 1), x2[0])∧(UIncreasing(1905_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(1905_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∧[(-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(1905_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∧[(-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(1905_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∧[(-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(1905_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∧[(-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(1905_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∧[(-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(1905_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∧[(-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(1905_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∧[(-1)bso_27] ≥ 0)

For Pair 1905_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[0])), x3[0], x2[0]) → COND_1905_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 1905_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[0])), x3[0], x2[0]) → COND_1905_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_1905_0_BINARYSEARCH_LOAD(TRUE, java.lang.Object(ARRAY(x0[2])), x3[2], x2[2]) → 1905_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]1905_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[0])), x3[0], x2[0])≥NonInfC∧1905_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[0])), x3[0], x2[0])≥COND_1905_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_1905_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)))=TRUE1905_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[0])), x3[0], x2[0])≥NonInfC∧1905_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[0])), x3[0], x2[0])≥COND_1905_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_1905_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_1905_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)bni_28 + (-1)Bound*bni_28] + [(-1)bni_28]x2[0] + [bni_28]x3[0] ≥ 0∧[2 + (-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_1905_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)bni_28 + (-1)Bound*bni_28] + [(-1)bni_28]x2[0] + [bni_28]x3[0] ≥ 0∧[2 + (-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_1905_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)bni_28 + (-1)Bound*bni_28] + [(-1)bni_28]x2[0] + [bni_28]x3[0] ≥ 0∧[2 + (-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_1905_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)bni_28 + (-1)Bound*bni_28] + [bni_28]x3[0] ≥ 0∧[2 + (-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_1905_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)bni_28 + (-1)Bound*bni_28] + [bni_28]x3[0] ≥ 0∧[2 + (-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_1905_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)bni_28 + (-1)Bound*bni_28] + [bni_28]x3[0] ≥ 0∧[2 + (-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_1905_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)bni_28 + (-1)Bound*bni_28] + [bni_28]x3[0] ≥ 0∧[2 + (-1)bso_29] ≥ 0)

To summarize, we get the following constraints P for the following pairs.
• COND_1905_0_BINARYSEARCH_LOAD(TRUE, java.lang.Object(ARRAY(x0[2])), x3[2], x2[2]) → 1905_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(1905_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∧[(-1)bso_27] ≥ 0)

• 1905_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[0])), x3[0], x2[0]) → COND_1905_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_1905_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)bni_28 + (-1)Bound*bni_28] + [bni_28]x3[0] ≥ 0∧[2 + (-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) = 0
POL(COND_1905_0_BINARYSEARCH_LOAD(x1, x2, x3, x4)) = [2] + [-1]x4 + x3 + x2 + x1
POL(java.lang.Object(x1)) = [-1] + x1
POL(ARRAY(x1)) = [-1]
POL(1905_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)) = 0
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 @ {1905_0_BINARYSEARCH_LOAD_3/1, -_2/0, +_2/1}) = max{x1, [-1]x1} + [-1]

The following pairs are in P>:

1905_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[0])), x3[0], x2[0]) → COND_1905_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_1905_0_BINARYSEARCH_LOAD(TRUE, java.lang.Object(ARRAY(x0[2])), x3[2], x2[2]) → 1905_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[2])), -(+(x2[2], /(-(x3[2], x2[2]), 2)), 1), x2[2])
1905_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[0])), x3[0], x2[0]) → COND_1905_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_1905_0_BINARYSEARCH_LOAD(TRUE, java.lang.Object(ARRAY(x0[2])), x3[2], x2[2]) → 1905_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
&&(TRUE, TRUE)1TRUE1
&&(TRUE, FALSE)1FALSE1
&&(FALSE, TRUE)1FALSE1
&&(FALSE, FALSE)1FALSE1

### (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_1905_0_BINARYSEARCH_LOAD(TRUE, java.lang.Object(ARRAY(x0[2])), x3[2], x2[2]) → 1905_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:
2002_1_binarySearch_InvokeMethod(2402_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x2, x3), x4, x5, java.lang.Object(ARRAY(x0)))
2002_1_binarySearch_InvokeMethod(2474_0_binarySearch_InvokeMethod(x0, x1, java.lang.Object(ARRAY(x2)), x3, x4, x5), x6, x7, java.lang.Object(ARRAY(x2)))
2002_1_binarySearch_InvokeMethod(2107_0_binarySearch_ArrayAccess(x0, x1, x2, java.lang.Object(ARRAY(x3)), x4), x5, x6, java.lang.Object(ARRAY(x3)))
2346_1_binarySearch_InvokeMethod(2402_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x2, x3))
2346_1_binarySearch_InvokeMethod(1912_0_binarySearch_Return(java.lang.Object(ARRAY(x0))))
2346_1_binarySearch_InvokeMethod(2474_0_binarySearch_InvokeMethod(x0, x1, java.lang.Object(ARRAY(x2)), x3, x4, x5))
2346_1_binarySearch_InvokeMethod(2107_0_binarySearch_ArrayAccess(x0, x1, x2, java.lang.Object(ARRAY(x3)), x4))
2346_1_binarySearch_InvokeMethod(1972_0_binarySearch_Return(java.lang.Object(ARRAY(x0)), x1, x2, x3, x4))
2346_1_binarySearch_InvokeMethod(2394_0_binarySearch_Return)
2346_1_binarySearch_InvokeMethod(2481_0_binarySearch_Return(x0))

### (17) IDependencyGraphProof (EQUIVALENT transformation)

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

### (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:
2002_1_binarySearch_InvokeMethod(2402_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x2, x3), x4, x5, java.lang.Object(ARRAY(x0))) → 2474_0_binarySearch_InvokeMethod(x4, x5, java.lang.Object(ARRAY(x0)), x1, x6, x3)
2002_1_binarySearch_InvokeMethod(2474_0_binarySearch_InvokeMethod(x2, x3, java.lang.Object(ARRAY(x0)), x1, x4, x5), x6, x7, java.lang.Object(ARRAY(x0))) → 2474_0_binarySearch_InvokeMethod(x6, x7, java.lang.Object(ARRAY(x0)), x1, x4, x2)
2002_1_binarySearch_InvokeMethod(2107_0_binarySearch_ArrayAccess(x1, x2, x3, java.lang.Object(ARRAY(x0)), x4), x5, x6, java.lang.Object(ARRAY(x0))) → 2474_0_binarySearch_InvokeMethod(x5, x6, java.lang.Object(ARRAY(x0)), x1, x2, x3)
2346_1_binarySearch_InvokeMethod(2402_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x2, x3)) → 2402_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x4, x3)
2346_1_binarySearch_InvokeMethod(1912_0_binarySearch_Return(java.lang.Object(ARRAY(x0)))) → 2481_0_binarySearch_Return(0)
2346_1_binarySearch_InvokeMethod(2474_0_binarySearch_InvokeMethod(x2, x3, java.lang.Object(ARRAY(x0)), x1, x4, x5)) → 2402_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x4, x2)
2346_1_binarySearch_InvokeMethod(2107_0_binarySearch_ArrayAccess(x1, x2, x3, java.lang.Object(ARRAY(x0)), x4)) → 2402_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x2, x3)
2346_1_binarySearch_InvokeMethod(2402_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x2, x3)) → 2481_0_binarySearch_Return(1)
2346_1_binarySearch_InvokeMethod(1972_0_binarySearch_Return(java.lang.Object(ARRAY(x0)), x1, x2, x3, x4)) → 2481_0_binarySearch_Return(1)
2346_1_binarySearch_InvokeMethod(2394_0_binarySearch_Return) → 2481_0_binarySearch_Return(0)
2346_1_binarySearch_InvokeMethod(2394_0_binarySearch_Return) → 2481_0_binarySearch_Return(1)
2346_1_binarySearch_InvokeMethod(2481_0_binarySearch_Return(x0)) → 2481_0_binarySearch_Return(x0)

The integer pair graph contains the following rules and edges:
(0): 1905_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[0])), x3[0], x2[0]) → COND_1905_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_1905_0_BINARYSEARCH_LOAD(TRUE, java.lang.Object(ARRAY(x0[1])), x3[1], x2[1]) → 2002_1_BINARYSEARCH_INVOKEMETHOD(1905_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_1905_0_BINARYSEARCH_LOAD(TRUE, java.lang.Object(ARRAY(x0[2])), x3[2], x2[2]) → 1905_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:
2002_1_binarySearch_InvokeMethod(2402_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x2, x3), x4, x5, java.lang.Object(ARRAY(x0)))
2002_1_binarySearch_InvokeMethod(2474_0_binarySearch_InvokeMethod(x0, x1, java.lang.Object(ARRAY(x2)), x3, x4, x5), x6, x7, java.lang.Object(ARRAY(x2)))
2002_1_binarySearch_InvokeMethod(2107_0_binarySearch_ArrayAccess(x0, x1, x2, java.lang.Object(ARRAY(x3)), x4), x5, x6, java.lang.Object(ARRAY(x3)))
2346_1_binarySearch_InvokeMethod(2402_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x2, x3))
2346_1_binarySearch_InvokeMethod(1912_0_binarySearch_Return(java.lang.Object(ARRAY(x0))))
2346_1_binarySearch_InvokeMethod(2474_0_binarySearch_InvokeMethod(x0, x1, java.lang.Object(ARRAY(x2)), x3, x4, x5))
2346_1_binarySearch_InvokeMethod(2107_0_binarySearch_ArrayAccess(x0, x1, x2, java.lang.Object(ARRAY(x3)), x4))
2346_1_binarySearch_InvokeMethod(1972_0_binarySearch_Return(java.lang.Object(ARRAY(x0)), x1, x2, x3, x4))
2346_1_binarySearch_InvokeMethod(2394_0_binarySearch_Return)
2346_1_binarySearch_InvokeMethod(2481_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:
2002_1_binarySearch_InvokeMethod(2402_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x2, x3), x4, x5, java.lang.Object(ARRAY(x0))) → 2474_0_binarySearch_InvokeMethod(x4, x5, java.lang.Object(ARRAY(x0)), x1, x6, x3)
2002_1_binarySearch_InvokeMethod(2474_0_binarySearch_InvokeMethod(x2, x3, java.lang.Object(ARRAY(x0)), x1, x4, x5), x6, x7, java.lang.Object(ARRAY(x0))) → 2474_0_binarySearch_InvokeMethod(x6, x7, java.lang.Object(ARRAY(x0)), x1, x4, x2)
2002_1_binarySearch_InvokeMethod(2107_0_binarySearch_ArrayAccess(x1, x2, x3, java.lang.Object(ARRAY(x0)), x4), x5, x6, java.lang.Object(ARRAY(x0))) → 2474_0_binarySearch_InvokeMethod(x5, x6, java.lang.Object(ARRAY(x0)), x1, x2, x3)
2346_1_binarySearch_InvokeMethod(2402_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x2, x3)) → 2402_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x4, x3)
2346_1_binarySearch_InvokeMethod(1912_0_binarySearch_Return(java.lang.Object(ARRAY(x0)))) → 2481_0_binarySearch_Return(0)
2346_1_binarySearch_InvokeMethod(2474_0_binarySearch_InvokeMethod(x2, x3, java.lang.Object(ARRAY(x0)), x1, x4, x5)) → 2402_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x4, x2)
2346_1_binarySearch_InvokeMethod(2107_0_binarySearch_ArrayAccess(x1, x2, x3, java.lang.Object(ARRAY(x0)), x4)) → 2402_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x2, x3)
2346_1_binarySearch_InvokeMethod(2402_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x2, x3)) → 2481_0_binarySearch_Return(1)
2346_1_binarySearch_InvokeMethod(1972_0_binarySearch_Return(java.lang.Object(ARRAY(x0)), x1, x2, x3, x4)) → 2481_0_binarySearch_Return(1)
2346_1_binarySearch_InvokeMethod(2394_0_binarySearch_Return) → 2481_0_binarySearch_Return(0)
2346_1_binarySearch_InvokeMethod(2394_0_binarySearch_Return) → 2481_0_binarySearch_Return(1)
2346_1_binarySearch_InvokeMethod(2481_0_binarySearch_Return(x0)) → 2481_0_binarySearch_Return(x0)

The integer pair graph contains the following rules and edges:
(2): COND_1905_0_BINARYSEARCH_LOAD(TRUE, java.lang.Object(ARRAY(x0[2])), x3[2], x2[2]) → 1905_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[2])), x2[2] + x3[2] - x2[2] / 2 - 1, x2[2])
(0): 1905_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[0])), x3[0], x2[0]) → COND_1905_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:
2002_1_binarySearch_InvokeMethod(2402_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x2, x3), x4, x5, java.lang.Object(ARRAY(x0)))
2002_1_binarySearch_InvokeMethod(2474_0_binarySearch_InvokeMethod(x0, x1, java.lang.Object(ARRAY(x2)), x3, x4, x5), x6, x7, java.lang.Object(ARRAY(x2)))
2002_1_binarySearch_InvokeMethod(2107_0_binarySearch_ArrayAccess(x0, x1, x2, java.lang.Object(ARRAY(x3)), x4), x5, x6, java.lang.Object(ARRAY(x3)))
2346_1_binarySearch_InvokeMethod(2402_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x2, x3))
2346_1_binarySearch_InvokeMethod(1912_0_binarySearch_Return(java.lang.Object(ARRAY(x0))))
2346_1_binarySearch_InvokeMethod(2474_0_binarySearch_InvokeMethod(x0, x1, java.lang.Object(ARRAY(x2)), x3, x4, x5))
2346_1_binarySearch_InvokeMethod(2107_0_binarySearch_ArrayAccess(x0, x1, x2, java.lang.Object(ARRAY(x3)), x4))
2346_1_binarySearch_InvokeMethod(1972_0_binarySearch_Return(java.lang.Object(ARRAY(x0)), x1, x2, x3, x4))
2346_1_binarySearch_InvokeMethod(2394_0_binarySearch_Return)
2346_1_binarySearch_InvokeMethod(2481_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_1905_0_BINARYSEARCH_LOAD(TRUE, java.lang.Object(ARRAY(x0[2])), x3[2], x2[2]) → 1905_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[2])), x2[2] + x3[2] - x2[2] / 2 - 1, x2[2])
(0): 1905_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[0])), x3[0], x2[0]) → COND_1905_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:
2002_1_binarySearch_InvokeMethod(2402_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x2, x3), x4, x5, java.lang.Object(ARRAY(x0)))
2002_1_binarySearch_InvokeMethod(2474_0_binarySearch_InvokeMethod(x0, x1, java.lang.Object(ARRAY(x2)), x3, x4, x5), x6, x7, java.lang.Object(ARRAY(x2)))
2002_1_binarySearch_InvokeMethod(2107_0_binarySearch_ArrayAccess(x0, x1, x2, java.lang.Object(ARRAY(x3)), x4), x5, x6, java.lang.Object(ARRAY(x3)))
2346_1_binarySearch_InvokeMethod(2402_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x2, x3))
2346_1_binarySearch_InvokeMethod(1912_0_binarySearch_Return(java.lang.Object(ARRAY(x0))))
2346_1_binarySearch_InvokeMethod(2474_0_binarySearch_InvokeMethod(x0, x1, java.lang.Object(ARRAY(x2)), x3, x4, x5))
2346_1_binarySearch_InvokeMethod(2107_0_binarySearch_ArrayAccess(x0, x1, x2, java.lang.Object(ARRAY(x3)), x4))
2346_1_binarySearch_InvokeMethod(1972_0_binarySearch_Return(java.lang.Object(ARRAY(x0)), x1, x2, x3, x4))
2346_1_binarySearch_InvokeMethod(2394_0_binarySearch_Return)
2346_1_binarySearch_InvokeMethod(2481_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@2cefe7f3 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_1905_0_BINARYSEARCH_LOAD(TRUE, java.lang.Object(ARRAY(x0[2])), x3[2], x2[2]) → 1905_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 1905_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[0])), x3[0], x2[0]) → COND_1905_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_1905_0_BINARYSEARCH_LOAD(TRUE, java.lang.Object(ARRAY(x0[2])), x3[2], x2[2]) → 1905_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_1905_0_BINARYSEARCH_LOAD(TRUE, java.lang.Object(ARRAY(x0[2])), x3[2], x2[2])≥NonInfC∧COND_1905_0_BINARYSEARCH_LOAD(TRUE, java.lang.Object(ARRAY(x0[2])), x3[2], x2[2])≥1905_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[2])), -(+(x2[2], /(-(x3[2], x2[2]), 2)), 1), x2[2])∧(UIncreasing(1905_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_1905_0_BINARYSEARCH_LOAD(TRUE, java.lang.Object(ARRAY(x0[0])), x3[0], x2[0])≥NonInfC∧COND_1905_0_BINARYSEARCH_LOAD(TRUE, java.lang.Object(ARRAY(x0[0])), x3[0], x2[0])≥1905_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[0])), -(+(x2[0], /(-(x3[0], x2[0]), 2)), 1), x2[0])∧(UIncreasing(1905_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(1905_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[2])), -(+(x2[2], /(-(x3[2], x2[2]), 2)), 1), x2[2])), ≥)∧[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(1905_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[2])), -(+(x2[2], /(-(x3[2], x2[2]), 2)), 1), x2[2])), ≥)∧[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(1905_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[2])), -(+(x2[2], /(-(x3[2], x2[2]), 2)), 1), x2[2])), ≥)∧[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(1905_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[2])), -(+(x2[2], /(-(x3[2], x2[2]), 2)), 1), x2[2])), ≥)∧[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(1905_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[2])), -(+(x2[2], /(-(x3[2], x2[2]), 2)), 1), x2[2])), ≥)∧[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(1905_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] + [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(1905_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] + [bni_23]x3[0] ≥ 0∧[(-1)bso_27] ≥ 0)

For Pair 1905_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[0])), x3[0], x2[0]) → COND_1905_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 1905_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[0])), x3[0], x2[0]) → COND_1905_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_1905_0_BINARYSEARCH_LOAD(TRUE, java.lang.Object(ARRAY(x0[2])), x3[2], x2[2]) → 1905_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]1905_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[0])), x3[0], x2[0])≥NonInfC∧1905_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[0])), x3[0], x2[0])≥COND_1905_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_1905_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)))=TRUE1905_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[0])), x3[0], x2[0])≥NonInfC∧1905_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[0])), x3[0], x2[0])≥COND_1905_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_1905_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_1905_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])), ≥)∧[(3)bni_28 + (-1)Bound*bni_28] + [(-1)bni_28]x2[0] + [bni_28]x3[0] ≥ 0∧[2 + (-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_1905_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])), ≥)∧[(3)bni_28 + (-1)Bound*bni_28] + [(-1)bni_28]x2[0] + [bni_28]x3[0] ≥ 0∧[2 + (-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_1905_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])), ≥)∧[(3)bni_28 + (-1)Bound*bni_28] + [(-1)bni_28]x2[0] + [bni_28]x3[0] ≥ 0∧[2 + (-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_1905_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])), ≥)∧[(3)bni_28 + (-1)Bound*bni_28] + [bni_28]x3[0] ≥ 0∧[2 + (-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_1905_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])), ≥)∧[(3)bni_28 + (-1)Bound*bni_28] + [bni_28]x3[0] ≥ 0∧[2 + (-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_1905_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])), ≥)∧[(3)bni_28 + (-1)Bound*bni_28] + [bni_28]x3[0] ≥ 0∧[2 + (-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_1905_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])), ≥)∧[(3)bni_28 + (-1)Bound*bni_28] + [bni_28]x3[0] ≥ 0∧[2 + (-1)bso_29] ≥ 0)

To summarize, we get the following constraints P for the following pairs.
• COND_1905_0_BINARYSEARCH_LOAD(TRUE, java.lang.Object(ARRAY(x0[2])), x3[2], x2[2]) → 1905_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(1905_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] + [bni_23]x3[0] ≥ 0∧[(-1)bso_27] ≥ 0)

• 1905_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[0])), x3[0], x2[0]) → COND_1905_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_1905_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])), ≥)∧[(3)bni_28 + (-1)Bound*bni_28] + [bni_28]x3[0] ≥ 0∧[2 + (-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) = [3]
POL(FALSE) = [3]
POL(COND_1905_0_BINARYSEARCH_LOAD(x1, x2, x3, x4)) = [-1]x4 + x3 + [-1]x2
POL(java.lang.Object(x1)) = [-1]
POL(ARRAY(x1)) = [-1] + [-1]x1
POL(1905_0_BINARYSEARCH_LOAD(x1, x2, x3)) = [2] + [-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 @ {1905_0_BINARYSEARCH_LOAD_3/1, -_2/0, +_2/1}) = max{x1, [-1]x1} + [-1]

The following pairs are in P>:

1905_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[0])), x3[0], x2[0]) → COND_1905_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_1905_0_BINARYSEARCH_LOAD(TRUE, java.lang.Object(ARRAY(x0[2])), x3[2], x2[2]) → 1905_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[2])), -(+(x2[2], /(-(x3[2], x2[2]), 2)), 1), x2[2])
1905_0_BINARYSEARCH_LOAD(java.lang.Object(ARRAY(x0[0])), x3[0], x2[0]) → COND_1905_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_1905_0_BINARYSEARCH_LOAD(TRUE, java.lang.Object(ARRAY(x0[2])), x3[2], x2[2]) → 1905_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

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

Integer

R is empty.

The integer pair graph contains the following rules and edges:
(2): COND_1905_0_BINARYSEARCH_LOAD(TRUE, java.lang.Object(ARRAY(x0[2])), x3[2], x2[2]) → 1905_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:
2002_1_binarySearch_InvokeMethod(2402_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x2, x3), x4, x5, java.lang.Object(ARRAY(x0)))
2002_1_binarySearch_InvokeMethod(2474_0_binarySearch_InvokeMethod(x0, x1, java.lang.Object(ARRAY(x2)), x3, x4, x5), x6, x7, java.lang.Object(ARRAY(x2)))
2002_1_binarySearch_InvokeMethod(2107_0_binarySearch_ArrayAccess(x0, x1, x2, java.lang.Object(ARRAY(x3)), x4), x5, x6, java.lang.Object(ARRAY(x3)))
2346_1_binarySearch_InvokeMethod(2402_0_binarySearch_InvokeMethod(java.lang.Object(ARRAY(x0)), x1, x2, x3))
2346_1_binarySearch_InvokeMethod(1912_0_binarySearch_Return(java.lang.Object(ARRAY(x0))))
2346_1_binarySearch_InvokeMethod(2474_0_binarySearch_InvokeMethod(x0, x1, java.lang.Object(ARRAY(x2)), x3, x4, x5))
2346_1_binarySearch_InvokeMethod(2107_0_binarySearch_ArrayAccess(x0, x1, x2, java.lang.Object(ARRAY(x3)), x4))
2346_1_binarySearch_InvokeMethod(1972_0_binarySearch_Return(java.lang.Object(ARRAY(x0)), x1, x2, x3, x4))
2346_1_binarySearch_InvokeMethod(2394_0_binarySearch_Return)
2346_1_binarySearch_InvokeMethod(2481_0_binarySearch_Return(x0))

### (26) IDependencyGraphProof (EQUIVALENT transformation)

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

### (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:
1247_0_createArray_Load(EOS(STATIC_1247), java.lang.Object(ARRAY(i79)), i316, i316) → 1254_0_createArray_ArrayLength(EOS(STATIC_1254), java.lang.Object(ARRAY(i79)), i316, i316, java.lang.Object(ARRAY(i79)))
1254_0_createArray_ArrayLength(EOS(STATIC_1254), java.lang.Object(ARRAY(i79)), i316, i316, java.lang.Object(ARRAY(i79))) → 1257_0_createArray_GE(EOS(STATIC_1257), java.lang.Object(ARRAY(i79)), i316, i316, i79) | >=(i79, 0)
1257_0_createArray_GE(EOS(STATIC_1257), java.lang.Object(ARRAY(i79)), i316, i316, i79) → 1265_0_createArray_GE(EOS(STATIC_1265), java.lang.Object(ARRAY(i79)), i316, i316, i79)
1265_0_createArray_GE(EOS(STATIC_1265), java.lang.Object(ARRAY(i79)), i316, i316, i79) → 1275_0_createArray_Load(EOS(STATIC_1275), java.lang.Object(ARRAY(i79)), i316) | <(i316, i79)
1282_0_createArray_Load(EOS(STATIC_1282), java.lang.Object(ARRAY(i79)), i316, java.lang.Object(ARRAY(i79))) → 1290_0_createArray_InvokeMethod(EOS(STATIC_1290), java.lang.Object(ARRAY(i79)), i316, java.lang.Object(ARRAY(i79)), i316)
1290_0_createArray_InvokeMethod(EOS(STATIC_1290), java.lang.Object(ARRAY(i79)), i316, java.lang.Object(ARRAY(i79)), i316) → 1299_0_random_FieldAccess(EOS(STATIC_1299), java.lang.Object(ARRAY(i79)), i316, java.lang.Object(ARRAY(i79)), i316)
1299_0_random_FieldAccess(EOS(STATIC_1299), java.lang.Object(ARRAY(i79)), i316, java.lang.Object(ARRAY(i79)), i316) → 1315_0_random_FieldAccess(EOS(STATIC_1315), java.lang.Object(ARRAY(i79)), i316, java.lang.Object(ARRAY(i79)), i316, java.lang.Object(ARRAY(i77)))
1315_0_random_FieldAccess(EOS(STATIC_1315), java.lang.Object(ARRAY(i79)), i316, java.lang.Object(ARRAY(i79)), i316, java.lang.Object(ARRAY(i77))) → 1323_0_random_ArrayAccess(EOS(STATIC_1323), java.lang.Object(ARRAY(i79)), i316, java.lang.Object(ARRAY(i79)), i316, java.lang.Object(ARRAY(i77)), i315)
1323_0_random_ArrayAccess(EOS(STATIC_1323), java.lang.Object(ARRAY(i79)), i316, java.lang.Object(ARRAY(i79)), i316, java.lang.Object(ARRAY(i77)), i315) → 1330_0_random_ArrayAccess(EOS(STATIC_1330), java.lang.Object(ARRAY(i79)), i316, java.lang.Object(ARRAY(i79)), i316, java.lang.Object(ARRAY(i77)), i315)
1330_0_random_ArrayAccess(EOS(STATIC_1330), java.lang.Object(ARRAY(i79)), i316, java.lang.Object(ARRAY(i79)), i316, java.lang.Object(ARRAY(i77)), i315) → 1340_0_random_Store(EOS(STATIC_1340), java.lang.Object(ARRAY(i79)), i316, java.lang.Object(ARRAY(i79)), i316, o383) | <(i315, i77)
1340_0_random_Store(EOS(STATIC_1340), java.lang.Object(ARRAY(i79)), i316, java.lang.Object(ARRAY(i79)), i316, o383) → 1348_0_random_FieldAccess(EOS(STATIC_1348), java.lang.Object(ARRAY(i79)), i316, java.lang.Object(ARRAY(i79)), i316, o383)
1348_0_random_FieldAccess(EOS(STATIC_1348), java.lang.Object(ARRAY(i79)), i316, java.lang.Object(ARRAY(i79)), i316, o383) → 1355_0_random_ConstantStackPush(EOS(STATIC_1355), java.lang.Object(ARRAY(i79)), i316, java.lang.Object(ARRAY(i79)), i316, o383, i315)
1355_0_random_ConstantStackPush(EOS(STATIC_1355), java.lang.Object(ARRAY(i79)), i316, java.lang.Object(ARRAY(i79)), i316, o383, i315) → 1362_0_random_IntArithmetic(EOS(STATIC_1362), java.lang.Object(ARRAY(i79)), i316, java.lang.Object(ARRAY(i79)), i316, o383, i315, 1)
1362_0_random_IntArithmetic(EOS(STATIC_1362), java.lang.Object(ARRAY(i79)), i316, java.lang.Object(ARRAY(i79)), i316, o383, i315, matching1) → 1368_0_random_FieldAccess(EOS(STATIC_1368), java.lang.Object(ARRAY(i79)), i316, java.lang.Object(ARRAY(i79)), i316, o383, +(i315, 1)) | &&(>(i315, 0), =(matching1, 1))
1368_0_random_FieldAccess(EOS(STATIC_1368), java.lang.Object(ARRAY(i79)), i316, java.lang.Object(ARRAY(i79)), i316, o383, i329) → 1374_0_random_Load(EOS(STATIC_1374), java.lang.Object(ARRAY(i79)), i316, java.lang.Object(ARRAY(i79)), i316, o383)
1374_0_random_Load(EOS(STATIC_1374), java.lang.Object(ARRAY(i79)), i316, java.lang.Object(ARRAY(i79)), i316, o383) → 1384_0_random_InvokeMethod(EOS(STATIC_1384), java.lang.Object(ARRAY(i79)), i316, java.lang.Object(ARRAY(i79)), i316, o383)
1384_0_random_InvokeMethod(EOS(STATIC_1384), java.lang.Object(ARRAY(i79)), i316, java.lang.Object(ARRAY(i79)), i316, java.lang.Object(o411sub)) → 1391_0_random_InvokeMethod(EOS(STATIC_1391), java.lang.Object(ARRAY(i79)), i316, java.lang.Object(ARRAY(i79)), i316, java.lang.Object(o411sub))
1391_0_random_InvokeMethod(EOS(STATIC_1391), java.lang.Object(ARRAY(i79)), i316, java.lang.Object(ARRAY(i79)), i316, java.lang.Object(o411sub)) → 1396_0_length_Load(EOS(STATIC_1396), java.lang.Object(ARRAY(i79)), i316, java.lang.Object(ARRAY(i79)), i316, java.lang.Object(o411sub), java.lang.Object(o411sub))
1396_0_length_Load(EOS(STATIC_1396), java.lang.Object(ARRAY(i79)), i316, java.lang.Object(ARRAY(i79)), i316, java.lang.Object(o411sub), java.lang.Object(o411sub)) → 1411_0_length_FieldAccess(EOS(STATIC_1411), java.lang.Object(ARRAY(i79)), i316, java.lang.Object(ARRAY(i79)), i316, java.lang.Object(o411sub), java.lang.Object(o411sub))
1411_0_length_FieldAccess(EOS(STATIC_1411), java.lang.Object(ARRAY(i79)), i316, java.lang.Object(ARRAY(i79)), i316, java.lang.Object(java.lang.String(o420sub, i361)), java.lang.Object(java.lang.String(o420sub, i361))) → 1414_0_length_FieldAccess(EOS(STATIC_1414), java.lang.Object(ARRAY(i79)), i316, java.lang.Object(ARRAY(i79)), i316, java.lang.Object(java.lang.String(o420sub, i361)), java.lang.Object(java.lang.String(o420sub, i361))) | &&(>=(i361, 0), >=(i362, 0))
1414_0_length_FieldAccess(EOS(STATIC_1414), java.lang.Object(ARRAY(i79)), i316, java.lang.Object(ARRAY(i79)), i316, java.lang.Object(java.lang.String(o420sub, i361)), java.lang.Object(java.lang.String(o420sub, i361))) → 1424_0_length_Return(EOS(STATIC_1424), java.lang.Object(ARRAY(i79)), i316, java.lang.Object(ARRAY(i79)), i316, java.lang.Object(java.lang.String(o420sub, i361)))
1424_0_length_Return(EOS(STATIC_1424), java.lang.Object(ARRAY(i79)), i316, java.lang.Object(ARRAY(i79)), i316, java.lang.Object(java.lang.String(o420sub, i361))) → 1431_0_random_Return(EOS(STATIC_1431), java.lang.Object(ARRAY(i79)), i316, java.lang.Object(ARRAY(i79)), i316)
1431_0_random_Return(EOS(STATIC_1431), java.lang.Object(ARRAY(i79)), i316, java.lang.Object(ARRAY(i79)), i316) → 1437_0_createArray_ArrayAccess(EOS(STATIC_1437), java.lang.Object(ARRAY(i79)), i316, java.lang.Object(ARRAY(i79)), i316)
1437_0_createArray_ArrayAccess(EOS(STATIC_1437), java.lang.Object(ARRAY(i79)), i316, java.lang.Object(ARRAY(i79)), i316) → 1447_0_createArray_ArrayAccess(EOS(STATIC_1447), java.lang.Object(ARRAY(i79)), i316, java.lang.Object(ARRAY(i79)), i316)
1447_0_createArray_ArrayAccess(EOS(STATIC_1447), java.lang.Object(ARRAY(i79)), i316, java.lang.Object(ARRAY(i79)), i316) → 1459_0_createArray_Inc(EOS(STATIC_1459), java.lang.Object(ARRAY(i79)), i316) | <(i316, i79)
1459_0_createArray_Inc(EOS(STATIC_1459), java.lang.Object(ARRAY(i79)), i316) → 1471_0_createArray_JMP(EOS(STATIC_1471), java.lang.Object(ARRAY(i79)), +(i316, 1)) | >=(i316, 0)
1471_0_createArray_JMP(EOS(STATIC_1471), java.lang.Object(ARRAY(i79)), i376) → 1483_0_createArray_Load(EOS(STATIC_1483), java.lang.Object(ARRAY(i79)), i376)
R rules:

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

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

Filtered ground terms:

EOS(x1) → EOS

Filtered duplicate args:

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

P rules:
1247_0_createArray_Load(java.lang.Object(ARRAY(x0)), x1) → 1247_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:
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): 1247_0_CREATEARRAY_LOAD(java.lang.Object(ARRAY(x0[0])), x1[0]) → COND_1247_0_CREATEARRAY_LOAD(x1[0] > -1 && x1[0] < x0[0] && x0[0] > -1, java.lang.Object(ARRAY(x0[0])), x1[0])

(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@5e19b12e 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 1247_0_CREATEARRAY_LOAD(java.lang.Object(ARRAY(x0)), x1) → COND_1247_0_CREATEARRAY_LOAD(&&(&&(>(x1, -1), <(x1, x0)), >(x0, -1)), java.lang.Object(ARRAY(x0)), x1) the following chains were created:
• We consider the chain 1247_0_CREATEARRAY_LOAD(java.lang.Object(ARRAY(x0[0])), x1[0]) → COND_1247_0_CREATEARRAY_LOAD(&&(&&(>(x1[0], -1), <(x1[0], x0[0])), >(x0[0], -1)), java.lang.Object(ARRAY(x0[0])), x1[0]), COND_1247_0_CREATEARRAY_LOAD(TRUE, java.lang.Object(ARRAY(x0[1])), x1[1]) → 1247_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]1247_0_CREATEARRAY_LOAD(java.lang.Object(ARRAY(x0[0])), x1[0])≥NonInfC∧1247_0_CREATEARRAY_LOAD(java.lang.Object(ARRAY(x0[0])), x1[0])≥COND_1247_0_CREATEARRAY_LOAD(&&(&&(>(x1[0], -1), <(x1[0], x0[0])), >(x0[0], -1)), java.lang.Object(ARRAY(x0[0])), x1[0])∧(UIncreasing(COND_1247_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:

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

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

(8)    ((UIncreasing(1247_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(1247_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(1247_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(1247_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.
• 1247_0_CREATEARRAY_LOAD(java.lang.Object(ARRAY(x0)), x1) → COND_1247_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_1247_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)

• ((UIncreasing(1247_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(1247_0_CREATEARRAY_LOAD(x1, x2)) = [-1] + [-1]x2 + x1
POL(java.lang.Object(x1)) = x1
POL(ARRAY(x1)) = x1
POL(COND_1247_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>:

The following pairs are in Pbound:

The following pairs are in P:

There are no usable rules.

### (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): 1247_0_CREATEARRAY_LOAD(java.lang.Object(ARRAY(x0[0])), x1[0]) → COND_1247_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.

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