Qual é a diferença entre correção total e correção parcial?


resposta 1:

Uma especificação de correção total também é uma especificação de correção parcial. A correção parcial é mais fraca porque precisa da ajuda adicional de 'S termina' para chegar à conclusão: R se mantém no estado final.

Para uma especificação de correção parcial {Q} S {R}, você pode obter as seguintes informações: Dado um estado inicial que satisfaça Q, S pode terminar ou não. Se S terminar, após a execução de S, você atingirá um estado final que satisfaz R. Se não, R é inútil, pois não há estado final.

Por exemplo:

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

É uma especificação parcial de correção. Se y for inicializado com um número igual ou maior que 0, S será encerrado e depois x será 0. Enquanto se y começar com um número negativo, S será repetido para sempre e, como não termina, você não alcançará um estado ' após a execução de S '.

De fato, R pode ser qualquer coisa se S for um impasse. Por exemplo, para qualquer Q e R:

{Q}
while (verdadeiro):
    y = y - 1
{R}

é sempre uma especificação parcial de correção.

Se Q não for suficientemente forte, você não poderá garantir a rescisão de S, muito menos raciocinar sobre o estado após a execução de S. Nesse caso, você pode adicionar manualmente uma condição: S termina. Com Q e ele, o raciocínio pode continuar.

Para a especificação de exatidão total {Q} S {R}, Q é forte o suficiente para garantir o término de S, portanto, você pode concluir que S terminará e o estado final satisfará R.

Por exemplo:

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

é uma especificação de correção total.

BTW: Não tenho certeza se a resposta está correta, porque a pergunta está marcada com correção política. Enquanto a definição na pergunta parece exatamente a mesma que na Ciência da Computação.