`Set` 类型的具体示例是什么?`Set` 的含义是什么?

2024-02-12

我一直试图理解什么Set除了在 Adam Chlipala 的书中遇到它之后SO中的这个精彩讨论 https://stackoverflow.com/questions/39601502/what-exactly-is-a-set-in-coq。他的第一个示例定义二进制操作使用Set:

Inductive binop : Set := Plus | Times.

在那本书中他说:

Second, there is the : Set fragment, which declares that we are defining a datatype that should be thought of as a constituent of programs.

这让我很困惑。亚当在这里的意思是什么?

另外,我认为一些额外的具体例子将有助于我的理解。我不是 Coq 专家,所以我不确定什么类型的示例会有所帮助,但一些简单且非常具体/基础的示例可能会很有用。

注意,我已经看到了Set是类型层次结构中的第一个“类型集”,例如Set = Type(0) <= Type = Type(1) <= Type(2) <= ... 。我想这在直觉上是有道理的,就像我假设的那样nat \in Type以及所有常见的编程类型都在其中,但不确定其中会包含什么Type那不会是在Set。也许是递归类型?不确定这是否是正确的例子,但我试图理解这个概念的含义以及它的概念(和实践)有用性。


Though Set and TypeCoq 中有所不同,这主要是由于历史原因。如今,大多数发展并不依赖于Set不同于Type。特别是,如果您替换,亚当的评论也有意义Set by Type到处。要点是,当您想要定义一个可以在执行期间计算的数据类型(例如数字)时,您需要将其放入Set or Type 而不是 Prop。这是因为生活在其中的事物Prop当你从 Coq 中提取程序时会被删除,所以在Prop最终不会计算任何东西。

至于你的第二个问题:Set是生活在其中的东西Type,但不在Set,如以下代码片段所示。

Check Set : Type. (* This works *)
Fail Check Set : Set.
(* The command has indeed failed with message: *)
(* The term "Set" has type "Type" while it is expected to have type  *)
(* "Set" (universe inconsistency: Cannot enforce Set+1 <= Set). *)

这一限制是为了防止理论中出现悖论。这几乎是您看到的唯一区别Set and Type默认情况下。您还可以通过使用以下命令调用 Coq 来使它们更加不同-impredicative-set option:

(* Needs -impredicative-set; otherwise, the first line will also fail.*)
Check (forall A : Set, A -> A) : Set.
Universe u.
Fail Check (forall A : Type@{u}, A -> A) : Type@{u}.
(* The command has indeed failed with message: *)
(* The term "forall A : Type, A -> A" has type "Type@{u+1}" *)
(* while it is expected to have type "Type@{u}" (universe inconsistency: Cannot enforce *)
(* u < u because u = u). *)

请注意,我必须添加Universe u.声明强制两次出现Type处于同一水平。如果没有这个声明,Coq 会默默地把这两个Type处于不同的宇宙层次,命令都会被接受。 (这并不意味着Type会有相同的行为Set在这个例子中,因为Type@{u} and Type@{v}是不同的事情,当u and v是不同的!)

如果您想知道为什么此功能很有用,那么这并非偶然。绝大多数 Coq 开发并不依赖它。它默认是关闭的,因为它与一些通常被认为在 Coq 开发中更有用的公理不兼容,例如强排中律:

forall A : Prop, {A} + {~ A}

With -impredicative-set打开时,这个公理会产生一个悖论,而默认情况下使用它是安全的。

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

