用Coq中的存在性证明定义常数

用Coq中的存在性证明定义常数,coq,Coq,在证明了一个存在性陈述之后,引入一个常数符号来证明这个定理通常是非常方便的 作为一个简单的例子,它写起来要简单得多(用典型的数学符号) 比写作更重要 ∀x. ∃y. empty(y) and y ⊆ x. 我希望在Coq中复制这种效果。下面是我遇到的基本场景和导致错误的尝试(现在是真实Coq代码): 我想知道这个错误消息到底意味着什么,是否有任何方法可以绕过它。谢谢 您的问题与通常的道具与类型的区别有关。你的证人的存在在于Prop(参见类型ex的定义),因此你不能检查它来建立一个具体的术语,你

在证明了一个存在性陈述之后,引入一个常数符号来证明这个定理通常是非常方便的

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

比写作更重要

∀x. ∃y. empty(y) and y ⊆ x.
我希望在Coq中复制这种效果。下面是我遇到的基本场景和导致错误的尝试(现在是真实Coq代码):


我想知道这个错误消息到底意味着什么,是否有任何方法可以绕过它。谢谢

您的问题与通常的
道具与类型的区别有关。你的证人的存在在于
Prop
(参见类型
ex
的定义),因此你不能检查它来建立一个具体的术语,你需要在
类型中证明这一事实

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

Hypothesis inhabited : {x : A | x = x }.
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.*)
Hypothesis inhabited : {x : A | x = x }.