• Aucun résultat trouvé

BBFoc

N/A
N/A
Protected

Academic year: 2021

Partager "BBFoc"

Copied!
20
0
0

Texte intégral

(1)

HAL Id: hal-02545666

https://hal.archives-ouvertes.fr/hal-02545666

Submitted on 17 Apr 2020

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

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

BBFoc

Stéphane Fechter, Olivier Boite

To cite this version:

Stéphane Fechter, Olivier Boite. BBFoc. [Rapport de recherche] lip6.2004.002, LIP6. 2004.

�hal-02545666�

(2)

Stéphane Fechter

Laboratoire d'informatiquede Paris 6 8 rue du Capitaine Scott

75000 Paris, France [email protected]

OlivierBoite

LaboratoireCEDRIC/IIE du CNAM 18, allée Jean Rostand

91025 Evry, France [email protected]

Résumé

Cet article décrit un modèle d'un langage de programmation et de spécications destructuresalgébriques pourlecalcul formel.Cemodèle comporteunaspectorientéobjet,etunenotionnouvelledetypesupport pour les entités manipulées. L'article décrit la preuve mécanisée de la sûretédutypagedumodèleaveclesystèmeCoq.

1 Introduction

Le projet FoC [FoC] (acronyme pour Formel OCamlCoq)apourobjectif de développer unenvironnementcertié pourle calcul formel. Cet objectif se décompose endeux sous-buts. Le premier est de réaliserune librairiecertiée pour lecalcul formel. Lesecond est d'orirunlangage utilisateur,appelé lan-gage FoC, permettant de spécier des structures algébriques, d'implanter les algorithmesnécessairesaucalculformeletdeprouverformellementles proprié-tésdesstructures etdes algorithmes.Lalibrairieestécriteàl'aidedulangage FoC.

Parsouci de réutilisation du code et des preuves, et pour être proche des méthodes de construction des mathématiques, le langage FoC est un langage fonctionnelquiproposedestraitsorientésobjetcommel'héritage,laliaison re-tardéeet leranement.LeprojetFoC nousoreunensembled'outils permet-tantdeconstruiredesstructuresmathématiquesparranement,deles visuali-seretd'analyserleursdépendances.Lesélémentsdespécicationsetdepreuves d'un programme FoC sont compilés vers le système d'aide à la preuve Coq [BBC

+

(3)

Ocaml [LDG 02]. Ce dernier a été choisi pour ses caractéristiquesorientées objetet modulaires[BHR99].

Ici seul le langage FoC, et plus particulièrement les traits orientés objet, nous intéressent. Une sémantique formelle pourFoC aété dénie àl'aide du modèle ObjectiveFoC [Fec01], [Fec02a], [Fec02b] qui présente les éléments du langageFoC, vu comme unlangage deprogrammation. Lestravaux présentés dans cet article suivent trois objectifs. Le premier est de présenter la séman-tiqueetlesystèmedetypesd'unsous-ensembled'ObjectiveFoC:BBFoC.Cela permet d'assurer au projet FoC, que le langage repose sur des bases solides, sûreset noncontradictoires. Ledeuxième consisteàprésenter laformalisation et la preuve de la sûreté de ce système de types en Coq. Enn, le troisième objectif s'insèredans une étude dela réutilisation de preuvesformelles en sé-mantique [BD01, Boi02]. Les travaux présentés ici constituent une étude de cassupplémentairepermettantdedégagerlesélementsnécessairesàl'étudede langages orientés objet. Notre développement en Coq s'insèredans la famille des travaux sémantiques mécanisés autour des langages orientés objetcomme [NvOP00,NvO98], [Sym99], [Lau97],[MIRO].

Lastructuredel'article estlasuivante:àlasection2nousprésentons BB-FoC. NousyexposonslesélémentsdulangageFoC,puislasyntaxe,la séman-tiqueetletypage.Lasection3présentelaformalisationdelasûretédutypage enCoq.

2 Présentation de BBFoC

LelangageFoCintroduitlanotiond'espèce.Celle-cipermetdereprésenter desstructuresmathématiquescommeparexemplelesgroupes,lesanneaux,les polynômes.Dansuneespèce,lesopérationsmanipulantlesélémentsdela struc-turesontappeléesméthodes,etdéclarationsquandellessontabstraites.Les éléments d'une structure mathématique donnée ont une représentation com-mune. Dans le langage FoC, elle est caractérisée par un type nommé type support. Dans uneespèce, cetype est plusou moins abstraitselonle niveau d'abstractiondelastructurequenousvoulonsspécier.Uneespèceestanalogue àlanotiondeclassedeslangagesorientésobjet.Ainsionutiliseunmécanisme d'héritagepourdénirdenouvellesespècesàpartird'espècesexistantes.Ce mé-canismed'héritageprésente,parrapport àun modèleplus classique, quelques restrictions dû à la présence du type support souvent associé aux méthodes et auxdéclarations.Enoutre, laredénition dutypesupport est interditecar en calcul formel, même si l'on construit des structures de plus enplus riches, l'ensemble sous-jacent reste le même et par conséquent la représentation des élémentsdecetensembleestxe.L'utilisateurnal(parexempleuningénieur) manipule uniquement des collections. Il s'agit d'une instanciation d'une es-pèceoùtouteslesdéclarationsontétématérialiséesenméthodes,etoùletype support est totalement déni. Une collection est totalement gée. De ce fait, il est impossiblepourune collectionde redéniret/ou d'hériterune méthode. L'utilisateurenvoie(ouinvoque)uneméthodedelamêmemanièrequel'on

