Pourquoi n'y a-t-il pas deux opérateurs dans le calcul Lambda?
-
05-11-2019 - |
Question
De Wikipédia:
$ mathrm {true} = lambda a. lambda b. un $
$ mathrm {false} = lambda a. lambda b. b $Parce que True et False choisissent le premier ou le deuxième paramètre, ils peuvent être combinés pour fournir des opérateurs logiques. Notez qu'il existe deux versions de Not, selon la stratégie d'évaluation choisie.
$ mathrm {et} = lambda p. lambda q. p , q , p $
$ mathrm {ou} = lambda p. lambda q. p , p , q $$ mathrm {pas} _a = lambda p. lambda a. lambda b. p , b , a $ (Ce n'est qu'une mise en œuvre correcte si la stratégie d'évaluation est un ordre applicatif.)
$ mathrm {pas} _n = lambda p. p , ( lambda a. lambda b. b) , ( lambda a. lambda b. a) = lambda p. p , mathrm {false} , mathrm {true} $ (Ce n'est qu'une mise en œuvre correcte si la stratégie d'évaluation est un ordre normal.)
Je sais ce que l'ordre applicatif et l'ordre normal sont (évaluation désireuse par rapport à l'évaluation paresseuse des arguments aux fonctions). Mais je ne comprends pas pourquoi les deux NOT ne fonctionnent pas dans ces deux stratégies d'évaluation.
Pas de solution correcte