• Aucun résultat trouvé

Contributions à la sémantique de la programmation logique

N/A
N/A
Protected

Academic year: 2021

Partager "Contributions à la sémantique de la programmation logique"

Copied!
207
0
0

Texte intégral

(1)

HAL Id: tel-00005594

https://pastel.archives-ouvertes.fr/tel-00005594

Submitted on 5 Apr 2004

HAL is a multi-disciplinary open access

archive for the deposit and dissemination of

sci-entific research documents, whether they are

pub-lished or not. The documents may come from

teaching and research institutions in France or

abroad, or from public or private research centers.

L’archive ouverte pluridisciplinaire HAL, est

destinée au dépôt et à la diffusion de documents

scientifiques de niveau recherche, publiés ou non,

émanant des établissements d’enseignement et de

recherche français ou étrangers, des laboratoires

publics ou privés.

logique

Mathieu Jaume

To cite this version:

Mathieu Jaume. Contributions à la sémantique de la programmation logique. Interface

homme-machine [cs.HC]. Ecole des Ponts ParisTech, 1999. Français. �tel-00005594�

(2)

présentéeà

l'École Nationale des Ponts et Chaussées Spécialité Informatique par Mathieu JAUME Sujetdela thèse Contributions à la sémantique de la programmation logique

Soutenue le11 Janvier 1999 devant le jurycomposéde

Irène GUESSARIAN Présidente

Véronique VIGUIÉ DONZEAU-GOUGE Rapporteurs Olivier RIDOUX

Gilles BERNOT Examinateurs Gilles DOWEK

(3)
(4)

Mon goût pour les études est assez récent et a pour origine la grande qualité des enseignants que j'ai pu rencontrés durant ma scolarité. Irène Guessarian gure parmi eux et je suis très heureux qu'elleait accepté de présiderlejury.

Véronique Viguié Donzeau-Gouge et Olivier Ridoux ont accepté de rapporter sur ce travail. Je leur adresse tous mes remerciements pour la lecture attentive de la version préliminaire de ce manuscrit ainsi que pour lesremarques qu'ilsm'ont faites.

La fréquentation de René Lalement est enrichissante à plus d'untitre et cette thèse doit beaucoup à l'originalité de ses points de vue et à son optimisme. Il m'est impossible de  résumer  ici ses qualités en quelques mots maisje tiens à leremercier pour leplaisir que j'ai eu à travailler sous sadirection.

Je tiens àremercier toutparticulièrement GillesBernotpour avoir ac-ceptédeparticiperaujurymaisaussipourm'avoiraccueilliauseinduLami de l'Université d'Évry. J'en prote aussipour remercier Catherine Dubois pour les discussions que nous avons eues et l'ensemble du Lami pour leur accueilchaleureux.

Jeremercie GillesDowekpouravoirbienvouluconsacrerunpeudeson temps àmon travail en acceptant de participeraujury.

Bienqu'unpeuéloignédesespréoccupationsactuelles,cetravailn'aurait pu existersans l'amitié et la conance de Alain David. Il fut monpremier contact avec le monde de la recherche et mon travail doit beaucoup à ses encouragements constants etses conseils judicieux tout au long de ma sco-larité.

J'ai eu lachancede poursuivremes études aux côtés de Jannick Dele-champ. La rigueur de sa démarche et l'originalité de ses reexions m'ont accompagné durant ces dernières années. Si nos centres d'intérêt se sont depuisunpeuéloignés,sonamitiéestrestéeconstanteetsesencouragements précieux.Pour tous les moments quenous avons partagés, je lui adressede chaleureux remerciements.

DanielHirschkoffet, plusrécemment, HervéGrallont partagémon quotidien auCermicsetjeles remercie pour la bonnehumeur  qu'ilsont apportée danslebureau.

Enn, je tiens à remercier Jean-Michel Douin et Jean-François Dazy avec quij'ai eulachanced'enseigner surdesthèmesproches dela program-mationlogiqueet quim'ont toujoursapporté leursoutien.

Bien sûr, j'oublie ici de nombreuses personnes qui ont fait preuve de beaucoupde patienceetde délicatesse.Qu'ilsen soient remerciés.

(5)
(6)

delaprogrammationlogique estcomplètement formaliséedanslecalculdes constructions inductives. Après avoir envisagé le problème de la dénition de fonctions partielles dans un système dans lequel seules les fonctions to-talessont représentables, l'unicationest obtenue en réutilisant une preuve formelleexistanteportantsurunsur-ensembledestermes.Lespropriétés fon-damentales de laSLD-résolution sont alors formalisées. Le niveau de détail imposé par la mécanisation des preuves considérées a mis en relief la com-plexité cachée de certaines preuves:le mécanisme de renommage est traité de manière explicite, transformant ainsi certaines certitudes théoriques en réalités. D'un point de vue interne,les preuves SLD, nies ou innies, sont comparéesà cellesquel'on peutobtenir,par inductionou parco-induction, à partir des clauses d'unprogramme logique vues comme des règles d'infé-rence. Dans le cas ni la correspondance est complète (ce que calcule un programmeestprouvable  )tandis quedanslecasinni,certainsobjetsnon calculablessonttoutefoisprouvables.Lespropriétésclassiquesdesdénitions co-inductivesetlacomparaison decertainesdérivationsinniesàdestermes de preuve d'un type co-inductif, se révèlent utiles tant pour expliquer les résultatsd'incomplétuded'approchesexistantesquepourdénirune séman-tiquevalide etcomplètepour uneclassede dérivations innies(précisément cellesqui ne construisent pasdetermes innis).

Abstract This workcan be splitintwo parts.First,we present a full for-malisationofthesemantics ofdeniteprograms, inthecalculusofinductive constructions.For this,wedescribeaformalisationoftheproofofrstorder terms unication obtained from a similar proof dealing with quasi-terms, thusshowing inageneral settinghowpartial functionscan be consideredin a system with total functions. Then, SLD-resolution is explicitely dened: therenaming process required inSLD-derivations is madeexplicit, thus in-troducing complications, usually overlooked, during the proofs of classical results.Last, switching andliftinglemmas and soundnessandcompleteness theorems areformalised. For this,we present two lemmas,usually omitted, whichareneeded.Thesecond partfocuses onthe assignmentofmeaning to innite derivations inlogic programming. By considering proofs asobjects inaco-inductiveset,standard propertiesofco-inductive denitionsareused both toexplain whyapproachesdevelopped byconsidering inniteelements inthe universeof thediscourse arenot complete and to dene asound and complete semantics, based onthe logicprogram as co-inductive denition paradigm, for a subclass of innite derivations, called innite derivations over anite domain (i.e.derivations which donot compute inniteterms).

(7)
(8)

Introduction 1

1 Préliminaires 8

1.1 Dénitions (co-)inductives . . . 8

1.1.1 Dénitionsinductives . . . 8

1.1.2 Dénitionsco-inductives . . . 13

1.2 Coq etlecalculdesconstructions inductives . . . 16

1.2.1 Isomorphismede Curry-Howard . . . 16

1.2.2 L'assistant à lapreuve Coq . . . 20

1.2.3 Typesinductifs . . . 21

1.2.4 Typespolymorphesettypesdépendants . . . 24

1.2.5 Extraction deprogrammes . . . 24

1.2.6 Typesco-inductifs . . . 27

2 Transposition de propriétés formelles: l'unication 31 2.1 Termesetquasi-termes . . . 32

2.1.1 Dénitiondestermes etalgorithmed'unication . . . 32

2.1.2 Quasi-termes . . . 32

2.2 Fonctionspartielles . . . 34

2.3 Liensentre termesetquasi-termes . . . 39

2.3.1 Dénitionformelle destermes . . . 39

2.3.2 Quasi-termes compatibles  . . . 40

2.3.3 Deuxfonctions surlesquasi-termes  compatibles  . . 44

2.3.4 Deuxfonctions danslesquasi-termes . . . 47

2.4 Substitutionsetquasi-substitutions . . . 48

2.4.1 Dénitions . . . 50

2.4.2 Liensentre substitutions etquasi-substitutions . . . . 50

2.4.3 Conservation despropriétés de  compatibilité  . . . . 52

2.4.4 Principalespropriétés . . . 54

(9)

3.1.1 Objets informelsetdénitions formelles . . . 62

3.1.2 Preuves explicites. . . 66

3.2 Aspectssyntaxiques . . . 70

3.2.1 Programmesdénis. . . 70

3.2.2 SLD-Résolution . . . 72

3.2.3 Deuxlemmes classiques . . . 81

3.3 Aspectssémantiques . . . 88 3.3.1 Interprétations etmodèles . . . 88 3.3.2 Validitéde laSLD-Résolution . . . 94 3.3.3 Théorèmede complétude . . . 96 4 SLD preuves innies 112 4.1 Calculabilité àl'inni. . . 114 4.1.1 Approchemétrique . . . 115

4.1.2 Programmespartiellement complets . . . 121

4.1.3 Complétionpar idéaux . . . 125

4.1.4 Programmation Logique avec Contraintes sur le do-maine desarbres innis . . . 128

4.1.5 Approchepar plus petit point xe . . . 132

4.2 Induction,co-induction etprogrammation logique . . . 136

4.2.1 Inductionet programmation logique . . . 138

4.2.2 Co-inductionetprogrammation logique . . . 140

4.2.3 C-sémantique . . . 146

4.2.4 Arbresdepreuve etSLD-preuves . . . 149

4.3 SLD-preuves. . . 156

4.3.1 SLD-preuvesdirectes . . . 157

4.3.2 SLD-preuvesinnies surundomaine ni . . . 168

Conclusion 177

A Formalisation des théorèmes de point xe 181

(10)

Introduction

Spécier les propriétés sémantiques d'un langage permet, d'une part à celui qui programme dans ce langage de disposer d'une sémantique claire, préciseetnon ambiguë, et,d'autre part, àcelui quiconçoit un interpréteur (ouuncompilateur)pourcelangaged'envérierlacorrection.Leschapitres quisuiventportentsurdeuxquestionsdesémantiquedeladeprogrammation logique: la première est celle de la formalisation et du développement de la théorie classique  de la programmation logique dans un méta-système logique (le calcul des constructions inductives), la seconde est celle de la sémantiquedesdérivations innies.

