• Aucun résultat trouvé

Exemple: le λ-calcul pur

N/A
N/A
Protected

Academic year: 2022

Partager "Exemple: le λ-calcul pur"

Copied!
34
0
0

Texte intégral

(1)

Pr ´esentation d’alphaCaml

Franc¸ois Pottier

15 juillet 2005

(2)

Introduction

Le langage de sp ´ecification

Techniques d’implantation

Traduction d’une sp ´ecification

Conclusion

(3)

Constat

Les langages de programmation dont nous disposons ne sont adapt ´es `a la manipulation d’objets symboliques qu’en l’absence de notion de liaison de noms.

Le respect de la port ´ee lexicale doit ˆetre cod ´e `a la main (op ´erations de renommage, de substitution sans capture, etc.), ce qui est lourd et fragile.

Il nous faudrait une approche plus d ´eclarative, plus robuste, plus automatis ´ee.

(4)

Trois facettes

On peut distinguer trois facettes du probl`eme: d ´efinir

I un langage de sp ´ecification,

I une technique d’implantation,

I une traduction automatique du premier vers la seconde.

(5)

Introduction

Le langage de sp ´ecification

Techniques d’implantation

Traduction d’une sp ´ecification

Conclusion

(6)

L’existant

On trouve dans la litt ´erature un petit nombre de propositions

d’ajouter aux langages de sp ´ecification alg ´ebriques une notion de nom et une construction, dite abstraction, permettant la liaison.

L’abstraction prend en g ´en ´eral la forme haie, ou ha1, . . . , anie, ou bien, comme en Fresh Objective Caml, he1ie2.

Dans tous les cas, l’abstraction est binaire: les noms (ou atomes) a qui apparaissent `a gauche sont li ´es et leur port ´ee est l’expression e qui apparaˆıt `a droite.

(7)

Exemple: le λ-calcul pur

Le λ-calcul pur:

M:=a|M M|λa.M est mod ´elis ´e ainsi en Fresh Objective Caml:

type brand and var = brand name type term =

| EVar of var

| EApp of term ∗ term

| ELam of hvariterm

(8)

Un exemple plus d ´elicat

Ajoutons des d ´efinitions simultan ´ees:

M::=. . .|leta1=M1and . . . andan=Mn inM Les atomes ai sont li ´es, donc, en Fresh Objective Caml, doivent apparaˆıtre dans le membre gauche de l’abstraction. Les termes Mi sont situ ´es hors de la port ´ee lexicale de ces atomes, donc doivent apparaˆıtre hors de l’abstraction:

type term =

| ...

| ELet of term list ∗ hvar listiterm

(9)

Un second exemple d ´elicat

Ajoutons des d ´efinitions r ´ecursives simultan ´ees:

M::=. . .|letreca1=M1and . . . andan =Mn inM Les atomes ai sont li ´es, donc, en Fresh Objective Caml, doivent apparaˆıtre dans le membre gauche de l’abstraction. Les termes Mi sont situ ´es dans la port ´ee lexicale de ces atomes, donc doivent apparaˆıtre dans le membre droit de l’abstraction:

type term =

| ...

| ELetRec ofhvar listi(term list ∗ term)

(10)

Une solution

La racine du probl`eme est l’id ´ee que structure lexicale et structure physique doivent co¨ıncider.

Un sous-terme doit pouvoir ˆetre physiquement rattach ´e `a une

abstraction sans pour autant ˆetre interpr ´et ´e comme contribuant des noms liants ou comme appartenant `a la port ´ee lexicale de

l’abstraction.

(11)

Une solution (suite)

Au sein d’une abstraction, alphaCaml distingue trois types de composants ´el ´ementaires: des noms liants, des expressions situ ´ees dans la port ´ee lexicale de l’abstraction, et des expressions situ ´ees hors de cette port ´ee.

Ces composants sont assembl ´es `a l’aide de sommes et de produits, ce qui donne lieu `a une nouvelle cat ´egorie syntaxique, les motifs.

L’abstraction devient unaire; son contenu est un motif.

(12)

D ´efinition simplifi ´ee du langage

s::=inner|outer Sp ´ecificateurs de port ´ee t::=unit|t×t|t+t|atom|hui Types d’expression u::=unit|u×u|u+u|atom|s t Types de motif e::= ()|(e, e)|injie|a| hpi Expressions p::= ()|(p, p)|injip|a|s e Motifs

Une sp ´ecification alphaCaml est essentiellement la donn ´ee d’une famille de types d’expression et de motif.

(13)

Retour au λ-calcul pur

