Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell中遵守模态公理的有趣算子_Haskell_Modal Logic - Fatal编程技术网

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
as
not
M
as
not
进行双重否定翻译。此翻译将每个公式
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
作为Haskell
Monad
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