• Aucun résultat trouvé

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 ∈Σ

n

et 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

n

de longueur|~t|=

def

n, 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≤n

FV(t

i

) et BV(t) = S

1≤i≤n

BV(t

i

) ,

Si t= t

1

t

2

alors FV(t) = FV(t

1

)∪FV(t

2

) et BV(t) = BV(t

1

)∪BV(t

2

) ,

Si t= λx.t

1

alors 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(σ) =

def

S

{FV(σ(x))| x∈ Dom(σ)} ,

BV(σ) =

def

S

{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| =

def

1 six∈ X

|f(t

1

, . . . , t

n

)| =

def

1+|t

1

|+· · ·+|t

n

| sif ∈Σ

n

|t

1

t

2

| =

def

1+|t

1

|+|t

2

|

|λx.t

1

| =

def

1+|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

1

t

2

=

α

u

1

u

2

sit

1

=

α

u

1

et 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 Λ(Σ) =

def

L(Σ)/=

α

.

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 ∈ Σ

n

et 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]) =

def

Pos(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