将coq类型nat提取到哪种类型的ocaml中,以便我可以拥有经过认证的程序

时间:2014-08-29 02:08:30

标签: ocaml coq coq-extraction

Coq中,从nat类型到intbig_int的提取未经过认证(效率很高)。如下面这些链接:

http://coq.inria.fr/V8.3/stdlib/Coq.extraction.ExtrOcamlNatBigInt.html

http://coq.inria.fr/distrib/8.3/stdlib/Coq.extraction.ExtrOcamlNatInt.html

两人都说: 免责声明:尝试通过将nat提取到big_int来获得有效的认证程序并不一定是个好主意。请参阅ExtrOcamlNatInt.v中的注释

如果我有coq种类型:natZ, Npositive我应该选择ocaml类型来获取我可以提取的类型一个经过认证(更安全)的程序(我可以忽略它的效率)?。

目前,我选择将所有这些内容提取到int。然后在ocaml int内部,我使用Int64进行内部攻击(获取边界min_intmax_int,如果k < min_intmin_int,否则),对于Zpositive数字我检查:如果(i:int) < 0然后返回类型非负int,如果i <= 0那么它是positive < / p>

1 个答案:

答案 0 :(得分:1)

如果你不关心效率,你不应该尝试将Coq的类型绑定到Ocaml类型,只需按原样提取它们(归纳类型),你就会安全。但是,使用nat(一元数)的计算将非常慢。例如:

Extraction nat.
(*
  type nat =
   | O
   | S of nat
 *)

提取Z会更加冗长。