• Aucun résultat trouvé

Fondements de la programmation Exercices 9 et 10 lambda-calcul

N/A
N/A
Protected

Academic year: 2022

Partager "Fondements de la programmation Exercices 9 et 10 lambda-calcul"

Copied!
2
0
0

Texte intégral

(1)

Institut Galilée. P. Boudes, J. Le Roux et V. Mogbil Master 1 informatique 2015-2016

Fondements de la programmation Exercices 9 et 10 lambda-calcul

Stratégie d’évaluation : appel par valeur.

Nous allons maintenant restreindre la β-réduction de façon à ce qu’elle corresponde à la façon dont les programmes sont évalués dans la plupart des langages de programmation. On distingue un en- semble particulier de termes appelés valeurs au delà desquels on ne (β-)réduit plus. En l’ab- sence d’extensions du lambda-calcul, qui viendront après, les valeurs sont tous les termes qui corres- pondent à une abstraction :

v:=λx.t

Intuitivement, on ne réduit pas dans le corps des fonctions tant qu’elles ne sont pas complètement appliquées.

On se donne ensuite des règles d’évaluation qui déterminent exactement l’ordre dans lequel il faut faire les réductions dans un terme.

(λx.t1 v2)→t1[x:=v2] t1→t01

(t1t2)→(t01 t2)

t2 →t02 (v1 t2)→(v1 t02) Le point important dans cet ensemble de règles est qu’il n’y a pas de règle qui permette de réduire sous une abstraction.

Nous reviendrons plus en détails sur les diffé- rentes stratégies d’évaluation possibles.

Unicité du typage.Nous utilisons désormais une version du lambda-calcul simplement typé où chaque variable liée par un lambda est annotée par un type, comme ceci :λx[T].t, de telle sorte queT soit le type associé à la variable x au moment du jugement de typage :

Γ, x:A`t:B Γ`λx[A].t:A→B abs.

De cette façon, étant donné un contexte de typage Γ, et un terme t ainsi annoté il existe au plus un type T tel que Γ`t:T.

Nous allons maintenant donner des exten- sions du lambda-calcul simplement typé de façon à en faire un langage de programmation, Turing-complet et ayant les caractéristiques d’un langage de type ML (les langages ML comme SML, CAML sont inspirés des extensions du lambda- calcul et en particulier du langage PCF,program- ming computable functions).

Unit. On ajoute une valeur unit de type, Unit.

t:=. . .|unit v:=. . .|unit T :=. . .|Unit

Γ`unit:Unit

Ceci nous permet d’introduire uneforme dérivée : t1;t2

def= (λx[Unit].t2 t1) (x /∈F V(t2)).

Cette mise en séquence, t1;t2 a pour effet d’éva- luer t1, de jeter son résultat, puis d’évaluer t2. Les règles d’évaluation et de typage induites sur la forme sont :

t1 →t01

t1;t2 →t01;t2 unit;t2→t2

Γ`t1 :Unit Γ`t2:T2

Γ`t1;t2 :T2

Let in. On peut également se donner la forme syntaxiquelet in

t:=. . .|let x=t in t let x=v1 in t2 →t2[x:=v1]

t1 →t01

let x=t1 in →let x=t01 in t2

Γ`t1:T1 Γ, x:T1`t2:T2

Γ`let x=t1 in t2 :T2

Au premier abord, cette forme let x = t1 in t2 est juste du sucre syntaxique pour (λx[T1].t2 t1). Pourdésugariser il faudra toutefois trouver l’annotation de type pour λx, donc faire l’inférence de type avant.

Combinateur de point fixe. Pour chaque type T1 on se donne un opérateur sur les termes 1

(2)

Institut Galilée. P. Boudes, J. Le Roux et V. Mogbil Master 1 informatique 2015-2016

fix tel que :

t:=. . .|(fix t)

(fix λx[T1].t2)→t2[x:= (fix λx[T1].t2)]