Le λ-calcul pur est mod ´elis ´e ainsi en alphaCaml:

sort var type term =

| EVar of atom var

| EApp of term ∗ term

| ELam of hlampi type lamp binds var =

atom var ∗ inner term

(14)

La liaison simultan ´ee, revue et corrig ´ee

Les d ´efinitions simultan ´ees se mod ´elisent maintenant sans difficult ´e:

type term =

| ...

| ELet of hletpi type letp binds var =

binding list ∗ inner term type binding binds var =

atom var ∗ outer term

(15)

Exemples plus avanc ´es

La syntaxe abstraite des motifs d’un langage de programmation proche d’Objective Caml pourrait s’ ´ecrire

type pattern binds var =

| PWildcard

| PVar of atom var

| PRecord of pattern StringMap.t

| PInjection of [ constructor ] ∗ pattern list

| PAnd of pattern ∗ pattern

| POr of pattern ∗ pattern

Lorsqu’une valeur de type pattern apparaˆıt au sein d’une abstraction, tous les noms situ ´es aux feuilles PVar sont consid ´er ´es comme liants.

(16)

Exemples plus avanc ´es (suite)

Le type pattern peut ˆetre utilis ´e par exemple pour d ´efinir une construction “case”:

type term =

| ...

| ECase of term ∗ branch list type branch =

hclausei

type clause binds var = pattern ∗ inner term

(17)

Exemples plus avanc ´es (suite)

Le langage permet la d ´eclaration de multiples sortes d’atomes:

sort typevar type typ =

| TVar of atom typevar

| ...

type term =

| ...

| ETypeAnnotation of term ∗ typ type pattern binds var =

| ...

(18)

Introduction

Le langage de sp ´ecification

Techniques d’implantation

Traduction d’une sp ´ecification

Conclusion

(19)

La technique de de Bruijn

Les noms sont repr ´esent ´es par des entiers interpr ´et ´es de fac¸on relative.

Avantages: l’alpha- ´equivalence co¨ıncide avec l’ ´egalit ´e. Aucun g ´en ´erateur de noms frais n’est n ´ecessaire.

Inconv ´enients: l’interpr ´etation des termes ouverts est relative `a un contexte, ce qui exige de “d ´ecaler” lorsque le contexte change.

D ´ecalages incorrects et oublis de d ´ecaler sont possibles, ce qui rend l’approche fragile.

(20)

La technique standard

Les noms sont repr ´esent ´es par des atomes disposant en principe uniquement d’une notion d’ ´egalit ´e. Ceux-ci peuvent ˆetre repr ´esent ´es par des entiers, interpr ´et ´es alors de fac¸on absolue.

Avantage: l’interpr ´etation des termes ouverts n’est plus relative `a un contexte, donc on ne “d ´ecale” plus.

Inconv ´enient: les abstractions doivent ˆetre “rafraˆıchies” `a l’ouverture, ce qui exige un g ´en ´erateur de noms frais.

(21)

Mon choix

alphaCaml adopte la technique standard.

Les atomes sont repr ´esent ´es par des paires d’un entier et d’un nom, lequel ne d ´efinit pas l’identit ´e de l’atome mais sert de suggestion pour l’affichage. Les ensembles d’atomes et les renommages sont repr ´esent ´es par des arbres de Patricia.

Les renommages sont suspendus et compos ´es aux abstractions, ce qui permet des parcours d’arbre en temps lin ´eaire.

Bien que le g ´en ´erateur ait un ´etat modifiable, on peut sans risque s ´erialiser et d ´es ´erialiser des termes clos.

(22)

Introduction

Le langage de sp ´ecification

Techniques d’implantation

Traduction d’une sp ´ecification

Conclusion

(23)

Un traducteur ind ´ependant

alphaCaml se pr ´esente comme la combinaison d’un outil ind ´ependant et d’une librairie.

A titre de comparaison, Fresh Objective Caml est une extension` d’Objective Caml, tandis que FreshLib est une simple librairie Haskell.

(24)

Que produit alphaCaml?

alphaCaml produit deux versions des d ´efinitions de types, ainsi qu’un ensemble d’op ´erations.

La version brute des d ´efinitions de types sert en principe lors de l’analyse syntaxique et lors de l’affichage.

