Es wird oft gesagt, dassKirche Codierung von boolean und STLC
tru t f = t
fls t f = f
Wahr und Falsch in dem Sinne darstellen, dass „wir diese Begriffe verwenden können, um die Prüfung der Wahrheit eines Booleschen Wert, den Vorgang auszuführen“.
Aber das verbirgt eine wichtige Einschränkung darin, dass es nur in der untypisierten Lambda-Kalkül wahr scheint. Wenn ich diese Werte in Haskell einfach anschließen, kann ich eine Funktion schreiben:
tryMeOnFalse ∷ (∀ t f. t → f → t) → String
tryMeOnFalse tr = "Hi"
a' = tryMeOnFalse tru
b' = tryMeOnFalse fls -- type error !
die tru und fls auf der Typebene unterscheidet. Wie falsch/wahr wäre es, das zu sagen:
- in STLC
tru
undfls
Wert Ebene Zeuge einiger gefördert'Boolean
Art sind, die Typen'True
und'False
- in STLC der (erzwungenen) eingegeben Werte hat und
(fls :: ∀ t . t → t → t)
repräsentieren Wahr und Falsch (und in nicht typisiert, auch die übliche)
Edit: ich weiß jetzt, dank @ Daniel Wagner Antwort ich dachte an zweiter Ordnung Lambda-Kalkül und nicht sTLC in meinem questi auf.
Ich war STLC mit zweiter Ordnung typisierten Kalkül verwirren, denke ich. wenn Sie 'type Boolean = forall r definieren. r -> r -> r' Sie verwenden es auch. – nicolas
Der typische Name für "Kalkulation zweiter Ordnung" ist System F, fyi –