Coq:Type(n) 中的 Prop 与 Set

2024-06-23

我想考虑以下三个(相关的?)Coq 定义。

Inductive nat1: Prop :=
  | z1 : nat1
  | s1 : nat1 -> nat1.

Inductive nat2 : Set := 
  | z2 : nat2
  | s2 : nat2 -> nat2.

Inductive nat3 : Type :=
  | z3 : nat3
  | s3 : nat3 -> nat3.

所有这三种类型都给出了归纳原理来证明命题成立。

nat1_ind
     : forall P : Prop, P -> (nat1 -> P -> P) -> nat1 -> P

nat2_ind
     : forall P : nat2 -> Prop,
       P z2 -> (forall n : nat2, P n -> P (s2 n)) -> forall n : nat2, P n

nat3_ind
     : forall P : nat3 -> Prop,
       P z3 -> (forall n : nat3, P n -> P (s3 n)) -> forall n : nat3, P n

集合和类型版本还包含集合和类型(分别为 rec 和 rect)定义的归纳原理。这就是我对 Prop 和 Set 之间差异的了解程度; Prop 的感应力较弱。

我还读到 Prop 是谓语,而 Set 是谓语,但这似乎是一个属性,而不是一个定义的质量。

虽然 Set 和 Prop 之间的一些实际(道德?)差异是显而易见的,但 Set 和 Prop 之间的确切定义差异以及它们在类型宇宙中的位置尚不清楚(对 Prop 和 Set 运行检查给出 Type (* ( Set) + 1*)),我不太确定如何解释这个......


Type : Type不一致。

谓语Set排除中间意味着证明无关,所以是必然的Set具有证明相关性,例如true <> false,反驳排除中数,这是直觉主义不应该做的。

因此我们把不可预测性留在Prop类型层次结构的其余部分为我们提供了可预测性。

顺便一提,

forall P : nat1 -> Prop, P z1 -> (forall n : nat1, P n -> P (s1 n)) -> forall n : nat1, P n

是可证明的。不要问我 Coq 只自动证明其他较弱的归纳原理有什么好处......

另外,你读过吗CPDT 的这一章 http://adam.chlipala.net/cpdt/html/Universes.html?

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

Coq:Type(n) 中的 Prop 与 Set 的相关文章

  • 您可以为 None 指定类型参数或告诉编译器它是一个 Option[String] 吗?

    我想知道我是否可以在我的代码中写这样的东西 None String 我很惊讶没有人提到它的存在Option empty scala gt Option empty String res0 Option String None 请注意 在许多
  • F# 查询,按单列对多个值进行分组

    我有一个 F sql 查询 需要对每组中的两列求和 let financials query for data in dbData do groupValBy data earning data losses data store into
  • 如何识别 Java 中的不可变对象

    在我的代码中 我正在创建一个对象集合 这些对象将由各种线程以只有在对象不可变的情况下才安全的方式访问 当尝试将新对象插入到我的集合中时 我想测试它是否是不可变的 如果不是 我将抛出异常 我能做的一件事是检查一些众所周知的不可变类型 priv
  • 列表推导式和 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
  • Java 泛型:如何为泛型类型指定类类型?

    我有一个 POJO 指定为 MyClass u where U是泛型类型参数 我正在尝试编写一个接受类引用的实用方法Class u
  • 尝试使用 Case 时出现 coq 错误。软件基础书籍中的示例

    我正在尝试通过在线软件基础书籍来学习 Coq http www cis upenn edu bcpierce sf http www cis upenn edu bcpierce sf 我正在使用交互式命令行 Coq 解释器coqtop 在
  • 在 Vavr 中结合任一者?

    我有几个Vavr https www vavr io Either https www vavr io vavr docs either的 我想调用一个函数Right每个 Either 的值 例如 Either
  • Coq执行分号“;”的区别和句号“.”

    给定一个有效的 Coq 证明 使用 战术上 是否有一个通用公式可以将其转换为有效的等效证明 替代 许多 Coq 证明都使用 或战术排序战术 作为初学者 我想观察各个步骤的执行 所以我想替换 for 但令我惊讶的是 我发现这可能会破坏证明 有
  • 了解函数类型

    我在尝试理解 Haskell 如何确定函数类型时感到有点困惑 这是一个例子 boolFcn x y x 3 y 4 当我检查上述函数的类型时 它给出了结果 Num a1 Num a Eq a1 Eq a gt a gt a1 gt Bool
  • 如何让 Either Monads 了解异步函数(Promises/Future)

    我正在尝试使用 Either Monad 来传输数据 问题是我无法弄清楚如何让我的 Monad 意识到异步操作 这是我所拥有的 let processData Either either sendError sendResponse pro
  • James Gosling 对 Java 字节为何有符号的解释

    最初我对 Java 决定指定这一点感到惊讶byte是有符号的 范围是 128 127 包括的 我的印象是大多数 8 位数字表示形式都是无符号的 范围为0 255相反 例如IPv4 点十进制表示法 http en wikipedia org
  • Scala 插入列表中的特定位置

    这是我确实解决的问题 但是作为一个完全命令式的 Scala 菜鸟 我觉得我发现了一些完全不优雅的东西 任何改进的想法表示赞赏 val l1 4 1 2 3 4 Nil original list val insert List 88 99
  • Python 的“with”是一元吗?

    像我之前的许多鲁莽的先驱者一样 我正在努力穿越理解单子这片无路可走的荒原 我仍然在蹒跚学步 但我不禁注意到 Python 的某种类似 monad 的品质with陈述 考虑这个片段 with open input filename r as
  • 数据记录的类约束

    我有一个data type data BuildException a KillBuild JobID a Stage FailBuild JobID a Stage CancelBuild JobID a Stage StopBuild
  • 结合记忆和尾递归

    是否有可能以某种方式将记忆和尾递归结合起来 我目前正在学习 F 理解这两个概念 但似乎无法将它们结合起来 假设我有以下内容memoize函数 来自现实世界的函数式编程 http www manning com petricek let me
  • 将 for 循环转换为 java 8 流

    我正在研究 Java 8 将这个 for 循环转换为 Java 8 Stream 时遇到了一些麻烦 for int y 0 y lt 5 y for int x y x lt 10 x 2 System out println x y 请帮
  • 如何在Template工具包中检测数组类型? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我需要在模板工具包中检测数组类型附件的一些变量 有最佳实践吗 可以定义一个自定义虚拟方法 该方法返回所提供变量的引用类型 粗略的例子 usr
  • 在 JavaScript 中使用 Array.map 删除元素

    我想使用以下方法过滤一系列项目map 功能 这是一个代码片段 var filteredItems items map function item if some condition return item 问题是过滤掉的项目仍然使用数组中的
  • 如何在嵌套列表中查找给定元素?

    这是我的迭代解决方案 def exists key arg if not arg return False else for element in arg if isinstance element list for i in elemen
  • Doctrine2:类型 x 已经存在

    我对 Doctrine API 有疑问 我想添加一个新的学说类型 我按照本文档创建了该类 并且已在自定义驱动程序中添加了该类型 Type addType custom Namespace NameBundle Types CustomTyp

随机推荐