- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我可以定义以下归纳类型:
Inductive T : Type -> Type :=
| c1 : forall (A : Type), A -> T A
| c2 : T unit.
但是随后命令 Check (c1 (T nat))
失败并显示消息:术语 T nat
具有类型 Type@{max(Set, Top.3+1)}
而它的类型应该是 Type@{Top.3}
(宇宙不一致)。
我如何调整上述归纳定义,以便 c1 (T nat)
不会导致 universe 不一致,并且无需设置 universe 多态性?
以下可行,但我更喜欢不添加相等性的解决方案:
Inductive T (A : Type) : Type :=
| c1 : A -> T A
| c2' : A = unit -> T A.
Definition c2 : T unit := c2' unit eq_refl.
Check (c1 (T nat)).
(*
c1 (T nat)
: T nat -> T (T nat)
*)
最佳答案
让我首先回答为什么我们首先得到宇宙不一致的问题。
Universe 不一致是 Coq 报告的错误,以避免证明 False
通过罗素悖论,该悖论源于考虑所有不包含自身的集合的集合。
在类型理论中有一个更便于形式化的变体,称为 Hurken 悖论;见 Coq.Logic.Hurkens
更多细节。有一个 Hurken 悖论的特化,它证明没有类型可以缩回到更小的类型。即给定
U := Type@{u}
A : U
down : U -> A
up : A -> U
up_down : forall (X:U), up (down X) = X
我们可以证明False
.
这几乎就是您的 Inductive
的设置类型。用 universe 注释你的类型,你从
Inductive T : Type@{i} -> Type@{j} :=
| c1 : forall (A : Type@{i}), A -> T A
| c2 : T unit.
请注意,我们可以反转这个归纳法;我们可以写
Definition c1' (A : Type@{i}) (v : T A) : A
:= match v with
| c1 A x => x
| c2 => tt
end.
Lemma c1'_c1 (A : Type@{i}) : forall v, c1' A (c1 A v) = v.
Proof. reflexivity. Qed.
暂时假设 c1 (T nat)
类型检查。自 T nat : Type@{j}
, 这需要 j <= i
.如果它给了我们 j < i
, 然后我们就可以了。我们可以写 c1 Type@{j}
.这正是我上面提到的 Hurken 变体的设置!我们可以定义
u = j
U := Type@{j}
A := T Type@{j}
down : U -> A := c1 Type@{j}
up : A -> U := c1' Type@{j}
up_down := c1'_c1 Type@{j}
从而证明False
.
Coq 需要实现一个规则来避免这个悖论。如所述here ,规则是对于归纳构造函数的每个(非参数)参数,如果参数的类型在宇宙中有一个排序 u
, 那么归纳的宇宙被约束为 >= u
.在这种情况下,这比 Coq 需要的更严格。正如 SkySkimmer 所述 here ,Coq 可以识别直接出现在归纳索引位置的参数,并以与忽略参数相同的方式忽略这些参数。
因此,为了最终回答您的问题,我相信以下是您唯一的选择:
Set Universe Polymorphism
所以在T (T nat)
,你的两个T
我们采用不同的宇宙参数。 (等价地,你可以写成 Polymorphic Inductive
。):
之后移动到它之前。)-type-in-type
完全禁用 Universe 检查。False
的证明。(可能涉及模块子类型化,请参阅, 例如 this recent bug in modules with universes .))关于coq - 宇宙不一致的一个简单例子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51029234/
在 U2/Universe/Pick 中,有一个函数 ICONV("11/11/15","D") 将外部日期转换为内部日期,但这适用于美国或日期格式为 mm/仅日/年。如何将此函数用于英国日期格式 (
我想我会尝试使用 world/universe 无突变方法的简单 GUI 应用程序,但尝试自己实现“world/universe”程序设计。 下面是我的小草图,但我很快得出结论,虽然我可以使用教学包,
开个玩笑,我正在尝试为可能包含任何内容的图标库构建标签层次结构。问题是如何使(大多数)对象的层次结构清晰简单?我并不是要制作 super 具体的类别,只是为了帮助用户进行搜索(如果我可以将 10k 个
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 这个问题似乎与 help center 中定义的范围内的编程无关。 . 已关闭 8 年前。 Improve
正如另一篇文章( https://stackoverflow.com/a/7075121/2706606 )中所解释的,在 python 中你可以导入 future 的东西。 例如,2/4 的计算结果
我一直在四处寻找并进行一些 Google 搜索,尝试了解是否可以在 Windows Azure 上运行 C# 操作系统 Cosmos。 理想情况下,我想使用它来运行应用程序的单个实例,例如网站或服务/
我正在尝试编写一个查询,该查询使用 JOIN 对数组中的位置执行地理空间匹配。我让它工作了,但添加了 DISTINCT 以便消除重复(查询 A): SELECT DISTINCT VALUE
我正在尝试编写一个查询,该查询使用 JOIN 对数组中的位置执行地理空间匹配。我让它工作了,但添加了 DISTINCT 以便消除重复(查询 A): SELECT DISTINCT VALUE
我正在尝试删除我的 Cosmos 帐户中的一个文件夹,但我得到了 SafeModeException: # hadoop fs -rmr /home//input rmr: org.apache.ha
什么是二叉树的 Herbrand 宇宙、Herbrand 基础和 Herbrand 模型: binary_tree(empty). binary_tree(tree(Left,Element,Righ
我正在尝试适用于 Azure-Cosmos 的 ChangeFeedProcessor SDK 示例应用程序。 仓库的 GIT 链接: https://github.com/Azure/azure-d
g.V().has(id,'xxx').repeat(outE('x'). has('b',gte(1588919200)).has('b',lte(1589128800)).inV()) .time
我是一名优秀的程序员,十分优秀!