我使用从 Coq 到 OCaml 的提取,其中我有 type Z
, N
,positive
我不用来提取它int
不习惯从 OCaml 中提取它。
那么我提取后的类型是:
type positive =
| Coq_xI of positive
| Coq_xO of positive
| Coq_xH
type coq_N =
| N0
| Npos of positive
type coq_Z =
| Z0
| Zpos of positive
| Zneg of positive
我在 OCaml 中有一个程序,其中一些函数使用 OCaml 类型string
。
在我的 OCaml 程序中,我需要编写一些函数来转换类型:string -> coq_N
, string -> coq_Z
,string -> positive
我尝试在 Coq 中编写函数,然后使用提取来获取 OCaml 类型,但 Coqstring
与 OCaml 不同string
。
例如:
open Ascii
open BinNums
open Datatypes
type string =
| EmptyString
| String of ascii * string
let string_of_coqN (s: string): coq_N =
match s with
| EmptyString -> N0
| String (a, _) -> (coq_N_of_ascii a);;
函数coq_N_of_ascii
的提取在哪里。coq
N_of_ascii
当我应用函数string_of_coqN
时,例如:
let test (x: string) = string_of_N x;;
我得到了抱怨
Error: This expression has type string but an expression was expected of type
String0.string
您能否帮我找到一种编写转换函数的方法string -> coq_N
:string -> coq_Z
和string -> positive
?