Visual Studio/Roslyn
Code
Code contracts static checker
Semantic
Inference.
Error checking.
Answer queries.
Verified repairs.
Pre/post inference.
Semantic baseline.
Stored information
public int BinarySearch(int[] array, int value)
{
Contract.Requires(array != null);
array !=
var inf = 0;
var sup = array.Length - 1;
null
MaxValue],
sup: [-1, MaxValue),
sup < array.Length
inf: [0, 0],
sup: [-1, MaxValue),
sup < array.Length
while (inf <= sup)
{
var mid = (inf + sup) / 2;
inf ≤ sup, sup: [0, MaxValue)
mid: [0, MaxValue), mid ≤ sup, mid < array.Length
var midValue = array[mid];
if (midValue < value)
inf = mid + 1;
else if (midValue > value)
sup = mid - 1;
else
return mid;
}
return -1;
}
inf: [1, MaxValue], sup: [0, MaxValue)
inf:[0, 0], sup: [-1, MaxValue-1), sup < array.Length
inf: [0, MaxValue], sup: [-1, MaxValue), sup < array.Length
public int BinarySearch(int[] array, int value)
{
Contract.Requires(array != null);
var inf = 0;
array
var sup = array.Length - 1;
while (inf <= sup)
{
var mid = (inf + sup) / 2;
var midValue = array[mid];
if (midValue < value)
inf = mid + 1;
else if (midValue > value)
sup = mid - 1;
else
return mid;
}
return -1;
}
!= null
MinValue ≤ array.Length -1 ≤ MaxValue
MinValue ≤ (inf + sup) ≤ MaxValue MinValue ≤ (inf + sup)/2 ≤
MaxValue
array != null
0 ≤ mid
mid < array.Length
MinValue ≤ mid + 1 ≤ MaxValue
MinValue ≤ mid - 1 ≤ MaxValue
public int BinarySearch(int[] array, int value)
{
array !=
Contract.Requires(array != null);
var inf = 0;
array != null
var sup = array.Length - 1;
while (inf <= sup)
{
var mid = (inf + sup) / 2;
var midValue = array[mid];
if (midValue < value)
inf = mid + 1;
else if (midValue > value)
sup = mid - 1;
else
return mid;
}
return -1;
}
null
MinValue ≤ array.Length -1 ≤ MaxValue
inf: [0, MaxValue], sup: [0, MaxValue], sup < array.Length
MinValue
(inf + sup) ≤ MaxValueMinValue ≤ (inf + sup)/2 ≤ MaxValue
MinValue≤≤(inf
array != null
0 ≤ mid
mid < array.Length
mid: [0, MaxValue)
MinValue ≤ mid + 1 ≤ MaxValue
MinValue ≤ mid - 1 ≤ MaxValue
Then x + y < z
(x! + y!)? < z!
as 0 ≤ x, then –x cannot underflow
= y! < (z! +(– x!)!)?
as 0 ≤ z and 0 ≤ x, then z – x cannot underflow
= y! < (z! +(– x!)!)!
public int Decrement(int x)
{
Contract.Requires(x >= 5);
Contract.Ensures(Contract.Result<int>() >= 0);
}
public int Decrement(int x)
{
Contract.Requires(x >= 5);
Contract.Ensures(Contract.Result<int>() >= 0);
while (x != 0) x--;
x = NewMethod(x);
return x;
return x;
}
private static int NewMethod(int x)
{
while (x != 0) x--;
return x;
}
public int Decrement(int x)
{
Contract.Requires(x >= 5);
Contract.Ensures(Contract.Result<int>() >= 0);
}
public int Decrement(int x)
{
Contract.Requires(x >= 5);
Contract.Ensures(Contract.Result<int>() >= 0);
while (x != 0) x--;
x = NewMethod(x);
return x;
return x;
}
private static int NewMethod(int x)
{
while (x != 0) x--;
return x;
}
public int Decrement(int x)
{
Contract.Requires(x >= 5);
Contract.Ensures(Contract.Result<int>() >=0);
}
private static int NewMethod(int x)
{
Contract.Requires(x >= 5);
Contract.Ensures(Contract.Result<int>() <= x);
x = NewMethod(x);
while (x != 0) x--;
return x;
return x;
}
public int Decrement(int x)
{
Contract.Requires(x >= 5);
Contract.Ensures(Contract.Result<int>() >=0);
}
private static int NewMethod(int x)
{
Contract.Requires(x >= 5);
Contract.Ensures(Contract.Result<int>()==12345);
x = NewMethod(x);
while (x != 0) x--;
return x;
return x;
}
public int Decrement(int x)
{
Contract.Requires(x >= 5);
Contract.Ensures(Contract.Result<int>() >=0);
}
private static int NewMethod(int x)
{
Contract.Ensures(Contract.Result<int>() == 0);
x = NewMethod(x);
while (x != 0) x--;
return x;
return x;
}
public int Decrement(int x)
{
Contract.Requires(x >= 5);
Contract.Ensures(Contract.Result<int>() >=0);
}
private static int NewMethod(int x)
{
Contract.Requires(x >= 5);
Contract.Ensures(Contract.Result<int>() == 0);
x = NewMethod(x);
while (x != 0) x--;
return x;
return x;
}
public int Decrement(int x)
{
Contract.Requires(x >= 5);
Contract.Ensures(Contract.Result<int>() >=0);
}
private static int NewMethod(int x)
{
Contract.Requires(x >= 0);
Contract.Ensures(Contract.Result<int>() == 0);
x = NewMethod(x);
while (x != 0) x--;
return x;
return x;
}
© Copyright 2026 Paperzz