Koja je razlika između potpune i djelomične ispravnosti?


Odgovor 1:

Specifikacija potpune ispravnosti je također djelomična specifikacija ispravnosti. Djelomična ispravnost je slabija jer joj je potrebna dodatna pomoć 'S završava' da bi zaključila: R drži u konačnom stanju.

Za parcijalnu specifikaciju ispravnosti {Q} S {R}, možete dobiti sljedeće informacije: S obzirom na početno stanje koje zadovoljava Q, S može prestati ili nije. Ako S prekine, nakon S izvršenja, doći ćete do konačnog stanja koje zadovoljava R. Ako nije, R je beskoristan jer ne postoji konačno stanje.

Na primjer:

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

To je djelomična specifičnost ispravnosti. Ako je y inicijalizirano s nekim brojem jednakim ili većim od 0, S će prestati i nakon toga x je 0. Iako ako y započne s negativnim brojem, S će se petljati zauvijek i budući da se ne ukida, nećete doći do stanja ' nakon izvršenja S-a '.

Zaista, R može biti bilo što ako je S mrtva petlja. Na primjer, za bilo koji Q i R:

{Q}
dok je (istina):
    y = y - 1
{R}

uvijek je djelomična specifičnost ispravnosti.

Ako Q nije dovoljno jak, ne možete jamčiti S-ov raskid, a kamoli razlog o stanju nakon izvršenja S-a. U tom slučaju možete ručno dodati uvjet: S prekida. Uz Q i to, zaključivanje se može nastaviti.

Za ukupnu specifikaciju ispravnosti {Q} S {R}, Q je dovoljno jak da garantuje prekid S, tako da možete zaključiti da će S prestati i konačno stanje udovoljava R.

Na primjer:

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

je potpuna specifičnost ispravnosti.

BTW: Nisam siguran je li odgovor točan, jer je pitanje označeno političkom korektnošću. Dok definicija u pitanju izgleda potpuno isto kao u računalnoj znanosti.