La programmation logique

Issue de la recherche en démonstration automatique en logique du pre-mierordre,initiéeparJ.Herbrand[46 ],etbaséesurleprincipederésolution de A.J. Robinson [86 , 87], la programmation logique a été introduite dans lapratique par A. Colmerauer (langage Prolog, 1972) [18] tandis que ses fondementsthéoriquesontétéétablisparR.A.Kowalski etM.H.vanEmden [96].Cemodèledeprogrammation abandonne leprincipe  de programma-tionimpérative,quiobligel'informaticienàindiquerpasàpasàl'ordinateur cequ'ildoitfaire,auprotd'uneprogrammationplusdéclarativequiconsiste àreprésenterdansun formalisme adéquat les donnéesdu problèmeà partir desquelles un résultat pourra être déduit. Ceparadigme de programmation est né de la découverte d'un sous-ensemble de la logique du premier ordre (aussiappelélefragment Hornien de lalogique desprédicats) associé àune interprétationprocédurale correcteetcomplète,baséesurlaSLD-résolution (Selection LinearDenite). Lanaissance du langage Prolog aété motivée parl'étudede problèmesd'analyseetdecompréhensionde la langue natu-relle nécessitant l'utilisation derésultatsen logiquedu premierordre eten démonstration automatique. L'expression des connaissances sous forme de clausesetl'emploid'unerègle d'inférence adéquateaconduit àunvéritable langagedeprogrammation.Unedesidéessous-jacentesdelaprogrammation logiqueestdeconsidérerunprogrammecommeunensemblederelationsdont l'exécution consiste à  démontrer  une nouvelle relation à partir de celles qui constituent le programme. On peut donc voir le calcul eectué par un

(11)

 programme logique  , à partir d'une requête, comme l'extraction d'un ré-sultat à partir d'une preuve. Le programme utilisé exprime les propriétés caractérisant larecherche d'unepreuve,etlarequête soumisespécie quelle preuve doit être construite. On peut ainsi schématiser le paradigme de la programmation logiquepar les deuxcélèbres identications:

programme  théoriedu premierordre exécution  recherche de preuves

Lesfondementsthéoriquesdelaprogrammationlogiquesontsynthétisésdans [5, 7, 63, 67, 96] et l'utilisation du langage de programmation Prolog est illustréedans[16 ,94].Par lasuite,lesbasesthéoriquesdelaprogrammation logique ont été consolidées et de nombreuses extensions ont été proposées and'augmenterlapuissanced'expression decemodèledeprogrammation: négation [6,84 ], contraintes[47 ], concurrence[90],ordre supérieur[74 ] ...

Un  programme logique  est un ensemble ni de clauses de Horn. Ces formules sont notées A B

1 ;;B n où A etB i (1 6i6n) désignent des atomes. Plusieurs lectures d'un programme logique sont possibles, donnant lieu à diérentes sémantiques. Traditionnellement, on distingue la séman-tique déclarative d'un programme de sa sémantique opérationnelle (aussi appelée sémantique procédurale). D'un point de vue déclaratif, la clause

A B

1 ;;B

n

peut s'interpréter par  si B 1

et  et B n

sont vrais, alors A est vrai  . Dans ce cas, une clause spécie une relation  logique  entre formules atomiques exprimée par la formule quantiée universelle-ment 8~x(A _:B

1

_ _ :B n

) (ou de manière logiquement équivalente par 8~x(B

1

^^B n

) A)). Cette formule indique comment interpréter logiquement une clause en utilisant des connecteurs logiques (:, _, ^, )) et des quanticateurs (8). Une clause négative (aussi appelée but) est une clause de la forme B

1 ;;B

q

dont la signication logique est donnée par laformule8~x(:B

1

__:B q

) (ou demanière logiquement équivalente par :9~x(B

1

^^B q

)). L'exécution d'un programme P à partir d'unbut B

1 ;;B

q

consiste à réfuter l'ensemble P [f8~x(:B 1

__:B q

)g, ce quirevient,d'unpointde vuedéclaratif, àprouveràpartir deP,laformule existentielle9~x(B

1

^^B q

).Cettepreuveestobtenuedemanière construc-tive:un résultat estextraitdelapreuvede9~x(B

1

^^B q

)etcorrespond à une aectation des variables de ~x. Il s'agit d'une substitution solution  telle que P j= 8~z(B

1

^^B q

) où j= dénote la relation de conséquence sémantique. Cette lecture logique des programmes (qui utilise la notion de  véritélogique àlaA.Tarski)nefournitaucuneinformationquantàla ma-nière dont le programme, en tant que processusde preuve, s'exécute. D'un point de vue opérationnel, la clause A B

1 ;;B

n

peut se comprendre commeuneprocédureAdont l'appelengendreraitl'exécutiondesB

i

.Sil'on adoptece pointdevue,lepassagedesparamètres entreprocédureappelante

(12)

et procédure appelée se fait par le mécanisme d'unication 1

. Cette inter-prétation opérationnelle des programmes est dénie par laSLD-résolution, règle d'inférence présentée et formalisée en détail dans le chapitre 3. Cette lecture repose sur la notion de dérivabilité syntaxique (à la G. Frege); les substitutions construites lors d'une dérivation sont appelées des réponses. Un aspect fondamental de la programmation logique est la correspondance complète entre ces deux lectures (sémantiques). Mais cette correspondance se révèle aussi utile d'un point de vue plus pratique: elle permet de com-prendre le résultat de l'exécution d'un programme logique à partir d'une requête sans en connaître nécessairement le mécanisme d'exécution. Enn, signalons qu'il existe bien d'autres lectures de la programmation logique: réécriture, résolution d'équations, preuve de théorème, réseau de processus communicants ...

Formalisation de la SLD-résolution dans un méta-système lo-gique: pourquoi formaliser ce qui semble déjà formel?

