Haskell中遵守模态公理的有趣算子
我只是在看Haskell中遵守模态公理的有趣算子,haskell,modal-logic,Haskell,Modal Logic,我只是在看映射的类型::(a->b)->[a]->[b],这个函数的形状让我想知道,我们是否能看到列表形成操作符[]遵守正常模态逻辑(例如,T,S4,S5,b)的各种公理,因为我们似乎至少有正常模态逻辑的K公理,带有[(a->b)]->[a]->[b] 这就引出了我的问题:Haskell中是否有熟悉的、有趣的运算符或函子,它们具有某种模态运算符的语法,并且遵守普通模态逻辑(即K、T、S4、S5和B)的公理 这个问题可以更尖锐、更具体。考虑一个运算符 L>代码>及其双 m 。现在的问题是:Hask
映射的类型::(a->b)->[a]->[b]
,这个函数的形状让我想知道,我们是否能看到列表形成操作符[]遵守正常模态逻辑(例如,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(Ma)
(4) La->L(La)
(5) a->L(ma)
看到一些好的例子会很有趣
我想到了一个可能的例子,但最好知道我是否正确:用L
asnot
和M
asnot
进行双重否定翻译。此翻译将每个公式a
转换为其双重否定翻译(a->⊥) -> ⊥代码>并且,至关重要的是,验证了公理(1)-(4),但没有验证公理(5)。我在这里问了一个问题,似乎双重否定转换可以通过延续单子来模拟,内函子将每个公式a
转换为其双重否定转换(a->⊥) -> ⊥代码>。Derek Elkins注意到存在两个双否定翻译,通过Curry Howard同构对应于不同的延续传递样式转换,例如Kolmogorov对应于按名称调用CPS转换
也许还有其他操作可以通过Haskell在延续monad中完成,它可以验证公理(1)-(5)
(仅排除一个例子:所谓的Lax逻辑和Haskell中的单子之间有着明确的关系,返回操作遵循该逻辑的模态运算符(即内函子)的定律).我对这些例子不太感兴趣,但对Haskell算子的例子感兴趣,它们遵循经典正规模态逻辑中模态算子的一些公理)初步说明:我很抱歉在回答这个问题时花了大量时间谈论命题松散逻辑,就这个问题而言,你对这个主题并不太感兴趣。无论如何,我觉得这个主题值得更广泛地接触——谢谢你让我意识到这一点
命题lax逻辑(PLL)中的模态算子是Monad类型构造函数的Curry-Howard对应
DT: x -> D x
D4: D (D x) -> D x
DF: (x -> y) -> D x -> D y
…以及返回
、加入
和fmap
的类型
Valeria de Paiva的许多论文讨论了直觉模态逻辑,特别是PLL。这里关于PLL的评论主要基于。有趣的是,这篇论文证明了PLL没有最初看起来那么奇怪(参见:“作为模态逻辑,它是特殊的,因为它具有单一模态运算符[…]从CS4开始,直觉主义S4的一个版本,没有在析取上的可能性分布
B stands for box, and D for diamond
BK: B (x -> y) -> (B x -> B y)
BT: B x -> x
B4: B x -> B (B x)
DK: B (x -> y) -> (D x -> D y)
DT: x -> D x
D4: B (B x) -> B x
…将x->bx
添加到它会导致B
变得微不足道(或者,用哈斯克尔的话说,Identity
),将逻辑简化为PLL。因此,PLL可以被视为直觉S4变体的特例。此外,它将PLL的D
框定为一个类似可能性的运算符。如果我们将D
作为HaskellMonad
s的对应物,这在直觉上是很有吸引力的,后者通常确实具有可能性的味道(考虑可能是整数
——“这里可能有一个整数”
——或者IO整数
——“当程序执行时,我将得到一个整数”)
其他一些可能性:
- 乍一看,使
D
琐碎的对称动作似乎让我们找到了非常像ComonadApply
的东西。我说“非常像”很大程度上是因为Haskell函子
s的函数强度,问题是x/\B y->B(x/\y)
如果您正在寻找一种传统的必要性模式,那么这是一件很尴尬的事情
- Kenneth Foner的(感谢dfeuer的参考)致力于在Haskell中表达直觉K4,涵盖了过程中的一些困难(包括上述功能强度问题)
- 马特·帕森斯(Matt Parsons)的《直觉主义S5》以哈斯凯尔为导向,最初由汤姆·墨菲七世(Tom Murphy VII)从分布式计算的角度对其进行了解释:
Bx
作为x
——产生可以在网络上任何地方运行的计算,以及Dx
作为x
某个地方的地址
- 时态逻辑可以通过Curry Howard与函数式反应式编程(FRP)相关联。关于起点的建议包括,以及
我不知道你的问题是什么,但是[a->b]->[a]->[b]
是[]
的类型,专门用于应用程序的[]
实例。我们有():[a->b]->[a]->[b]
,也有():(e->(a->(b))->(e->(e->a)->b)->(e->b)
这是著名的K组合器。可能只是巧合,他们共享K名称,thoug