Est-il difficile de réduire la résiliation à une exactitude partielle?

14

Si vous êtes familier avec la vérification de programme, vous préférerez probablement lire la question avant le contexte . Si vous n'êtes pas familier avec la vérification de programme, vous pourrez peut-être encore répondre à cette question, mais vous préférerez probablement lire d'abord le Contexte .

Contexte

Il est souvent indiqué que la vérification de l'exactitude partielle est indécidable. Pour les besoins de la discussion, choisissons une façon très particulière de rendre cette déclaration précise, dans le style de Floyd - Hoare. Un organigramme est un digraphe avec un nœud initial distinct à partir duquel tous les nœuds sont accessibles. Un programme est un organigramme dont les nœuds sont des commandes. Il existe trois types de commandes (1) les hypothèses supposent q , (2) les assertions affirment q et (3) les affectations v: = e. Ici q est une formule fol (logique du premier ordre), e est un terme fol et v est une variable.

Nous disons qu'un programme est partiellement correct lorsqu'il existe un moyen d'annoter chaque nœud x avec une précondition a (x) et une postcondition b (x) telles que (1) la précondition du nœud initial est valide, (2) { a (x) } x { b (x) } est valable pour toutes les commandes x , et (3) ( b (x) implique a (y) ) est valable pour toutes les arêtes de x à y . Ici, les triplets Hoare sont définis comme suit:

  • { p } assert q { r } signifie que ( p implique ( q et r )) est valide
  • { p } supposons que q { r } signifie que (( p et q ) implique r ) est valide
  • { p } v: = e { r } signifie que (( p avec e substitué à v ) implique r ) est valide

Voici un argument ondulé expliquant pourquoi la vérification de cette exactitude partielle est indécidable: Une fois que vous avez rempli certains a (x) et certains b (x), vous devez vérifier si certaines formules fol sont valides, et cela est indécidable.

Une manière typique de coder la terminaison dans une exactitude partielle consiste à ajouter des affirmations spéciales qui disent essentiellement "depuis la dernière fois que j'ai été exécuté, il y a eu des progrès vers la terminaison". Ces assertions de progression doivent être placées de telle sorte que toutes les marches infinies sur le diagramme de flux (qui commencent au nœud initial) contiennent une infinité d'assertions de progression. Pour être plus précis, disons que les assertions de progression ont toujours la forme assert u < v , où u et v sont des entiers positifs, sont précédées de l'affectation u : = f et sont suivies de l'affectation v : = u . Ici f est unfonction variante , u est sa valeur actuelle et v est sa valeur précédente. Maintenant, puisque nous parlons d '"entiers positifs" et que nous les comparons, nous devons nous assurer qu'un peu plus que fol est disponible: disons que l'arithmétique Peano est disponible. (Je ne suis pas convaincu de ce choix. N'hésitez pas à ignorer si cela vous convient.) Bien sûr, f peut utiliser toutes les autres fonctions et constantes mentionnées dans le programme. (Notez que l'ajout d'hypothèses au début du programme équivaut à l'introduction d'axiomes non logiques.)

Maintenant, si le programme avec des affirmations de progression est encore partiellement correct, alors nous savons que le programme d'origine se termine.

Question

Étant donné un programme de terminaison, il est difficile de trouver des fonctions variantes pour les affirmations de progression. Mais combien dur? (Je sais que même avec l'énorme arrière-plan ci-dessus, j'ai toujours laissé cette question en quelque sorte ouverte ou mal définie, selon la façon dont vous voulez la voir.)

Autrement dit: je cherche une référence qui formalise le problème de la réduction de la terminaison à une exactitude partielle, puis dit quelque chose sur sa complexité. Une réponse qui fait tout cela serait bien sûr la bienvenue.

Radu GRIGore
la source
Permettez-moi de vérifier si je comprends cela. Ce que vous demandez nous donnerait, entre autres, un algorithme qui prend un programme qui calcule une fonction récursive totale et génère une preuve d'une déclaration que la fonction est totale (sous la forme de fonctions variantes et de preuves qu'elles conviennent) )? Cela me semble terriblement incalculable.
Andrej Bauer
Andrej, cela me semble aussi indiscutable. Ce que je demande, c'est une preuve qu'il n'est pas calculable.
Radu GRIGore

