使用Coq中的存在证明定义常量

时间:2015-02-27 12:31:03

标签: coq

在证明了一个存在语句之后,为这个定理的某些见证人引入一个常数符号通常是非常方便的。

作为一个简单的例子,它写起来要简单得多(用典型的数学符号表示)

∀x. ∅ ⊆ x.

比写

∀x. ∃y. empty(y) and y ⊆ x.

我希望在Coq中复制这种效果。这是我遇到的基本场景和导致错误的尝试(现在使用真正的Coq代码):

Variable A:Type.
Hypothesis inhabited: exists x:A, x=x.

Definition inhabitant:A.
  destruct inhabited.  
  (*Error: Case analysis on sort Type is not allowed for inductive definition ex.*)

我想知道这个错误信息甚至意味着什么,如果有办法解决这个问题。谢谢!

1 个答案:

答案 0 :(得分:4)

您的问题与通常的Prop vs Type区别有关。你的证人的存在在于Prop(参见类型ex的定义),所以你无法检查它以建立一个具体的术语,你需要在Type中证明这一事实

您正在寻找sig(或类似sigSsigT)的变体,其符号为:

Hypothesis inhabited : {x : A | x = x }.