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

Defining constants using existence proofs in 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.*)

我想知道这个错误消息到底是什么意思,是否有任何方法可以解决这个问题。谢谢!

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

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

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