(4)

en-de la collection grâce à l'abstraction du type support. En pratique, on peut voir la collection commeune sorte de calculatrice dont le fonctionnement est totalementcachéàl'utilisateur.

La sémantiquedulangage FoC vu en tantquelangage de programmation, est étudiée au travers du modèle Objective FoC [Fec01, Fec02b]. Ce modèle propose une sémantique opérationnelleet spécie son systèmede types. Ilest inspiré d'Objective ML [RV98] modèle que l'on peut rapprocher de Ocaml. Danslecadredecet articlenousnousintéressonsàunsous-ensembled'Ob jec-tiveFoC: BBFoC.Les diérencesentre lesdeuxmodèlessontdonnéesdansle tableausuivant:

Traits BBFoC ObjectiveFoC

collections oui oui

espèces avec simplehéritage avecmulti-héritage espècesparamétrées non oui

déclarations oui oui

méthodes oui oui

redénitiondeméthodes oui oui

héritagedutypesupport oui oui

liaisonretardée oui oui

selfréférence oui oui

typage monomorphe polymorphe

Dans la suite, nous présentons la syntaxe, le langage de types, la séman-tiqueopérationnelle et les règlesde typage deBBFoC, ce qui nouspermet de caractériserformellementlesnotionsd'espèce,decollectionet detypesupport.

2.1 Syntaxe

Lesexpressions dulangagedonnésontdécritesformellementdans lagure 1.

Danscequisuit,noussupposonsunensembledeconstantesc2C,unensemble denomsdevariablesx2X et unensembledenomsdeméthodesm2M. Onsupposeaussiquepourl'élémentdeconstructionsyntaxique(m

1 =a 1 ;:::;m n = a n ),touslesm i

sontdistinctsdeuxàdeux.Nousavonslamêmehypothèsepour laconstruction(m 1 : 1 ;:::;m n : n ).

Lasyntaxemetenévidencetrois catégoriesd'expressions: (1) lesexpressionsfonctionnellesdebase:

La seule diérence avec ML, porte sur la construction fun(x in a 1

)a 2

. Elle comporte une restriction par rapport à l'abstraction classique. Ici, comme on le verra par lasuite, parcontrainte de typage, a

1

(5)

a ::= cjx jfun(xina)ajaa (1) j self j( b ; m 1 =a 1 ;:::;m n =a n )ja]mjnewa (2) j speciesz=aina (3) j struct Æ (m 0 1 : 1 ;:::;m 0 k : k ) (m 1 =a 1 ;:::;m n =a n ) end j struct_h inherita Æ (m 0 1 : 1 ;:::;m 0 k : k ) (m 1 =a 1 ;:::;m n =a n ) end

unecollection.Leparamètrex apourtypeletypesupportdea 1

.

Danslasuite,oncontinued'appeler abstraction cette construction parti-culière.

(2) lesexpressionsdecollections:

Une collectionprend laforme syntaxique ( b ;m 1 =a 1 ;:::;m n =a n ),les m i

étantélémentsdeM. Letypesupportdelacollectionestdénoté par 

b

dontladescriptionestdétailléeplusloindansletexte.

La variable self permet de de référencer la collection elle-même, et de mettreen÷uvrelaliaisonretardée.

L'invocationd'uneméthodemd'unecollectionaestdénotéepara]m(la constructionrappellecelledeslangagesorientésobjet).

Ennlaconstructionnewapermetdecréerunecollectionàpartird'une espèce(comme dansleslangagesorientésobjet).

(3) lesexpressionsd'espèces:

La construction des espèces peut se faire à l'aide de deux formes syn-taxiques.Laforme: struct Æ (m 0 1 : 1 ;:::;m 0 k : k ) (m 1 =a 1 ;:::;m n =a n ) end

qu'on appelle espèce simple, permet de créer directement une espèce. Danscetteconstruction(m

1 =a 1 ;:::; m n =a n

),représente lalistedes méthodes,et(m 0 1 : 1 ;:::;m 0 k : k

)lalistedesdéclarations.Lecorpsd'une méthodepeututiliserunedéclaration.LechampÆreprésenteladénition

(6)

Laforme: struct_h inherita Æ (m 0 1 : 1 ;:::;m 0 k : k ) (m 1 =a 1 ;:::;m n =a n ) end

représente une espèce avec héritage d'une autre espèce. Pourl'héritage, on utilise la phrase inherit a; où a est une espèce. On hérite alors des méthodesde l'espècea ainsiquedesdéclarations dontladénitionn'est pasdonnéedansl'espècecourante.Lesautreschampsontlamême signi-cationqueceuxdelaconstructionprécédente.En revanche,lechampÆ peut être absent. Dans ce cas, le type support de l'espèce est hérité de l'espècea.

Une espèce peut se dénir localement par la construction species z = ain a.La signicationde cette constructionest lamêmeque cellede la constructionclassiquelet x=ainadeML.

Enn, letypesupportest soit syntaxiquementabsent(?),soit déni,c'est alorsune expression de typeà laML (

b

)construite ici à partirdes typesde base(const_t) etdelaèche.

Æ ::= ?j b  b ::= const_tj  b ! b

2.2 Sémantique opérationnelle de BBFoC

