Quina diferència hi ha entre la correcció total i la correcció parcial?


Resposta 1:

Una especificació de correcció total també és una especificació de correcció parcial. La correcció parcial és més feble, perquè necessita l’ajuda addicional de “S termina” per arribar a la conclusió: R es manté en l’estat final.

Per a una especificació de correcció parcial {Q} S {R}, podeu obtenir la informació següent: Tenint en compte un estat inicial que compleix Q, S pot acabar o no. Si S acaba, després de l’execució de S, arribareu a un estat final que satisfà R. Si no, R és inútil ja que no hi ha cap estat final.

Per exemple:

{x == 10}
mentre que (y! = 0):
    y = y - 1
x = 0
{x == 0}

És una especificació de correcció parcial. Si y s’inicialitza amb un nombre igual o superior a 0, S s’acabarà i després d’això x és 0. Mentre que si comença amb un nombre negatiu, S s’enllaçarà per sempre i com que no s’acaba, no arribareu a un estat ” després de l'execució de S '.

De fet, R pot ser qualsevol cosa si S és un bucle mort. Per exemple, per a qualsevol Q i R:

{Q}
mentre (cert):
    y = y - 1
{R}

sempre és una especificació de correcció parcial.

Si Q no és prou fort, no podeu garantir la terminació de S, i molt menys, raonar sobre l’estat després de l’execució de S. En aquest cas, podeu afegir manualment una condició: S s’acaba. Amb Q i ell, el raonament pot continuar.

Per a una especificació de correcció total {Q} S {R}, Q és prou forta com per garantir la terminació de S, de manera que podeu concloure que S acabarà i l’estat final satisfà R.

Per exemple:

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

és una especificació de correcció total.

BTW: No estic segur si la resposta és correcta perquè la pregunta està etiquetada amb Correcció política. Si bé la definició de la pregunta sembla exactament la mateixa que en informàtica.