那么:有什么意义呢?

2023-12-22

其预期目的是什么So https://github.com/idris-lang/Idris-dev/blob/master/libs/base/Data/So.idr#L14类型?音译为阿格达:

data So : Bool → Set where
  oh : So true

So将布尔命题提升为逻辑命题。 Oury 和 Swierstra 的介绍性论文圆周率的力量 http://cs.ru.nl/~wouters/Publications/ThePowerOfPi.pdf给出了由表的列索引的关系代数的示例.求两个表的乘积要求它们具有不同的列,为此它们使用So:

Schema = List (String × U)  -- U is the universe of SQL types

-- false iff the schemas share any column names
disjoint : Schema -> Schema -> Bool
disjoint = ...

data RA : Schema → Set where
  -- ...
  Product : ∀ {s s'} → {So (disjoint s s')} → RA s → RA s' → RA (append s s')

我习惯于为我想要证明的关于我的程序的事情构建证据术语。构建逻辑关系似乎更自然Schemas 确保不相交:

Disjoint : Rel Schema _
Disjoint s s' = All (λ x -> x ∉ cols s) (cols s')
  where cols = map proj₁

So与“正确的”证明术语相比,似乎有严重的缺点:模式匹配oh没有给你任何可以用来进行另一个术语类型检查的信息(是吗?) - 这意味着So价值观不能有效地参与交互式证明。将此与计算有用性进行对比Disjoint,它表示为证明列表,其中的每一列s'没有出现在s.