Une preuve formelle est une preuve dont on peut établir la correction sansinterpréterlessymbolesqu'ellecontient:ilsutdes'assurerquechaque étapedelapreuveobéitàcertainesrèglesdemanipulationdessymboles.Les ordinateurspermettentunemanipulationd'objetssymboliques,etilestdonc possible dereprésenter despreuves(formelles) etd'envérier lavalidité(en quoicet objetest-ilbien unepreuve?)à l'aided'unformalisme adéquat.Le logicielutilisé pourlecodageetlavérication despreuvesestleCoqProof Assistant (version 6.2.2) [19 ],développé à l'Inria. Coq estun assistant à la preuve basé sur un méta-système logique (logical framework): le calcul desconstructions inductives [21, 97]. Il s'agit d'uneextension d'un-calcul typé d'ordre supérieur[8] permettant de représenter, via l'isomorphismede Curry-Howard, un  raisonnement mathématique  (preuve en logique intui-tionniste d'ordre supérieur) pouvant être mis en ÷uvre sur ordinateur. On peutainsivérieretgarantir mécaniquement  à l'aidede ceformalisme la validitéd'unepreuve.Le chapitre 1estessentiellementconsacréàla présen-tation de cet assistant à la preuve. Denombreux développements ont déjà été réalisés à l'aide du système Coq: axiomatisations de théories mathé-matiques(groupes, domaines, catégories, théoriedesensembles de Zermelo-Fraenkel...),propriétesformellesdelangagesfonctionnels,-calculavec sub-stitutionsexplicites,théoriedesautomates,unicationde (quasi-)termesdu premierordre ...

Toutes ces contributions serévèlent d'unegrandeutilité:toutcomme un composant logiciel ,unepreuve formelleest réutilisable. Le développe-1.l'unication fournissant uneaectation àcertaines variables des procédures appe-lantesetappelées, cemécanismedepassagedeparamètresestmulti-directionnel, abolis-santainsiladistinctionentreparamètresd'entréeetparamètresdesortie

(13)

mentprésentédanslechapitre3correspondàuneformalisationdesrésultats classiquesde la programmation logique:lemmes de commutation et de gé-néralisation, théorèmes de validité et de complétude de la SLD-résolution. La première étape de cette formalisation consiste naturellement à spécier un ensemble de termes et à prouver la décidabilité de la propriété d'uni-cation sur cet ensemble, propriété constamment utilisée en programmation logique. Cette propriété a été formalisée par J. Rouyer [89] et fait partie des contributions du logicielCoq; lapreuve déjà établiesera donc réuti-lisée dans le chapitre 2. Toutefois, l'ensemble sur lequel elle est dénie ne correspond pas exactement à l'ensemble des termes que nous utilisons et lapropriété d'unicationseraobtenue en transposant  auxtermesle théo-rèmeétablipourlesquasi-termes.Cette technique depreuveestprésentée danslechapitre 2et dans[52 , 55].

Lesrésultatsfondamentauxde laSLD-résolution sont ensuiteformalisés dans le chapitre 3. Puisque ces résultats ne sont pas  nouveaux  et sont maintenant démontrés dans de nombreux ouvrages consacrésà la program-mation logique, on peut s'interroger sur l'utilité de leur formalisation. En eet, la règle de coupure du calcul des séquents et le fragment Hornien de la logique du premier ordre sont à la base du paradigme de la program-mation logique etles propriétés classiques de ce modèle de programmation s'expriment et s'établissent dans un cadre assez formel. Aussi, il peut pa-raître surprenant, voire inutile, de vouloir formaliser ces résultats dans un méta-systèmelogique.Pourcela,rappelonsquelaformalisationd'unepreuve consiste, d'une part, à dénir à l'aide d'un langage de spécication les ob-jets manipulés et à expliciter complètement, et a priori, les hypothèses de l'énoncéà démontrer et, d'autre part, à décomposer les étapes dela preuve en  exhibant  les mécanismes de construction des conclusions à partir des hypothèses. C'esten selivrantà cetexercicequel'onconstatequecertaines preuvesclassiques,dansleurprésentationcourante,omettent desdétails qui peuvent s'avérercruciaux. Ces  détails , volontairement ignorésdansla lit-térature, jouent pourtant un rôle important etleur omission est à l'origine de  petites erreurs  courantes: certains résultats corrects sont établis in-correctement et certains résultats ne sont corrects que sous certaines hy-pothèses sans lesquelles il existe des  cas pathologiques  pour lesquels ces résultatsne s'appliquentpas.Aussi,ce développementnousaconduità pré-ciser certaines hypothèseset à expliciter tous les détails et mécanismes des preuves formalisées. Les principales dicultés rencontrées proviennent évi-demment des diérents renommages nécessaires dans une dérivation mais aussidubesoind'explicitera priorileshypothèsesd'unénoncéàdémontrer. L'explicitation des hypothèses de renommage sur les clauses utilisées nous aconduit à construire (i.e. àcalculer) les substitutions derenommage utili-séesenspéciant un véritablecalcul surlesvariablesderenommage:tout

(14)

tés surles noms desvariables automatiquement engendréeslors de l'exécu-tiond'unprogramme,lespreuvesformellesdespropriétés sémantiques dela programmationlogiquedoivent prendreencompte,de manièreexplicite,les propriétés des divers renommages eectués. Ces propriétés, spéciées dans les dénitions formelles du mécanisme d'exécution des programmes dénis, constituentuneétapeessentiellelorsquel'onsouhaitedonnerune interpréta-tionprocéduraleàunlangagepurementdéclaratif(lefragmentHorniendela logiquedesprédicats). La priseen compte de cesdétails complique considé-rablement les preuvesdesrésultats classiqueset nousverrons, par exemple, quelapreuveduthéorèmedecomplétudedelaSLD-résolutionestplus com-plexequ'iln'yparaîtetnécessite,d'unpointdevueformel,plusieurslemmes  techniques  (renommage d'unedérivation, combinaisons de plusieurs déri-vations,...).Il estimportantde noterquecetteexplicitationdeshypothèses doitsefairea priori.Curieusement,ilestcourant,lorsquel'onprouve, àla main  ,lesrésultatsclassiquesde laprogrammation logique  surlepapier , desupposer,au furetàmesurequel'onprogressedansunepreuve,des pro-priétés sur le renommage des clauses. Bien entendu, il existe un théorème d'indépendance vis à vis du choix des variables de renommage, lorsque ce choix satisfait de  bonnes  propriétés: il est toujours possible de seplacer dans une situation où ces  suppositions  sont vériées. Cependant, pour quecesbonnes propriétéssoientsatisfaites,ilestnécessaired'appliquerce résultat d'indépendance en indiquant explicitement (i.e. en instanciant les objets qu'il met en jeu) en quoi il permet de supposer telle propriété sur les variables de renommage. Pourtant, ce théorème d'indépendance est ra-rement énoncé et son utilisation est souvent implicite (comment distinguer clairement ce qui est supposable de ce qui ne l'est pas?) même s'il consti-tue, d'un point de vue formel, un résultat primordial de laprogrammation logique,aumême titrequeles théorèmes devalidité etdecomplétude,qu'il permetdeprouverrigoureusement. Pour obtenirunepreuveformelle,ilfaut doncspécier audépart toutes leshypothèsesnécessairesàlapreuve.Cette explicitationest parfoisdélicatepuisque ceshypothèsesdoivent obligatoire-mentportersurdesobjetsprésentsdansl'énoncéàmontreretnepeuventpas porter surdesobjets construitsdanslapreuve.Par exemple,contrairement àunusagecourant,on nepourrapassupposerqu'uneclause soitrenommée endehorsdesvariables d'unobjet(requête,domaine d'unesubstitution, ...) construitdanslapreuve maisne gurant pasdansl'énoncéinitial:ilfaudra identiercetensembledevariablesàpartirdesobjetsprésentsdansl'énoncé initial ou bien imposer certaines propriétés a priori à partir desquelles une tellesuppositionpourraêtredéduite.Leparagraphe3.1présentelesquelques  pointsdedétail généralementomisetquinécessitentquelquesprécautions lorsd'uneformalisation. La formalisationdelasémantiquedesprogrammes dénis, présentée dans le chapitre 3 et dans [51 , 53 , 54 , 56 ], explicite tous ces pointsde détail etpourra donc paraîtrefastidieuse.

(15)

Sémantique des dérivations innies

LesrésultatsclassiquesdelaSLD-résolution,formalisésdanslapremière partie, concernent les calculs nis (i.e. dénissent une sémantique pour les SLD-réfutations). En eet, il existe une tradition en informatique qui veut que tout  bon  programme soit un programme dont l'exécution termine. La programmation logique n'échappe pasà cette tradition et les propriétés de terminaison des programmes logiques ont fait l'objet de nombreux tra-vaux.Pourn'enciterqu'un,M.Bezemproposedans[11 ]unecaractérisation d'une classe de programmes dénis qui terminent  (indépendamment de la stratégie de recherche et de la règle de séléction utilisée) à partir d'une largeclassedebuts.Cedéveloppement reposesurlanotiond'applicationsde niveaux

2

(levelmappings)introduiteparA.Cavendon etétablitla terminai-sondes programmes récurrents

3

à partir de buts dont les instances ont un niveau inférieuràuncertainniveau.Répondantauxmêmespréoccupations, R.N. Bol étudie dans [12] la possibilité d'introduire dansla SLD-résolution unmécanismepermettant ladétectionde certaines  boucles , conduisant à desdérivations innies, an de ne pas poursuivre larecherche dans ces cas (touten garantissant quetoutes lessolutions nies restent constructibles).

Aujourd'hui,l'étudedelasémantiquedes calculs innis apparaîtdans de nombreux domaines de l'informatique: extension de la théoriedes auto-matesaudomainedesmotsinnis,représentationsniesdesréponsesinnies aux requêtes dans les bases de données déductives [14 ], dérivations innies dansdes systèmes de réécriture[26 ], -calcul inni [59 ], dérivations innies enprogrammationlogique...Eneet,certainsobjetssont,parnature,innis etles programmesquipermettentde lesconstruire,même s'ilsne terminent pas,eectuent bienuncalcul utileenuncertainsens .Cependant,dansle domaine delaprogrammation logique,toutes lesdérivations inniesne cor-respondentpasnécessairementàlaconstructiond'untelobjet:certaines dé-rivations fuient  .Toutefois,même sicesdérivationsne calculent  pas(i.e. neconstruisentpasdetermesinnis),elles prouvent (preuveinniesurun objetni):parexemple,onpeutvoirladérivationinnieobtenueàpartirdu programmep(x) p(x)etde larequêtep(z)commeune preuve (innie)de 8xp(x).Danslalittératureconsacréeàlaprogrammationlogique,iln'existe pasunesémantiqueclassique  ,maisplusieurs approchesnon équivalentes. Dans la plupart d'entre elles, la dénotation d'un programme déni P est obtenue en considérant leplus grand point xed'unopérateur associé à P. Danslechapitre4,nousverronsquelorsquel'universdudiscourscontientdes élémentsinnis,l'utilisationd'unplusgrandpointxeconduitàdénirune

2.ils'agitd'applicationsdel'ensembledesatomesfermésAt ;

[?]dansIN

3.les programmesconstitués de clauses pour lesquelleschaqueinstance fermée dela têtede clause aun niveauaumoins supérieur auniveau desinstances correspondantes desatomesducorpsdelaclause

(16)

sémantiquevalidemaisnoncomplète(i.e.certainsatomesdansladénotation de P ne sont pas  constructibles  par une SLD-dérivation à partir de P). Nousverrons quelespropriétés classiquesdesdénitions co-inductives, rap-pelées danslechapitre 1,serévèleront utiles tant pour dénir une nouvelle approche pour la sémantiquedes dérivations inniesque pour expliquer les résultats d'incomplétude obtenus dans d'autres approches existantes. Une sémantiquevalide etcomplète,présentéedans[57], seradénie pour les dé-rivations inniesquine construisent pasdetermesinnis.Cetteclassede dérivations innies sera interprétée selon l'isomorphisme de Curry-Howard enidentiant ces dérivations innies àdestermes d'untypeco-inductif.

(17)

Chapitre 1

Préliminaires

Lesdénitions(co-)inductivespermettentdedénirdesensemblesà par-tird'unensemblederèglesindiquantcomment construirelesélémentsdeces ensembles.Cesdénitionsfournissentun outilprivilégié pour décrireles ob-jetsmanipulés parl'informatique etmunissentles ensemblesainsidénisde schémas de (co-)induction permettant de raisonner sur ces ensembles. La première partie de ce chapitre est entièrement consacrée à la présentation despropriétés classiquesdesdénitions(co-)inductivesquiserévèleronttrès utiles lors de l'étude de la sémantique des programmes dénis (la formali-sation de certains de ces résultats dans le système Coq est présentée dans l'annexe A). Ensuite, le calculdes constructions (co-)inductives, vuau tra-vers de l'assistant à la preuve Coq[19], est présenté. Il ne s'agit pas d'une présentationformelle(etencoremoinsd'uneformalisationdececalcul[9])et nousn'abordons pas enprofondeur lesfondements théoriquesde l'assistant àla preuve Coq: nousnousplaçons résolument du côtéde l'utilisateur. Ce chapitre donne donc seulement une esquisse des concepts mis en jeu dans le calcul des constructions inductives à partir d'exemples exprimés dans le langagede spécication du systèmeCoq.

1.1 Dénitions (co-)inductives 1.1.1 Dénitions inductives

Un des exemplesles plus classiquesd'ensembledéni inductivement est l'ensembledesthéorèmes quel'on peut dériver à partir d'unsystème for-mel:ce point de vue permet de considérer une dénition inductive comme ladonnéed'unensemblederègles,l'ensembleainsidénicorrespondauplus petit ensemble contenant tous les axiomes de ce système et clos par ap-plication des règles. Il est aussi possible de caractériser un ensemble déni inductivement àl'aide d'unopérateur monotone.

(18)

Dénition 1.1 (Ensemble déni inductivement [4])  Dénition inductive àpartir d'unensemble derègles.

