如何将Coq的Z提取到Haskell的Integer中

时间:2018-05-07 17:17:00

标签: coq coq-extraction

我正在尝试向Coask中提取一个使用Z数字的Coq程序。我想将Coq的Z映射到Haskell的Integer。

我找到了一些libraries来做瞄准OCaml,但没有瞄准Haskell。 那没有图书馆吗?

我需要提取(找到here):

Extract Inductive positive => "Big.big_int"
 [ "Big.doubleplusone" "Big.double" "Big.one" ] "Big.positive_case".

Extract Inductive Z => "Big.big_int"
 [ "Big.zero" "" "Big.opp" ] "Big.z_case".

Extract Inductive N => "Big.big_int"
 [ "Big.zero" "" ] "Big.n_case".

但是针对Haskell。

我只会问:怎么做?。

但其次,我应该说为什么我自己不能这样做:

我想我自己可能无法想到这一点,因为我误解了一些事情,例如:为什么第二个定义中有一个空字符串? Z的定义有三个构造函数:Z0ZposZneg。我不知道"Big.zero" "" "Big.opp"与此有何关联。

另外,我不明白最后一个字符串是如何工作的:“......最后一个额外的字符串,指示如何在这个感应类型上执行模式匹配。” (见documentation)。

S.F.的Extraction章说“我们给出一个OCaml表达式,可以用作类型元素的”recursor“。(想想教会的数字。)”。

下面的代码如何是一个recursor或模式加工?

  "(fun zero succ n →
      if n=0 then zero () else succ (n-1))".

在我了解这些事情之后,我希望我能够创造出我可能需要的提取物。

1 个答案:

答案 0 :(得分:4)

您只需导入ExtrHaskellZIntegerdocumentation)。