我正试图从一个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 }.
如何提取这样的x
?
The 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.
答案 0 :(得分:2)
这解释得非常好: http://coq.inria.fr/stdlib/Coq.Init.Specif.html
根据“sig的预测”一节。 (请注意,该段落中存在拼写错误:https://coq.inria.fr/bugs/show_bug.cgi?id=2767)
我相信,你想要的是proj1_sig
。您可以在文档中看到它是如何定义的。