如何将 Coq 的 Z 提取为 Haskell 的整数
How to extract Coq's Z into Haskell's Integer
我正在尝试将 Coq 中使用 Z
数字的程序提取到 Haskell。我想将 Coq 的 Z 映射到 Haskell 的整数。
我发现一些 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
的定义有三个构造函数:Z0
、Zpos
和Zneg
。我不明白 "Big.zero" "" "Big.opp"
与此有什么关系。
此外,我不明白最后一个字符串是如何工作的:“...最后一个额外的字符串,指示如何对该归纳类型执行模式匹配。” (在 documentation 中找到)。
S.F 的章节 Extraction。说 "we give an OCaml expression that can be used as a "recursor" 在类型的元素上。(想想教会数字。)"。
下面的代码是如何成为递归或进行模式处理的?
"(fun zero succ n →
if n=0 then zero () else succ (n-1))".
在了解了这些之后,我希望自己可以创建我可能需要的提取物。
您可以只导入 ExtrHaskellZInteger
(documentation)。
我正在尝试将 Coq 中使用 Z
数字的程序提取到 Haskell。我想将 Coq 的 Z 映射到 Haskell 的整数。
我发现一些 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
的定义有三个构造函数:Z0
、Zpos
和Zneg
。我不明白 "Big.zero" "" "Big.opp"
与此有什么关系。
此外,我不明白最后一个字符串是如何工作的:“...最后一个额外的字符串,指示如何对该归纳类型执行模式匹配。” (在 documentation 中找到)。
S.F 的章节 Extraction。说 "we give an OCaml expression that can be used as a "recursor" 在类型的元素上。(想想教会数字。)"。
下面的代码是如何成为递归或进行模式处理的?
"(fun zero succ n →
if n=0 then zero () else succ (n-1))".
在了解了这些之后,我希望自己可以创建我可能需要的提取物。
您可以只导入 ExtrHaskellZInteger
(documentation)。