Une règle est une paire (E;e) où E désigne un ensemblede prémisses et edésigne la conclusion. Onnote e E cette règle. Etant donné un ensemble de règles ,un ensemble A est dit -clos sipour toute règle e E de , E A implique e2A. L'ensemble déni inductivement par un ensemble de règles  est l'intersection de tous les ensembles -clos:

Ind ()= \

fA; A est -closg  Dénition inductive àpartir d'unopérateur monotone.

Un opérateur ' de 2 B dans 2 B est monotone si E 1  E 2  B ) '(E 1 )  '(E 2

). Etant donné un opérateur ', un ensemble A est '-clos si'(A)A. L'ensemble déni inductivement par unopérateur ' est l'intersection de tous lesensembles '-clos:

Ind (')= \ '(A)AB

A

A chaque ensemble de règles est associé un principe d'induction :si P est une propriété dénie sur Ind (), telle que pour chaque règle e E de , (8e

0

2E P(e 0

)) ) P(e), alors pour tout élément a de Ind (), P(a) est vérié.D'autrepart,onmontrequeInd ()estlepluspetitensemble-clos: Lemme 1.1 Tout ensemble de règles  admet un ensemble -clos et l'in-tersection d'ensembles -clos quelconques est encore unensemble -clos. Preuve. Etant donné unensemble derègles ,l'ensemble:

B= [ e E2

ffeg[Eg

est -clos.Considérons à présent l'intersection T i A i où lesA i

sont des en-sembles -clos. Soit e E 2 , si E 

T i A i , alors 8i  0 E  A i et puisquetous les A

i

sont, par hypothèse, -clos, on a8i0 e2A i etdonc e2 T i A i . T i A i

est donc bienunensemble -clos. J Lesdeux approchesconsidérées dansladénition 1.1sont équivalentes: tout ensemble déni inductivement à partir d'un ensemble de règles peut être déni à partir d'un opérateur monotone et vice versa. En eet, à tout ensemblederèglespeutêtreassociéunopérateurmonotoneT

 de2 B dans 2 B dénipar: B= [ e E2 f feg[Eg T  (A)=fe2B; 9 e E2 EAg (1.1)

(19)

Preuve. Soit A 1

et A 2

deux sous-ensembles de B tels que A 1  A 2 . Si e2T  (A 1

) alors ilexiste une règle e E 2telleque EA 1

eton peut conclurepuisqu'on aalors E A

2

. J

Réciproquement,à tout opérateur monotone 'peutêtre associé l'ensemble derègles  ' dénipar:  ' =fe E; E B ete2'(E)g Le lemmequi suitpermetd'établir les égalités:

Ind(')=Ind ( ' ) Ind ()=Ind(T  ) (1.2) Lemme 1.3

 Si ' est un opérateur monotone, alors A B est  '

-clos si et seule-ment si A est '-clos.

 Un ensemble A est -clos siet seulement si A est T 

-clos. Preuve.

()).Sie2'(A),alors,pardénition,ilexisteunerèglee E 2 '

telle queE A.Puisque A est 

'

-clos, on a E A) e2A ce quipermetde conclure.((). Soite E unerèglede

'

etmontronsqueEA)e2A. Par dénition, e 2'(E) et par monotonie '(E)  '(A) ce qui permet de conclure puisque, par hypothèse, '(A)A.

()). Sie2T 

(A),alors ilexiste une règle e E2telleque EA et puisqueAest-clos,onae2Ace quipermetdeconclure.(().Soite E une règle de  etmontrons que E A) e2A. Par dénition, si E A, alors e2 T



(A) etpuisque, par hypothèse, T 

(A) A, on a e 2A ce qui

permetde conclure. J

Enn, Ind (')peutêtrecaractérisé enterme deplus petit point xede': Théorème 1.1 (Tarski [95]) Si ' est monotone, alors Ind(')=lfp('). Preuve. Soit A  B, puisque Ind (') est déni comme l'intersection de tousles ensembles '-clos, on a'(A) A)Ind (') A et, par monotonie, '(A)A)'(Ind ('))'(A). Par transitivité,il vient alors '(A) A) '(Ind ('))Ace qui permetd'établir:

'(Ind ('))Ind (')

Réciproquement, puisque ' est monotone, on a '('(Ind(')))  '(Ind (')). '(Ind ('))est donc'-clos ce qui permet d'établir:

