«Ordre applicable» et «Ordre normal» dans le lambda-calcul

14

Ordre d'application: Évaluez toujours complètement les arguments d'une fonction avant d'évaluer la fonction elle-même, comme -

(λx.x2(λx.(x+1)  2)))(λx.x2(2+1)) (λx.X2(3)) 32  9

Ordre normal: l'expression serait réduite de l'extérieur vers, comme -

(λX.X2(λX.(X+1) 2)) (λX.(X+1)   2)2 (2+1)2 32  9

SoitM=(λX.y (λX.(X  X) λX.(X  X)))

Pourquoi est-ce que dans l'ordre d'application, boucle infinie, mais dans l'ordre normal, M y ?M
My

URL87
la source
1
Avez-vous essayé de les évaluer? Est-ce le premier ou le deuxième cas qui n'est pas clair?
Karolis Juodelė
@ KarolisJuodelė: 1er
URL87
1
Les expressions lambda ne doivent-elles pas être écrites entre parenthèses pour marquer la fin de la première expression lambda et le début de l'argument, par exemple:Let M = (λx.y) ((λx.(x x)) λx.(x x))
matinalement le

Réponses:

7

est une boucle infinie car λ x . ( x x ) λ x . ( x x ) λ x . ( x x ) λ x . ( x x ) Notez que λ x . ( x(λX.y (λX.(X  X) λX.(X  X)))

λX.(X  X) λX.(X  X)λX.(X  X) λX.(X  X)
écrit simplement son argument deux fois.λX.(X  X)
Karolis Juodelė
la source
15

(KyΩ)KyλX.yyΩ=(λX.(XX)λX.(XX))ΩΩΩ

ΩMMΩMΩ

KyKy(KyΩ)yKyNyN

Ce cas illustre un phénomène plus général: la réduction d'ordre applicatif ne trouve une forme normale que si le terme est fortement normalisant, tandis que la réduction d'ordre normal trouve toujours la forme normale s'il y en a une. Cela se produit parce que l'ordre applicatif évalue toujours entièrement les arguments en premier, et manque ainsi l'opportunité pour un argument de se révéler inutilisé; tandis que l'ordre normal évalue les arguments le plus tard possible et gagne donc toujours si l'argument s'avère inutilisé.

(Le revers est que l'ordre d'application a tendance à être plus rapide dans la pratique, car il est relativement rare qu'un argument ne soit pas utilisé; alors qu'il est courant qu'un argument soit utilisé plusieurs fois, et dans l'ordre d'application, l'argument n'est évalué qu'une seule fois. Normal order évalue l'argument aussi souvent qu'il est utilisé, que ce soit 0, 1 ou plusieurs fois.)

Gilles 'SO- arrête d'être méchant'
la source
KyNNy