Quelle est la différence entre l'exactitude totale et l'exactitude partielle?


Réponse 1:

Une spécification d'exactitude totale est également une spécification d'exactitude partielle. La correction partielle est plus faible car elle a besoin de l'aide supplémentaire de «S se termine» pour arriver à la conclusion: R reste dans l'état final.

Pour une spécification de correction partielle {Q} S {R}, vous pouvez obtenir les informations suivantes: Étant donné un état de départ qui satisfait Q, S peut se terminer ou non. Si S se termine, après l'exécution de S, vous atteindrez un état final qui satisfait R. Sinon, R est inutile car il n'y a pas d'état final.

Par exemple:

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

Il s'agit d'une spécification de correction partielle. Si y est initialisé avec un nombre égal ou supérieur à 0, S se terminera et après que x sera 0. Alors que si y commence par un nombre négatif, S bouclera pour toujours et puisqu'il ne se termine pas, vous n'atteindrez pas un état ' après l'exécution de S ».

En effet, R peut être n'importe quoi si S est une boucle morte. Par exemple, pour tout Q et R:

{Q}
tandis que (vrai):
    y = y - 1
{R}

est toujours une spécification de correction partielle.

Si Q n'est pas assez fort, vous ne pouvez pas garantir la résiliation de S, sans parler de la raison de l'état après l'exécution de S. Dans ce cas, vous pouvez ajouter manuellement une condition: S se termine. Avec Q et lui, le raisonnement peut continuer.

Pour la spécification d'exactitude totale {Q} S {R}, Q est suffisamment fort pour garantir la terminaison de S, vous pouvez donc conclure que S se terminera et que l'état final satisfait R.

Par exemple:

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

est une spécification d'exactitude totale.

BTW: Je ne sais pas si la réponse est correcte parce que la question est étiquetée avec l'exactitude politique. Alors que la définition de la question ressemble exactement à celle de l'informatique.