我真的不相信该规范So (disjoint s s')写起来比Disjoint s s'- 你必须定义布尔值disjoint无需类型检查器的帮助即可运行 - 并且在任何情况下Disjoint当你想操纵其中包含的证据时,就会付出代价。

我也怀疑So当您构建一个Product。为了给出一个值So (disjoint s s'),你仍然需要进行足够的模式匹配s and s'为了让类型检查器知道它们实际上是不相交的。丢弃由此产生的证据似乎是一种浪费。

So对于部署它的代码的作者和用户来说似乎都很笨拙。 '那么',在什么情况下我想使用So?


如果您已经有b : Bool,你可以把它变成命题:So b,比b ≡ true。有时(我不记得任何实际情况)不需要考虑正确的数据类型,这种快速解决方案就足够了。

So与“适当的”相比似乎有严重的缺点 证明术语:模式匹配oh没有给你任何信息 您可以用它进行另一个术语类型检查。作为推论,So价值观不能有效地参与交互式证明。 将此与计算有用性进行对比Disjoint, 哪个 表示为证明列表,其中的每一列s'不 出现在s.

So确实为您提供了相同的信息Disjoint- 你只需要提取它。基本上,如果两者之间没有不一致的话disjoint and Disjoint,那么你应该能够编写一个函数So (disjoint s) -> Disjoint s使用模式匹配、递归和不可能情况消除。

然而,如果你稍微调整一下定义:

So : Bool -> Set
So true  = ⊤
So false = ⊥

So成为一种非常有用的数据类型,因为x : So true立即减少到tt由于 eta 规则。这允许使用So就像一个约束:在伪 Haskell 中我们可以写

forall n. (n <=? 3) => Vec A n

and if n是规范形式(即suc (suc (suc ... zero))), then n <=? 3可以由编译器检查,不需要证明。实际上 Agda 是

∀ {n} {_ : n <=? 3} -> Vec A n

我用了这个技巧this https://stackoverflow.com/a/28589398/3237465答案(这是{_ : False (m ≟ 0)}那里)。我想编写所描述的机器的可用版本是不可能的here https://stackoverflow.com/a/31105948/3237465没有这个简单的定义:

Is-just : ∀ {α} {A : Set α} -> Maybe A -> Set
Is-just = T ∘ isJust

where T is So在 Agda 的标准库中。

此外,在存在实例参数的情况下So-as-a-data-type 可以用作So作为约束:

open import Data.Bool.Base
open import Data.Nat.Base
open import Data.Vec

data So : Bool -> Set where
  oh : So true

instance
  oh-instance : So true
  oh-instance = oh

_<=_ : ℕ -> ℕ -> Bool
0     <= m     = true
suc n <= 0     = false
suc n <= suc m = n <= m

vec : ∀ {n} {{_ : So (n <= 3)}} -> Vec ℕ n
vec = replicate 0

ok : Vec ℕ 2
ok = vec

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

那么:有什么意义呢? 的相关文章

  • 卷积函数可以写成尾递归形式吗?

    我有一个函数 我想以尾递归形式编写 该函数计算求和的方法数k通过滚动s双面模具n次 我已经在上面看到了这个函数的数学解这个答案 https math stackexchange com questions 397689 why convol
  • 函数式语言中的部分求值和函数内联有什么区别?

    我知道 函数内联就是用函数定义代替函数调用 部分评估是在编译时评估程序的已知 静态 部分 在 C 等命令式语言中 两者之间存在区别 其中运算符与函数不同 但是 在像 Haskell 这样的函数式语言 其中运算符也是函数 中 两者之间有什么区
  • F# 中的动态编程

    实现解决问题的动态规划算法的最优雅的方法是什么子问题重叠的问题 http en wikipedia org wiki Overlapping subproblem 在命令式编程中 人们通常会创建一个按问题大小索引的数组 至少在一维 然后算法
  • 忽略 Racket 中的多个返回值

    在 Racket 中 可以通过执行以下操作从函数返回多个值 define foo values 1 2 3 然后我们可以通过这样做来绑定它们 define values one two three foo Now one一定会1 two t
  • 返回带有参数的函数的函数

    创建一个应返回包含原始函数参数的函数时 我应该如何处理 例如考虑这个函数 a lt function value function x x value 我希望它返回我在结果函数的参数中指定的值 如下所示 b lt a 3 gt b gt f
  • 使用 elm 高阶函数处理键盘事件

    我正在尝试创建一个高阶函数来创建仅捕获特定关键代码的函数 该代码的灵感来自 EvanonEnter来自他的 todomvc 实现的函数 仅捕获 Enter 函数 onKeyCode Int gt Msg gt Attribute Msg o
  • 如何使用 FS2 中的分类器函数对对象进行分组?

    我有一个无序的流measurements 我想将其分组为固定大小的批次 以便以后可以有效地保留它们 val measurements for id lt Seq foo bar baz value lt 1 to 5 yield id va
  • 什么是 ZIO 错误通道以及如何了解要放入其中的内容?

    ZIO https zio dev https zio dev 是一个 scala 框架 其核心是ZIO R E A 数据结构及其站点给出了三个参数的以下信息 ZIO The ZIO R E A 数据类型具有三个类型参数 R 环境类型 该效
  • 使用 Either 处理 Scala 代码中的故障

    Optionmonad 是 Scala 中处理有或无事物的一种很好的表达方式 但是 如果在 什么也没发生 时需要记录一条消息怎么办 根据 Scala API 文档 Either 类型通常用作 scala Option where Left
  • Haskell 单例:我们可以通过 SNat 获得什么

    我正在尝试使用 Haskell 单例 在论文中使用单例进行依赖类型编程 http cs brynmawr edu rae papers 2012 singletons paper pdf并在他的博客文章中单例 v0 9 发布 https t
  • 何时使用接口,何时使用高阶函数?

    给定一个具有以下层的 ASP NET MVC 应用程序 UI 视图 CSS Javascript 等 控制器 服务 包含业务逻辑和数据访问 没有单独的数据访问层的原因是我正在使用 SQL 类型提供程序 以下代码可能不起作用 因为它只是原始草
  • 存在函数依赖关系时类型推断如何工作

    考虑下面的代码 LANGUAGE MultiParamTypeClasses FlexibleInstances FunctionalDependencies UndecidableInstances FlexibleContexts cl
  • 如何在不进行尾调用优化的情况下用函数式编程替代方案替换 while 循环?

    我正在 JavaScript 中尝试一种更实用的风格 因此 我用诸如map和reduce之类的实用函数替换了for循环 然而 我还没有找到 while 循环的功能替代品 因为尾部调用优化通常不适用于 JavaScript 据我了解 ES6
  • 为什么解析器组合器“seq”用“bind”和“return”定义?

    我正在读这个article http eprints nottingham ac uk 237 1 monparsing pdf关于解析器组合器并且不理解以下内容 他们说使用seq 见下文 导致解析器将嵌套元组作为结果 操作起来很混乱 se
  • 如何在 F# 中执行 Seq.takeWhile + 一项

    我想编写一个使用谓词过滤序列的函数 但结果还应该包括谓词返回 false 的第一个项目 如果 F 中有一个break关键字 逻辑将是这样的 let myFilter predicate s seq for item in s do yiel
  • 为什么在 Scala 中函数类型需要以单独的参数组传递到函数中

    我是 scala 新手 我用两种方式编写了相同的代码 但我对两种方式有点困惑 在第二种方式中 f 的参数类型是自动派生的 但在 type1 中 scala 编译器无法执行相同的操作 我只是想了解这背后的想法是什么 Type1 给出编译错误
  • 列表推导式和 for 循环中的 Lambda 表达式[重复]

    这个问题在这里已经有答案了 我想要一个 lambda 列表 作为一些繁重计算的缓存 并注意到这一点 gt gt gt j for j in lambda i for i in range 10 9 9 9 9 9 9 9 9 9 9 Alt
  • 伊德里斯统一意外失败

    我正在尝试在 Idris 中创建一个所谓的可判定解析器 起初我只是想解析自然数 但遇到了一个意想不到的问题 生成它的代码的最小示例如下 data Digit Char gt Type where Zero Digit 0 One Digit
  • F# 开发和单元测试? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我刚刚开始使用 F 这是我的第一种函数式语言 我一直在准专门使用 C 工作 并且非常喜欢 F 引导我重新思考如何编写代码 我觉得有点迷失方向的一
  • 在 Vavr 中结合任一者?

    我有几个Vavr https www vavr io Either https www vavr io vavr docs either的 我想调用一个函数Right每个 Either 的值 例如 Either

随机推荐

  • 如何在flutter中使用运行时下载的本地化arb/json文件?

    我读了很多关于 flutter 本地化的教程和博客 他们使用 arb json 文件从 asset 文件夹或 l10n 文件夹进行本地化 那是固定的语言列表 意味着如果我使用英语本地化 现在在运行时我想向用户提供西班牙语 中文 意大利语 法
  • spring mvc中如何将用户表单数据发送到服务器

    我有一个这样的登录表单
  • C#。执行 if( a == (b 或 c 或 d))。是否可以?

    还有另一种方法可以写这样的东西 if a x a y a z 我发现的一种方法是这样做 if new x y z Contains a 还有其他好的方法吗 我经常使用模仿 SQL 的扩展方法IN public static bool IsI
  • 当 Observable/Completed 完成或释放时,RxJava2 获取事件

    当我订阅时我需要显示一个进度对话框Completable并在操作完成 成功或有错误 或取消后隐藏它 So I do final Completable completable notificationRepository markAllAs
  • Graphviz:如何在 HTML 表格单元格之间创建边缘?

    请考虑以下代码 digraph G node shape plaintext a label lt table border 0 cellspacing 0 tr td first td tr tr td second td tr tr t
  • 单元测试复合函数

    假设你有 3 个函数 函数 函数和函数 function 依赖于 functionAL 和 function functionA a return a functionB b return b functionC a b return fu
  • 在 vi 中自定义单词分隔符

    vi 对待破折号 和空间 作为命令的单词分隔符 例如dw and cw 有没有办法加下划线 还有 我经常想更改变量名中包含下划线的部分 例如更改src branch to dest branch 我最终计算字符并使用s like 3sdes
  • 泽西岛制作媒体类型冲突

    我现在正在尝试 Jersey 随后this http netbeans org kb docs websvc rest html在 netbeans 中设置 Web 服务的链接 我有我的实体类和 REST 类 它可以从 javafx2 客户
  • 带方括号的编码 URL。 Chrome/Firefox/IE 中的不同行为

    我有一个看起来像这样的链接 它有点难看 因为它是 URL a href items fc 5B 5D 12345 amp fc 5B 5D 56789 amp utf8 E2 9C 93 foo a 明确一点 它是 URL 编码并转换为 a
  • 如何让 python 等待 Excel 宏/刷新完成

    我正在使用 Python 在 Excel 中运行宏 我希望Python关闭excel 该宏刷新 Excel 中的数据连接 这可能会很慢 我如何让 python 等到刷新完成才关闭 这就是我正在使用的 我在 xl Quit 之前需要一些东西
  • Nodejs 加密与 python hashlib

    我试图让 python 函数和 nodejs 函数计算相同的哈希值 然而 nodejs crypto 和 python hashlib 之间输出的二进制文件似乎不同 我使用的Python是 hash hashlib sha512 hash
  • 从 Activity 打开片段

    我正在开发一个小型谷歌地图应用程序 它可以让用户找到靠近他们的地方 我想添加功能 让用户将一个地方添加到收藏夹列表中 到目前为止 我创建了可以执行该功能的类 我的主要活动是我的主页 它打开其他活动 代码如下 import android a
  • 修复 Ember 1.12.0 中初始化程序的弃用问题

    我指的是 Ember 1 12 中引入的这一特定弃用 lookup被要求登记 这initializerAPI 不再 收到一个容器 你应该使用instanceInitializer到 从容器中查找对象 我查看了指南 但不确定如何解决这个问题
  • 在运行时在 WPF RichTextBox 中的新行中添加文本

    我想在运行时在 WPF RichTextBox 中的新行中添加一些文本 我可以使用以下方法来做到这一点 FlowDocument mcFlowDoc new FlowDocument mcFlowDoc richTextBox Docume
  • MVC、控制器 - 用例

    我了解到 您应该在 MVC OOD 中将控制器类设置为用例 从上到下仅使用一种运行 MVC 类的方法 是否可以在一个控制器中使用不同的方法来获得更多控制和更好的概览 假设您想要运行一个控制器来显示登录表单 从视图获取 html 等 如果用户
  • Matlab 中的相交体积

    我开发了一个代码 它采用一组 3D 坐标 并执行三角测量来生成凸包 Delaunay 这一切进展顺利 使用 Deluanay 三角测量 我可以使用 tsearchn 测试点是否包含在给定体积中 现在我想取两个这样的 3D 体积 并测试它们是
  • 什么是 Visio Enterprise Architect 的良好替代品? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我一直在使用 Visio 2002 2003 Enterprise Architect 直观地进行数据库架构设计 然后前向生成 DDL 来
  • 解析 PHP 中的属性/值列表

    给定一个带有属性 值对的字符串 例如 attr1 some text attr2 some other text attr3 some weird text 目标是解析它并输出一个关联数组 在本例中 array attr1 gt some
  • 在 PyCharm IDE 中添加 Spark 包

    我已将 PyCharm 设置为与本地 Spark 安装链接在这个链接中 https stackoverflow com questions 34685905 how to link pycharm with pyspark from pys
  • 那么:有什么意义呢?

    其预期目的是什么So https github com idris lang Idris dev blob master libs base Data So idr L14类型 音译为阿格达 data So Bool Set where o