从COQ生成Haskell代码:使用逻辑或算术值

从COQ生成Haskell代码:使用逻辑或算术值,haskell,coq,coq-extraction,Haskell,Coq,Coq Extraction,我目前正试图从我的程序验证引理生成Haskell代码,如下所示: Lemma the_thing_is_ok : forall (e:Something), Matches e (calculate_value e). 在结束我的部分后,我会: Extraction Language Haskell. Recursive Extraction the_thing_is_ok 而且它似乎对某些事情并不真正满意,因为它返回以下错误: __ = Prelude.error "Logical or

我目前正试图从我的程序验证引理生成Haskell代码,如下所示:

Lemma the_thing_is_ok : forall (e:Something),  Matches e (calculate_value e).
在结束我的部分后,我会:

Extraction Language Haskell.
Recursive Extraction the_thing_is_ok
而且它似乎对某些事情并不真正满意,因为它返回以下错误:

__ = Prelude.error "Logical or arity value used"

我有另一个引理,它看起来很好,但我不能弄清楚到底是什么问题。关于如何解决该错误的任何线索?

Coq在提取过程中删除类型为
Prop
的值,这些值被认为没有计算意义。如果您有一个需要使用
Prop
进行计算的计算,则提取将失败。

您的引理是否像通常情况一样位于Prop中?我相信Coq会在提取过程中丢弃所有道具信息。例如,如果你提取
{n:nat | somePredicate n}
你会得到一个自然的,但没有谓词的证明。只需在集合中写下你的道具。所有的东西都应该在那里工作,本质上是一样的,唯一的功能上的不同就是使道具提取中断的原因。太棒了!谢谢!