Lasémantiquequenousprésentonsiciest unesémantiqueopérationnelleà réduction.Une telle sémantiquepermetdevisualiserchaqueétapede l'évalua-tion d'une expression versson résultat nal (sa valeur) s'il existe. Une étape élémentaire est donnée par la relation !



permettant de réduire en tête du terme. Une expression qui ne peut pas se réduire avec cette relation, est ré-duiteen profondeur grâce àlarègleducontexte.Elle permet dedégagerles sous-expressionsquiseréduisentaveclarelation!

 .

Nousutilisonslesnotationssuivantespourlerestedel'article:  westune abréviationd'unelistedeméthodes.

 D estuneabréviationd'unelistededéclarations.  dom(A)renvoieledomained'unerelationA. Lesvaleurssontdonnéesci-dessous:

v ::= c constante j fun(xina 1 )a 2 abstraction j ( b ;w) collection j structÆDw end espècesimple

(7)

1

n'apasbesoind'être une valeurcar ellereprésente unecontraintesur le para-mètre.

Réductionsélémentaires Ladénitionde!



estdonnéeparlesrègles(1)à(5).

(fun(xina 1 )a 2 )v !  a 2 [v=x] (1) speciesz=vin a !  a[v=z] (2) new(struct b w end) !  ( b ;w) (3) ( b ;w)]m !  w(m)[( b ;w )=self] (4) struct_h inherit (struct Æ 1 D 1 w 1 end) Æ 2 D 2 w 2 end !  struct Æ D 1 D 2 ndom(w 1 w 2 ) w 1 w 2 end (5) AvecÆ=  Æ 1 siÆ 2 =? Æ 2 sinon

Les règles (1) et (2) sont les règlesclassiques de -réduction.La règle (3) metenévidencequelacréationd'unecollectionest faiteàpartird'uneespèce sanshéritagedontletypesupportestdéni.

L'invocationd'uneméthodemd'unecollectionconsisteàretournerlecorps decetteméthodeoù toutesles occurencesdela variableself sontremplacées parlacollectionelle-même(règle(4)).

La règle (5) exprime la réductionde l'héritage d'une espèce. Pourcela on utilisel'opérateurbinaire.Ilpermetd'ajouterunélémentedansunensemble A. Si eest déjà présentdans A, alors leremplace parlanouvelledénition de e. Par abus d'écriture, Al

e

désignera l'ajout des éléments de la liste l e dansl'ensemble A. Cet opérateur est décrit plus formellementdans lasection consacréeauxtables. Ainsionutiliseande fusionnerlalistedesméthodes del'espècehéritéeetlalistedesméthodesdel'espècequiestréduite.Demême on utlise  pour la déclaration D

1 D

2

. On enlève ensuite de liste obtenue, les déclarations qui ont reçus une dénition dom(w

1 w

2

). Enn on résoud l'héritagedutypesupport:sil'espècenedénit pasdetypesupport,onhérite du typesupport de l'espèce héritée. Sinon le type support résultant est celui dénidansl'espèce.

(8)

UncontexteEestuneexpressionavecuntrou.Cetrouestdestinéàêtre rempliparune autreexpressiona. Cetteopérationsenote E[a].Les contextes deréductionsontlessuivants:

E ::= jE aj vE jE]mj struct_h inheritE Æ D w end

oùreprésentelecontextevide.Larelationderéductionentreexpressions, noté!,estdéniepar:

a!  a 0 E[a]!E[a 0 ] a!a 0 E[a]!E[a 0 ] 2.3 Langage de types

Lelangagedestypesest dénipar:

 ::= j b j ! jh b ;m 1 : 1 ;:::; m n : n i j sup(Æ)sig()(m 1 : 1 ;:::;m n : n )(m 0 1 : 0 1 ;:::;m k : 0 k ) où:

 estunevariabledetype.  dans laconstruction m 1 :  1 ;:::; m n :  n , les m i

sont distincts deux à deux.  dans la constructionm 0 1 :  0 1 ;:::; m k :  0 k , lesm 0 i

sont distincts deux à deux.

Letyped'unecollectionest delaforme h b ;m 1 : 1 ;:::; m n : n ioù b est letypesupportdelacollectionetm

1 : 1 ;:::;m n : n

estlalistedestypesdes méthodes. Letypesup(Æ)sig()(m 1 : 1 ;:::; m n : n )(m 0 1 : 0 1 ;:::;m k : 0 k ) estcelui d'uneespèce,où Æ est le type support dénipar l'espèce(directement ou par héritage). Le champ m 1 :  1 ;:::; m n :  n

