在定义中无法使用破坏性的符号有问题

时间:2019-05-22 08:55:54

标签: coq coqide

我正在用coq处理一个定义,该定义需要从一个定理中得出一些东西,但是不能破坏该定义。

Theorem sp : forall (X : Type) (T : X -> Prop)..... , exists (a : X), T a.
Definition yield_sp : (X : Type) (T : X -> Prop) (H : sp X T .....)..... : X.

当我尝试破坏H时,coq警告

  

归纳定义ex不允许对排序类型进行案例分析。

我想知道它的原因,以及如何使用定义从“存在”命题中产生一个元素。

1 个答案:

答案 0 :(得分:0)

您不能从存在证明中提取证人。有几种选择:

  • 将证明的陈述更改为{x : T | P x},其行为或多或少类似于存在量词,但支持投影函数proj1_sig : {x : T | P x} -> T

  • 假设选择公理,如https://coq.inria.fr/library/Coq.Logic.ClassicalChoice.html

  • 如果要对可计数类型 进行定量,并且您的命题是可判定的,则可以使用this question中的技巧来提取证人。