Care este diferența dintre corectitudinea totală și corectitudinea parțială?


Răspunsul 1:

O specificație de corectitudine totală este, de asemenea, o specificație parțială de corectitudine. Corectitudinea parțială este mai slabă, deoarece are nevoie de ajutorul suplimentar al „S se termină” pentru a ajunge la concluzia: R rămâne în starea finală.

Pentru o specificație de corectitudine parțială {Q} S {R}, puteți obține următoarele informații: Având în vedere o stare de pornire care satisface Q, S se poate termina sau nu. Dacă S încheie, după executarea lui S, vei ajunge la o stare finală care să satisfacă R. Dacă nu, R este inutil, deoarece nu există o stare finală.

De exemplu:

{X == 10}
while (y! = 0):
    y = y - 1
x = 0
{X == 0}

Este o specificație parțială de corectitudine. Dacă y este inițializat cu un număr egal sau mai mare de 0, S se va încheia și după ce x este 0. În timp ce dacă y începe cu un număr negativ, S se va bucla pentru totdeauna și din moment ce nu se încheie, nu veți ajunge la o stare ' după executarea lui S '.

Într-adevăr, R poate fi orice dacă S este o buclă moartă. De exemplu, pentru orice Q și R:

{Q}
în timp ce (adevărat):
    y = y - 1
{R}

este întotdeauna o specificație parțială de corectitudine.

Dacă Q nu este suficient de puternic, nu puteți garanta încetarea lui S, cu atât mai puțin să argumentăm despre starea de după executarea lui S. În acest caz, puteți adăuga manual o condiție: S se termină. Cu Q și acesta, raționamentul poate continua.

Pentru specificația de corectitudine totală {Q} S {R}, Q este suficient de puternic pentru a garanta încetarea lui S, astfel încât puteți concluziona că S se va încheia și starea finală satisface R.

De exemplu:

{x == 10}
while (x! = 0):
    x = x - 1
{x == 0}

este o specificație de corectitudine totală.

BTW: Nu sunt sigur dacă răspunsul este corect, deoarece întrebarea este etichetată cu corectitudine politică. În timp ce definiția din întrebare arată exact aceeași ca în informatică.