标签: coq-extraction

在将Coq提取到Haskell时如何设置模块名称

当我Extraction Language Haskell.在Coq文件中使用Coq提取/编译Coq到Haskell 并运行时coqtop -compile mymodule.v > MyModule.hs,我得到了一个以Haskell开头的模块module Main where.

是否可以选择设置生成的Haskell模块名称?

我目前管道像这样sed -

coqtop -compile mymodule.v | sed s/Main/MyModule/ > MyModule.hs
Run Code Online (Sandbox Code Playgroud)

但我正在寻找一个更清洁的解决方案.

haskell coq coq-extraction

7
推荐指数
1
解决办法
77
查看次数

从Coq中提取时,您能自动添加Haskell导入语句吗?

我正在从Coq提取到Haskell,需要在Haskell端导入几个模块.是否有任何Coq提取功能允许您自动执行此操作?我知道我可以写一个脚本来做这件事,但我宁愿不必重新发明轮子.

haskell coq coq-extraction

7
推荐指数
1
解决办法
140
查看次数

证明在Coq提取中的作用

我试图了解证明在Coq提取中的作用。我被两个取自有地板整数除法下面的例子在这里。我第一次尝试使用Admitted关键字:

(*********************)
(* div_2_even_number *)
(*********************)
Definition div_2_even_number: forall n,
  (Nat.Even n) -> {p:nat | n=p+p}.
Proof.
Admitted.

(*************)
(* test_even *)
(*************)
Definition test_even: forall n,
  {Nat.Even n}+{Nat.Even (pred n)}.
Proof.
Admitted.

(********************)
(* div_2_any_number *)
(********************)
Definition div_2_any_number (n:nat):
  {p:nat | n = p+p}+{p:nat | (pred n) = p+p} :=
  match (test_even n) with
  | left h => inl _ (div_2_even_number n h)
  | right h' => inr _ (div_2_even_number (pred n) h')
  end. …
Run Code Online (Sandbox Code Playgroud)

haskell coq coq-extraction

7
推荐指数
2
解决办法
139
查看次数

使用Coq的提取机制将Coq中的仿函数提取到Ocaml

我有一个功能PolyInterpretation(http://color.inria.fr/doc/CoLoR.PolyInt.APolyInt.html)

Definition PolyInterpretation := forall f : Sig, poly (arity f).
Run Code Online (Sandbox Code Playgroud)

和模块签名TPolyInt(http://color.inria.fr/doc/CoLoR.PolyInt.APolyInt_MA.html)

Module Type TPolyInt.
  Parameter sig : Signature.
  Parameter trsInt : PolyInterpretation sig.
  Parameter trsInt_wm : PolyWeakMonotone trsInt.
End TPolyInt.

Module PolyInt (Export PI : TPolyInt).
Run Code Online (Sandbox Code Playgroud)

然后在我的文件中rainbow.v,我定义了一个TPolyInt_imp使用仿函数的模块目的PolyInt

Module TPolyInt_imp.
 Variable arity : symbol -> nat.
 Variable l : list {g : symbol & poly (arity f).
 Definition sig := Sig arity.
 Definition trsInt f := fun_of_pairs_list …
Run Code Online (Sandbox Code Playgroud)

ocaml coq coq-extraction

6
推荐指数
0
解决办法
383
查看次数

是否可以使用Coq编写C程序?

我知道可以将Coq程序提取到Haskell和OCaml程序中.有没有办法用C做到这一点?

我想象的是一个模拟C语言的库.也许这样的库将包含关于C构造如何与过程存储器相互作用的公理集合,以及关于IEEE浮点数的公理和定理.然后,它将能够在Coq中构建一个C程序以及有关该程序的定理.

比方说,我会使用这样一个库来构建一个C快速排序算法,该算法适用于可由GCC编译的浮点数组.

coq coq-extraction

6
推荐指数
1
解决办法
710
查看次数

从COQ生成Haskell代码:使用逻辑或arity值

我目前正在尝试从我的程序验证引理生成Haskell代码,如下所示:

Lemma the_thing_is_ok : forall (e:Something),  Matches e (calculate_value e).
Run Code Online (Sandbox Code Playgroud)

在结束我的部分之后,我做:

Extraction Language Haskell.
Recursive Extraction the_thing_is_ok
Run Code Online (Sandbox Code Playgroud)

它似乎并不是真的很高兴,因为它返回以下错误:

__ = Prelude.error "Logical or arity value used"
Run Code Online (Sandbox Code Playgroud)

我有另一个Lemma似乎确实输出得很好,但我无法弄清楚究竟是什么问题.有关如何解决该错误的任何线索?

haskell coq coq-extraction

5
推荐指数
1
解决办法
178
查看次数

Coq 命令 Require Import Ltac 的作用是什么?

当我查看 QuickChick 项目时,遇到了这句话“Require Import Ltac.我不知道这是做什么的以及Ltac模​​块在哪里”。我找到了一个文件plugins/ltac/Ltac.v,但这不可能是这个文件,因为该文件是空的(顺便说一句,包含空文件的目的是什么?)。我尝试过Locate Ltac.,但得到了Error: Syntax error: [constr:global] expected after 'Ltac' (in [locatable]).,这更令人困惑。

该模块的作用是什么Ltac,文件在哪里Ltac.v,为什么该Loacte命令在这种情况下不起作用?谢谢!

coq coq-tactic coq-extraction

5
推荐指数
1
解决办法
200
查看次数

Coq:haskell 的 Replicate 函数的强规范

我在理解 Coq 中强规范和弱规范之间的区别时遇到了一些麻烦。例如,如果我想使用强规范方式编写复制函数(给定一个数字 n 和一个值 x,它会创建一个长度为 n 的列表,其中所有元素都等于 x),我将如何做到这一点? 显然我必须编写函数的归纳“版本”,但如何编写?

Haskell 中的定义:

myReplicate :: Int -> a -> [a]
myReplicate 0 _ = []
myReplicate n x | n > 0 = x:myReplicate (n-1) x
                | otherwise = []
Run Code Online (Sandbox Code Playgroud)

规范的定义

用弱规范定义这些函数,然后添加伴随引理。例如,我们定义一个函数 f : A->B 并证明形式为 ? x:A, Rx ( fx ),其中 R 是对函数的预期输入/输出行为进行编码的关系。

规范的定义

给出函数的强规范:该函数的类型直接声明输入是类型 A 的值 x,输出是类型 B 的值 v 和 v 满足Rxv的证明的组合。这种规范通常依赖于依赖类型。

编辑:我收到老师的回复,显然我必须做类似的事情,但对于复制案例:

“例如,如果我们想从其规范中提取一个计算列表长度的函数,我们可以定义一个关系 RelLength,该关系建立预期输入和输出之间的关系,然后证明它。像这样:

Inductive RelLength (A:Type) : nat …
Run Code Online (Sandbox Code Playgroud)

haskell coq coqide coq-extraction

5
推荐指数
0
解决办法
140
查看次数

Coq 证明用法

我是 Coq 的初学者,我很快就学会了这门语言,可以做证明等。

但我不明白我们能用这个做什么。好吧,我们证明了一些定义等。但是我们可以通过哪些方式使用它们呢?我看到我们可以提取 Haskell 文件,但我也不明白。

因为我想用语言来证明例如CVE 。

coq coq-extraction

3
推荐指数
1
解决办法
223
查看次数

标签 统计

coq ×9

coq-extraction ×9

haskell ×5

coq-tactic ×1

coqide ×1

ocaml ×1