Ind(')'(Ind ('))

Ind(') estdonc unpoint xede'. Montronsquec'est lepluspetit:soit A 0 un point xe de '. Par dénition, on a '(A

0 ) A 0 etdonc A 0 est '-clos.Il 0

(20)

Il existeunautremoyen permettantde caractériserlesensemblesdénis inductivement à partir d'un opérateur. Cette approche utilise la notion de puissances ordinales: étant donnés un opérateur ' de 2

B dans 2 B et un ordinal ,on dénit ' " par: ' " = 8 > < > : ? si =0 '(' " ) si = +1 S < ' "

si est unordinallimite

Nous allons voir que si ' est "-continu, c'est à dire si, pour toute suite croissante (E n ) n0 de sous-ensembles deB: '( [ n0 E n )= [ n0 '(E n ) alors Ind(')=' "!

.Pour ce faire,onmontretoutd'abord lelemme suivant. Lemme 1.4 Soit' unopérateur.

1. Si ' est monotone, alors pour toutordinal , ' "

' " +1

. 2. Si ' est "-continu,alors ' est monotone.

Preuve. (1).Inductionsur .Pour =0,onaclairement ' "0

=?' "1

. Si est unordinal successeur = +1, alors,par hypothèse d'induction, '

" '

" +1

.Puisque'est monotone,il vient: '(' " )=' " +1 =' " '(' " +1 )='(' " )=' " +1

Si estun ordinallimite,alors, par hypothèse d'induction: 8 < ' " ' " +1 Si x2' "

,alors, par dénition, pour un ordinal ,x2' " .Par hypothèse d'induction, il vient x 2' " +1 , c'est à dire x 2'(' " ). Cependant, ' "  S < ' " =' "

,etpar monotoniede ', onpeut conclure puisque:

'(' " )'( [ < ' " )='(' " )=' " +1

(2).Soit 'unopérateur "-continu,etA 1

etA 2

deux partiesde Btelles que A

1 A

2

.Il est clair queA 1 A 2 A 2 A 2

 est une séquence croissante et puisque ' est "-continu, on a '(A

1 [A 2 ) = '(A 1 )['(A 2 ). Enn,puisque A 1 A 2 ,onaA 2 =A 1 [A 2 etdonc '(A 2 )='(A 1 )['(A 2 ) ce quipermetde conclureà'(A

1

)'(A 2

). J

Celemme permet de montrer lethéorème:

(21)

Preuve. Montrons tout d'abord que ' "!

est un point xe de '. D'après le lemme 1.4.1, '

"!  '

"!+1

. Aussi, montrons que ' "!+1  ' "! . Soit x 2 ' "!+1

,toujoursd'aprèslelemme1.4.1,(' "n

) n0

estuneséquencecroissante etpuisque'est "-continu et'

"0 =?, ilvient: '( [ n0 ' "n )= [ n0 ' "n+1 = [ n1 ' "n = [ n0 ' "n =' "! ' "!

estdonc un point xede '. D'après le théorème1.1, Ind(') estle plus petitpointxede',ilsutdoncdeprouverque'

"!

Ind(')cequirevient àmontrer:

8n2IN ' "n

Ind (')

Nous procédons par induction sur n. Pour n = 0, la propriété est triviale. Supposons maintenant que '

"n

Ind('). Puisque 'est continu, d'après le lemme1.4.2,'estmonotoneetalors'('

"n )=' "n+1 '(Ind ('))=Ind('). ' "!

est donc bienlepluspetit point xe de'. J Sans l'hypothèse de continuité sur ', ce théorème n'est plus vérié pour un opérateur monotone quelconque. Toutefois, si l'opérateur monotone est nitaire, c'està dires'il vérie pour toutesuite croissante (E

n ) n0 de sous-ensemblesde B: '( [ n0 E n ) [ n0 '(E n ) alors Ind (')=' "!

.En eet,on montreque:

Lemme 1.5 Tout opérateur monotone et nitaire est "-continu.

Preuve. Soit'unopérateur monotoneetnitaire,ilsutde prouver que pour toute suite croissante(E

n ) n0 desous-ensembles deB,on a: [ n0 '(E n )'( [ n0 E n ) Soit x 2 S n0 '(E n

), il existe un naturel k tel que x 2 '(E k ). De plus, puisque(E n ) n0

estunesuitecroissante,onaE k  S n0 E n .Parmonotonie, ilvient: '(E k )'( [ n0 E n ) etalors x2'( S n0 E n

)ce qui permet deconclure. J Sil'opérateur 'correspondà l'opérateur T



associéàunensemblederègles , alors ' est nitaire si l'ensemble des prémisses de chaque règle de  est ni,etdansce cason ditque estnitaire. En eet,on montreque: Lemme 1.6 Si est nitaire, alors T



(22)

Preuve. Soit (E n

) n0

une suite croissante de sous-ensembles de B et e un élément de T  ( S n0 E n

). Par dénition, il existe une règle e F 2  tellequeF  S n0 E n .Puisque(E n ) n0

estunesuite croissante, c'estqu'il existeunentierk telqueF E

k etdonce2T  (E k ) S n0 T  (E n )ce qui permetde conclure. J 1.1.2 Dénitions co-inductives

Lesdénitionsco-inductivespermettentdedénirdesensemblesdontles élémentssontobtenusenappliquantunnombredefoiséventuellement inni lesrèglesdeconstruction.Comme pour lesensemblesdénisinductivement, il est possible de dénir un ensemblede manière co-inductive à partir d'un ensemblede règlesou d'unopérateur '.

Dénition 1.2 (Ensemble déni co-inductivement [4])  Dénition co-inductiveà partir d'unensemblede règles.

Etant donné un ensemble de règles , un ensemble A est dit -dense si pour tout e2 A, il existe un ensemble E A tel que e E 2 . L'ensemble déni co-inductivement par un ensemble de règles  est l'union detous les ensembles -denses:

CoInd()= [

fA; A est -denseg  Dénition co-inductiveà partir d'unopérateur monotone.

Etant donné un opérateur',un ensemble A est '-dense siA'(A). L'ensemble déni co-inductivement par un opérateur ' est l'union de tous les ensembles '-denses:

CoInd(')= [ A'(A)B

A

CoInd()estleplusgrandensemble-dense.Lesdeuxapprochesconsidérées danscette dénitionsont équivalentes:toutensemble dénide manière co-inductive à partir d'un ensemble de règles peut être déni à partir d'un opérateurmonotoneetvice versa.Eneet,lelemmesuivantpermetd'établir leségalités: CoInd(')=CoInd( ' ) CoInd ()=CoInd (T  ) Lemme 1.7

 Si 'est unopérateur monotone, alorsAB est  '

-densesiet seule-ment si A est '-dense.

 Un ensemble A est -densesi etseulement siA est T 

(23)

Preuve.

 ()). Soit A un ensemble  '

-dense et a2A. Par dénition, il existe une règle a E 2 

'

telle que E  A. Par monotonie, il vient '(E) '(A). D'autrepart,pardénitionde

'

,on aa2'(E) etilvienta2'(A)ce qui permetdemontrer A'(A).(().SoitA'(A)eta2A.Parhypothèse, a2 '(A) et donc, par dénition, il existe une règle a E 2 

'

telle que EA.Aest donc bien

' -dense.

 ()). Soit A un ensemble -dense et a 2 A. Par hypothèse, il existe un ensemble E  A tel que a E 2  et donc a 2 T



(A). A est donc bien T



-dense. ((). Soit a2A. Par hypothèse,a2T 

(A) etil existe donc une règle a E2telleque EA. Aest donc bien-dense. J D'autre part, CoInd (') peut être caractérisé en terme de plus grand point xede ':

Théorème 1.3 (Tarski) Si 'est monotone, alors CoInd (')=gfp('). Preuve. Soit A  B, puisque CoInd (') est déni comme l'union de tous les ensembles '-denses, on a A '(A) ) A  Coind(') et, puisque ' est un opérateur monotone, il vient A  '(A) ) '(A)  '(Coind(')). Par transitivitéA'(A) )A'(Coind('))ce qui permet de conclureà:

Coind(')'(Coind ('))

Réciproquement, puisque ' est monotone, '(Coind ('))  '('(Coind('))). '(Coind('))estdonc '-dense ce quipermetd'établir:

'(Coind ('))Coind(')

Coind(')estdoncbienunpoint xede'.Montronsquec'estleplusgrand: soit A

0

un point xe de ', par dénition, on a A 0  '(A 0 ). Aussi A 0 est '-denseetil vientA 0

Coind(') ce quipermet deconclure. J Il est aussi possible de dénir un ensemble de manière co-inductive en terme de puissancesordinales d'unopérateur:étant donnés unopérateur ' de2 B dans 2 B et unordinal , ondénit ' # par: ' # = 8 > < > : B si =0 '(' # ) si = +1 T < ' #

si est unordinallimite

Nous allons voir que si ' est #-continu, c'est à dire si, pour toute suite décroissante (E n ) n0 de sous-ensembles de B: '( \ n0 E n )= \ n0 '(E n )

(24)

alors CoInd (') = ' #!

.Pour ce faire, on montre tout d'abord le lemme sui-vant.

Lemme 1.8 Soit' unopérateur.

1. Si ' est monotone, alors pour toutnaturel n, ' #n+1

' #n

. 2. Si ' est #-continu,alors ' est monotone.

Preuve. (1). Induction sur n. Pour n = 0, la propriété est triviale. Si n = k +1, alors par hypothèse d'induction '

#k+1  ' #k et il vient par monotonie: ' #n+1 ='(' #n )='(' #k+1 )'(' #k )=' #k+1 =' #n

(2).Soit 'unopérateur #-continu,etA 1

etA 2

deux partiesde Btelles que A

1 A

2

.Il est clair queA 2 A 1 A 1 A 1

 est une séquence décroissante etpuisque 'est #-continu,on a '(A

1 \A 2 )='(A 1 )\'(A 2 ). Enn,puisque A 1 A 2 ,onaA 1 =A 1 \A 2 etdonc '(A 1 )='(A 1 )\'(A 2 ) ce quipermetde conclureà'(A

1

)'(A 2

). J

Lapremièreassertion decelemmeestplusfaiblequecellecorrespondant au lemme1.4. Ce lemmepermetdemontrer lethéorème:

Théorème 1.4 Si' est #-continu,alors CoInd (') =' #!

=gfp('). Preuve. Montrons d'abord que'

#!

est unpoint xe de '. Puisque' est #-continu, d'après le lemme 1.8, ' est monotone et ('

#n )

n0

est une suite décroissante.Par conséquent:

' #!+1 ='( \ n0 ' #n )= \ n0 '(' #n )= \ n0 ' #n+1

Enappliquant encorelelemme 1.8, ilvient: \ n0 ' #n+1 = \ n0 ' #n =' #! ' #!

est donc un point xe de '. Montrons qu'il s'agit du plus grand point xe.D'aprèslethéorèmedeTarski,'

#!

Coind(').Ilsutdoncdeprouver queCoInd (')'

#!

ce qui revient à montrer: 8n2IN CoInd(')'

#n

Nous procédons par induction sur n. Pour n = 0, la propriété est triviale. Supposons maintenant que CoInd (')'

#n

.Puisque ' est #-continu, ' est monotone etona alors:

CoInd(')='(CoInd ('))'(' #n

)=' #n+1

(25)

1.2 Coq et le calcul des constructions inductives 1.2.1 Isomorphisme de Curry-Howard

Si le raisonnement n'est pas réductible au calcul, en revanche, la vé-rication de la validité du raisonnement l'est. En eet, la correction d'un raisonnementne dépend quede saformeetlaproposition p est unepreuve de la proposition P estvériable par le calcul.Muni d'un formalisme adé-quat,on peutdonc obtenir desprogrammes de vérication automatiquede preuves.

Sémantique BHK

La sémantique de BHK (L.E.J. Brouwer, A.Heyting et A.N. Kolmogo-rov) propose d'interpréter les preuves de propositions par des objets fonc-tionnels. A chaque proposition est associé l'ensemble, éventuellement vide, deses preuves.Cette sémantique s'exprime par:

 Une preuve delaproposition Falseest unélément de l'ensemblevide.  Une preuve deA^B estunélément de AB formé d'unepreuvede

A etd'unepreuve de B.

 Une preuvedeA_B estune pairedontlasecondecomposanteestsoit une preuve deA soitune preuve deB et dontlapremièrecomposante est un  indicateur  permettant de savoir si l'on dispose d'une preuve de A oude B.

 Une preuve de A)B est une fonction f qui àchaque preuve a de A associeune preuve f(a)de B.

 Une preuve de la proposition existentielle 9x 2 AB(x) est un objet composéd'unélément x2Aetd'une preuve de B(x).

 Une preuvede lapropositionuniverselle 8x2AB(x) estunefonction f quiassocieà toutobjetx2A, unepreuve deB(x).

Un formalisme pour représenter des preuves

Le calculdes constructions [21 ] est un formalisme permettant de repré-senter etde manipuler de manière explicite despreuves via l'isomorphisme de Curry-Howard. Ceformalisme repose surlathéoriedes types, introduite par P. Martin-Löf [72 ], et sur le -calcul typé [8]. Le calcul des construc-tions ne dispose qued'une seule classe syntaxique de termes permettant de

(26)

représenteraussibien lestypesque lesobjets typés: t::= x j variables

s j sortes

c j constantes introduites dansl'environnement (t 1 t 2 ) j application duterme t 1 au termet 2 [x:t 1 ]t 2

j fonction quià toutx detype t 1 associe t 2 (x:t 1 )t 2 . produit L'ensemble desortes disponiblesest:

S =fProp;Set;Type (i); i2INg Ces sortessont organisées hiérarchiquement commesuit:

Prop estde type Type(0) Set estde type Type(0) Type(i) estde type Type(i+1)

Les termes du calcul des constructions sont utilisés pour représenter des typesde données, des propriétés et despreuves. C'est le typage des termes quipermetde lesclassier:Setestutilisé pour dénirformellement des col-lections d'objets et Prop est utilisé pour exprimer des propriétés formelles sur ces objets. En utilisant l'interprétation donnée par l'isomorphisme de Curry-Howard, présenté plus bas, le jugement de typage ` t:T, expri-mant qu'un terme t a pour type T dans un contexte , admet alors deux lectures diérentes selon que T soit de type Prop ou Set: dans le premier cas, t désigne une preuve de la proposition T (on parle de type habité ou deproposition prouvable),dans ledeuxième cas,t estun objetdela collec-tionT (onparle d'objet calculatoire ).Laprincipale règlede réductiondu calculdesconstructionsestla -réductionquipermetl'élimination conjointe d'une abstraction et d'une application: le terme (x:T:t u) (noté dans le calculdesconstructions ([x:T]t u)) se -réduiten un termenotét[x u] etcorrespondant au termetdans lequelon substitue toutes les occurrences dex par leterme u.

(x:T:t u)!

t[x u]

Initialement utiliséepour exprimer un calcul fonctionnel, la notation du -calcul permet, dans sa version typée, de représenter les preuves exprimées dans le formalisme de déduction naturelle, dû à G. Gentzen (1934) [85]. Cette correspondance repose sur l'isomorphisme de Curry-Howard [35, 37 ] quiétablitunlienfort,d'unepart,entrepreuveset-termes,etd'autrepart, entre propositions ettypes:

preuve  -terme  programme proposition  type  spécication

(27)

Preuves etalgorithmes admettent donc une représentation uniforme,ce qui s'exprime par le slogan  programmer = prouver  qui permet d' unier  les activités de programmation et de démonstration. Ecrire un programme, c'estprouver, de manière constructive, une proposition;déterminer letype d'uneexpression,c'esttrouverdequellepropositioncetteexpressionestune preuve. Par exemple, lafonction identité surT dénie par [x:T]x estun -termede typeT !T etcorrespond à une preuve de laproposition T )T. Lessymboles!(langagefonctionnel)et)(langagelogique)sont  uniés  .

-terme (de) type -calcul

[x:T]x T !T

preuve (de la)proposition logique

T )T

Aussi,si l'onreconsidère lasémantique BHKdécrite plushaut, onobtient:  Une preuve de A) B est un termef:A !B qui à chaque preuve a

de A associeunepreuve f(a) deB (casnon dépendant).

 Une preuvede laproposition existentielle 9x2AB(x)est unélément de P x2A B(x): le type somme P x2A B généralise AB lorsque le type du deuxièmeélément dépend de lavaleurdu premier.

 Une preuve de la proposition universelle 8x 2 AB(x) est un terme f: Q x2A B(x): le type produit Q x2A B généralise A ! B lorsque le type de lavaleurretournée dépend de lavaleurde l'argument.

Vérication d'une preuve et typage d'un terme: un exemple C'estladécidabilitédutypagedestermesducalculdesconstructionsqui permet la vérication (automatique) de la validité d'une preuve (la preuve n'étantpasobtenuedemanièreautomatique).Illustronscelasurunexemple. Leformalismededéductionnaturelle,expriméàl'aidedeséquents,manipule des jugements de la forme `A que l'on peut interpréter par  A est une conséquence deshypothèsesducontexte .Pourconstruiredespreuvesdans ce formalisme, on utilise des règles d'inférence permettant d'introduire ou de supprimer des connecteurs (ou des quanticateurs). L'exemple que nous présentons faitappelauxtrois règlessuivantes:

(Ax): ;A`A (I ) ): ;A`B `A)B (E ) ): `A)B `A `B (Ax) correspond à un axiome et (I

) ) (resp. (E ) )) correspond à la règle d'introduction 1

(28)

(E ) ): (Ax ): A)B;B )C ;A`A)B (Ax): A)B;B )C ;A`A (E ) ): (Ax): A)B;B)C ;A`B)C A)B;B)C ;A`B (I ) ): (I ) ): (I ) ): A)B;B)C ;A`C A)B;B)C`A)C A)B`(B)C))(A)C) `(A)B))((B)C))(A)C))