La version interne sert `a toutes les op ´erations exigeant le respect de la liaison lexicale.

(25)

Types bruts

La sp ´ecification du λ-calcul pur est traduite ainsi en types bruts:

type var = Identifier . t type term =

| EVar of var

| EApp of term ∗ term

| ELam of lamp and lamp =

var ∗ term

Noms et abstractions sont concrets.

(26)

Types internes

La sp ´ecification du λ-calcul pur est traduite ainsi en types internes:

type var = Var.Atom.t type term =

| EVar of var

| EApp of term ∗ term

| ELam of opaque lamp and lamp =

var ∗ term and opaque lamp

(27)

Import/export

Le code de conversion entre formes brute et interne est engendr ´e automatiquement:

val import term : var Identifier . Map.t → Raw.term →term val export term : Var . AtomIdMap.t →term →Raw.term Un environnement associant identificateurs et atomes doit ˆetre fourni. Il est vide si le terme est clos.

(28)

Emploi des abstractions

L’ouverture d’une abstraction implique son rafraˆıchissement:

val open lamp : opaque lamp →lamp val create lamp : lamp →opaque lamp

Ceci impose le respect de la “convention de Barendregt”.

(29)

Et d’autres plaques de bouilloire...

alphaCaml engendre des fonctions permettant de

I calculer l’ensemble des noms libres d’une expression,

I calculer l’ensemble des noms libres ou liants d’un motif,

I appliquer une substitution `a un motif ou expression.

Il engendre ´egalement des classes Objective Caml permettant de d ´efinir ais ´ement des transformations ou parcours de termes. Grˆace `a quoi, un client peut ensuite d ´efinir la substitution sans capture en moins de dix lignes...

(30)

Substitution sans capture

Voici comment un client d ´efinit la substitution sans capture:

class typeSubst (subst : type expr Type var . AtomMap.t) = object inherit map

method tvar tyX = try

Type var . AtomMap.lookup tyX subst with Not found →

TVar tyX end

let typeSubst subst tyT =

(new typeSubst subst)#type expr tyT

(31)

Introduction

Le langage de sp ´ecification

Techniques d’implantation

Traduction d’une sp ´ecification

Conclusion

(32)

Situation actuelle

alphaCaml est disponible. Tr`es peu d’utilisateurs se sont manifest ´es jusqu’ici.

La distribution comprend deux d ´emos:

I un typeur et ´evaluateur na¨ıf pour F

I un ´evaluateur na¨ıf pour un calcul de mixins (Hirschowitz et al.) Cette exp ´erience limit ´ee est encourageante.

(33)

Limitations

La n ´ecessit ´e de passer par les fonctions open pour examiner le contenu des abstractions empˆeche le filtrage en profondeur.

Comme en Fresh Objective Caml, le client peut ´ecrire du code d ´enu ´e de sens, par exemple une fonction qui renvoie l’ensemble des variables li ´ees d’une expression.

(34)

Vers alpha-(ici-votre-prouveur-favori)?

Pitts, Urban et Tasson, et d’autres s’int ´eressent `a la traduction d’un langage de sp ´ecification de haut niveau, similaire `a celui d’alphaCaml, en th ´eor`emes et preuves. L’id ´ee est de produire et prouver automatiquement les principes de r ´ecursion et d’induction modulo alpha- ´equivalence correspondant `a la sp ´ecification.

Le langage cible ´etant plus expressif, on peut ˆetre plus ambitieux et esp ´erer interdire la fuite de noms frais. On doit probablement mˆeme le faire pour obtenir des principes coh ´erents et pour ´eviter le recours

`a un g ´en ´erateur de noms frais.

Références

Documents relatifs

Les concentrations d'As dans les macrophytes en fonction des saisons sont représentées dans la figure 11.36. Figure II.36: Moyennes et erreurs sur la moyenne des

The logic G that we have described in this paper provides a framework for intuitionistic reasoning that is characterized by its use of typed λ-terms for representing objects, of

En rempla¸cant les fr´ equences (resp. les effectifs) par les fr´ equences cumul´ ees (resp. les effectifs cumul´ es) on obtient le diagramme en bˆ atons et le polygone des

Ecrire le mod` ´ ele d’analyse de la variance relatif au mod` ele dont les r´ esultats sont reproduits dans la suite.. On pr´ ecisera la nature des facteurs explicatifs ainsi que

NATURE ORDINAIRE EN BIOLOGIE DE LA CONSERVATION ... I MPACT HUMAIN SUR LA BIOSPHERE ET CRISE DE LA BIODIVERSITE ... L’ EMERGENCE DE LA BIOLOGIE DE LA CONSERVATION ... L ES LIMITES DE

[r]

la matrice A h garde la mˆeme expression, except´e pour les trois premi`eres lignes qui sont remplies de z´eros avec des un sur la diagonale. La cinqui`eme ligne ne

[r]