我正在用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不允许对排序类型进行案例分析。
我想知道它的原因,以及如何使用定义从“存在”命题中产生一个元素。
答案 0 :(得分:0)
您不能从存在证明中提取证人。有几种选择:
将证明的陈述更改为{x : T | P x}
,其行为或多或少类似于存在量词,但支持投影函数proj1_sig : {x : T | P x} -> T
。
假设选择公理,如https://coq.inria.fr/library/Coq.Logic.ClassicalChoice.html
如果要对可计数类型 进行定量,并且您的命题是可判定的,则可以使用this question中的技巧来提取证人。