`Set` 类型的具体示例是什么?`Set` 的含义是什么? 的相关文章

  • 如何从外部软件调用证明助手Coq

    如何从外部软件调用证明助手Coq Coq 有一些 API 吗 Coq 命令行界面是否足够丰富 可以在文件中传递参数并在文件中接收响应 我对 Java 或 C 桥感兴趣 这是合理的问题 Coq 并不是一种常见的商业软件 人们可以从中获得开发人
  • Coq Proof Assistant 中依赖类型的问题

    考虑以下简单的表达语言 Inductive Exp Set EConst nat gt Exp EVar nat gt Exp EFun nat gt list Exp gt Exp 及其格式良好的谓词 Definition Env lis
  • 类型参数和索引之间的区别?

    我是依赖类型的新手 对两者之间的区别感到困惑 似乎人们通常说类型是由另一种类型参数化 and 按某个值索引 但是 在依赖类型语言中 类型和术语之间不是没有区别吗 参数和指数之间的区别是根本性的吗 您能否举例说明它们在编程和定理证明中的含义差
  • Ltac:通过回溯重复策略 n 次

    假设我有一个像这样的策略 取自 HaysTac 它搜索一个参数来专门化一个特定的假设 Ltac find specialize in H multimatch goal with v gt specialize H v end 然而 我想写
  • 对术语...进行抽象会导致术语...类型错误

    这是我想证明的 A Type i nat index f nat nat n nat ip n lt i partial index f nat option nat L partial index f index f n Some n V
  • coqide - 无法从同一文件夹加载模块

    我无法加载 CoqIde 中同一文件夹中的模块 我正在尝试从 Software Foundations 加载源代码 我正在包含 SF 源代码的文件夹中运行 coqidecoqide or coqide 然后打开并运行该文件后 我收到此错误
  • 用 Coq 重写假设,保留蕴涵

    我正在做 Coq 证明 我有P gt Q作为假设 并且 P gt Q gt Q gt P 作为引理 如何将假设转化为 Q gt P 当我尝试apply它 我只是产生新的子目标 这没有帮助 换句话说 我想从以下开始 P Prop Q Prop
  • 如何在 Coq 中禁用我的自定义符号?

    我定义了一个符号来模拟命令式编程 Notation a gt gt b b a at level 50 然而之后 所有函数应用表达式都表示为 gt gt 样式 例如 在 Coq Toplevel 的证明模式下 我可以看到 bs nat gt
  • 如何将假设中的具体变量更改为存在量化变量?

    假设我有一个这样的假设 FooProp a b 我想将假设改为这种形式 exists a FooProp a b 我怎样才能做到这一点 我知道我能做到assert exists a FooProp a b by eauto但我试图找到一个不
  • 如何在 Coq 中切换当前目标?

    是否可以切换当前目标或子目标来在 Coq 中进行证明 例如 我有一个这样的目标 来自 eexists 1 1 s gt 0 r1 r1 s1 s r3 r3 s2 我想做的是split并首先证明正确的连接 我认为这将给出存在变量的值 s 并
  • 如何在 Coq 简化过程中应用一次函数?

    据我了解 Coq 中的函数调用是不透明的 有时 我需要使用unfold应用它然后fold将函数定义 主体恢复为其名称 这通常很乏味 我的问题是 是否有更简单的方法来应用函数调用的特定实例 作为一个最小的例子 对于一个列表l 证明右附加 没有
  • Coq - 在不丢失信息的情况下归纳函数

    当尝试对函数的结果 返回归纳类型 执行案例分析时 我在 Coq 中遇到了一些麻烦 当使用通常的策略时 比如elim induction destroy等等 信息就会丢失 我举个例子 我们首先有一个像这样的函数 Definition f n
  • 依赖类型的 Church 编码:从 Coq 到 Haskell

    在 Coq 中 我可以为长度为 n 的列表定义 Church 编码 Definition listn A Type nat gt Type fun m gt forall X nat gt Type X 0 gt forall m A gt
  • Coq 中的“错误:宇宙不一致”是什么意思?

    我正在努力通过软件基础 http www cis upenn edu bcpierce sf current 目前正在做教堂数字的练习 这是自然数的类型签名 Definition nat forall X Type X gt X gt X
  • Coq 中的 Modus Ponens 和 Modus Tollens

    我想要针对这些简单的推理规则使用 Ltac 策略 在 Modus Ponens 中 如果我有H P gt Qand H1 P Ltac mp H H1将添加Q到上下文为H2 Q 在 Modus Tollens 中 如果我有H P gt Qa
  • Coq 中 MSet 的使用示例

    MSets https coq inria fr library Coq MSets MSets html似乎是 OCaml 式有限集的最佳选择 可悲的是 我找不到示例用途 如何定义一个空的MSet或单身人士MSet 我怎样才能结合两个MS
  • 在 Coq 中,“if then else”允许非布尔第一个参数?

    我读过一些教程if a then b else c代表match a with true gt b false gt c end 然而 很奇怪的是 前者不检查类型a 而后者当然确保a是一个布尔值 例如 Coq lt Check if nil
  • 为什么coq互感类型必须具有相同的参数?

    下列的亚瑟的建议 https stackoverflow com a 17304209 403875 我改变了我的Fixpoint相互关系Inductive这种关系 建立 游戏之间的不同比较 而不是 深入研究 但现在我收到一条全新的错误消息
  • 如何处理 Coq 中 Program Fixpoint 生成的非常大的项?

    我试图在 Coq 中定义并证明正确的函数 该函数可以有效地比较两个排序列表 由于它并不总是在结构较小的项上递归 第一个或第二个列表较小 Fixpoint不会接受它 所以我尝试使用Program Fixpoint反而 当尝试使用策略证明函数的
  • 为什么逻辑连接词和布尔值在 Coq 中是分开的?

    我有 JavaScript Ruby 编程背景 并且习惯了 true false 的工作方式 在 JS 中 true false false true 然后你可以使用这些真 假值 like var a true b false a b So

