那么:有什么意义呢?

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(使用前将#替换为@)

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

  • 在 Haskell 中的列表上编写递归函数

    我有以下问题 定义函数 and or Bool gt Bool 它给出了布尔值列表的合取和析取 例如 and False True False or False True True 在空列表上and gives True and or gi
  • 计算函数合理性的算法/蒙特卡罗方法

    我正在编写一个程序 尝试复制本文开头讨论的算法 http www stat stanford edu cgates PERSI papers MCMCRev pdf http www stat stanford edu cgates PER
  • 理解 scala 中参与者的线程性

    有人告诉我 Scala Actors 实际上从来不会同时执行两个操作 这表明 act 或 React 或 receive 方法本质上是同步的 我知道 act 方法中的长操作可能会导致阻塞问题 并且我假设对消息队列的访问必须以某种方式同步 但
  • 如何在函数式编程中为AST节点生成稳定的id?

    我想将一个特定的 AST 节点替换为另一个节点 并且这个替换的节点是由交互式用户输入指定的 在非函数式编程中 可以使用可变数据结构 并且每个AST节点都有一个对象引用 因此当我需要引用特定节点时 我可以使用这个引用 但在函数式编程中 使用I
  • 是否可以有效地计算 lambda 演算项?

    我最近用 lambda 演算编写了很多程序 我希望能够实时运行其中一些程序 然而 尽管趋势函数范式基于 lambda 演算和 B 约简规则 但我找不到一个不是玩具 不以效率为目的的评估器 函数式语言应该很快 但我所知道的那些语言实际上并不提
  • Agda 中实例参数的问题

    我正在尝试遵循 McBride s 的代码如何维持邻居秩序 https personal cis strath ac uk conor mcbride pub Pivotal pdf 并且无法理解为什么 Agda 我正在使用 Agda 2
  • 与可变结构相比,不可变结构有哪些优点?

    我已经知道不变性相对于可变性的好处在于能够推理代码并引入更少的错误 尤其是在多线程代码中 不过 在创建结构时 我看不出创建一个完全不可变的结构比创建一个可变的结构有任何好处 让我们以保存一些分数的结构为例 struct ScoreKeepe
  • 返回元组的第一个元素

    假设我创建一个将两个整数相加的函数 def addInt a Int b Int Int Int val x a b x 2 我回来了 result 2 故意为了这个问题 现在我想创建一个仅返回 x 的变量 val result addIn
  • 我应该选择哪种函数式编程语言作为第一种函数式编程语言? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我想学习一种函数式编程语言 以了解不同的编程范例 我的编程背景 Java 我刚刚通过了 SCJP 考试 一些 ruby 和非常有限的 Rails
  • 证明后继者对等式的替代性质

    我试图理解归纳类型 精益中的定理证明 第 7 章 https leanprover github io theorem proving in lean 07 Inductive Types html 我给自己设定了一个任务 证明自然数的后继
  • Haskell 中列表列表的笛卡尔积

    给定一个长度列表的列表x所有子列表的长度都相同y 输出y x长度列表x包含每个子列表中的一项 例子 x 3 y 2 1 2 3 4 5 6 Output 2 3 8不同的输出 1 3 5 1 4 5 1 3 6 1 4 6 2 3 5 2
  • “功能性”Rust 对性能有哪些影响?

    我正在关注 Rust 轨道运动 io https exercism io 我有相当多的 C C 经验 我喜欢 Rust 的 功能 元素 但我担心相对性能 我解决了 行程编码 问题 https exercism io tracks rust
  • 是否可以只迭代一个流一次并执行 2 个或更多操作?

    给定代码 List
  • scala 返回列表中的第一个 Some

    我有一个清单l List T1 目前我正在执行以下操作 myfun T1 gt Option T2 val x Option T2 l map myfun l flatten find gt true The myfun函数返回 None
  • 正确使用术语 Monoid

    从下面的例子来看 我认为这样的说法是正确的String在串联运算下定义了一个幺半群 因为它是关联二元运算 并且String碰巧有一个身份元素 它是一个空字符串 scala gt Jane Doe Jane Doe res0 Boolean
  • 为什么Racket中foldl的定义方式很奇怪?

    在 Haskell 中 与许多其他函数式语言一样 函数foldl被定义为 例如 foldl 0 1 2 3 4 10 这没关系 因为foldl 0 1 2 3 4 根据定义 0 1 2 3 4 但是 在 球拍 中 foldl 0 1 2 3
  • Haskell 对于 Web 应用程序来说足够成熟吗? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 使用fold_left/right反转OCaml中的列表

    更新 解决方案 感谢 jacobm 的帮助 我想出了一个解决方案 Folding Recursion let reverse list 3 theList List fold left fun element recursive call
  • @tailrec为什么这个方法不编译为“包含不在尾部位置的递归调用”?

    tailrec private def loop V key String V key match case gt loop key 此方法无法编译并抱怨它 包含不在尾部位置的递归调用 有人可以向我解释一下发生了什么事吗 这个错误消息对我来
  • 你能在 scala 中使用 varargs 柯里化一个函数吗?

    我正在考虑如何用可变参数柯里化一种方法 然后我意识到我什至不知道如何去做 理想情况下 它应该让您可以随时开始使用它 然后以可迭代结束 def concat strs String strs mkString val curriedConca

随机推荐

  • 如何在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