Чим відрізняється повна правильність від часткової правильності?
Відповідь 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: Я не впевнений, чи відповідь правильний, оскільки питання позначене політичною коректністю. Хоча визначення у питанні виглядає точно так само, як і в інформатиці.