2014-09-04
4
Le λ-calcul : variable liée et libre
• Variables liées
– Varlié(a) = {}
• si on ne donne pas la définition de a, on fait abstraction des variables que sa
définition peut contenir.
– Varlié(x) = {}
– Varlié(XY)= Varlié(X) U Varlié(Y)
– Varlié ((λ (x) X)= Varlié(X) U {x}
• Variables libres
– une variable non liée est dite libre
• Dans l'expression ((λ (x) x) x), il y a 2 occurences de x mais ce sont
deux variables différentes
– il faut lire ((λ (x1) x1) x)
–x
1est liée
– x est libre
13
Le λ-calcul : un programme
• Un programme est un λ-terme.
Pour simplifier l’écriture, on crée souvent plusieurs définitions
• L’exécution d’un programme est une séquence de réduction
–X Y signifie que X a été réduit à Y
– l’exécution s’arrête lorsqu’il n’y a plus d’applications qui peuvent être
réduites (aucune substitution non triviale peut être appliquée).
–le λ-terme résultant est dit dans la forme normale de X
• L’opération primitive permettant la réduction est la substitution
– On dit alors souvent évaluation par substitution
– Comme on fait avec un éditeur des copy-paste pour effectuer une
substitution, alors j’associe souvent la substitution au copy-paste.
– Vous serez étonné de la puissance de calcul du copy-paste.
14
Le λ-calcul : α-conversion
•α-conversion
– deux λ-termes sont équivalents s’il est possible de les rendre identiques
après avoir renommer les variables liées dans une expression par une
autre qui n’est pas libre dans cette expression
– si y n’est pas libre dans M alors λ(x)M αλ(y)M et λ(x)M αλ(y)M
– on renomme que les variables x qui sont liés par un λ
–Exemple
•(λ(x)((λ(y)y) x)) α(λ(y)((λ(y)y) y)) est correcte parce que y n’est pas libre
dans ((λ(y)y) x). Plus précisément en dépit du même nom, nous avons deux
variables y différentes.
• inutile cependant de jouer avec le feux
15
Le λ-calcul : substitution
• Substitution notée T[x := U]
– la substitution dans T de la variable x par U et se définit par récurrence
sur T :
1. si T est une constante alors T[x := U]=T
2. si T=x alors T[x := U]=U
3. si T≠x et T est une variable alors T[x := U]=T
4. si T = V W alors T[x := U] = V[x := U] W[x := U]
5. si T = λ(y)V et y≠x et y est non libre dans U alors T[x := U] = λ(y)(V[x := U])
6. si T = λ(y)V et y≠x et y est libre dans U alors T[x := U] = λ(z)((V[y:=z])[x := U])
7. si T = λ(y)V et x=y alors T[x := U] = T
• #6 consiste à utiliser l’ α-conversion avant d’appliquer 5. L’ α-conversion est
nécessaire parce que le résultat d’une substitution ne doit pas entrainer de
confusion entre deux variables qui portent le même nom. Cette confusion
entraîne la capture d’une variable libre y dans U par le λ(y)
• La substitution est l’opération d’évaluation primitive
16