original.name="Complex_Valid_7"
======
>>> main.whiley
function max3(int x, int y, int z) -> (int r)
// Return value must be as large as each parameter
ensures r >= x && r >= y && r >= z
// Return value must match at least one parameter
ensures r == x || r == y || r == z:
//
bool isX = x >= y && x >= z
bool isY = y >= x && y >= z
//
if isX:
return x
else if isY:
return y
else:
return z
// Following is just to help verification
method fn(int[] xs):
int i1 = 0
while i1 < |xs| where i1 >= 0:
int v1 = xs[i1]
int i2 = 0
while i2 < |xs| where i2 >= 0:
int v2 = xs[i2]
int i3 = 0
while i3 < |xs| where i3 >= 0:
int v3 = xs[i3]
assume (v1 <= v3 && v2 <= v3) ==> max3(v1,v2,v3) == v3
assume (v1 <= v2 && v3 <= v2) ==> max3(v1,v2,v3) == v2
assume (v2 <= v3 && v3 <= v1) ==> max3(v1,v2,v3) == v1
i3 = i3 + 1
//
i2 = i2 + 1
//
i1 = i1 + 1
// Done.
public export method test():
fn([1,2,3,4,5,6,7,8])
---