Ocaml Coq生成的萃取机理;用“失败”;“要实现的公理”&引用;

Ocaml Coq生成的萃取机理;用“失败”;“要实现的公理”&引用;,ocaml,coq,coq-extraction,Ocaml,Coq,Coq Extraction,我在这个模块中有一个模块结构,我声明一个变量用于模块a中的某个函数 Module A. Variable a : nat. End A. 然后我使用提取机制 Extraction Language Ocaml. Set Extraction Optimize. Set Extraction AccessOpaque. Extraction A. 或者只是 Extraction A. 它为我生成了带有警告的代码: “以下公理必须在提取的代码中实现:A.A” 在这里,我收到

我在这个模块中有一个模块结构,我声明一个变量用于
模块a
中的某个函数

Module A.

  Variable a : nat.   

End A.
然后我使用提取机制

Extraction Language Ocaml.   
Set Extraction Optimize.
Set Extraction AccessOpaque.
Extraction A.
或者只是

Extraction A.
它为我生成了带有警告的代码: “以下公理必须在提取的代码中实现:A.A”

在这里,我收到了
a
failwith“AXIOM TO REALIZED”
由于此
failwith

因为我必须在模块内部使用变量
a

我想知道有没有一种方法可以定义一个模块,它在提取后不会生成
failwith
?或者与提取有关的东西,它不会生成这个
failwith
函数?

那么,在某个时候,您必须为
a.a
提供一个值。如果您想抽象
A
A
相关的内容,我想最方便的方法是使用函子,函子在OCaml中直接翻译为:

Module Type Param.
  Variable x: nat.
End Param.

Module A (Import P: Param).

  Definition a:=P.x.   

End A.

Extraction Language Ocaml.   
Set Extraction Optimize.
Set Extraction AccessOpaque.

Extraction "test.ml" A.
(当然,您必须实例化生成的OCaml函子
A
,才能运行计算)

Module Type Param.
  Variable x: nat.
End Param.

Module A (Import P: Param).

  Definition a:=P.x.   

End A.

Extraction Language Ocaml.   
Set Extraction Optimize.
Set Extraction AccessOpaque.

Extraction "test.ml" A.