Coq - 从命题中提取证人

时间:2012-07-21 15:07:52

标签: coq

我正试图从一个coq命题(或类似的东西......)中提取证人。

我有类似

的东西
Parameter atom_fresh_for_list :
    forall (xs : list atom), {x : atom | ~ List.In x xs}.

(后来证明了atom的明确类型:

Lemma atom_fresh_for_list :
    forall (xs : list nat), { n : nat | ~ List.In n xs }.

如何提取这样的xThe Documentation

  

从这样的(存在的x p)我们可以反过来提取它的见证x:A(使用匹配的消除构造)

但我不明白这是如何运作的......

它也说

  

给定A:类型和P:A-> Prop,构造{x:A | P x}是Type

但是,如果我尝试Parameter C : {x : atom | x \notin xs}之类的东西,它会给出

Error: The term "C" has type "{x : atom | x \notin xs}" which should be Set, Prop or Type.

1 个答案:

答案 0 :(得分:2)

这解释得非常好: http://coq.inria.fr/stdlib/Coq.Init.Specif.html

根据“sig的预测”一节。 (请注意,该段落中存在拼写错误:https://coq.inria.fr/bugs/show_bug.cgi?id=2767

我相信,你想要的是proj1_sig。您可以在文档中看到它是如何定义的。