Haskell 中遵守模态公理的有趣运算符

2024-01-02

我只是在看类型map :: (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(M a)

(4) La -> L(L a)

(5) a -> L(M a)

看到一些很好的例子会很有趣。

我想到了一个可能的例子,但最好知道我是否正确:双重否定翻译L as not not and M as not。这个翻译采用了每个公式a其双重否定翻译(a -> ⊥) -> ⊥并且最重要的是,它验证了公理 (1)-(4),但不验证公理 (5)。我在这里问了一个问题https://math.stackexchange.com/questions/2347437/continuations-in-mathematics-nice-examples https://math.stackexchange.com/questions/2347437/continuations-in-mathematics-nice-examples似乎双重否定翻译可以通过延续单子来模拟,endofunctor 采用每个公式a其双重否定翻译(a -> ⊥) -> ⊥。德里克·埃尔金斯 (Derek Elkins) 指出,存在两个双重否定翻译,通过 Curry-Howard 同构,对应于不同的连续传递风格变换,例如柯尔莫哥洛夫变换对应于按名称调用 CPS 变换。

也许可以通过 Haskell 在延续 monad 中完成其他操作,从而验证公理 (1)-(5)。


(只是为了消除一个例子:所谓的宽松逻辑之间存在明显的关系https://www.sciencedirect.com/science/article/pii/S0890540197926274 https://www.sciencedirect.com/science/article/pii/S0890540197926274和 Haskell 中的 Monad,返回操作遵循该逻辑的模态运算符(这是一个 endofunctor)的定律。我对这些例子不太感兴趣,但对 Haskell 运算符的例子不太感兴趣,它们遵守经典正态模态逻辑中模态运算符的一些公理)


初步说明:我很抱歉在这个答案中花了很大一部分时间谈论命题松散逻辑,这是您所关注的主题非常熟悉 https://mathoverflow.net/q/296211/123749就这个问题而言不太感兴趣。无论如何,我确实觉得这个主题值得更广泛的接触——感谢你让我意识到这一点!


命题松弛逻辑 (PLL) 中的模态运算符是 Curry-Howard 的对应项Monad类型构造函数。注意它的公理之间的对应关系......

DT: x -> D x
D4: D (D x) -> D x
DF: (x -> y) -> D x -> D y

...以及类型return, join and fmap, 分别。

Valeria de Paiva 有许多论文讨论了直觉模态逻辑,特别是 PLL。这里关于PLL的言论很大程度上是基于阿莱奇纳et. al., 构造性 S4 模态逻辑的分类语义和 Kripke 语义 (2001) https://www.cs.bham.ac.uk/~exr/papers/csl01.pdf。有趣的是,该论文论证了 PLL 并不像乍看起来那么奇怪(参见 2017 年)。费尔特洛和门德勒,命题逻辑不严 (1997) https://www.uni-bamberg.de/fileadmin/uni/fakultaeten/wiai_professuren/grundlagen_informatik/papersMM/pll.pdf:“作为模态逻辑,它很特别,因为它具有单个模态运算符 [...],既有可能性又有必然性”)。从 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 -> B x对其造成B变得微不足道(或者,用哈斯克尔的说法,Identity),将逻辑简化为 PLL。既然如此,PLL 可以被视为直觉 S4 变体的一个特例。此外,它还构建了 PLLD作为类似可能性的运算符。如果我们采用D作为 Haskell 的对应物Monads,通常确实有可能的味道(考虑Maybe Integer——“可能有一个Integer在这里”——或者IO Integer--“我会得到一个Integer当程序执行时”)。


其他一些可能性:

  • 乍一看,这似乎是对称的动作D微不足道的事情让我们得到了非常类似的东西ComonadApply。我说“非常喜欢”主要是因为 Haskell 的函数强度Functor是,问题是x /\ B y -> B (x /\ y)如果您正在寻找传统的必需品模式,那么这是一件尴尬的事情。

  • 肯尼思·福纳的Function Pearl:快速修复 Comonad https://github.com/kwf/GQFC(感谢 dfeuer 的参考)致力于在 Haskell 中表达直观的 K4,涵盖了沿途的一些困难(包括上面提到的函数强度问题)。

  • 马特·帕森斯分布式模态逻辑 https://github.com/parsonsmatt/modalities提供了 intuitionistc S5 的面向 Haskell 的演示以及对它的解释,最初由 Tom Murphy VII 在分布式计算方面进行:B x as a x-生成可以在网络上任何地方运行的计算,以及D x作为地址x在它的某个地方。

  • 时序逻辑可以通过 Curry-Howard 与函数反应式编程 (FRP) 联系起来。出发点的建议包括德派瓦和伊德斯三世,构造性时态逻辑,绝对 (2017) https://vcvpaiva.github.io/includes/pubs/2017-grisha.pdf, 也菲利普·舒斯特 (Philip Schuster) 的这篇博文 http://haskellexists.blogspot.com/2016/01/frp-for-free.html旁边这个有趣的 /r/haskell 线程关于它 https://www.reddit.com/r/haskell/comments/40x4wf/frp_for_free/.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Haskell 中遵守模态公理的有趣运算符 的相关文章

  • 如何在 Haskell 中使 CAF 不是 CAF?

    如何将常量应用形式变成 而不是常量应用形式 以阻止它在程序的生命周期中保留 我尝试过这种方法 Dummy parameter to avoid creating a CAF twoTrues gt Bool twoTrues map Tru
  • 管道 - 将多个来源/生产者合并为一个

    我正在使用读取文件sourceFile 但我还需要在处理操作中引入随机性 我认为最好的方法是拥有一个这样的制片人 Producer m StdGen ByteString 其中 StdGen 用于生成随机数 我打算让生产者执行 source
  • Haskell数据类型转换问题

    我目前正在学习 Haskell 并且一直在编写一些非常简单的程序来练习 我的程序之一是 import System IO main do putStrLn Give me year y lt getLine let res show cal
  • 使用默认值压缩而不是删除值?

    我正在 haskell 中寻找一个函数来压缩两个长度可能不同的列表 我能找到的所有 zip 函数都只是删除列表中比其他列表长的所有值 例如 在我的练习中 我有两个示例列表 如果第一个比第二个短 我必须用 0 填充 否则我必须使用 1 我不允
  • 在 Haskell 中调试时打印时间戳

    我仍在学习 Haskell 并调试一些函数 并且通常有一个时间戳函数来了解某些操作何时开始和停止 doSomeAction String gt IO doSomeAction arg1 do putStrLn lt lt makeTime
  • Haskell 有 takeUntil 函数吗?

    目前我正在使用 takeWhile x gt x 1 x 89 l 从列表中获取最多为 1 或 89 的元素 但是 结果不包括这些标记值 Haskell 是否有一个标准函数可以提供这种变化takeWhile结果中包含哨兵 到目前为止 我对胡
  • 带有参考的 Haskell 数据类型

    我正在实现 Ukkonen 的算法 该算法要求树的所有叶子都包含对同一整数的引用 并且我在 Haskell 中执行此操作是为了了解有关该语言的更多信息 但是 我很难编写出执行此操作的数据类型 Node has children indexe
  • 将List中的相邻元素放入元组中

    给定一个元素列表 xs a b c d z where a b c等是任意值的占位符 我想实现一个功能adjacents a gt a a 产生 adjacentValues a b b c c d y z 在 Haskell 中 递归定义
  • 如何在Haskell中定义一个允许统一访问不同记录的类?

    我有两条记录 它们都有一个我想要提取以显示的字段 我如何安排事物以便可以使用相同的功能来操纵它们 由于它们有不同的字段 在本例中firstName and buildingName 这是它们的名称字段 它们每个都需要一些 适配器 代码来映射
  • Show for String的实例是怎么写的?

    我有一个关于定义类型类实例的基本问题 我使用 Show 类型类作为示例 并且只考虑类中的 show 函数 像 Bool 这样的具体类型的 Show 实例很简单 instance Show Bool where show x function
  • kind 类型的函子和应用词 (* -> *) -> *

    我遇到了一种情况 我的代码将受益于使用Functor and Applicative 类似抽象 但针对种类类型 gt gt 定义一个更高种类的函子可以通过RankNTypes像这样 class HFunctor f where hfmap
  • 我可以在线性时间内检查有界列表是否包含重复项吗?

    假设我有一个Int列表 其中元素已知是有界的 并且列表已知不长于它们的范围 因此它完全有可能不包含重复项 如何才能最快地测试是否是这种情况 我知道nubOrd https hackage haskell org package contai
  • 在 Haskell 中证明“没有腐败”

    我所在的行业对安全要求很高 我们的软件项目一般都会有安全要求 我们必须证明该软件具有高度确定性 通常这些都是负面的 例如 腐败的频率不得超过 1 我要补充的是 这些要求来自统计系统安全要求 损坏的根源之一显然是编码错误 我想使用 Haske
  • 具有运行时错误的 Foldl 实现

    向你学习 Haskell http learnyouahaskell com higher order functions folds解释foldl1 Foldl1 和 Foldr1 函数的工作方式与 Foldl 和 Foldr 非常相似
  • 运行程序的最佳 Haskell 库是什么? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 如果我要将一个程序投入生产 我需要该程序做几件事才能将其视为 可操作 也就是说 工程师和操作人员以可测量
  • 模式匹配需要圆括号来表示非空列表而不是方括号

    在 Haskell 中 为什么模式匹配期望列表在不为空时有圆括号而不是方括号 当它尝试与空列表 方括号 进行模式匹配时 为什么它不遵循相同的约定 圆括号不应该专门为元组保留吗 例如 下面不起作用 third Integral a gt a
  • 在帖子上生成最近帖子列表时,如何避免依赖循环?

    所以这有效 create archive html do route idRoute compile do posts lt myRecentFirst gitTimes lt lt loadAll posts let archiveCtx
  • 模式匹配中的 Monoid mempty

    我尝试写一个通用的maximum功能类似于Prelude 我的第一个天真的方法如下所示 maximum F Foldable a Ord b gt a b gt Maybe b maximum mempty Nothing maximum
  • Haskell GHC:具有 N 个构造函数的模式匹配的时间复杂度是多少?

    假设我们有以下 Haskell data T T0 T1 T2 TN toInt T gt Int toInt t case t of T0 gt 0 T1 gt 1 T2 gt 2 TN gt N 这里使用什么算法来执行模式匹配 我看到两
  • 结构上强制的自由替代,没有左派分配性

    有一个不错的免费替代品 http hackage haskell org package free 4 12 4 docs Control Alternative Free html在伟大的free包 它将函子提升到左分配替代方案 也就是说

随机推荐

  • 如何找到标签等于字符串变量的树视图节点?

    首先 我想感谢所有花时间查看此帖子并尝试提供帮助的人 我在互联网上搜索过 但找不到选择标签文本与字符串变量的文本相同的树视图节点的示例 在 MSDN 上我找到了消息 TVM GETISEARCHSTRING 但我不知道它是否可以用来解决我的
  • Matlab:使用矩阵运算代替for循环

    在 Matlab 中是否可以仅使用矩阵运算来创建 NxN 矩阵 Mat 就像下面的两个 foor 循环所做的那样 Mat zeros N for row 1 N for col 1 N if row 1 1 lt col col lt N
  • SIFT和SURF特征提取使用MATLAB实现

    我正在使用matlab做一个古钱币识别系统 到目前为止我所做的是 转换为灰度 使用高斯滤波器去除噪声 对比度增强 使用 canny 边缘检测器进行边缘检测 现在我想提取特征进行分类 我想选择的特征是圆度 面积 颜色 SIFT 和 SURF
  • Rails attr_accessible 不适用于 :type?

    我尝试在表单中设置单表继承模型类型 所以我有一个属性选择菜单 类型 值是 STI 子类的名称 问题是错误日志不断打印 警告 无法批量分配这些受保护的属性 类型 所以我将 attr accessible type 添加到模型中 class C
  • JVM_FindSignal函数不断分配本机内存

    我部署在 Linux 机器上的 tomcat8 中的 java Web 应用程序一直在泄漏本机内存 我尝试使用 jemalloc 分析来检测泄漏源 如下所述 https github com jeffgriffith native jvm
  • 锁屏下追踪加速度计

    是否可以在锁定屏幕下跟踪加速度计值 我设法编写了一个简单的应用程序 它使用计时器从 1 计数到 100 该计时器触发一个事件 在该事件上我递增计数器 但是 当我为加速度计的 ReadingChanged 事件注册一个处理程序时 一旦屏幕锁定
  • 在 ASP.NET MVC DisplayFor Html Helper 中显示空值“NULL”

    有没有办法获得 Html DisplayFor如果模型项的值为 则在视图中显示 NULL 的值null 以下是我当前正在处理的 详细信息 视图中的某个项目的示例 现在 如果 描述 的值为 不显示任何内容 null div class dis
  • ehcache 持久化到磁盘问题

    我想用 Java 中的 ehcache 做一些我认为应该非常简单的事情 但我已经花了足够的时间让自己对文档感到沮丧 将值写入磁盘持久缓存 关闭 再次启动并读取该值 这是我的 Java 函数 private static void testC
  • Webpack + Express + EJS:错误:找不到模块“。”

    我正在使用 webpack typescript 和 ejs 编写一个 Express Web 应用程序 当点击应该提供 ejs 文件的路由之一时 我收到以下错误 Error Cannot find module at webpackMis
  • ActiveSync 客户端 Java 实现

    我的公司正在开发一个桌面和移动电子邮件客户端项目 该客户端可以通过用户或服务器管理员的最少配置连接到不同的邮件服务器 由于我们想要支持 Microsoft Exchange 因此我们似乎必须在 Java 中实现 ActiveSync 协议
  • 使用电话号码格式 NaN 屏蔽 EditText,就像 PhoneNumberUtils 中一样

    我想让用户在 editText 中输入电话号码 以便每次用户输入号码时动态更改格式 也就是说 当用户输入最多 4 位数字 例如 7144 时 editText 显示 714 4 我希望每当用户输入数字时 editText 就会动态更新为格式
  • HashLocationStrategy 在路由时不生成 # 个位置?

    我正在运行 Angular 2 beta 0 并且正在搞乱路由 这是我所拥有的 应用程序组件 import Component provide from angular2 core import bootstrap from angular
  • 使用 Vue-router 进行 Firebase 身份验证检查

    问题是 vue router 的 beforeEnter 比 main js 中的 beforeCreate 钩子更早触发 并且有第二个延迟 而在重新加载 vuex 操作后将用户设置为状态 这会导致用户被弹回登录页面 如何延迟 vue ro
  • fork后的变量

    这是一个代码 int i 0 pid t pid puts Hello World puts pid fork if pid i 42 printf p n i printf d n i puts 并输出 Hello World 0x7ff
  • 应用程序关闭时如何处理推送负载?

    我正在向我的用户发送包含以下内容的推送负载 aps alert Go To Google sound Default url http www google com 当应用程序在后台运行时 一切顺利 如果我收到推送并且应用程序已关闭 我打开
  • 使用 imread 函数读取 opencv 中的 jpg 文件时是否有任何可能的原因?

    最近在python中使用opencv 正如我注意到的 当我想导入时cv2python中的模块 我需要添加cv2 so使用以下命令手动将文件路径设置为系统路径 sys path append path to cv so 但是 当我想在 ipy
  • 如何正确设置 django-debug-toolbar 的内部 IP

    我第一次编辑setting py文件输入google cloud computing请原谅我这个愚蠢的问题 我想跑django debug toolbar并遵循该教程中的每一步 我想要的是工具栏在 our office only 所以我只是
  • 如何在 Perl 中轻松解析

    我想将网站解析为 Perl 数据结构 首先我加载页面 use LWP Simple my html get http f oo 现在我知道了两种处理方法 首先是正则表达式 其次是模块 我开始阅读有关HTML 解析器 http p3rl or
  • 从 JSON 中选择随机对象[重复]

    这个问题在这里已经有答案了 我有以下代码 getJSON js questions1 json done function data window questionnaire data console log window question
  • Haskell 中遵守模态公理的有趣运算符

    我只是在看类型map a gt b gt a gt b 这个函数的形状让我想知道我们是否可以将列表形成运算符 视为遵守正常模态逻辑 例如 T S4 S5 B 常见的各种公理 因为我们似乎至少有 K 正规模态逻辑公理 其中 a gt b gt