1.2 Termes du lambda-calcul et alpha-conversion
Nous introduisons ici les termes duλ-calcul, aussi appelésλ-termes. La syntaxe du λ
-calcul contient un lieur de variable. Afin d’avoir une notion de substitution qui permette
de définir la β-réduction, nous devons identifier les λ-termes qui ne diffèrent que par
le nom de leur variables liées. Cette identification est axiomatisée par la relation d’α
-conversion. L’ensemble des λ-termes est donc un ensemble de termes du premier ordre
quotienté par l’α-conversion.
Définition 1.2.1 (Lambda-termes bruts) Étant donnés une signature Σ et un
en-semble X infini dénombrable et disjoint de Σ, les λ-termes bruts sont les éléments de
l’ensemble L(Σ) décrit par la grammaire suivante :
t, u∈ L(Σ) ::= x | f(t
1, . . . , t
n) | t·u | λx.t
où f ∈Σ
net x∈ X.
L’ensemble L(Σ) des λ-termes bruts est donc un ensemble de termes sur la signature
Σ∪{_·_}∪{λx._| x∈ X}. De ce fait, le symbole d’application _·_ est un symbole
binaire du premier ordre, et on pourrait le considérer comme un symbole de la signature.
Ce n’est pas ce que nous avons choisi de faire dans ce qui suit : il nous semble plus intuitif
de traiter le cas de _·_ séparément des symboles de Σ.
Précisons quelques conventions d’écriture et de vocabulaire. Nous désignonsL(∅)parL
et les termes deLsont ditspurs. Le symbole _·_ d’application est souvent implicite : au
lieu det·u, nous écrivonst uou mêmetulorsque le contexte le permet. Nous adoptons
la convention usuelle que le parenthésage de l’application associe à gauche : (tu)v est
notétuv. Par~tnous désignons une liste de termest
1, . . . , t
nde longueur|~t|=
defn, avec
n∈N.
Remarque 1.2.2 Lesλ-termes bruts étant des termes du premier ordre sur la signature
Σ, ils sont munis de la substitution du premier ordre. Mais cette opération ne voit pas
l’abstraction comme un lieur, et de ce fait ne se préoccupe pas d’éventuelles captures de
variables. Par exemple, on a(λx.y)[y7→x] =λx.x.
Pour que l’abstraction soit considérée comme un lieur, il faut pouvoir identifier les
termes qui ne diffèrent que par renommage de leurs variables liées, comme par exemple
λx.xetλy.y.
Commençons par définir ce que sont les variables libres et liées d’un terme.
Définition 1.2.3 (Variables libres, variables liées) Les ensembles des variables libres
et liées d’un terme t, respectivement notés FV(t) et BV(t), sont définis inductivement
comme suit :
Si t= x∈ X alors FV(t) = {x} et BV(t) = ∅ ,
Si t= f(t
1, . . . , t
n) alors FV(t) = S
1≤i≤nFV(t
i) et BV(t) = S
1≤i≤nBV(t
i) ,
Si t= t
1t
2alors FV(t) = FV(t
1)∪FV(t
2) et BV(t) = BV(t
1)∪BV(t
2) ,
Si t= λx.t
1alors FV(t) = FV(t
1)\ {x} et BV(t) = BV(t
1)∪{x} .
Chapitre 1 Structures de termes
Ces notions sont étendues aux valuationsσ:X →L(Σ) de la façon suivante. On pose
FV(σ) =
defS
{FV(σ(x))| x∈ Dom(σ)} ,
BV(σ) =
defS
{BV(σ(x))| x∈ Dom(σ)} .
Notons queFV(σ) etBV(σ)ne sont pas nécessairement des ensembles disjoints.
Remarque 1.2.4 Il est important de noter que pour toutt∈ L(Σ), les variables de t
sont toutes soit des variables libres, soit des variables liées : V(t) ⊆FV(t)∪BV(t). De
plus,FV(t) ⊆ V(t), mais en général BV(t) 6⊆ V(t) : la variable x est liée dans le terme
λx.tmême si elle n’apparaît pas danst.
Nous pouvons maintenant définir l’α-conversion. Notre définition est inspirée de celle
de Krivine [Kri90]. Elle se fait par induction sur la taille des termes, que l’on définit
comme suit.
Définition 1.2.5 (Taille d’un terme) La taille d’un terme t ∈ L(Σ), notée |t| est
définie inductivement comme suit :
|x| =
def1 six∈ X
|f(t
1, . . . , t
n)| =
def1+|t
1|+· · ·+|t
n| sif ∈Σ
n|t
1t
2| =
def1+|t
1|+|t
2|
|λx.t
1| =
def1+|t
1|
Notons que sizest une variable, alors |t[x7→z]|=|t|.
Définition 1.2.6 (Alpha-conversion) La relation binaire d’α-conversion, notée =
α,
est définie par induction sur la taille des termes comme suit :
x =
αx ,
f(~t) =
αf(~u) si~t=
α~u ,
t
1t
2=
αu
1u
2sit
1=
αu
1et t
2=
αu
2,
λx.t =
αλy.u sit[x7→z] =
αu[y7→z] pour tout z∈ X sauf un nombre fini .
Il est aisé de voir que=
αest une relation d’équivalence sur L(Σ). De plus, pour tout
t, u∈ L(Σ), sit=
αu, alors on aPos(t) =Pos(u).
Remarque 1.2.7 Notre relation d’α-conversion est directement inspirée de celle de
Krivine [Kri90]. Elle est cependant différente, du fait de sa notion de subsitution du
premier ordre. Dans notre cas, la substitution du premier ordre voit les abstractionsλx
comme des symobles algébriquesλx._ et on a (λx.t)[x7→u] =λx.(t[x7→ u]), alors que
dans [Kri90], on a (λx.t)[x7→u] =λx.t.
Exemple 1.2.8 (Termes alpha-convertibles)
(i) On aλx.x=
αλy.y car pour tout z∈ X, on a
1.2 Termes du lambda-calcul et alpha-conversion
(ii) Si z6=x, y, alors on aλx.z=
αλy.z : pour toutz
′∈ X,
z[x7→z
′] = z = z[y7→z
′].
(iii) On aλx.λx.x=
αλx.λy.x. En effet, siy6=xalors pour tout z∈ X \ {x, y} on a
(λx.x)[x7→z] = λx.z =
αλy.z = (λy.x)[x7→z].
Ceci est en désaccord avec l’exemple d’α-conversion donné dans la définition 2.1.11
de [Bar84], ainsi qu’avec celle de [Kri90] (voir aussi la remarque 1.2.7). Nous
re-viendrons sur ce sujet dans les sections 1.5et1.6.
Voici quelques propriétés importantes de=
α. Elles sont prouvées dans [Kri90] dans les
termes purs et s’étendent aisément à notre cas.
Proposition 1.2.9 (Proposition 2, p. 6 dans [Kri90]) Soient t, t
′et ~udes termes,
et ~x une séquence de variables distinctes. Si t=
αt
′et aucune variable libre de ~u n’est
liée dans t, t
′, alors t[~x7→~u] =
αt
′[~x7→~u].
Lemme 1.2.10 (Lemme 6, p. 7 dans [Kri90]) Soit t∈ L(Σ) et Z un ensemble fini
de variables. Il existe un t
′∈ L(Σ) α-équivalent à ttel qu’aucune variable deZ n’est liée
dans t
′.
La proposition 1.2.9 a pour conséquence que =
αpasse au contexte. Le seul cas non
trivial est celui de l’abstraction. Or, si t =
αt
′, alors t[x 7→ z] = t
′[x 7→ z] pour tout
z∈ X \(FV(t)∪FV(t
′)), donc λx.t=
αλx.t
′carFV(t)∪FV(t
′) est fini.
Définition 1.2.11 (Lambda-termes) L’ensemble des λ-termes sur Σ est Λ(Σ) =
defL(Σ)/=
α.
De même que pour les λ-termes bruts, on écrit Λ au lieu deΛ(∅), et les λ-termes de
Λsont dits purs.
Pour toutt∈ L(Σ), soit [t] =
def{t
′∈ L(Σ) | t
′=
αt}. Par définition, chaque terme de
Λ(Σ) peut être écrit [t] pour un t ∈ L(Σ). Cette notation est étendue aux valuations :
[σ]est l’ensemble des valuationsσ
′de même domaine que σet telles queσ(x) =
ασ
′(x)
pour tout x ∈ Dom(σ). Pour les variables x ∈ X nous écrivons x ∈ Λ(Σ) au lieu de
[x]∈Λ(Σ).
Lemme 1.2.12 (Structure des lambda-termes) Définissons les opérations :
— _·_:Λ(Σ)×Λ(Σ)→Λ(Σ) telle que
[t]·[u] = {u
1·u
2| u
1=
αt
1∧ u
2=
αt
2} ,
— pour chaquef ∈Σ
n, f(_, . . . ,_) :Λ(Σ)× · · · ×Λ(Σ)→Λ(Σ) telle que
f([t
1], . . . ,[t
n]) = {f(u
1, . . . , u
n) | u
1=
αt
1∧ . . . ∧ u
n=
αt
n} ,
— pour chaquex∈ X, λx._:Λ(Σ)→Λ(Σ) telle que
Chapitre 1 Structures de termes
On a alors :
(i) [t
1·t
2] = [t
1]·[t
2],
(ii) [f(t
1, . . . , t
n)] =f([t
1], . . . ,[t
n]),
(iii) [λx.t
1] =λx.[t
1].
Preuve. Assurons nous que ces fonctions sont bien définies, c’est à dire qu’elles ne
dépendent pas du choix des représentants des classes d’α-équivalence. C’est trivial pour
les cas(i)et(ii)(transitivité de=
α). Considérons le cas deλx.[t
1]. Soitt
1′=
αt
1, montrons
que λx.[t
1] = λx.[t
1′]. Si λy.u
1∈ λx.[t
1], alors il existe un ensemble fini Z ⊆ X tel que
pour toute variableznon dansZ, on aitu
1[y7→z] =
αt
1[x7→z]. Par la proposition1.2.9,
pour tout z non dans BV(t
1)∪BV(t
1′), on a t
1[x 7→ z] =
αt
1′[x 7→ z]. Il s’en suit que
u
1[y7→z] =
αt
1′[x7→z]pour tout z /∈Z∪BV(t
1)∪BV(t
1′), et donc que λy.u
1∈[λx.t
1′].
Le reste de la preuve est une conséquence directe de la définition1.2.6.
Remarque 1.2.13 Il s’en suit que les termes deΛ(Σ)peuvent être naturellement décrits
par la grammaire suivante :
t, u∈Λ(Σ) ::= x | f(t
1, . . . , t
n) | t·u | λx.t
où f ∈ Σ
net x ∈ X. Les sous-ensembles de Λ(Σ) contenant les termes construits sans
abstractions sont intéressants. Nous montrons dans le théorème 1.4.4 que ce sont des
termes du premier ordre.
Notons que pour tout u∈[t], on a |u|= |t|. De ce fait, on peut étendre la notion de
taille de la définition1.2.5 auxλ-termes modulo α-conversion.
Définition 1.2.14 (Taille d’un lambda-terme) La taille d’un terme[t]∈Λ(Σ), notée
|[t]| est définie par |[t]|=
def|t|.
À cause de l’α-conversion, on ne peut, surΛ(Σ), définir la notion de sous-terme comme
on l’a fait pour les termes du premier ordre en1.1.12.(ii). Le problème vient du fait cette
notion de sous-terme ne commute pas avec l’α-conversion.
Exemple 1.2.15 Sur L(Σ), on aλx.x=
αλy.y, maisλx.x|
1=x6=y=λy.y|
1.
De se fait, un λ-terme t ∈ Λ(Σ) peut avoir plusieurs sous-termes à la position p ∈
Pos(t). Rappelons quePos(u) =Pos(t)pour tout u∈[t].
Définition 1.2.16 (Positions et sous-termes d’un lambda-terme) Soit[t]∈Λ(Σ).
(i) On définit l’ensemble des positions de [t], notéPos([t]), par
Pos([t]) =
defPos(t) .
(ii) On définit l’ensemble des sous-termes de [t]à la position p ∈ Pos([t]), noté [t]|
p,
par
1.3 Substitution sans capture
Dans le document
Définitions par réécriture dans le lambda-calcul : confluence, réductibilité et typage
(Page 37-41)