カリーハワード対応

Boolの代わりにEither () ()を使って,論理演算をポイントフリースタイルで定義

Bool Either () () true Left false Right この記事では,上記の対応付けを使って,ポイントフリースタイルで論理演算を定義します。 否定 not の定義 a not a true false false true notを定義するには,ArrowChoiceの(|||)を使います。 not :: Either () (…

curry,(&&&),(|||)の型が,指数法則と対応している

3つの指数法則 指数法則を数式から型に書き換える 数式 型 b -> a Either a b (a, b) この表の通りに指数法則を書き換えると,こうなります。 (a, b) -> c = a -> (b -> c) (a -> b, a -> c) = a -> (b, c) (a -> c, b -> c) = (Either a b -> c) これらは,…