Réponses:

7

Une façon d'y répondre est de considérer la complexité de calcul des problèmes de décision pour les classes de requêtes de correction partielle et de terminaison qui sont connues pour être décidables. L'interprétation abstraite utilisant le domaine polyédrique peut déduire les annotations de correction partielle que vous mentionnez dans les cas où les annotations requises sont des conjonctions d'inégalités linéaires. Le calcul de la post-condition abstraite est exponentiel dans le nombre de variables. Ensuite, il y a la surcharge de trouver le point fixe. Consultez les premiers articles de Cousot pour en savoir plus à ce sujet et la bibliothèque de tabliers si vous voulez jouer directement avec.

La recherche de fonctions variantes est décidable lorsque les fonctions variantes sont linéaires. Je n'ai pas pu trouver une caractérisation complète de la complexité de cela, mais "Termination of Linear Programs" par Tiwari a une section qui discute de la complexité. Voir aussi "Une méthode complète pour la synthèse des fonctions de classement linéaire" par Podelski et Rybalchenko. De plus, Byron Cook a travaillé sur l'exploitation de l'interprétation abstraite pour aider à construire des arguments de terminaison. Voir, par exemple, "Classement des abstractions" et "Analyses de variance à partir d'analyses d'invariance". Ceux-ci peuvent donner un aperçu supplémentaire de la relation entre l'exactitude partielle et la résiliation.

Liens:

Stephen Magill
la source
1
J'espère que cela ne vous dérange pas de modifier votre réponse et de rendre les liens actifs.
Andrej Bauer
4

Il y a une réduction évidente de la non-résiliation nécessaire à l'exactitude partielle, à savoir:

P ne se termine jamais lorsqu'il est démarré dans un état initial satisfaisant φ ssi { φ } P {faux} est valide.

Je suis conscient que c'est une autre non-réponse. Son avantage est qu'il est plus court que ceux ci-dessus.

Kai
la source
3

Il existe une technologie standard - généralement indécidable, bien sûr - pour remplir votre graphique avec ses conditions préalables et postérieures, à savoir la sémantique de précondition libérale la plus faible , qui est une forme de sémantique de transformateur de prédicat qui donne les conditions préalables les plus faibles pour la satisfaction de la spécification ou non -Résiliation. Il s'agit essentiellement d'une théorie complète de l'exactitude partielle de ces langues, et, en fait, de l'exactitude totale

C'est la craie et le fromage qui décident de la terminaison et de l'exactitude partielle où réside le dur labeur, car les deux sont tellement indécidables. Mais l'exactitude partielle est enchevêtrée avec des problèmes de conception de langage, à la fois pour les langages de programme et de spécification, tandis que la difficulté de la terminaison est de nature propre: pour toute théorie utilisée pour prouver la terminaison, il y aura des algorithmes qui se terminent, mais il ne peut pas être prouvé que la terminaison est relative à cette théorie. Par exemple, les calculs dans le calcul lambda polymorphe pur doivent se terminer, mais l'arithmétique Peano ne peut pas le prouver.

J'ai l'impression que le travail sur l'interprétation abstraite initié par Patrick Cousot, a été le plus dynamique dans ce domaine, mais je ne prétends pas être un expert.

Charles Stewart
la source
J'essayais de poser des questions sur la complexité de déduire des fonctions variantes. Excusez-moi de ne pas avoir été clair! Par curiosité, Rustan Leino a proposé un exemple hier soir (dans un pub) qui m'a fortement suggéré que wlp ne fonctionne pas aussi bien que wp & sp pour le type de programmes que je décris ici. Je devrai vérifier une fois que j'arriverai dans un endroit plus adapté au travail :)
Radu GRIGore
@Radu: Il y a eu du travail sur les preuves de terminaison automatique, avec du bon travail pour Prolog. Je peux trouver quelques références quand je trouve du temps.
Charles Stewart