Fig. 1.1Arbre depreuve en déduction naturelle

règles, ilestpossible deconstruire une preuve delacélèbre tautologie: (A)B))((B )C))(A)C)) (1.3) dont l'arbre de preuve est présenté sur la gure 1.1. D'autre part, si l'on considèrelesjugementsdetypagedestermesducalculdesconstructions,de laforme `t:T,quis'interprètent par: dans lecontexte ,le terme t est de type T,on peutétablir le type d'unterme à l'aidede règles de typage. Lestroisrèglesque nousutilisonsdansl'exemple présentésont:

(Var ): ;x:A`x:A (Abs): ;x:A`t:B `(x:A:t):A !B (App ): `t 1 :A!B `t 2 :A `(t 1 t 2 ):B

La règle (Abs) (resp. (App )) correspond à la construction du type d'une abstraction (resp. d'une application). La correspondance de Curry-Howard permetd'identier typesetpropositionsetlesrèglesde typage (Var ),(Abs) et(App)correspondentexactementauxrèglesdeladéductionnaturelle(Ax), (I

) ) et(E

)

) décorées  par des-termes. Aussi, en  décorant  l'arbrede preuve de latautologie (1.3),on obtient lejugement de typage:

` x:A!B:y:B!C :z:A:(y (xz)): (A!B)!((B!C)!(A!C))

où leterme x:A !B:y:B ! C :z:A:(y (xz))représente une preuve de la tautologie (1.3). Il existe donc un lien direct entre le -calcul typé et le formalisme deladéduction naturelle.

déduction naturelle -calcul typé proposition type dérivation (preuve) -terme conclusion d'unedérivation type habité

(29)

1.2.2 L'assistant à la preuve Coq

L'isomorphisme de Curry-Howard permet de vérier automatiquement lavaliditéd'unepreuve formelle.Cependant,l'écrituredestermesdepreuve dans le calcul des constructions semble fastidieuse et laborieuse. En eet, dèsque la preuve à écrire dépasse  quelques pasd'inférence ,l'écriture du -termecorrespondantn'est plushumainement envisageableetilest souhai-table de disposer de procédures permettant de construire automatiquement le -terme de preuve en fonction d'indications fournissant le raisonnement àmener pour établir lapreuve.D'autre part,certaines parties d'unepreuve étant plus faciles à obtenir que d'autres, il est raisonnable d'envisager des procéduresautomatiquespermettant delesétablir.Detelsprogrammes, ap-pelés des assistants à la preuve, constituent une alternative au  tout ou rien  (démonstration automatique ou vérication automatique). Les plus connussontCoq,Isabelle,Lego,Hol,Lcf,Alf,Pvs,...Coqpermetde construire despreuvesformelles pour unelogique d'ordre supérieuren utili-sant unassistant à lapreuve.L'arbre de preuve obtenu (i.e. le-terme) est construit, de manière incrémentale etinteractive, en partant du but initial et en le décomposant suivant des règles logiquesà l'aide d'un ensemble de tactiquesprédénies:unetactiqueestunefonctionquiconstruit unepreuve d'unbutdonnéàpartirdepreuves élémentaires desous-buts(chaque sous-but étant associé à un contexte local d'hypothèses). Etant donné un but à prouver, l'application d'unetactiqueengendre doncles sous-buts,associésà descontextesd'hypothèses, qu'il reste à montrer:

contexte0 But Application d'une tactique ! contexte1 Sous-but1 ;:::; contexten Sous-butn

Parexemple,étantdonnéuncontexted'hypothèsesHetunbutBàprouver, la tactique  Cut A  engendrera deux sous-buts: le premier, où il faudra montrer,danslemêmecontexteH,queA)B,et,ledeuxième,oùilfaudra prouverA danslecontexteH.

H B Cut A ! H A!B ; H A (1.4) Lapreuved'unlemmeainsicodéeconstitueunepreuveformelle(ouvériable ouexplicite)decelemmeetseprésentesouslaformed'untexte écritdans un langage formel, dont la lecture est, au mieux, laborieuse et, la plupart du temps, vaine. De manière (très) imagée, on peut comparer ladiérence qui existe entre une preuve formelle et une preuve  sur le papier  avec la diérencequi existe,pour unlogiciel, entreun  manuel deréférence  etun  guidede l'utilisateur  .Le premiera (oudevrait avoir) pourobjectif d'être exhaustifetrigoureux,tandisquelesecondapourobjectifd'êtredidactique: surdessujetscomplexes,comme leslangagesde programmation, ilest

(30)

qua-lesdémonstrations présentéesdansce quisuit,ont étére-transcritesdansle langage naturel .Ils'agitbiensûrdurésultatd'uncompromis, puisquede manière idéale  ,chaque étaped'unepreuve devraitdécouler explicitement del'application d'unlemmedéjàétablioud'unehypothèse poséeaudépart. Par souci de lisibilité, certains passages de preuvessont omis etnécessitent donc quelques connaissances élémentaires  implicites  . D'un point de vue pratique, Coq est écrit en Caml, un langage de programmation fonction-nelledelafamilleML,développéàl'Inria.Camlestaussilelangage cible  danslequelsont écrits lesprogrammes extraitsàpartir despreuves.

1.2.3 Types inductifs

Le calcul des constructions a été étendu an de permettre la dénition de typesinductifs etco-inductifs. Demanière informelle, dénir un typede manière inductive ou co-inductive revient à donner les règles de formation deséléments de ce typeet àexprimer qu'unélément estde ce type unique-ment s'il a été obtenu par application de ces règles. Pour une présentation plus théorique des dénitions inductives, on pourra consulter [4, 23]. L'in-troduction de typesinductifs dansle calcul des constructions est présentée dans[79, 97]. L'exemple leplus classique de dénitioninductive est la dé-nition de l'ensemble des entiers naturels, déni (inductivement) par le plus petitensemblesatisfaisant:0estunentiernaturel etsinestunentier natu-rel,alorslesuccesseurden,notéS(n),estaussiunentiernaturel(l'ensemble estclospar successeur). Cettedénitions'exprime danslelangage de spéci-cation deCoqpar:

Inductive nat: Set:= O: nat | S: nat ->nat. (1.5) Un type inductif est donc déni par la donnée d'un ensemble de construc-teurs. Il existe toutefois une restriction sur le type des constructeurs qui permet, par exemple, de rejeter des constructeurs de type (T ! T) ! T dans lequel la première occurrence de T correspond à une occurrence non  positive  de T (la notion d'occurrence positive est dénie, par exemple, dans[79]).Cetterestrictionestnécessaire pour garantirlapropriétéde nor-malisation et lacohérence logique du système. Le mot clé Inductivesert à spécier lanatureinductive dutype dénietpermettra àCoq d'engendrer automatiquement lesschémas d'induction(aussiappelésschémas d'élimina-tion) associés à ce type.Les trois  principes  d'induction engendrés par la dénitionde natsont:

nat_id:(P:nat->s)(P O)->((n:nat)(P n)->(P (S n)))->(n:nat)(P n) où (id;s) peutprendre les valeurs(ind,Prop)ou (rec,Set)ou (rect,Type); nat_indcorrespond au neuvièmeaxiome de Péano.

(31)

Destructeurs sur un type inductif

L'opérateur Casepermetd'exploiter le fait qu'un objetde type inductif nepeutêtreconstruitqu'enutilisant,unnombredefoisni,lesconstructeurs présentsdansladénitiondutype etpermetdemener unraisonnement par cassurcesobjets. Sasyntaxeest:

< P >Casex off 1

f n

end.

oùletermexappartientàuntypeinductifspéciéparnconstructeurs.P est letypedel'expressionetchaquef

i

représenteuntermepermettantd'obtenir unobjetdetypeP danslecasoùxaétéconstruitaveclei-ièmeconstructeur. Cet opérateur permet notamment de dénir desfonctions ou des prédicats demanièrerécursive.Par exemple,onpeutdénirrécursivementleprédicat IS_EVEN:nat->Prop,caractérisant les entierspairs,par:

Fixpoint IS_EVEN [n:nat] : Prop := <Prop>Case n of (* n=O *) True (* n=(S k) *) [k:nat]<Prop>Case k of (* k=O *) False (* k=(S p) *) [p:nat](IS_EVEN p) end end.

(*et*)délimitent lescommentaires;letype indiquéentre< et >indiquele typedu résultat(nousverrons par lasuite qu'ilexiste unerestriction surce type);FalseetTruesont deux constantes de typeProp.

Prédicats inductifs

Il est aussi possible de dénir des prédicats de manière inductive. Par exemple,le prédicateven:nat->Prop, caractérisant les entierspairs, peut se dénirinductivement par:

Inductive even: nat ->Prop:= even_0: (even O) |

even_S2: (n:nat)(even n) ->(even (S (S n))).

(1.6)

Toutefois, seul le schéma d'élimination even_ind est engendré par cette dé-nition (nous en évoquerons plus loin la raison). Bien entendu, cette dé-nition inductive est équivalente à la dénition récursive présentée dans le paragraphe précédent danslestyle de laprogrammationfonctionnelle:tout entier naturel nvérie even(n) siet seulement si IS_EVEN(n) =True. Cette dénition est expriméedans un style  à la Prolog  (chaque constructeur correspond à une clause)et correspond à laplus petite relation satisfaisant l'ensembledesrègles d'inférence:

 (even-0): even(0)  [  (even-S2-n): even(S n (0)) n+2 ; n2IN  (1.7)

(32)

Ici,lesconstructeurspeuventêtrevuscommedesrèglesd'introduction. Cer-tainsconnecteurslogiquessontd'ailleursdénisdemanièreinductive,etdans cecas, lesconstructeurscorrespondent auxrèglesd'introductiondu connec-teurlogique.Parexemple,laconjonctionetladisjonctionsont déniesdans lesystèmeCoqàl'aidedesconstructeursconj,or_introl,etor_intror,qui permettent l'introduction du connecteur et correspondent respectivement auxrègles(I ^ ),(I l _ ) et(I r _ ):

Inductive and [A:Prop;B:Prop]:Prop:= conj: A ->B ->(and A B). (I ^ ): `A `B `A^B Inductive or [A:Prop;B:Prop]:Prop:= or_introl:A->(or A B) | or_intror:B->(or A B). (I l _ ): `A `A_B (I r _ ): `B `A_B (1.8)

Raisonnement par induction avec l'assistant à la preuve Coq Lesschémas d'induction engendrés lorsde ladénitiond'untype induc-tif peuvent être utilisés lors de l'application de tactiques. Par exemple, si l'on doit montrer une propriété P:nat ! Prop pour tout entier n dans un contexted'hypothèsesH,latactique Inductionn mettraenjeuleschéma d'induction nat_ind, et engendrera deux sous-buts. Le premier, où il fau-dra montrer, danslecontexteH,la propriété P pour 0;et ledeuxième,où dans un contexte constitué des hypothèses de H, d'un entier n

0 et d'une preuve H 0 de lapropriété P pourn 0

,il faudramontrer lapropriétéP pour lesuccesseurde n 0 . H (n:nat)(Pn) Induction n ! H (P0) ; H n 0 :nat H 0 :(Pn 0 ) (P(Sn 0 ))

Demanièresimilaire, latactique Elimpermetd'utiliser lesschémas d'élimi-nation associés à un type inductif. Par exemple, en utilisant le connecteur de disjonction déni en (1.8), la tactique Elim peut être appliquée à une hypothèse exprimant une disjonctioncomme suit:

H:A_B C ElimH ! H:A_B A!C ; H:A_B B !C

ce qui correspond au fait que H a été obtenue en utilisant un des deux constructeursdu typeor.

(33)

1.2.4 Types polymorphes et types dépendants

Puisque les types sont aussi des termes, il est possible de construire des abstractions sur un type. Par exemple, alors que le terme fonction-nel [x:T]x correspond à la fonction identité sur T et est de type T -> T, le terme [T:Set][x:T]x correspond à l'identité polymorphe et est de type (T:Set)(T -> T),oùlanotation (x:P)QestuneextensiondeP !Q.Cette construction permet de dénir des types  génériques  . Un autre exemple classique de dénition polymorphe est la dénition du type paramétré des listes:

Inductive list [A:Set]:Set:=

nil:(list A) | cons:A->(list A)->(list A).

(1.9) Similairement, nous pouvons dénir un type paramétré par un autre type, maisaussi dépendant d'un objet. Par exemple, lafamille de types associée auxlistes  sur A delongueur n(n2IN)estdénie par:

Inductive LIST [A:Set]: nat ->Set:= NIL: (LIST A O) |

CONS: (n:nat)A->(LIST A n)->(LIST A (S n)).

(1.10)

Enfait,LISTetlistnesont pasdestypes,maisdesconstructeursde types. listest un constructeur (unaire)admettant pour argument un ensemble A etconstruisant letypedeslistesforméessurA. Ils'agitdonc deladénition d'unefamille de typesparamétrée par les ensembles.Demême, LISTest un constructeur (binaire)de types,qui,étant donnéunentier net unensemble A, permet de construire le type (LIST A n)des listes de longueur n formées sur A. Ainsi, (LIST A) dénote la famille de types indicée par les entiers: (LIST A O),(LIST A (S O)), 

1.2.5 Extraction de programmes

En informatique, dénir un programme dont on est sûr qu'il  fait bien ce pour quoi il est fait  ne relève pas d'une simple curiosité intellectuelle, certainesapplicationsnécessitent,pourdesraisonsdesécurité,l'utilisationde logiciels  zéro-défaut .Une approche classique,pour répondre à ce besoin, consiste à écrire un algorithme censé résoudre un problème donné, puis à prouver (leplus formellement possible, en utilisant par exemple la logique deHoare ) qu'il résoudbience problèmeen untemps ni:on disposealors d'unprogramme  correct  .

Ecriture d'un programme ! Preuve desa correction/terminaison ! Programme  correct 

Une autre approche, plus récente, consiste à prouver formellement, et de manière constructive, la satisfaisabilité  d'un problème et d'extraire

(34)

au-tomatiquement de cette preuve un programme qui résoud ce problème:on disposealors d'unprogramme certié.

Preuve constructive ! Extraction ! Programme certié

L'existence d'une distinction entre les types Prop et Set permet de séparer le contenu  calculatoire  d'une preuve (c'est à dire le procédé eectif de construction des objets exhibés par la preuve) de son contenu logique (ex-primant des propriétés surles objets mis en jeu dans lapreuve); un terme  bien typé  du calculdes constructions inductives peut être vu comme un programme contenant, de manière interne,la preuve de sa correction, c'est àdire lapreuve qu'il satisfaitbienunecertaine spécication.Le mécanisme d'extraction d'un programme à partir d'unepreuve, présentédans [80 ], ex-ploite cette distinction et permet l'obtention de programmes certiés plus ecaces. Eneet, laspécication d'unprogramme peut s'exprimerpar une formulede laforme:

8xP(x))9yQ(x;y)

traduisant le fait qu'un programme (i.e. un -terme) f prend un argu-mentx satisfaisant unepré-conditionP etproduitunrésultaty satisfaisant unepost-conditionQ(x;y).L'interprétationdu contenu  calculatoire  dela preuve de cette formule (c'est à dire le procédé de construction de y) par un programme (satisfaisant cette spécication) s'obtient en éliminant de la preuve toute lapartie  noncalculatoire  (c'est àdire lapartie de lapreuve quiétablit Q(x;y)), an depermettre l'obtention d'unprogramme ecace.

Partie calculatoire: x! programme f !y=f(x) 9

Partie noncalculatoire: P(x) ) Q(x;y)

Untelprogrammeestappeléuneréalisationetesttelqu'ilexisteunepreuve de:

8xP(x))Q(x;f(x))

Aussi, le système Coq ne permetpas d'extraire des  informations calcula-toires  à partir d'objets de type Prop

2

, qualiés d'objets non informatifs, tandis que pour tout objet A de type Set, interprété comme une spéci-cation, tout objet a de type A pourra être interprété par un programme satisfaisant laspécication A. Par conséquent, seuls certains schémas d'éli-minationsurlestypesinductifssontpermis:iln'estpaspossible,engénéral, deconstruire un objet dans Set àpartir d'unobjet dans Prop.C'est la raison pour laquelle, lors de la dénition du prédicat inductif even déni en (1.6), seul le schéma d'élimination even_ind est engendré, alors que lors deladénitiondel'ensemble nat,troisschémasd'induction sontengendrés. 2.biensûr,lespropositionspeuventaussiêtredénies dans Set,etc'estd'ailleursce

(35)

C'estaussilaraisonpour laquelle,lorsdel'utilisationdel'opérateurCase,le type de l'objet surlequel porte leCase ne peut être  dans  Prop si letype du résultat, indiqué entre < et >, est  dans  Set. L'utilisation d'un objet  non-calculatoire  pour construire unobjet calculatoire  poserait un pro-blème évident lors de l'extraction d'un programme (qui ne disposerait pas de l'information contenue dans lepremier). Toutefois, depuis laversion 6.1 dulogicielCoq, certainesdénitions inductives dans  Propengendrent un schémad'élimination dans Set;c'estlecasdesdénitions  singletons :il s'agitdesdénitionsinductivescomportant ununique constructeurdont les arguments sont tous  dans Prop. En eet,il existe pour ces dénitions un procédé canonique d'extraction de la partie calculatoire des objets dénis. Un exemple d'une telle dénition est la dénition inductive de la relation d'égalité,dueà C.Paulin-Mohring,etéquivalenteàladénitionde l'égalité à la Leibniz,par la pluspetite relationbinaireréexive:

Inductive eq [A:Set;x:A]:A ->Prop:= refl_eq: (eq A x x). Cettedénitionengendre leschéma d'éliminationsuivant:

eq_rec: (A:Set)(x:A)(P:A->Set)(P x)->(y:A)(eq x y)->(P y):= [A:Set][x:A][P:A->Set][f:(P x)][y:A][e:(eq x y)]

<P>Case e of f end

(1.11)

L'axiome False_rec

Aucoursdudéveloppement d'unprogramme,lorsquel'onsetrouvedans unesituationabsurde,ilestalorslicitedeproduire n'importequoi comme résultat,sans compromettre lacorrection du programme (par exemple,une fonction prenant en argument un entier n dont on a vérié la parité avant l'appelpourrarenvoyer  n'importequoi danslecasoùnestimpair,ce cas n'étant jamais réalisé). Aussi, le système Coq contient l'axiome suivant (il s'agit de rendre le langage de programmation pluspermissif que lelangage depreuves):

