在Coq
中,从类型中提取nat
或未int
经过big_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
types: nat
, Z, N
, 以及我应该选择positive
哪些ocaml
类型来提取我可以拥有认证(更安全)程序的类型(我可以忽略高效)?
目前,我选择将它们全部提取到int
. 然后在里面ocaml int
我用Int64
hack 里面(获取边界min_int
and max_int
,如果k < min_int
then min_int
,否则),for Z
and positive
number 我检查:如果(i:int) < 0
然后返回类型非负整数,如果i <= 0
那么它是类型positive