Précédent : Fondements scientifiques
Remonter : Projet PROTHEO, Contraintes, Déduction
Automatique Suivant : Logiciels
Résumé : La vérification de logiciels est un domaine d'application majeur du projet. Dans le cadre d'un contrat avec le CNET, nous appliquons nos techniques de spécifications et de preuves à la vérification de logiciels de télécommunication.La résolution de contraintes est un autre domaine d'application important. Au travers de la planification d'un service de transport porte-à-porte à la demande, nous abordons le problème plus général d'allocation de ressources.
Enfin des applications à plus long terme de nos recherches sont envisageables dans le domaine de la conception de langages de programmation combinant différents paradigmes.
Mots-clés : vérification, télécommunications
Les techniques de preuve automatique ont un fort potentiel pour la vérification de circuits, de protocoles, ou d'applications liées aux télécommunications. En effet la preuve de logiciel est actuellement dominée par les approches du type model checking qui ont l'avantage d'avoir été complètement automatisées. Cependant elles demeurent souvent restreintes à des preuves de systèmes ayant un nombre d'états fini et leur généralisation se heurte encore à des difficultés d'explosion combinatoire. Or typiquement circuits et protocoles sont paramétrés, i.e., définissent des familles infinies de systèmes. Par exemple, un circuit pour multiplier deux entiers est paramétré par la taille des données.
Nos techniques de preuve automatique implantées dans le
système SPIKE (voir Section ) peuvent traiter par
récurrence les systèmes infinis ou paramétrés. Par exemple, les
circuits sont vérifiés en une passe pour toutes les tailles de
vecteurs de bits possibles. Ces techniques peuvent se combiner
avec des procédures de décisions sur des domaines spécifiques
comme l'arithmétique, ce qui accroit leur efficacité (voir
Section
).
Une voie prometteuse est la combinaison de techniques de
preuves hétérogènes combinant model checking, preuve par
récurrence et procédures de décision. L'étude de stratégies pour
guider de telles preuves est également une application possible
de nos travaux que nous commençons à explorer (voir
Section ).
Mots-clés : programmation par contraintes,
programmation linéaire, recherche opérationnelle
Les problèmes d'allocation de ressources apparaissent dans des contextes variés et ont de nombreuses applications dans le domaine industriel ou du service public : emploi du temps, planification de tâches, etc.
La programmation linéaire fournit une première approche du problème. Son intérêt principal réside dans le fait que les contraintes sont considérées globalement lors de l'optimisation. Néanmoins, elle n'est pas bien adaptée à la nature discrète du problème d'allocation des ressources et ne donne pas des résultats très satisfaisants.
Des méthodes de propagation de contraintes par consistance locale ont également été explorées. Cette approche est bien adaptée aux problèmes discrets et le coût polynomial de la propagation locale des contraintes la rend intéressante, mais elle échoue à son tour à résoudre des problèmes de grande taille. Il lui manque le caractère global des méthodes classiques de recherche opérationnelle.
La solution semble résider dans une coopération judicieuse
entre recherche opérationnelle, propagation de contraintes par
consistance locale et manipulation symbolique des contraintes.
Les techniques que nous développons dans le projet (voir
Section ) appartiennent surtout à ces
deux derniers domaines. Toutefois le problème de la planification
de transport porte-à-porte que nous traitons pour le GIHP (voir
Section
) est un bon
exemple pour étudier leur combinaison avec des techniques de
recherche opérationnelle.
Mots-clés : programmation logique, fonctionnelle, par
contraintes, par règles
Les techniques de réécriture et déduction avec contraintes développées dans le projet trouvent naturellement une application dans la conception des nouveaux langages de programmation déclaratifs, combinant divers styles de programmation, fonctionnelle, logique, par contraintes, par règles, qui se complètent plus qu'ils ne s'excluent.
La programmation logico-fonctionnelle est fondée sur le
-calcul, la réécriture, ainsi que sur
un mécanisme de déduction non-déterministe lié à une
généralisation de la réécriture. L'étude des stratégies de
réécriture (voir Section
) et
plus généralement des problèmes relatifs à la gestion du
non-déterminisme sont donc essentiels dans le cadre du
développement de langages logico-fonctionnels.
La programmation par contraintes consiste à déclarer des
relations entre objets d'un certain domaine de calcul, appelés
contraintes, puis à évaluer le programme correspondant grâce à
l'utilisation d'un mécanisme de déduction basé sur un résolveur
de contraintes pour ce domaine. Il est donc important de
concevoir des méthodes de résolution de contraintes sur
différents domaines de calculs fondamentaux (entiers, réels,
termes, ...) et d'étudier leurs interactions avec des mécanismes
de déduction plus généraux. Nos travaux sur la collaboration de
résolveurs de contraintes et sur l'unification d'ordre supérieur
(mentionnés dans la Section ) vont dans cette
direction.
Des langages à base de règles sont utilisés dans les systèmes
de contrôle de processus industriels, dans les systèmes experts
ou en programmation par contraintes. Les techniques de réécriture
conditionnelle ne s'appliquent pas directement, mais devraient
aider à proposer une sémantique formelle et des techniques de
vérification pour de tels systèmes de règles. Les recherches que
nous menons autour du système ELAN (voir
Section ) et
du langage de spécification qu'il offre sont susceptibles de
trouver là un domaine d'application.