représente la liste des types des méthodes(déniesdirectementdansl'espèceet/ouparhéritage).Puislechamp m 0 1 :  0 1 ;:::;m k : 0 k

représente laliste des déclarations (déniesdirectement dansl'espèce et/ouparhéritage). Enn lechampsig()est ce qu'on appelle la signature de l'espèce: elle représente le type de la collection construite à partirdel'espècequ'onestentraindetyper.Entreautres,ellepermetdetyper lavariableself danslesméthodesdel'espèce.

(9)

Lesséquentsdetypageontlaforme `a: où estunenvironnementde typagedéniformellementpar:

::=?j x: j self :

Nousutilisonségalementlesnotationssuivantes:

 ! estuneabréviationd'unelistedetypesdeméthodes.  est uneabréviationd'unelistededéclarations.

Lesrèglesdetypagepourlesexpressionsdebase sontlessuivants:

Var `x: (x) Self `self : (self) Abstraction `a 1 :h b ;m 1 : 1 ;:::;m n : n i (x: b )`a 2 : 0 `fun(xin a 1 )a 2 : b ! 0 App `a: 0 ! `a 0 : 0 `aa 0 :

Seulel'abstractiondièreduschémaclassique.Icileparamètreestcontraint àêtre unélémentd'une collectiona

1

, sontypeestdonc lesupport b

de cette collection.C'est doncdans l'environnement augmenté de l'hypothèsex :

b , quelecorpsdel'abstractionesttypé.

Collection

(8m2dom(w); (self :h b

;!i)`w(m):!(m)) dom(!)=dom(w) `(

b ;w):h

b ;!i

Pourtyper une collection,on type l'expressionassociée àchaqueméthode dans l'environnement augmenté de la variable self. Le type associé à self est le type de la collectionelle-même. D'autre part, onautorise les appels de méthodessurunecollection,seulementsiellessontdénies.Pourrespectercette contrainte,lesnomsdesméthodesdansletypedelacollectiondoientêtredans lacollection.Formellement,ceciestexprimépardom(!)=dom(w).

Send `a:h

b

;!i !(m)= `a]m:

L'envoid'un messagemsurune expressionaest correctsi letypede aest celuid'unecollection.Lacondition!(m)= danslarègleci-dessusimposeque m soit présentdans le type de la collection.Le type qui lui est associé est le

(10)

carlaméthode mpeutêtre unedéclaration(virtuelle danslecontexteorienté objet). New `a:sup( b )sig(h b ;(m 1 : 1 ;:::;m n : n )i)(m 1 : 1 ;:::;m n : n )(?) `newa:h b ;(m 1 : 1 ;:::; m n : n )i

La créationd'une collection àpartir d'une espèce est correcte à condition quel'espèceaitdéniuntypesupportetquetoutessesméthodessoientdénies. Celasetraduitpar:

 le type support de la signature et celui ramené par le type de l'espèce doiventêtreidentiques.

 lalistedesdéclarationsest vide

 lalistedestypesdesméthodesdelasignatureetcelleramenéeparletype del'espècesontidentiques.

Letypaged'uneespècedénieparhéritagesefaitaveclarègleSpecies Body dontnousallonsanalyserlaconstruction:

 Ontypel'espèce héritéeanderamenersontypesupport (Æ h ),lestypes desesméthodes( h )et desesdéclarations( h )(ligne(a)).

 On type les méthodes de l'espèce courante (w) dans l'environnement augmentédelavariableself.Letypedeself doitêtreceluidelasignature dutyperetournépourl'espèce.Cecipermetdetyperlesoccurrencesdela variableself danslecorpsdechaqueméthodedew.Ennilfautvérier que les noms de méthodes de w sont inclus dans la liste des méthodes dénissantletypedeself (ligne(c)).

 On résoutl'héritagedu typesupport, entrele typesupport hérité et ce-luide l'espèce courante,enutilisantl'opérateurV (ligne(b)).Si le type supportdel'espècecouranteest dansl'état nondéni,onretourne natu-rellementcelui del'espèce héritée.Danslecas contraire,ilfaut qu'ilsoit identiqueàceluidel'espècehéritée.

Enn,ilfautassurerlacohérencedutypesupportÆ f etceluidelavariable self (Æ s ):Æ f

est soitnondéni,soitégalàÆ s

(prémisse(1),ligne(b)). Cesétapespermettentderetournerletypedel'espèceavec:

 letypesupportcalculéparl'opérateurV,  lasignaturecorrespondantautypedeself,

 laconcaténationdelalistedestypesdesméthodeshéritéeaveclalistedes typesdes méthodesdans w. Maisil sepeutqu'une méthodehéritée soit redéniedans l'espèce courante.Dansce cas, il faut quelestypessoient égaux.Cettevéricationestfaiteaveclaprémisse(2)(ligne(d)).

 la concaténation des déclarations héritées ( h

) avec les déclarations de l'espèce (D). Mais il faut retirer de cette nouvelle liste, les déclarations quiontétédéniesetsontdevenuesdesméthodes.Deplus,lesdéclarations

(11)

variableself. Cettecontrainte s'exprimeaveclaprémisse(3) (ligne(f)). Ennilsepeutqu'unedéclarationseretrouvedanslalistedesdéclarations del'espèce.Dansce cas,ilfautqueleurstypessoientégaux.Laprémisse (4)permetcettedernièrevérication(ligne(e)).

Enn,lesméthodeshéritées nepeuventpasredevenirdesdéclaraions.Ceci estunecontraintedulangageFoCquiimposequelesconstructionssefontd'un niveauabstrait versunniveauconcret,et non l'inverse. Laprémisse(5) (ligne (f))permet d'imposercela.

Speciesbody `a h :sup(Æ h )sig(hÆ s ;! s i)( h )( h ) (a) V(Æ h ;Æ)=Æ f Æ f =Æ s _? (1) (b) (8m2dom(w); (self :hÆ s ;! s i)`w(m):! s (m)) dom(w)dom(! s ) (c) m2dom( h )^m2dom(w)) h (m)=! s (m) (2) (d) (m 0 :)2 h ^(m 0 :)2D) = 0 (4) (e) D! s (3) D6 h (5) (f) ` struct_h inherita h Æ D w end :sup(Æ f )sig(hÆ s ;! s i)()() avec  =  h fw(m):! s (m)=m2dom(w)g  =  h D ndom() V(Æ h ;Æ) =  Æ h si Æ=? ÆavecÆ=Æ h

Simplespeciesbody (self :h b ; ! s i)`w 0 : Æ= b _? D! s dom(w 0 )\D=? () ` struct Æ D w 0 end :sup(Æ)sig(h b ; ! s i)()(D)

La règle de typage d'une espèce simple est similaire à celle pour l'espèce avec héritage. Notons que la liste des déclarations doit appartenir à la liste destypesdesméthodesdelavariableself.Cecipermet d'assurerlacohérence des déclarations avec leur future instance. Enn l'intersection de la liste des méthodes et des déclarations doit être vide. Ceci est nécessaire pour rejeter

(12)

encoredesdéclarations: (new ( struct int m:int!int m=fun(xin c)x+1 end) )

oùcestunecollectiondontletypesupportestint.Cetteexpressionestbien typéesionnetientpascomptedelaprémisse().Maisellenepeutêtreréduite par!



(règle(3)), étantdonnéquelalistedesdéclarationsn'estpasvide.

Localspecies `a 1 :sup(Æ)sig()(!)(Æ) (z:sup(Æ)sig()(!)(Æ))`a 2 : `speciesz=a 1 ina 2 :

Le typage de la dénition locale d'une espèce est très similaire àcelui du let:::in dans lecas du typage monomorphe. Larègle contraint a

1

àêtre une espèce.

3 Sûreté du typage en Coq

Danscettesection,nousnousintéressonsàlaformalisationenCoqde BB-FoC, et à lapreuve dela sûreté du typage pour une sémantiqueà réduction. Cettepreuveestformelleetmécaniséedanslesystèmed'aideàlapreuveCoq [BBC

+

02], dont nous supposons que le lecteur a une connaissanceminimale. Ce travailbénécie d'unepremière expérience pour une preuvesimilaire d'un langageàlaML[BD01].

3.1 Spécications du langage BBFoC en Coq

Outreladénition desexpressions,types,règlesdetypage,et dela séman-tique,nousdétaillonsladescriptiond'unestructureTable,déjàprésentéedans [BD01]. Cettetable serviraà spécier les environnementsde typage, les listes deméthodesoudéclarations,ainsiqueleurtype.

3.1.1 Table

D'un pointde vue abstrait,une table est une table d'association entredes cléset desvaleurs.Concrètement,souvent,lechoixest faitdel'implémenter à l'aided'unelistedecouples.Un grosdéfautdecettereprésentationest l'opéra-tiond'accèsàpartird'uneclé,encoreappelé application,ainsi quel'opération d'ajoutaveclesredondanceséventuellesàgérer.Cesopérationsnécessitentune rechercheséquentielledanslaliste.

(13)

qu'àtraversdes opérateursd'ajout, d'appartenance, et d'application. Le type destables(etdecesopérations)estgénérique,paramétréparlestypesdesclés et des valeurs. Ces paramètres sont représentés localement à l'intérieur d'une sectionpardesvariablesA et B,et deviennentdesparamètresàinstancieren dehorsde la section. Il s'agit d'un type inductif en Coq, ne possédantqu'un seulconstructeurayantpourargumentsune listede clésqui estledomainede latable,etunefonctiondesclésverslesvaleurs.

Inductive table : Set :=

intro_table : list ! (A ! B) ! table.

Nousutilisons lafonctionnalité deCoq pourtrouverune valeurassociée à uneclé,ce quinouséviteunerechercheséquentielle.

Une table d'association possède deux propriétés importantes, concernant l'opérationd'ajoutnotée:

(t(c;v 1 ))(c;v 2 )=(t(c;v 2 )) (t(c 1 ;v 1 ))(c 2 ;v 2 )=(t(c 2 ;v 2 ))(c 1 ;v 1 ) sic 1 6=c 2

Ellenedoitpascontenirdeuxoccurrencesd'unemêmeclé,doncl'ajoutdans une table doitécraser l'anciennevaleur.La deuxièmepropriété est la commu-tativité.Autrement dit, l'ordre desajouts n'apas d'importance pour des clés diérentes. Ces propriétés sont vériées par notre implantation fonctionnelle d'une table,et par notre opérationd'ajout strict (pas de redondance dans le domained'unetable).

Une fonctiontoute seule nesut pasàreprésenter une table.En eet, en Coqlesfonctionssonttotaleset une table d'association est partielle.Donc se poseleproblèmedel'applicationd'unecléhorsdudomaine.Ornotrestructure possèdeunelistedeclésquireprésentejustementledomainedelatable.Notre opérationd'applicationestenfaitunprédicatquijugesil'applicationd'uneclé dansunetableretournelavaleurv,ens'assurantquelacléappartientàlaliste, etquev estbienlavaleurretournéeparlafonctionencapsulée.

Inductive apply_table : table ! A ! B ! Prop := intro_apply_table : (a:A)(dom:list)(f:A!B)

(in_prop a dom)!

(apply_table (intro_table dom f) a (f a)).

Unetable videest unetabledontlalistedesclésest vide:

Definition empty_table [f:A!B] : table := (intro_table Nil f). Nous avons ensuite prouvé une quinzaine de lemmes pour manipuler une table. En instanciant A et B par le type des variables et des types de notre langage,nousmodélisonsunenvironnementdetypage.Cettestructurepermet aussidereprésenter desenregistrements.Ainsi,une collectionpeutêtre repré-sentéeparunetable instanciéesurletypedesnomsdeméthodeet letypedes expressions.Demême, une collectionest représentéeparunetable entrenoms deméthodeettypes.

(14)

Lagrammairedes expressionsest représentéeparletypeinductifexpr.Le typemessageest untypeabstraitpourlesnoms deméthodes.

Letypebasicest untype inductifcodant lestypesdebase.Letypecarrier estuntypeinductifpourletypesupportquipeutêtresoitnon_def,soit déni àl'aidedetypesdebase.

Pourrester concis, nous ne donneronspas tousles constructeurs de expr. Pour simplierlagestion desajoutset suppressions deméthodes dansla liste desdéclarations et des dénitions, lorsdel'héritage, nousavonschoisi d'avoir uneconstructionpourl'héritagequinecomportequ'unedéclarationet qu'une dénitiondeméthode,aulieudelistescommenousl'avonsprésenté.

Definition declarations := (table message type).

Inductive expr : Set := ...

| Collection : basic ! (table message expr) ! expr | Send : expr ! message ! expr

| New : expr ! expr

| LetSpecies : identifier ! expr ! expr ! expr

| Struct : carrier ! declarations ! (table message expr ) ! expr | Struct_h : expr ! carrier ! message ! type ! message ! expr ! expr.

Nousutilisons unprédicat pourdéterminersi unevariable x est libredans uneexpression.

Inductive free_ident [x:identifier] : expr ! Prop

Comme pour l'application sur une table, notre opération de substitution n'estpasunefonction,maisunprédicatquis'assureenpassantqu'iln'yapas decapturedevariableenutilisantleprédicatprécédent.Ainsi,nousn'avonspas derenommageàfaire. (subst_expr e x e' er)signiequeer estlerésultat delasubstitutiondex pare

0

danse.

Inductive subst_expr : expr ! identifier ! expr ! expr ! Prop

3.1.3 Typage

L'algèbredetypessuit ladénition donnéedanslaprésentation. Inductive type : Set :=

Const_t: basic ! type | Var_t: stamp ! type

| Arrow: type ! type ! type

| Collection_t : basic ! (table message type) ! type

| Species_t : carrier ! type ! (table message type) ! type. Letypestampest untypeabstraitpourlesvariablesdetype.

(15)

Nousécrirons

env |- e: t pour(type_of env e t).Desrèglesdepretty-printing dansle systèmeCoqpermettentd'utilisercette notationparlasuite.

Inductive type_of : env_typ ! expr ! type ! Prop := ...

| type_of_collection : (env:env_typ)(w:(table message expr))(lt:(list message)) (ft:message!type)(ts:basic)

((m:message)(wm:expr)(apply_table w m wm) !

env(+)(self,(Collection_t ts (intro_table lt ft))) |- wm : (ft m)) ! (dom_of w)=lt !

env |- (Collection ts w) : (Collection_t ts (intro_table lt ft)) ...

Le constructeur détaillé ci-dessus est la traduction de la règle d'inférence (Collection).L'opérateurVsuitladénition donnéedanslasection2.

On dénit également une relation d'ordre notée v sur les expressions qui serviradansnospreuvesdesûretédetypage.

Definition less_typable [e1,e2:expr]: Prop :=

(env:env_typ)(t:type) env |- e1 : t ! env |- e2 : t. Lanotatione1ve2,poure

1

estmoinstypablequee 2

,(enCoq(less_typable e1 e2)),signiequetout typagedee

1

permetdetypere 2

.

3.1.4 Sémantique

Commeannoncé,nousutilisonsunesémantiqueàréduction,ouditeà petits-pas.Nousdevonsdécrirequellessontlesvaleursdansnotrelangage,etcomment réduirenosexpressions.

Inductive is_value : expr ! Prop :=

Cst_val : (c:constant)(is_value (Const c))

| Fun_val : (i:identifier)(e,a:expr)(is_value (Fun i a e))

| Collection_val : (t:basic)(w:lmeth)(is_value (Collection t w))

| Struct_val : (t:carrier)(d:declarations)(w:lmeth)(is_value (Struct t d w)). Les types lmeth et declarations sont dénis respectivement par (table

message exp), (table message type).Lesréductions sontdesrèglesde ré-écriturespéciéesparred_epsilon,quel'onn'utiliseraquedanscertainscontextes. Inductive red_epsilon : expr ! expr ! Prop :=

beta1 : (x:identifier)(e,a,er,v:expr)(is_value v)!(subst_expr e x v er)! (red_epsilon (Apply (Fun x a e) v) er)

| beta2 : (z:identifier)(a,er,v:expr)(is_value v)!(subst_expr a z v er)! (red_epsilon (LetSpecies z v a) er)

| new_red : (w:lmeth)(tb:basic)

(red_epsilon (New (Struct (Def (Def_type_basic tb)) empty_decl w)) (Collection tb | send_red : (w:lmeth)(m:message)(er,wm:expr)(t:basic)

(apply_table w m wm)!

(16)

| struct_h_red : (t1,t2,t3:carrier)(w:lmeth)(m:message)(a:expr)(n:message)(t:type) (d,decl:declarations) t3=(coherence t1 t2) ->

(remove_from_table d(+)(n,t) m decl) ->

(red_epsilon (Struct_h (Struct t1 d w) t2 n t m a) (Struct t3 decl w(+)(m,a))).

Lafonctionis_coherentfaitlecalculdutypesupport,commedécritdans lasection2.3.empty_declreprésenteunetablededéclarationsvide.Leprédicat (remove_from_table d m d')établitqued'est latable dprivée delaclém.

Nousreprésentonslescontextesdemanièrefonctionnelle,andepouvoirles appliquerfacilement:

Definition context := expr ! expr.

Inductive is_context : context ! Prop := hole : (is_context ([x:expr] x)) ...

| new_ctx : (c:context) (is_context c) ! (is_context ([x:expr] (New (c x)))) | species_ctx : (c:context)(z:identifier)(a:expr) (is_context c) !

(is_context ([x:expr] (LetSpecies z (c x) a)))

| struct_h_ctx: (c:context)(e:expr)(m:message)(ts:carrier)(n:message)(t:type)

(is_context c) ! (is_context ([x:expr] (Struct_h (c x) ts n t m e))). Ainsila relationde réductionserésumeà deuxpossibilités: une réduction

debase,ouuneréductiondansuncontexte. Inductive red : expr ! expr ! Prop :=

tete : (e1,e2:expr)

(red_epsilon e1 e2)!(red e1 e2)

| cont : (e1,e2:expr)(ctx:context) (red e1 e2) ! (is_context ctx) ! (red (ctx e1) (ctx e2)).

Ondénitleprédicatis_reducible equiarmel'existenced'une expres-sion e' dans laquelle e puisse se réduire grâce à red. On dénit également red_star,lafermetureréexiveet transitivedered.

3.2 Preuve de la sûreté de typage

La sûreté du typage est une propriété fondamentale, particulièrement re-cherchéelorsdelacréationd'unnouveaulangage.Eneet,elleassurequepour touteexpressionbien typée, sisonévaluationtermine,celle-ci terminesurune valeur.La versionforte de ce théorèmeassure de plusque cettevaleur est du mêmetypequel'expressiondedépart.

Onl'énonceenCoqcommesuit.

Theorem type_safe :(a,a':expr)(t:type) (red_star a a') !

empty_table |- a : t ! ~(is_reducible a') !

(17)

quementtoujourslemême,etreprésenté ci-dessous.

surete du typage

formes normales

progression

subject reduction

croissance par contexte

preservation du type par reduction de base

lemme de substitution

Lasûretédutypageestlaconséquenceduthéorèmedesformesnormales,et duthéorèmedeSubject-Reduction,énoncésci-dessous:

Theorem well_typed_nf_are_value :(a:expr)(t:type)

empty_table |- a : t ! ~(is_reducible a) ! (is_value a).

Theorem Subject_reduction : (a1,a2:expr) (red a1 a2) ! (less_typable a1 a2).

Lethéorèmewell_typed_nf_are_valuearmequ'uneexpressionqu'onne peutplusréduire(enformenormale), bien typéedansunenvironnementvide, estunevaleur.C'estuncorollairedulemmedeprogressionsuivant:

Lemma progression : (a:expr)(t:type)

empty_table |- a : t ! ~(is_value a) ! (is_reducible a).

Le théorèmeSubject_reductionénoncela préservation dutypage par ré-duction. Il se montre par induction sur la relation red: soit nous avons une réductiondebase,soitnousavonsuneréductiondansuncontexte.Lethéorème estdoncconséquencedesdeuxlemmessuivants:lacroissancedeless_typable parpassage aucontexte (less_typable_grows),et la préservation dutypage par !



(type_preservation_by_red_epsilon).

Lemma less_typable_grows :(c:context)(a1,a2:expr)

(is_context c) ! (less_typable a1 a2) ! (less_typable (c a1) (c a2)).

Lemma type_preservation_by_red_epsilon :(a1,a2:expr) (red_epsilon a1 a2) ! (less_typable a1 a2).

Le lemme less_typable_growssemontre parinduction sur lecontexte c, tandisquelelemmetype_preservation_by_red_epsilonsemontrepar induc-tionsure.Danslecasde -réductions,nousutilisonsunlemmedesubstitution, énoncéenCoqci-après.

(18)

(subst_expr e1 x e e2) ! env(+)(x,t) |- e1 : t1 !

env |- e : t ! env |- e2 : t1.

Celemmesemontreparinductionsure1.Ilassurelapréservationdutypage lorsd'unesubstitutiond'unevariableparuneexpressiondumêmetypequecette variable.

Nouspassonssoussilence deslemmes demanipulation del'environnement, et des lemmes auxiliaires qui ne présentent pas d'intérêt, sauf à mesurer la dicultédelapreuve.

La taille du script Coq pour la partie spécication du langage est de 400 lignes.Mais tout ce quiconcerne lestables (dénitions,opérations,et lemmes demanipulation),compteplusde1300lignes.Lapartiepreuvedelasûretédu typage,ainsiqueleslemmesnécessaires atteignentles1700lignes,maisquine mettenten ÷uvreque peu d'automatisation.LeschiersCoqsontaccessibles sur http://www.iie.cnam.fr/boite/BBFoc.tgz

4 Conclusion

Nousavonsformaliséetprouvémécaniquementlasûretédutypagedu mo-dèleBBFoC.Ce modèleétantlenoyau deceluide ObjectiveFoC, nousavons une première validation de ce dernier. C'est le premier intérêt de ce travail. Cette formalisation est certes incomplète puisqu'elle ne prend pas en compte lepolymorphisme, l'héritagemultiple,les typessupports abstraits,et le para-métrage des espèces. Cependant, ces aspects ne modient profondément pas l'essence du langage. L'incorporation de ces aspects dans la formalisation en Coqneremettraitpasenquestionletravaildéjàfait.Lepolymorphismeadéjà ététraitépourunnoyaufonctionneldeML[Dub00],danslesystèmeCoq.Cette formalisation est conséquente mais pourrait être reprisepour notre cas. L'as-pect extension delangage et preuvesen Coq fait l'objetd'études de caset de formalisation[BD01,Boi02].C'estledeuxièmeintérêtdecetravail:ilconstitue unélémentde pluspour laformalisationde ce cadre d'extension. L'ajout des aspects de ObjectiveFocmanquant àBBFoc pourraient àterme être réalisés danscecadre.

Remerciements

Nous remercionsCatherine Duboispoursa relecture et sescorrections qui ont permis de lever le voile sur des ambiguités et dicultés, ainsi que Luigi Liquoripoursesconseils.

(19)

[BBC +

02] B. Barras, S. Boutin, C. Cornes, J. Courant, Y. Coscoy, D. Dela-haye, D. de Rauglaudre, J.-C. Filliâtre, E. Giménez, H. Herbelin, G.Huet,H. Laulhère,C. Munoz,C. Murthy,C. Parent-Vigouroux, P. Loiseleur, C. Paulin-Mohring, A. Saïbi, and B. Werner. The Coq Proof-assistant reference manual. INRIA, 7.3edition, 052002. http://pauillac.inria.fr/coq/doc/main.html.

[BD01] O.BoiteandC.Dubois.ProvingTypeSoundnessofaSimplyTyped ML-likeLanguagewith References. InR. Boulton andP. Jackson, editors,SupplementalProceedings ofTPHOL2001, Informatics Re-search Report EDI-INF-RR-0046 of University of Edinburgh,pages 6984,2001.

[BHR99] S. Boulmé, T. Hardin, and R. Rioboo. Modules, objets et calcul formel. InIn ActesdesJournéesFrancophonesdesLangages Appli-catifs,1999.

[Boi02] O.Boite. LanguageFramework. draft,2002.

[Dub00] C. Dubois. Proving ML Type Soundness Within Coq. Theorem Proving in Higher Order Logics: 13th International Conference, TPHOLs2000, LectureNotes inComputer Science,1869:Springer Verlag,126144,2000.

[Fec01] S. Fechter. Une sémantique pour FoC. Rapport de D.E.A., Université Paris 6, Septembre 2001. available at http://www-spi.lip6.fr/fechter.

[Fec02a] S. Fechter. An object-orientedmodelforthe certied computer al-gebra library. Paper presented at FMOODS 2002 PhD workshop, March2002. http://www-spi.lip6.fr/fechter.

[Fec02b] S. Fechter. Objective FoC. draft, http://www-spi.lip6.fr/fechter, 2002.

[Lau97] O.Laurent.SémantiqueNaturelleetCoq:verslaspécicationetles preuvessurleslanguagesàobjets. TechnicalReport3307, INRIA, novembre1997.

[LDG +

02] X.Leroy,D.Doligez,J.Garrigue,D.Rémy,andJ.Vouillon.The Ob-jective Camlsystemrelease3.04 Documentationanduser'smanual. INRIA,2002. http://pauillac.inria.fr/ocaml/htmlman/.

[MIRO] Action MIRÓ Avant-projet MIRO, 2002. http://www.loria.fr/equipes/miro/.

[NvO98] T.NipkowandD.vonOheimb.Java-lightisType-SafeDenitely. InL.Cardelli,editor,Conference Recordof the 25thSymposiumon Principles of Programming Languages (POPL'98), pages 161170, SanDiego,California,1998.ACM Press.

[NvOP00] T. Nipkow, D. von Oheimb, and C. Pusch. Java: Embedding a Programming Language in a Theorem Prover. In F.L. Bauer and R. Steinbruggen, editors, Foundations of SecureComputation. IOS Press, 2000.

(20)

extensiontoML. TheoryandPracticeofObjectSystems,4(1):p.27 50,1998.

[Sym99] D.Syme. ProvingJavaTypeSound.InJimAlves-Foss,editor, For-malSyntaxandSemanticsofJava, volume1523ofLNCS.Springer, 1999.

Figure

tableau suivant :

Références

Documents relatifs

Ce type d'élément de preuve est essentiel dans les processus judiciaires tant il est vrai que l'origine des éléments (contradictoires ou pas) est crucial ainsi que la

criptible tant par son contenu que par la grandeur illimitée de son étendue. 2) Cet ordre conforme à des fins n'est pas inhérent aux choses du monde et ne leur appartient que

Sylvie Boldo, François Clément, Florian Faissole, Vincent Martin, Micaela Mayero.. Preuve formelle du théorème

Ce fragment prend en compte des requêtes de la forme select [distinct] from where group by having en présence de valeurs nulles, fonctions, agrégats, quantificateurs ainsi que

Paulli, « Splenic marginal zone lymphoma: from genetics to management », Blood, The Journal of the American Society of.

On se sert donc, pour calculer l'espace tangent, de la présentation de Manin de cet espace d'homologie, pour laquelle on doit donner un relèvement de l'action de générateurs de

Nous présentons les premiers résultats de la formalisation de propriétés du calcul de processus d’ordre supérieur HOCore [8] dans l’assistant de preuve Coq.. Nous décrivons

La preuve de correction d’un programme fonctionnel simple nous permet de présenter quelques aspects essentiels du logi- ciel Coq : énoncés mathématiques et spécification formelle