小编Oll*_*edt的帖子

Coq可以(轻松)用作模型检查器吗?

正如标题所说,Coq可以用作模型检查器吗?我可以将模型检查与Coq证明混合使用吗?这通常吗?谷歌谈到"微积分",有没有人有这种或类似的经验?建议以这种方式使用Coq,还是应该寻找其他工具?

model-checking coq

20
推荐指数
2
解决办法
2626
查看次数

__memcpy_sse2_unaligned - 这是什么意思?

在处理我的编译器时,我遇到了这个错误:

Program received signal SIGSEGV, Segmentation fault.
__memcpy_sse2_unaligned () at ../sysdeps/x86_64/multiarch/memcpy-sse2-unaligned.S:33
Run Code Online (Sandbox Code Playgroud)

如何获取此处出现问题的详细信息?我从backtrace中知道它memcpy是导致它的一条线,但是我如何看待内存是如何对齐的?我怎么知道它应该如何对齐?

该项目是一个带有LLVM后端的编译器,使用Zend/PHP运行时和OCaml垃圾收集器,因此有很多问题可能出错.

我怀疑这一行是问题的一部分:

zend_string *str = (zend_string *)caml_alloc(ZEND_MM_ALIGNED_SIZE(_STR_HEADER_SIZE + len + 1), 0);
Run Code Online (Sandbox Code Playgroud)

其中caml_alloc分别pemalloc在Zend源代码.

在执行10,000个字符串连接时会发生段错误.这是valgrind的输出:

==7501== Invalid read of size 8
==7501==    at 0x4C2F790: memcpy@@GLIBC_2.14 (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==7501==    by 0x4D7E58: subsetphp_concat_function (bindings.c:160)
==7501==    by 0x4D7F52: foo (llvm_test.s:21)
==7501==    by 0x4D7FA9: main (llvm_test.s:60)
==7501==  Address 0x61db938 is 2,660,600 bytes inside a block of size 3,936,288 free'd
==7501==    at 0x4C2BDEC: free (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) …
Run Code Online (Sandbox Code Playgroud)

c ocaml memory-alignment php-internals

16
推荐指数
1
解决办法
2万
查看次数

为什么OCaml不支持记录子类型?

阅读"类型和编程语言",我对使用闭包和记录子类型的对象实现印象深刻(第18章).是否有任何特殊原因OCaml不支持记录子类型(我知道对象确实如此)?事实上,我找不到任何支持这种语言的语言.

ocaml record subtyping

14
推荐指数
2
解决办法
1863
查看次数

OCaml中的依赖类型

关于Haskell和Scala中的依赖类型有很多信息.对于OCaml,没有那么多.是否有足够的技术人员提供有关如何在OCaml中实现此目的的编码示例(如果可能的话)?当然(废弃的)Dependent ML,但似乎不可能将这些东西合并到"常规"OCaml代码中.

基本上,我想要做的是删除代码assert(n > 0),并在编译时检查它.

编辑

作为旁注,值得一提的是OCaml 混合合同检查分支,它可以满足依赖类型系统的一些需求.而不是assert(n > 0)你会写一份合同:

contract f = {x : x > 0} -> int
let f x = x + 1
let dummy_variable = f (-1) (* Won't compile *)
Run Code Online (Sandbox Code Playgroud)

编辑2:对于读这篇文章的人来说,我认为F*是一种有趣的ML类语言,具有依赖类型.

ocaml types

12
推荐指数
1
解决办法
3156
查看次数

使用mendir与sedlex

无论出于何种原因,我都需要使用mendir和sedlex(utf-8),但是不知道如何使生成的解析器依赖Sedlexing而不是Lexing.有小费吗?

我跑的时候

menhir --infer parser.mly
Run Code Online (Sandbox Code Playgroud)

生成的程序有行Lexing....我可以手动更改它,但必须有另一种方式,不是吗?

parsing ocaml lexer menhir

8
推荐指数
1
解决办法
721
查看次数

OCaml分支信息

http://caml.inria.fr/cgi-bin/viewvc.cgi/ocaml/branches/中有很多有趣的OCaml分支.但是,我似乎无法找到有关这些功能的任何有用的信息.他们不是公开的吗?例如,README文件在所有分支中都是相同的.如何找到有关他们的更多信息(只是谷歌搜索将无济于事)?

ocaml branch

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

Concoqtion(Coq + MetaOCaml) - 为何放弃?

在OCaml邮件列表上窃听人们之前,我想我可能会在这里发布我的问题.我刚发现这个美女(链接到Concoqtion网站).Concoqtion是MetaOCaml的扩展,它允许索引类型(可能还有更多).有了它,很容易创建列表,其中包括列表的长度:

type ('n:'(nat),'a) listl =
   | Nil : ('(0),'a) listl
   | Cons of let 'm:'(nat) in 'a * ('(m),'a) listl : ('(m+1),'a) listl
Run Code Online (Sandbox Code Playgroud)

(m+1)是在类型级别完成的.井井有条.

但是,最后一个版本是2007年(OCaml 3.08).有谁知道为什么这个项目被取消,或者今天OCaml有类似的东西?

ocaml types coq metaocaml

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

包括模块,强制

我正在写一篇博客文章,介绍如何使用OCaml的模块系统而不是Java的OO系统(一个有趣的视角).我遇到过一些我不明白强迫的事情.下面是一个基本模块和两个包含它的模块:

module M = struct
  type t = int
  let make () = 1
end   
module A = struct
  include M
end
module B = struct
  include M
end
Run Code Online (Sandbox Code Playgroud)

现在At和Bt是同一类型!为什么?如果你这样做,那就显而易见了

let a = A.make();;
let b = B.make();;
[a;b] --> A.t list (* ? *)
Run Code Online (Sandbox Code Playgroud)

我知道可以使用私有类型缩写来防止这种情况,然后如果要将它们放在同一个列表中则使用强制.我的问题是:为什么不这样做?编译器如何知道它A.t并且B.t来自相同的基类型?

关心
Olle

ocaml types module include

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

js_of_ocaml和Deriving_Json

我需要一些帮助才能让js_of_ocaml正常工作.网上没有太多关于它的信息,手册非常稀疏(没有片段或用法示例,没有评论部分).

Card在服务器上有一个带有card记录的模块.我正在card list使用Ajax向客户端发送一个,我想阅读并遍历此列表.我最终得到的是:

let json = Json.unsafe_input (Js.string http_frame.XmlHttpRequest.content) in
Run Code Online (Sandbox Code Playgroud)

... 根据文档(当我运行它时,当然json有类型'a).

我可以记录json##length并获得列表的正确长度.我从哪里开始?理想情况下,我想使用Deriving_Json类型安全card list再次获取,但我也可以使用for循环(不是优雅,但无论如何).

javascript json ocaml deriving js-of-ocaml

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

什么是归纳谓词?

你如何解释归纳谓词?它们是做什么用的?他们背后的理论是什么?它们仅存在于依赖类型系统中,还是也存在于其他系统中?它们在某种程度上与 GADT 相关吗?为什么它们在 Coq 中默认为 true?

这是 Coq 的一个例子:

Inductive even : nat -> Prop :=
| even0 : even 0
| evens : forall p:nat, even p -> even (S (S P))
Run Code Online (Sandbox Code Playgroud)

你会如何使用这个定义?它是数据类型还是命题?

predicate coq induction

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