有一种编程“样式”(或者范式,我不知道该如何称呼它)如下所示:
首先,编写一个规范:对(整个或部分)程序所要做的事情进行正式描述。这是在编程系统中完成的;它不是一个单独的工件。
然后,编写程序,但是--这是这种编程风格和其他编程风格之间的关键区别--这个编写任务的每一步都在某种程度上由您在前一步中编写的规范所指导。这个指导是如何发生的?在Coq中,您有一种元编程语言(Ltac),它允许您在幕后构建实际程序的同时“细化”规范,而在Agda中,通过填充“漏洞”(我不确定它在Agda中是如何进行的,因为我主要习惯于Coq)来编写程序。
这并不是每个人都喜欢的编程风格,但我想试着用通用、流行的编程语言来练习它。至少在Coq中,我发现它相当容易上瘾!
...but,我怎么才能在证据助手之外寻找方法呢?这就引出了一个问题:我正在为这种编程风格寻找一个名字,这样我就可以尝试查找一些工具,让我可以用其他编程语言那样编程。
当然,更恰当的问题是直接询问此类工具的示例,但是AFAIK问题询问答案列表并不适合于Stack Exchange站点。
而且要明确的是,我并不完全希望我能找到很多东西;这些都是学术上的消遣,而您典型的编程语言实际上并不适合这种编程风格(例如,规范语言可能最终会变得非常复杂)。但值得一试!
发布于 2020-12-31 06:49:15
它被称为验证驱动开发(或类型驱动开发)。然而,有关这方面的信息很少。
发布于 2021-01-05 23:08:38
您提到的通过ltac (在coq情况下)或洞(在Agda和Idris的情况下)缓慢创建程序的过程称为精化。因此,您还可以在文献中找到这种风格的参考,如精化证明或精化编程。
现在需要认识到的最重要的事情是,这种编程风格对于更复杂的类型系统是固有的,它将允许您提取尽可能多的当前环境的信息。因此,找到依附类型是很自然的,尽管情况不一定如此。
正如在另一个响应中提到的,您也会发现对它的引用是类型驱动的开发,有一个关于它的伊德里斯书。
你可能对其他一些项目感兴趣,如精益,伊莎贝尔,伊德里斯,Agda,雪地,也许液体Haskell,TLA+和SAW。
发布于 2021-01-05 23:57:11
正如前面的两个答案所指出的,您提到的程序风格的一个可能名称是:类型驱动开发。
从Coq的角度来看,您可能对以下两个引用感兴趣:
最后但并非最不重要的一点是,来自语篇OCaml论坛的讨论中有一些额外的指针。
https://stackoverflow.com/questions/65442179
复制相似问题