У чым розніца паміж поўнай правільнасцю і частковай правільнасцю?


адказ 1:

Заява аб поўнай карэктнасці таксама з'яўляецца частковай заявай аб правільнасці. Частковая карэктнасць слабейшая, бо для атрымання высновы патрэбна дадатковая дапамога "S спыняецца": R ужываецца ў канчатковым стане.

Для частковай спецыфікацыі правільнасці {Q} S {R} вы можаце атрымаць наступную інфармацыю: Калі ёсць стартавая ўмова, якое адказвае Q, S можа альбо не скончыцца. Калі S скончыцца, пасля выканання S вы дасягнеце канчатковага стану, якое выконвае Р. Калі няма, R непрыдатны, таму што няма канчатковага стану.

Напрыклад:

{x == 10} на працягу (y! = 0): y = y - 1 x = 0 {x == 0}

Гэта частковае сцвярджэнне дакладнасці. Калі y ініцыялізавана з нумарам, роўным або большым за 0, S заканчваецца, а х роўна 0. Калі y пачынаецца з адмоўнага ліку, 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): x = x - 1 {x == 0}

гэта поўная заява пра дакладнасць.

Дарэчы: я не ўпэўнены ў правільнасці адказу, бо пытанне адзначана паліткарэктнасцю. Хаця азначэнне ў пытанні выглядае так жа, як і ў інфарматыцы.