Mi a különbség a teljes és a részleges helyesség között?


Válasz 1:

A teljes helyesség specifikáció szintén részleges helyesség meghatározás. A részleges helyesség gyengébb, mivel az „S befejeződés” kiegészítő segítségére van szüksége a következtetés levonásához: R végső állapotban marad.

A {Q} S {R} részleges helyességének meghatározásához a következő információkat kaphatja: Ha a Q-nak megfelelő kezdőállapotot ad, az S leállhat vagy sem. Ha S befejeződik, S végrehajtása után olyan végállapotot ér el, amely kielégíti R-t. Ha nem, akkor R haszontalan, mivel nincs végső állapot.

Például:

{X == 10}
míg (y! = 0):
    y = y - 1
x = 0
{X == 0}

Ez egy részleges helyesség specifikáció. Ha y-t valamilyen számmal kezdjük, amely 0-nál nagyobb vagy annál nagyobb, S befejeződik, és azután x értéke 0. Bár ha y negatív számmal kezdődik, S véglegesen hurok lesz, és mivel ez nem szűnik meg, akkor nem fogja elérni az ' S végrehajtása után ”.

Valójában R bármi lehet, ha S egy holt hurok. Például bármely Q és R esetében:

{Q}
míg (igaz):
    y = y - 1
{R}

mindig egy részleges helyesség-specifikáció.

Ha a Q nem elég erős, akkor nem garantálhatja az S megszűnését, nem is beszélve az állam végrehajtásának utáni állapotáról. Ebben az esetben manuálisan adhat hozzá egy feltételt: S megszűnik. A Q-val és azzal az érvelés folytatódhat.

A {Q} S {R} teljes helyességének meghatározásához a Q elég erős ahhoz, hogy garantálja S megszűnését, tehát arra lehet következtetni, hogy S megszűnik, és a végső állapot kielégíti R-t.

Például:

{x == 10}
míg (x! = 0):
    x = x - 1
{x == 0}

egy teljes helyesség specifikáció.

BTW: Nem vagyok biztos abban, hogy a válasz helyes-e, mert a kérdést politikai korrektséggel címkézik. Míg a kérdésben szereplő meghatározás pontosan ugyanaz, mint a számítógépes tudományban.