我只是看着 map :: (a -> b) -> [a] -> [b]
的类型,只是这个函数的形状让我想知道我们是否可以看到列表形成operator []遵循正常模态逻辑常见的各种公理(例如,T,S4,S5,B),因为我们似乎至少有正常模态逻辑的K-公理, [(a -> b)] -> [a] -> [b]
.
这导致了我的问题:在Haskell中是否有熟悉的,有趣的运算符或函子,它们具有某种模态运算符的语法,并且遵循普通模态逻辑(即K,T,S4,S5和B)常见的公理 . )?
这个问题可以更加清晰,更具体 . 考虑一个运算符 L
,它的双 M
. 现在问题变成:Haskell中是否有任何熟悉的,有趣的运算符,具有以下某些属性:
(1) L(a -> b) -> La -> Lb
(2) La -> a
(3) Ma -> L(M a)
(4) La -> L(L a)
(5) a -> L(M a)
看到一些很好的例子会非常有趣 .
我想到了一个潜在的例子,但是知道我是否正确会很好:双重否定翻译 L
为 not not
和 M
为 not
. 这个翻译将每个公式 a
都用于其双重否定翻译 (a -> ⊥) -> ⊥
,并且,至关重要的是,验证公理(1) - (4),但不是公理(5) . 我在这里问了一个问题https://math.stackexchange.com/questions/2347437/continuations-in-mathematics-nice-examples似乎双重否定翻译可以通过延续monad来模拟,endofunctor将每个公式 a
带到它的双重否定翻译 (a -> ⊥) -> ⊥
. 德里克·埃尔金斯(Derek Elkins)指出存在一些双重否定翻译,通过库里 - 霍华德同构,对应于不同的连续传递风格变换,例如, Kolmogorov对应于按姓名调用的CPS变换 .
也许还有其他操作可以通过Haskell在continuation monad中完成,它可以验证公理(1) - (5) .
(并且只是为了消除一个例子:在Haskell中所谓的Lax逻辑https://www.sciencedirect.com/science/article/pii/S0890540197926274和Monads之间存在明确的关系,返回操作遵循该逻辑的模态运算符的规律(这是一个endofunctor) . 我不感兴趣所以在这些例子中,但在Haskell运算符的例子中,这些运算符遵循经典正态模态逻辑中的模态运算符的一些公理)
1 回答
初步说明:我很抱歉花了大量的答案谈论命题Lax逻辑,这是一个你对这个问题感兴趣的主题并没有太多兴趣 . 无论如何,我觉得这个主题值得更广泛的曝光 - 感谢让我意识到这一点!
命题宽松逻辑(PLL)中的模态运算符是
Monad
类型构造函数的Curry-Howard对应物 . 注意它的公理之间的对应关系............分别是
return
,join
和fmap
的类型 .Valeria de Paiva有很多论文讨论直觉模态逻辑,特别是PLL . 关于PLL的评论主要基于Alechina et. al., Categorical and Kripke Semantics for Constructive S4 Modal Logic (2001) . 有趣的是,该论文使得PLL的情况不像最初看起来那么奇怪(参见Fairtlough and Mendler, Propositional Lax Logic (1997):"As a modal logic it is special because it features a single modal operator [...] that has a flavour both of possibility and necessity") . 从CS4开始,直觉主义S4的一个版本没有分离的可能性......
...并向其添加
x -> B x
会导致B
变得微不足道(或者,在Haskell的说法中,Identity
),简化了PLL的逻辑 . 既然如此,PLL可以被视为直觉主义S4变体的特例 . 此外,它将PLL的D
帧化为类似可能性的运算符 . 如果我们把D
作为HaskellMonad
的对应物,这是直觉上很有吸引力的,这通常有可能的味道(考虑Maybe Integer
- “这里可能有一个Integer
” - 或IO Integer
- “我会得到Integer
当程序执行“) .其他一些可能性:
乍一看,看起来微不足道的对称举动让我们看起来非常像
ComonadApply
. 我说"very much like"很大程度上是由于HaskellFunctor
的编织力量,问题是x /\ B y -> B (x /\ y)
如果你正在寻找传统的必要性模式,那将是一个尴尬的事情 .Kenneth Foner的Functional Pearl: Getting a Quick Fix on Comonads(感谢dfeuer的参考)致力于在Haskell中表达直觉主义的K4,涵盖了一路上的一些困难(包括functorial)上面提到的力量问题) .
Matt Parsons的Distributed Modal Logic提供了一个面向Haskell的直觉主义S5演示及其解释,最初由Tom Murphy VII在分布式计算方面:
B x
作为一个可以在网络上任何地方运行的 生产环境 计算,并且D x
作为x
的地址 .时间逻辑可以通过Curry-Howard与功能反应式编程(FRP)相关联 . 关于起点的建议包括de Paiva and Eades III, Constructive Temporal Logic, Categorically (2017),以及this blog post by Philip Schuster和this interesting /r/haskell thread about it .