Logique en λ-calcul

Une pincée de Curry

Pour Church, la fonctionnelle qui, à deux fonctions a et b, associe la première des deux, est vraie. La fonctionnelle qui, à deux fonctions a et b, associe la seconde, est fausse. On les note respectivement

Mais elles sont peut-être plus faciles à rédiger en CoffeeScript:

L'affichage montre la fonction vrai, compilée en JavaScript. En effet, il s'agit bien d'une fonction...

On a donc besoin d'un affichage plus performant. Pas besoin de Churcher trop loin, l'image du couple ("vrai","faux") par chacune des fonctions donne le résultat affiché. On construit une fonction affichage (qui n'est donc pas une λ-fonction puisqu'elle porte un nom) et il suffit de l'invoquer pour afficher un booléen de Church:

La curryfication consiste à écrire une fonctionnelle portant sur deux fonctions, en une fonctionnelle de fonctionnelle:

Du coup les notations deviennent, dans l'ordre

Négation

La seule fonction booléenne portant sur une seule variable (à part l'identité) est la négation, définie pour une proposition p par λpab.p b a ou λp.λab.p b a ou λp.λa.λb.p b a. C'est la deuxième version qu'on va adopter ici:

En fait puisqu'une proposition est une fonction des deux variables "vrai" et "faux", sa négation est une fonction des deux mêmes variables mais en inversant leurs positions. Géométriquement, la fonction "vrai" est l'abscisse (première coordonnée d'un point du plan) et la fonction "faux" est l'ordonnée (seconde coordonnée). La négation ayant pour effet d'échanger l'abscisse et l'ordonnée, est la symétrie axiale par rapport à la droite d'équation y=x. Et le tiers exclu correspond au fait que le plan est de dimension 2.

Test

Un booléen étant construit comme une fonction qui choisit entre deux élements, la variante de la négation consistant à ne pas inverser les deux entrées du booléen fait un test. C'est donc la base de la construction d'algorithmes en λ-calcul. Alors que la négation était λp.λa.λb.p b a, le test est λp.λa.λb.p a b. Mais ce n'est pas une opération sur les propositions, on va donc le décurryfier en λpab.p a b plutôt qu'en λp.λab.p a b:

On peut donc choisir entre les deux fonctions cos et sin selon la valeur de vérité de la proposition. Comme dans le λ-calcul, tout est fonction, on peut choisir entre deux fonctions quelconques, et donc, entre deux objets quelconques du λ-calcul.

Opérations logiques

Conjonction

La conjonction, comme toute opération logique (binaire), est une fonctionnelle portant sur deux booléens a et b. On constate que

Autrement dit, a∧b a la valeur de vérité de a si b est vrai et celle de b s'il est faux. On obtient donc cette valeur de vérité en appliquant le booléen b à a et b: λab.b a b qu'on peut curryfier en λa.λb.b a b. Mais ici on utilise la version curryfiée:

Disjonction inclusive

Pour la disjonction, ce sont les tautologies qui sont absorbantes (a∨b est vrai dès que b est vrai) et les antilogies qui sont neutres (a∨b a la même valeur de vérité que a si b est vrai). Donc

Alors la disjonction inclusive s'écrit en λ-calcul λab.b b a:

La curryfication de cette disjonction donne λa.λb.b a b.

Disjonction exclusive

Remarque: Une opération logique étant définie par trois choix de a ou b comme ci-dessus, il y a 23=8 opérations possibles:

λ-expressionOpération
λab.a a apremier terme (a)
λab.a a bOu inclusif
λab.a b aEt
λab.a b bSecond terme (b)
λab.b a aPremier terme
λab.b a bEt
λab.b b aOu inclusif
λab.b b bSecond terme

On constate que cela ne permet pas de définir l'opérateur de Sheffer ni l'implication ni même le "ou exclusif". Mais en rajoutant une négation, on peut définir ce dernier:

Cette expression s'écrit, sans curryfication, λab. a leContraireDe(b) b ou λab. a (b (λc.λd d c) (λc.λd c d)) b

Logique trivalente

Le tiers inclus

Avec la comparaison géométrique ci-dessus, la logique ternaire de Łukasiewicz revient à rajouter une troisième dimension, et la symétrie représentant la négation se fait maintenant par rapport au plan d'équation x=z: