Comment Lambda Calculus est-il un type spécifique de système de rédaction de termes?

13

Maintenant , nous pouvons voir que l' église a été associée à la simplement dactylographié Calcul Lambda . En effet, il semble qu'il ait expliqué le calcul lambda simplement tapé afin de réduire les malentendus concernant le calcul lambda.

Maintenant, quand John McCarthy a créé Lisp - il l'a basé sur le Lambda Calculus . C'est de son propre aveu quand il a publié "Les fonctions récursives des expressions symboliques et leur calcul par machine, partie I" . Vous pouvez le lire ici .

Nous savons maintenant qu'au cœur de Mathematica se trouve un système de type Lisp , mais au lieu d'être basé uniquement sur le Lambda Calculus, il est basé sur un système de réécriture de termes .

Ici, l'auteur déclare:

Mathematica est fondamentalement un système de réécriture de termes ... un concept plus général que le Lambda Calculus derrière Lisp.

Il semble que le Lambda Calculus soit une petite partie d'une catégorie beaucoup plus générale. (Assez révélateur en tant que pensée, il s'agissait davantage d'un concept fondamental). J'essaie d'en savoir plus à ce sujet pour avoir une perspective à ce sujet.

Ma question est la suivante: comment Lambda Calculus est-il un type spécifique de système d'écriture de termes?

oeil de faucon
la source

Réponses:

15

La réponse est que cela dépend de ce que vous entendez par Term Rewrite System .

Lors de son introduction, le concept de systèmes de réécriture terminologique, ou TRS, décrivait ce qu'on appelle maintenant des TRS de premier ordre , qui est simplement un ensemble de règles de calcul de la forme

lr

où et sont les termes de premier ordre du formulairelr

t:= x  f(t1,,tn)

où est une variable et est un symbole de fonction tiré d'un ensemble arbitraire mais fixe , appelé signature , qui fixe également un certain nombre d'arguments pour chaque .xfΣfΣ

Il existe quelques restrictions communes imposées aux règles, par exemple mais nous n'avons pas besoin de les approfondir ici.Var(r)Var(l)

Avec cette définition, le calcul lambda habituel, avec la règle : ne peut pas être exprimé, car le constructeur " " lie l'occurrence de dans (l'application est très bien cependant). Une solution possible, et qui est plus ancienne que la théorie des systèmes de réécriture elle-même, consiste à transformer chaque terme en un autre type de terme, qui n'implique pas de liaison.β

(λx.t) ut[u/x]
λxtλ

Une façon est le célèbre calcul combinateur , qui est une règle de réécriture avec la signature et les règles et SKΣ={S, K,app}

app(app(K,x),y)x
app(app(app(S,x),y),z)app(app(x,z),app(y,z))

Il existe un autre encodage plus intuitif qui implique des termes lambda avec des indices de Bruijn et des substitutions explicites, mais je ne vais pas entrer ici.


Malgré les encodages de premier ordre, il est devenu clair que les problèmes techniques avec le comportement de réduction du calcul étaient mieux traités en étendant la notion de TRS pour inclure les constructeurs avec des liants. C'est ce que l'on appelle souvent les systèmes de réécriture d'ordre supérieur . Les termes du formulaire sont maintenant prisλ

t := x(t1,,tn)  f(x11xi11.t1,,x1nxinn.tn)

Où encore , mais maintenant chaque est lié dans . Les signatures doivent spécifier le nombre de variables liées par chaque argument. Nous pouvons maintenant écrire pour le terme représentant . Avec un peu de travail, vous pouvez définir des notions appropriées de substitution.x i j t i a b s ( x . t ) λ x . tfΣxjitiabs(x.t)λx.t

Ici, il y a moins de consensus sur ce qui constitue une règle de réécriture . Un problème est que nous voulons que la réécriture soit décidable, et donc elle doit être décidable si un côté gauche correspond à un terme. Mais cela est généralement considéré comme modulo qui est considéré comme décidable, mais avec seulement des algorithmes extrêmement complexes et lents (et juste est indécidable!).ββηβ

Par conséquent, les côtés gauches sont restreints pour être dans un joli sous-ensemble, souvent les "motifs Miller". Un certain nombre de résultats pour le cas du premier ordre se généralisent, bien qu'il y ait quelques mauvaises surprises.

Il est également courant de prendre simplement des systèmes de premier ordre et d'ajouter simplement et application à la structure de termes, ainsi que des réductions ad hoc et . Cela donne des systèmes plutôt raisonnables, au prix d'une (certaine) généralité.β ηλ βη

Bien sûr, le calcul habituel peut être écrit directement dans ces systèmes. Par exemple, la règle :βλβ

app(abs(x.y(x)),z)y(z)

Nipkow et Prehofer donnent ici un aperçu assez décent des définitions et des résultats de base .

cody
la source