相关疑难解决方法(0)

我们怎么知道所有Coq构造函数都是单射的和不相交的?

根据这个课程,所有构造函数(对于归纳类型)都是单射的和不相交的:

...类似的原则适用于所有归纳定义的类型:所有构造函数都是单射的,并且由不同构造函数构建的值永远不会相等.对于列表,cons构造函数是单射的,nil与每个非空列表不同.对于布尔,真假都是不平等的.

(以及inversion基于这种假设的策略)

我只是想知道我们怎么知道这个假设成立了?

我们怎么知道,例如,我们不能基于定义自然数

1)一个继承者,也许是像这样的"双"构造函数:

Inductive num: Type :=
   | O : num
   | S : num -> num
   | D : num -> num.
Run Code Online (Sandbox Code Playgroud)

2)一些plus功能,以便2通过两个不同的序列/路由构造函数可以达到一个数字,S (S O)并且D (S O)

Coq的机制是什么,以确保上述内容永远不会发生?

PS我不是建议上面的num例子是可能的.我只是想知道是什么让它变得不可能.

谢谢

constructor coq injective-function

3
推荐指数
1
解决办法
1011
查看次数

标签 统计

constructor ×1

coq ×1

injective-function ×1