Я играю с KeY (https://www.key -project.org ) для учебного проекта.
С одной стороны, я был счастлив, что KeY легко доказывает правильность следующего jmlаннотированный Java-код
/*@ ensures ((\result == a) || (\result == b));
@ ensures ((\result >= a) && (\result >= b));
*/
public int max(int a, int b) {
if(a <= b)
return b;
else
return a;
}
но с другой стороны, я неожиданно не смог доказать правильность следующей эквивалентной программы
/*@ ensures ((\result == a) || (\result == b));
@ ensures ((\result >= a) && (\result >= b));
*/
public int max(int a, int b) {
return (a <= b) ? b : a;
}
Кто-нибудь знает, что я что-то упускаю?