t1 →t01 fix t1 →fix t01 Γ`t1 :T1 →T1 Γ`(fix t1) :T1

Forme dérivée :

letrec x=t1 in t2

def= let x= (fix λx[T1].t1) in t2

On peut construire des types de données com-

posées, le plus simple d’entre eux étant lespaires: t:=. . .| {t, t} |t.1|t.2

v:=. . .| {t, t}

T :=. . .|T1×T2

Règles de réduction des paires : t→t0

i= 1,2

t.i→t0.i

i= 1,2 {v1, v2}.i→vi

t1 →t01 {t1, t2} → {t01, t2}

t2→t02 {v1, t2} → {v1, t02}

Règles de typage des paires : Γ`t1:T1 Γ`t2:T2

Γ` {t1, t2}:T1×T2

Γ`t:T1×T2

Γ`t.i:Ti

1 Exercices

Question A. Typage. Typer les termes suivants en utilisant les extensions appropriées du lambda- calcul.

1. let f =λxy.x in λabc.(f (f a b)c).

2. (λxy.x(yunit) (λz.z));λxy.y 3. (fix λxy.x)

4. letrec f =λghx.(g x(f g h(h x)) (h x)) in (f (λxyz.z) (λz.z)) 5. λx.x.1

6. λxy.{x, y}

1.1 Letrec

Question B. Question de partiel. Dans un letrec qu’est-ce qui s’apparente à du sucre syntaxique (ou une forme dérivée) et qu’est ce qui est une véritable extension du lambda-calcul simplement typé ? Question C. Fonctions récursives. Définir factorielle à l’aide d’un letrec puis supprimer le sucre syntaxique. De même pour la fonction de Fibonacci.

Question D. Récursion. La plupart du temps un letrec sert à définir une fonction, c’est à dire un terme de type T1 → T2, pour un certain T1 et un certain T2. Pouvez-vous trouver une expression définie récursivement et qui soit d’un type autre qu’une flèche ?

1.2 Preuves par induction sur les jugements de typage

Question E. Affaiblissement (importation dans d’autres contextes). Prouver que, en lambda-calcul simplement typé, si Γ`t:T alors pour n’importe quel x6∈F V(t),Γ, x:T0 `t:T.

En déduire que si Γ`t :T alorsΓ, x1 :T1, . . . , xn :Tn `t:T, pour n’importe quelsx1, . . . , xn 6∈

F V(t).

Question F. Substitution (modularité et liaison.) Prouver que si Γ, x: T0 ` t :T et Γ ` t0 :T0, alorsΓ`t[x:=t0] :T.

2

Références

Documents relatifs

Attention, Q n ’ est pas un solveur intervalle (comme c ’ est le cas pour R P [7]) censé résoudre une classe de problèmes bien particulière, mais un langage de programmation

Dans la suite nous définirons les termes du lambda-calcul atomique et ses règles de réduction et nous en établirons les propriétés de base: systèmes de type simple, traduction

Les caractéristiques de ces langages encouragent la programmation fonctionnelle, mais OCaml par exemple, permet aussi la programmation impérative et orientée objet.. Intérêt de

Le λ-calcul est un formalisme introduit par Church pour traduire l'aspect mécanique de l'évaluation dans les langages applicatifs (ou fonctionnels) notamment le traitement de

On a trois zones dans la mémoire: la zone des termes (où sont écrits les λ -termes à exécuter), la zone des environnements et la pile.. Dans la zone des environnements, on a des

Le résultat de la réduction est le corps du redex dans lequel toutes les occurrences de la variable d’entête ont été remplacées par l’argument.. Indice à n’utiliser que si

• sépare les données modifiables (références, tableaux, chaînes de caractères, enregistrements) dans des monades. • les monades peuvent utiliser tous les termes, mais seuls les

Enn, j'ai une pensée pour ma famille, mon père, mes frères, la moyenne Léa et Virginie qui ont compté pour moi bien avant la thèse et qui compteront longtemps