On dit souvent queEglise de codage booléen et STLC
tru t f = t
fls t f = f
représentent Vrai et faux dans le sens que « nous pouvons utiliser ces termes pour effectuer l'opération sur le test de la vérité d'une valeur booléenne ». Mais cela cache une mise en garde importante en ce sens que cela ne semble vrai que dans le lambda-calcul non typé. Si je viens de brancher ces valeurs dans haskell, je peux écrire une fonction:
tryMeOnFalse ∷ (∀ t f. t → f → t) → String
tryMeOnFalse tr = "Hi"
a' = tryMeOnFalse tru
b' = tryMeOnFalse fls -- type error !
qui tru distingue et fls au niveau du type. Quelle erreur/vrai serait-il de dire que:
- dans STLC
tru
etfls
sont témoins de niveau de valeur de certains promu'Boolean
genre, qui a des types'True
et'False
- en STLC le (sous la contrainte) typée valeurs et
(fls :: ∀ t . t → t → t)
représentent Vrai et Faux (et typées, bien l'habituel)
Edit: Je me rends compte maintenant grâce à la réponse de Wagner @ Daniel Je pensais second ordre Lambda Calcul et non STLC dans mon questi sur.
Je confondais STLC avec le calcul typé de second ordre, je suppose. lorsque vous définissez 'type Boolean = forall r. r -> r -> r' vous l'utilisez aussi. – nicolas
Le nom typique de "second order typed calculus" est System F, fyi –