Axiom False_rec: (P:Set)False->P. (1.12) Contrairement à False_ind,il s'agit d'un axiome (le terme False_recn'est pasconstruit), puisque la constante Falsedu type Prop est dénie inducti-vement par:

Inductive False: Prop:= .

Falseest déni par un type inductif sans constructeur, et il ne s'agit donc pas d'une dénition singleton; il s'agit d'un type  non habité  (il n'existe pasd'élément de type Falsequi n'est donc pasune proposition prouvable). L'axiomeFalse_reccorrespondàlarègled'éliminationdu faux enlogique intuitionniste:

(ex falso quodlibet sequitur): False

(36)

Nousproposerons dansla suite un moyen de contourner, danscertains cas, l'utilisation decet axiome.

1.2.6 Types co-inductifs

Les types co-inductifs permettent de décrire des objets innis (c'est à diredesobjets qui peuvent s'obtenir en appliquant un nombreinni de fois les constructeursqui dénissent ce type).Les questionsthéoriques relatives àl'introductiond'objetsinnisenthéoriedestypessontprésentéesdans[20 , 73], les dénitions co-inductives du calcul des constructions sont détaillées dans [36]. L'exemple le plus classique de type co-inductif est le type des séquences innies formées par des éléments de type A et est déni dans le systèmeCoqpar:

CoInductive Set Stream [A:Set]:=cons:A->(Stream A)->(Stream A). Sansen présenterles fondementsthéoriquesdemanièredétaillée, nous illus-tronssurunexemplelesconceptsmisenjeulorsdelamanipulationd'objets innis.L'ensembledeslistes d'entiers, notéL

IN

, peutêtre dénide manière (co-)inductive àl'aide desdeuxrègles(i.e. constructeurs) suivantes:

(nil): nil:L IN (cons ): n:IN l:L IN cons(n;l):L IN Dans le cas d'une dénition inductive, les éléments de L

IN

sont des listes niesetl'on disposeduschéma d'induction structurelle suivant:

(Ind- L IN ): P : L IN !Prop l : L IN  1 : P(nil)  2 : (n 0 :IN)(l 0 :L IN )P(l 0 )!P(cons (n 0 ;l 0 )) 0 B B B B @ Fixpoint F [l 0 :L IN ]:P(l 0 ) Casel 0 of  1 [n 1 :IN][l 1 :L IN ] 2 (n 1 ;l 1 ;F(l 1 )) end 1 C C C C A (l):P(l)

Dans le cas d'une dénition co-inductive, les deux règles de formation des listes peuvent être appliquées un nombre de fois inni et l'on ne dispose alors plus du schéma d'induction structurelle mais d'une forme plus faible deschémad'élimination: (CoInd- L IN ): P : L IN !Prop l : L IN  1 : P(nil)  2 : (n 0 :IN )(l 0 :L IN )P(cons (n 0 ;l 0 )) Casel of   end:P(l)

(37)

Ce schéma exprime le fait que si l'on dispose d'une preuve  1 de P(nil) et d'une preuve  2 de 8n 0 :IN8l 0 :L IN P(cons (n 0 ;l 0

)), alors, si la liste l est obtenueparapplicationduconstructeurnil,

1

constitueunepreuvedeP(l), sinon,lestobtenueparapplicationduconstructeurcons,et

2

constitueune preuvedeP(l).Lesdeuxrèglesderéductionassociéesàceschémasontdonc:

Case nil of  1  2 end !  1 Case cons (n;l) of  1  2 end !  2 (n;l)

Nousavonsvu,au débutde cechapitre,qu'une interprétationpossible pour cettedénitionco-inductivedeslistesd'entierspouvaits'exprimerentermes d'union d'ensembles denses (relativement aux constructeurs) ou en termes de plus grand point xe d'un opérateur (associé aux constructeurs). Cette interprétation est déclarative: aucun moyen eectif de construction n'est fourni.La contre-partieopérationnelledecette interprétationfaitintervenir lanotion determeproductif déniecomme suit:

 un terme de type T est en forme canoniques'il s'écrit c(t 1

;;t n

) où c estun constructeur dutype T

 le terme t 0

est un composant (direct) d'un terme t de type T si t se réduit en un terme sous forme canonique c(;t

0

; ) et si t 0

est de type T

 un terme est productifs'il se réduit en forme canonique et si tous ses composantssont productifs

Demême quelaterminaisond'unefonctiondénierécursivementsurun en-sembleinductifpeutêtre garantiedemanière syntaxique (i.e.l'argumentde l'appel récursif doit  structurellement  diminuer), il existe un critère syn-taxiquesurlestermesqui,lorqu'ilestvérié,permetdegarantirlecaractère productif du terme déni. Les dénitions récursives satisfaisant ce critère, appeléesdénition gardées par constructeurs,correspondent auxdénitions de laforme f(a

1 ;;a

n

) =e où toutes les occurrences de f dansesont de laformec(;f(t

1 ;;t

n

);)oùcestunconstructeuretf n'apparaîtpas dans les termes t

i

. Par exemple, il est possible de dénir récursivement la listeinniedesentiersconsécutifsàpartirdek.Letermefromcorrespondant àcette construction est dénipar:

from:=n:IN:cons (n;from (S(n))):IN!L IN

(1.13) La dénition de from est gardée puisque from est protégé par le construc-teur cons. Toutedénition récursive de liste ne correspond pas àune loide constructionvalide:pourqu'uneméthodedeconstruction soitvalide,ilfaut quel'on puissedéterminertout préxe de longueur niedel'objetdéni. Considérons, par exemple, la dénition suivante de la liste innie d'entiers necontenant que deszéros:

(38)

oùtailestunefonctionquiretournelalistedesonargumentprivéedupremier élément (nilsicette listeest vide)et estdénie récursivement par:

tail:= l:L IN .Casel ofnil[n 0 :IN][l 0 :L IN ]l 0 end:L IN !L IN

Tandis que la méthode permettant de construire from est valide, la mé-thodedénie pour construire zerosne l'estpaspuisqu'ellene permetpasde connaîtretoutpréxe de zeros.Par exemple,on a:

zeros ! cons(0,tail(zeros)) ! cons(0,tail(zeros)) ! from(n)!cons(n,from(S(n)))!cons(n,cons(S(n),from(S

2

(n)))) ! tail(zeros) ne peut donc pas être réduit en forme canonique et zeros n'est doncpasun termeproductif(ladénition dezeros n'estpasgardée puisque zerosestargument d'unefonction).Unterme detypeL

IN

estdonc productif s'ilseréduit enniloucons (a;b)oùbestuntermeproductif.Laconditionde gardefournitdoncunecaractérisationsyntaxique d'uneclassededénitions récursivesvalides, appeléesdénitions gardées par constructeurs. Ce critère esttoutefoistroprestrictifpuisqu'ilexistedestermesproductifsquipeuvent être obtenus par des dénitions non gardées. Considérons par exemple la dénitiongardée suivantede lafonction map.

map:= f:IN!IN. l:L IN . Casel of nil [n 0 :IN][l 0 :L IN ]cons(f(n 0 ),map(f;l 0 )) end.

Cettefonction permet de dénir leterme:

from_map:=n:IN. cons(n,map(S,from_map(n))):IN!L IN Cette dénition n'est pas gardée puisque l'appel récursif à from_map est argument delafonctionmap. Or,ilestclairqueletermedéniestproductif puisque: from_map(n) ! cons(n,map(S,from_map(n))) ! cons(n,map(S,cons(n,map(S,from_map(n))))) ! cons(n,cons(S(n),map(S,map(S,cons(n,map(S,from_map(n))))))) !  ! cons(n,cons(S(n),cons(S 2 (n), )))

Figure

Fig. 1.1  Arbre de preuve en dé duction naturelle
Fig. 2.1  F onctions partielles
Fig. 2.2  Transposition de propriétés formelles
Tab. 2.3  Dénitions mutuellement récursives de  T et  L n si l = hi 0 , alors q  Ln l est faux
+7

Références

Documents relatifs

Les théorèmes de collapsus simultané sont les versions constructives des théorèmes en mathématiques classiques qui disent que tout modèle de la première théorie s’étend en

Avec un objet mesuré, comme dans le cas des vingt euros, on pourra interpréter Y justement comme un objet nécessaire pour compléter un ensemble. De ce fait, xvatit’ gardera toujours

défintion d'un ensemble de fonctions et on ne peut pas définir deux ensembles de fonctions différents dans la même déclaration d'interface: d'un point de vue mathématique

• D´efinitions de l’inclusion d’un ensemble dans un autre et de l’´egalit´e de deux ensembles.. • D´efinitions d’une partie d’un ensemble et de l’en- semble des

Une substitution est une fonction partielle qui associe des termes à des variables (quʼon peut noter comme un ensemble de couples (Var, terme). si les deux termes résultants de

Notre définition formalise cette intuition en définissant les formules dans les- quelles un terme est libre pour une variable : toute formule atomique a cette propriété (condition

D ´ EFINITION 6.1 Toute extension de K L qui inclut dans ses axiomes les axiomes (E7), (E8) et (E9) d´efinis ci-dessous est appel´e syst`eme du premier ordre

Le cadre des problèmes décisionnels de Markov et ses généralisations que nous développerons dans des chapitres ultérieurs forment les modèles les plus classiques pour les problèmes