Чим відрізняється повна правильність від часткової правильності?


Відповідь 1:

Повна специфікація правильності також є частковою специфікацією правильності. Часткова коректність слабша, тому що для отримання висновку потрібна додаткова допомога 'S закінчується': R тримається в остаточному стані.

Для часткової специфікації коректності {Q} S {R} ви можете отримати таку інформацію: З огляду на вихідний стан, який задовольняє Q, S може припинятися чи ні. Якщо S припиняється, після виконання S ви досягнете остаточного стану, який задовольняє R. Якщо ні, R є марним, оскільки немає остаточного стану.

Наприклад:

{x == 10}
поки (у! = 0):
    y = y - 1
x = 0
{x == 0}

Це часткова специфіка коректності. Якщо y ініціалізується з деяким числом, рівним або більшим за 0, S припиняється, а після цього х дорівнює 0. Хоча якщо y починається з від’ємного числа, S буде циклічно назавжди, і оскільки воно не закінчується, ви не досягнете стану ' після виконання S '.

Дійсно, R може бути будь-чим, якщо S - мертвий цикл. Наприклад, для будь-яких Q та R:

{Q}
поки (правда):
    y = y - 1
{R}

завжди є частковою специфікацією правильності.

Якщо Q недостатньо сильний, ви не можете гарантувати припинення S, не кажучи вже про причину стану після виконання S. У цьому випадку ви можете вручну додати умову: S припиняється. З Q і це міркування можуть продовжуватися.

Для специфікації повної коректності {Q} S {R}, Q достатньо сильний, щоб гарантувати припинення S, тому можна зробити висновок, що S припиняється, а кінцевий стан задовольняє R.

Наприклад:

{x == 10}
поки (x! = 0):
    х = х - 1
{x == 0}

є загальною специфікацією правильності.

BTW: Я не впевнений, чи відповідь правильний, оскільки питання позначене політичною коректністю. Хоча визначення у питанні виглядає точно так само, як і в інформатиці.