• Aucun résultat trouvé

1.2 Coq et le calcul des constructions inductives

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, nousillus- 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)

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écursivementsurunen- 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:

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), )))

Preuves gardées

Cetteconditionde garde  estaussiutilepourmener un raisonnement inni  . La notion de preuve gardée a été étudiée, dans le contexte de la théoriedestypes, par T.Coquand:

In order toestablish that a proposition  followsfrom other pro- positions 

1

,  ,  q

, it is enough to build a proof term e for it, using not only natural deduction, case analysis, and already proven lemmas, but also using the proposition we want to prove recursively, provided sucha recursive call isguarded by introduc- tion rules.

T. Coquand [20 ] Considérons,par exemple,ladénitionco-inductive duprédicatLNcaracté- risantles listes inniesd'entiers consécutifs:

CoInductive LN :IN!L IN !Prop:= C:(n:IN)(l:L IN )(LN (S n)l)!(LN n (consn l)): (1.14)

Ilest possible deprouverparco-induction LN (n;from(n))pour toutnaturel n.Letermedepreuve

LN

utiliseleschémad'éliminationeq_ind(voir(1.11)) associé àladénition del'égalité etestdéni par:

 LN :=n:IN:eq_ind ( L IN ; cons(n;from(S(n))); u:L IN :LN (n;u); C(n;from(S(n)); LN (S(n))); from(n); from_unfold(n)) (1.15)

oùfrom_unfold estlapreuve de laproposition:

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

La dénitionde ce terme estbien gardée puisquel'appelrécursif à  LN

est protégé par leconstructeur C.

Chapitre 2

Transposition de propriétés

formelles : l'unication

L'objectif de ce chapitre est de formaliser la preuve de la décidabilité du problème de l'unication des termes du premier ordre, mécanisme de basede laprogrammation logique.Toutefois, plutôt quede construire cette preuve formelle en suivant une approche classique (basée sur l'algorithme d'unication) et puisqu'une preuve formelle similaire a été construite par J. Rouyer [89 ] pour un ensemble plus général, l'ensemble des quasi-termes, nousallonstransposer lapropriété d'unication, déjà établie, de l'ensemble desquasi-termes versl'ensembledestermes.

Unification

quasi-termes

Termes

quasi-termes

‘‘compatibles’’

Ils'agitdoncdemettreenrelationl'ensemblesurlequelportelapreuvecher- chée avec lesous-ensemblecorrespondant del'ensembledesquasi-termes,et de prouver la conservation du résultat. Nous verrons donc à travers ce dé- veloppement comment dénir un procédé eectif permettant de mettre en relationunensembledéniinductivement avecun sous-ensemblecaractérisé parunprédicat.La principaledicultéprovient dufaitque, pour maintenir lacohérenceducalcul,leformalismedusystèmeCoqinclut unminilangage algorithmique (à la ML) avec lequel seules les fonctions totales sont repré- sentables. Après avoir présenté deux techniques de preuve possibles pour résoudrece problème,nousdonnons lesdénitions formellesdesobjetssyn- taxiquesmisenjeudansl'algorithmed'unication(termesetsubstitutions).

établies.Enn,l'unicationaupremierordreestprésentéeàpartirdutravail deJ. Rouyer[89].

2.1 Termes et quasi-termes

2.1.1 Dénition des termes et algorithme d'unication

Documents relatifs