Existe-t-il une différence entre et ?

11

J'apprends actuellement le calcul lambda et je me posais des questions sur les deux différents types d'écriture d'un terme lambda.

  1. λxy.xy
  2. λx.λy.xy

Y a-t-il une différence de sens ou de manière d'appliquer la réduction bêta, ou s'agit-il simplement de deux façons d'exprimer la même chose?

Surtout cette définition de la création de paires m'a fait me demander:

paire =λxy.λp.pxy

magnétique
la source

Réponses:

15

Ce ne sont que des différences de notations. λxyz.t est court pour λx.λy.λz.t . Pas de magie ici.

En effet, mais vous avez tendance à souligner que est une fonction en changeant la façon dont vous écrivez la définition. Mais c'est vraiment pareil.pair=λxyp.pxypairtuλp.ptu

jmad
la source
17

Le premier est une abréviation pour le second. C'est une convention syntaxique courante pour raccourcir les expressions.

D'un autre côté, si vous avez des tuples dans la langue, il y a une différence entre

  1. λx.λy.xy et
  2. λ(x,y).xy .

Dans le premier cas, je peux fournir un seul argument à la fonction et transmettre la fonction résultante à d'autres fonctions. Dans ce dernier cas, les deux arguments doivent être fournis en même temps. Il existe bien sûr une fonction qui peut être appliquée pour convertir 1 en 2 et vice versa. Ce processus est appelé (dé) curry .

La définition de vous mentionnez est un encodage de la notion de paires dans le -calculus, plutôt que des paires en tant que type de données primitif (comme je l'ai laissé entendre ci-dessus).pairλ

Dave Clarke
la source
2

La transformation d'une fonction qui prend plusieurs arguments en une chaîne de fonctions avec des arguments uniques est appelée currying . Les deux fonctions sont essentiellement les mêmes.

Article Wikipédia sur le curry

Ghassen Hamrouni
la source
8
Il n'y a rien de tel qu'une fonction prenant plusieurs arguments dans le calcul lambda. est exactement le même que , pas seulement fondamentalement la même chose. λxy.xyλx.λy.xy
sepp2k