![]() |
1
61
好吧,有几件事要开始,因为你走的是哈斯克尔路线:
如果你真的想 ,不仅仅是 测试 如果你想走得更远,如果我有记忆的话 Coq 有一个“extract to Haskell”特性,可以让您证明关键函数的任意属性,然后将证明转换为Haskell代码。 直接在哈斯凯尔做些花哨的系统工作, Oleg Kiselyov is the Grand Master higher-rank polymorphic types to encode static proofs of array bounds checking . using a type-level certificate 将一段数据标记为已检查过其正确性。您仍然需要自己进行正确性检查,但其他代码至少可以依赖于知道某些数据已经被检查过。 您可以采取的另一个步骤是,在轻量级验证和花哨类型系统技巧的基础上,使用Haskell作为宿主语言来嵌入 domain-specific languages
哦,最后一件事。关于避免Haskell所包含的陷阱的一些建议,这些陷阱可能会破坏本来可以通过构建安全的代码:这里是您的死敌
,和
|
![]() |
2
20
可能最接近你要求的是 Haskabelle ,一个随证明助手提供的工具 Isabelle 它可以把哈斯克尔的文件翻译成伊莎贝尔的理论,让你证明他们的东西。据我所知,这个工具是在HOL-ML-Haskell项目中开发的,并且 the documentation page 包含一些关于背后理论的信息。 Brian Huffman 一直在玩弄这些东西,看看他的文件和谈话,里面应该有相关的东西。 |
![]() |
3
18
我不确定你所要求的是否真的能让你快乐。:-) 没有自动寻找证据的方法 以充分表达的逻辑。 自己校对 “直觉”地理解你的程序是正确的 很难将这种理解形式化 作为证据。直觉理解的问题是它很容易受到意外错误(打字错误和其他愚蠢的错误)的影响。这是编写正确程序的基本困境。
在我看来,目前编写正确程序的最佳时机是 纯函数式编程 . 如果生命取决于你程序的正确性,你最好提高一个级别,并使用一个证明助手。 |
![]() |
4
5
听起来你想要ESC/Haskell: http://research.microsoft.com/en-us/um/people/simonpj/papers/verify/index.htm 哦,Agda现在确实有一个web框架(至少是概念证明): http://www.reddit.com/r/haskell/comments/d8dck/lemmachine_a_web_framework_in_agda/ |
![]() |
6
3
你看似简单的例子add(a,b)实际上很难验证——浮点、溢出、下溢、中断、编译器验证、硬件验证等等。 Habit 是Haskell的一种简化方言,允许证明程序属性。 Hume 是一种有5个级别的语言,每个级别都有限制,因此更易于验证: Full Hume Full recursion PRâHume Primitive Recursive functions TemplateâHume Predefined higherâorder functions Inductive data structures Inductive Nonârecursive firstâorder functions FSMâHume Nonârecursive data structures HWâHume No functions Nonârecursive data structures 当然,现在最流行的证明程序属性的方法是单元测试,它提供了强大的定理,但是这些定理过于具体。 "Types Considered Harmful", Pierce, slide 66 |
![]() |
7
3
看一看 Zeno . 引用wiki页面:
|
![]() |
8
2
当然可以证明 一些 Haskell程序的性质。在我的FP考试中我不得不这样做:给出两个表达式,证明它们表示相同的函数。由于Haskell是图灵完备的,所以一般不可能做到这一点,所以任何机械证明都必须是一个证明助手(带用户指导的半自动)或模型检查器。 P-logic: property verification for Haskell programs 或 Proving the correctness of functional programs using Mizar . 两者都是学术论文,描述的方法多于实现。 |
![]() |
10
1
工具 AProVE 更多信息请参见 this paper ( shorter version ). 除此之外,你可能对 Dependent Types . 在这里,类型系统被扩展并用于使错误的程序不可能。 |
![]() |
11
1
你可以用这个工具
|
![]() |
mg610 · 如何开始C++单元测试 2 年前 |
![]() |
vidhu · 无URL的自动化测试 2 年前 |
![]() |
Aessandro · js开关站单元测试[关闭] 6 年前 |
![]() |
AntoineLB · 断言后期工作Django 6 年前 |
|
ravikant · Selenium脚本不工作异常 6 年前 |
![]() |
splintor · 如何在angular中的单元测试中测试文档点击 6 年前 |