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 )
( KyΩ )Kyλ x . yyΩ = ( λ x . ( Xx )λ x . ( xx ) )ΩΩ → Ω
ΩMMΩ → MΩ
KyKy( KyΩ ) → yKyN→ yN
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.)
Let M = (λx.y) ((λx.(x x)) λx.(x x))
Réponses:
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 ) ) )
la source
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.)
la source