随机推荐

  • Google + 环聊按钮

    我正在尝试将 google Hangout 按钮添加到我的 html 文件中 如下所示 但是当我运行 html 页面时 该按钮不显示 div div
  • 在 Vim 中,文件名的制表符补全不起作用

    当我尝试在 Vim Linux 中打开文件进行编辑时 当我按 TAB 时 Vim 仅使用当前目录中的文件名自动补全文件名 然而 在网上搜索后 我认为从版本 7 开始 Vim 应该支持使用搜索路径中所有目录中的文件名进行类似 bash 的文件
  • 提升灵气属性传播

    我的 Boost Spirit Qi 语法有问题 该语法发出不需要的类型 导致此编译错误 error C2664 std basic string lt Elem Traits Ax gt std basic string lt Elem
  • 媒体编解码器 4.1 问题

    根据我的测试 除了 Nexus5 moto G 之外 它在大多数设备上都能正常工作 在这些设备上 应用程序生成仅包含两帧的视频 并且 还收到以下错误日志 OMX qcom video encoder avc storeMetaDataInB
  • 从 VBA 搜索 Outlook 电子邮件

    给定的代码成功运行 它在 Outlook 的 已发送邮件 文件夹中搜索电子邮件主题 搜索基于特定时间段内的特定日期进行 例如 下面的代码查找 2018 年 7 月 20 日中午 12 00 到晚上 11 59 之间发送的标题为 周五发送的测
  • 我如何知道 Eclipse 插件使用了多少内存(单独)

    有没有办法知道每个 Eclipse 插件分别消耗了多少内存 进行堆转储并使用例如进行分析这Eclipse 内存分析器 http eclipse org mat 有关更多信息 请参阅使用内存分析器分析 Equinox 捆绑包依赖性 http
  • 如何检查pandas数据框中的布尔条件

    I have Alcohol df数据框 其中资格是一列 我创建了一个列表 如下所示 Graduate list B tech b tech b tech Btech BE B E b e BACHELOR bachelor BSc Bsc
  • 如何使用“PerformanceNavigationTiming” API 获取页面加载时间?

    我正在尝试使用PerformanceNavigationTiming API https developer mozilla org en US docs Web API PerformanceNavigationTiming生成页面加载指
  • 从 travis CI 获取作业 ID 的日志文件

    如何从作业 ID 和项目名称下载构建日志文件 我知道 travis ci 有 API 项目名称 eclipse jetty project 职位编号 6073028 访问日志文件的链接 https travis ci org eclipse
  • 如何处理spark sql中缺失的列

    我们正在处理无架构的 JSON 数据 有时 Spark 作业会失败 因为我们在 Spark SQL 中引用的某些列在一天中的某些时间不可用 在这些时间内 Spark 作业会失败 因为所引用的列在数据框中不可用 如何处理这种情况 我已经尝试过
  • 可以从纹理生成法线贴图吗?

    如果我有一个纹理 是否可以为该纹理生成法线贴图 以便它可以用于凹凸贴图 或者法线贴图通常是如何制作的 是的 嗯 有点像 法线贴图可以根据高度贴图精确制作 一般来说 您也可以放置常规纹理并获得不错的结果 请记住 还有其他制作法线贴图的方法 例
  • 是否可以在 Julia 中对字典进行排序?

    我使用两个数组创建了一个字典zip like list1 1 2 3 4 5 list2 6 7 8 9 19 dictionary1 Dict zip list1 list2 现在我想按以下顺序对这本词典进行排序key list1 or
  • Oracle:比较包含 CLOB 的表并获取 diff 的最快方法

    假设我有两个表 其中列 Col1 Col2 和 Col3 均为 VARCHAR2 CLOB和 NUMBER 类型分别 我怎样才能得到这些表的差异 即存在于Table B 但不在Table A Table A Col1 Col2 Col3 P
  • 使用带有 React-bootstrap 的 Nav 组件的手风琴侧边栏菜单

    我开始使用构建我的用户界面react bootstrap现在我有一个重要的任务是使用标准创建侧栏手风琴菜单bootstrap成分 我发现this http bootsnipp com snippets featured accordion
  • 如何让 JavaScript 在当前显示器上打开弹出窗口

    设想 用户有两个显示器 他们的浏览器在辅助显示器上打开 他们单击浏览器中的一个链接 该链接调用 window open 并具有特定的顶部和左侧窗口偏移量 弹出窗口始终在其主显示器上打开 JavaScript 有没有办法让弹出窗口在与初始浏览
  • 使用 iTextSharp 获取指定区域中包含的文本出现次数

    是否有可能 使用iTextSharp 获取pdf文档指定区域中包含的所有文本出现 Thanks 首先 您需要用红色标记的矩形的实际坐标 乍一看 我认为 x 值 144 2 英寸 可能是正确的 但如果 y 值是 76 我会感到惊讶 因此您必须
  • 在asp.net mvc中将application/json绑定到POCO对象,序列化异常

    我将 json 从我的视图传递回我的控制器操作以执行操作 要将发送的 json 转换为 POCO 我使用此操作过滤器 public class ObjectFilter ActionFilterAttribute public Type R
  • 字典与对象 - 哪个更有效,为什么?

    在 Python 中 就内存使用和 CPU 消耗而言 哪个更高效 字典还是对象 背景 我必须将大量数据加载到 Python 中 我创建了一个对象 它只是一个字段容器 创建 4M 实例并将其放入字典大约需要 10 分钟 大约需要 6GB 内存
  • 为什么应该使用 strtok(line, "\n") **不** 来去除 fgets() 留下的换行符

    fgets 是读取一行输入的安全函数 但它存储new line byte n 如果适合 则从数组中的文件中读取 在许多 如果不是大多数 情况下 这new line在进一步处理该行内容之前必须将其删除 可以使用几种简单的方法来实现这一点 但我
  • `Set` 类型的具体示例是什么?`Set` 的含义是什么?

    我一直试图理解什么Set除了在 Adam Chlipala 的书中遇到它之后SO中的这个精彩讨论 https stackoverflow com questions 39601502 what exactly is a set in coq