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ă.