さて、私は Haskell モナドを勉強しています。ウィキブックのカテゴリ理論の記事を読んだとき、モナド射の署名は論理のトートロジーにかなり似ていることがわかりましたが、 に変換する必要がありますM a
。~~A
ここ~
に論理否定があります。
return :: a -> M a -- Map to tautology A => ~~A, double negation introduction
(>>=) :: M a -> (a -> M b) -> M b -- Map to tautology ~~A => (A => ~~B) => ~~B
他の操作もトートロジーです。
fmap :: (a -> b) -> M a -> M b -- Map to (A => B) -> (~~A => ~~B)
join :: M (M a) -> M a -- Map to ~~(~~A) => ~~A
また、通常の関数型言語のカリー・ハワード対応は古典論理ではなく直観論理であるという事実から、対応を持つことができるようなトートロジーを期待できないことも理解されてい~~A => A
ます。
しかし、私は別のことを考えています。モナドが二重否定にしか関係ないのはなぜですか? 単一否定の対応は何ですか? これにより、次のクラス定義にたどり着きました。
class Nomad n where
rfmap :: (a -> b) -> n b -> n a
dneg :: a -> n (n a)
return :: Nomad n => a -> n (n a)
return = dneg
(>>=) :: Nomad n => n (n a) -> (a -> n (n b)) -> n (n b)
x >>= f = rfmap dneg $ rfmap (rfmap f) x
ここで「ノマド」と呼ばれる概念を定義し、2 つの操作をサポートします (どちらも直観的ロジックの論理公理に関連しています)。「rfmap」という名前は、そのシグニチャーが functor の に似ているが、とfmap
の順序が逆になっているという事実を意味することに注意してください。これで、replace to を使用して、Monad 操作を再定義できます。a
b
M a
n (n a)
それでは、質問の部分に行きましょう。モナドが圏論からの概念であるということは、私の「ノマド」も圏論の概念であることを意味しているようです。それで、それは何ですか?それは役に立ちますか?このトピックに関する論文や研究結果はありますか?