previous up next top index
Précédent : Logique exécutable Remonter : Mécanisation de la déduction Suivant : Déduction modulo une théorie équationnelle


Preuves par récurrence

Participants : Narjès Berregeb, Adel Bouhoula, Michaël Rusinowitch

Dans le cadre de nos travaux sur la mécanisation des preuves par récurrence et sur le logiciel SPIKE, plusieurs extensions ont été étudiées.

Les théories avec opérateurs associatifs et commutatifs interviennent fréquemment dans les problèmes de vérifications de logiciels ou de circuits. Ces opérateurs nécessitent un traitement spécifique car ils engendrent des preuves complexes ou même divergentes. Nous avons poursuivi notre étude des schémas d'induction et construit un algorithme pour déterminer les variables d'induction. L'avantage de cette approche par rapport aux autres techniques de preuve par induction implicite est qu'elle n'utilise pas l'unification AC mais seulement le filtrage AC qui est moins complexe. Nous avons montré la correction et la complétude réfutationnelle (sous certaines restrictions) du nouveau système d'inférence obtenu [14]. Ces résultats ont été implantés et les expérimentations sur des spécifications de circuits ont permis d'obtenir des preuves plus naturelles et demandant moins d'intervention de la part de l'utilisateur qu'avec d'autres systèmes comme NQTHM, LP, PVS. Une démonstration du système a eu lieu à la conférence RTA [15].

Les concepts d'observabilité permettent de mieux comprendre les problèmes de correction de programmes. Dans l'approche observationnelle des objets sont considérés comme égaux si leurs comportements observables sont identiques. Bien qu'un grand nombre de travaux aient été consacrés aux aspects sémantiques de l'observabilité, il existe peu d'études sur les techniques de preuves et encore moins d'implantations. Nous avons développé une nouvelle approche pour intégrer la méthode de Context Induction de Hennicker dans le cadre de l'induction implicite. L'aspect le plus original de notre technique est la notion de test-contexte, analogue à celle de test-substitution, qui permet de schématiser l'ensemble des contextes possibles d'un terme. Les premières expérimentations ont donné des résultats très prometteurs.

Nous avons proposé des procédures de preuve par récurrence et de test de complétude suffisante pour les spécifications conditionnelles paramétrées [5]. Pour tester qu'un symbole de fonction f est suffisamment complet, on construit un arbre de motifs pour f et on teste la réductibilité par cas de toutes les feuilles de l'arbre. En se restreignant aux règles conditionnelles à préconditions booléennes, cette procédure apporte à l'utilisateur une aide à la construction de définitions complètes.

Nous avons proposé un schéma général de procédure de preuves par récurrence avec ensemble test ainsi qu'une technique simple de preuve de correction [19]. Cette méthode permet de réfuter plus de conjectures non valides qu'avec les méthodes précédentes grâce à des nouvelles notions d'ensemble test, de positions de récurrence et de témoin d'incohérence. Nous avons proposé également des algorithmes permettant de calculer un ensemble test ainsi que les positions de récurrence d'une spécification conditionnelle définie à l'aide des constructeurs non-libres. A la différence des travaux antérieurs, la complétude réfutationnelle de cette procédure n'est pas restreinte aux spécifications booléennes.

La plupart des prouveurs existants considèrent uniquement des spécifications suffisamment complètes sur des constructeurs libres. Le prouveur SPIKE n'interdit pas l'utilisation des spécifications avec relations entre les constructeurs mais dans ce cas la complétude réfutationnelle de la procédure de preuves par récurrence n'est plus garantie et l'efficacité du prouveur est très limitée en pratique. Nous avons proposé, en collaboration avec Jean-Pierre Jouannaud (LRI, université Paris Sud), une nouvelle méthode de test de complétude suffisante et de preuves par récurrence dans le cadre de la logique des clauses de Horn avec égalité et prédicat d'appartenance [46]. Ce cadre est plus adéquat pour manipuler les constructeurs non-libres car si les constructeurs doivent satisfaire des équations comme pred(succ(X))=X pour les entiers relatifs, alors l'ensemble des termes constructeurs clos peuvent être reconnus par un automate, d'après un résultat de H. Comon. Cet automate peut être traduit par une spécification dans laquelle les constructeurs deviennent libres dans les nouvelles sous-sortes associées aux états de l'automate, par exemple pred devient libre dans la sorte des entiers négatifs.



previous up next top index Précédent : Logique exécutable Suivant : Déduction modulo une théorie équationnelle Remonter : Mécanisation de la déduction