小编典典

Agda 和 Idris 的区别

all

我开始深入研究依赖类型编程,发现 Agda 和 Idris 语言最接近 Haskell,所以我从那里开始。

我的问题是:它们之间的主要区别是什么?类型系统在它们中是否同样具有表现力?对收益进行全面的比较和讨论会很棒。

我已经能够发现一些:

  • Idris 有类型类脿 la Haskell,而 Agda 有实例参数
  • Idris 包括单子和应用符号
  • 它们似乎都有某种可重新绑定的语法,尽管不确定它们是否相同。

编辑 :这个问题的 Reddit 页面中有更多答案:http
://www.reddit.com/r/dependent_types/comments/q8n2q/agda_vs_idris/


阅读 251

收藏
2022-08-01

共1个答案

小编典典

我可能不是回答这个问题的最佳人选,因为实施了 Idris 我可能有点偏见!FAQ - http://docs.idris-
lang.org/en/latest/faq/faq.html - 有话要说,但要扩展一下:

Idris 从一开始就被设计为支持定理证明之前的通用编程,因此具有高级功能,例如类型类、do notation、成语方括号、列表推导、重载等。Idris
将高级编程置于交互式证明之前,尽管由于 Idris 建立在基于策略的详细说明器上,因此有一个基于策略的交互式定理证明器的接口(有点像 Coq,但不如 Coq
先进,至少目前还没有)。

Idris 旨在很好地支持的另一件事是嵌入式 DSL 实现。使用 Haskell,您可以使用 do 表示法,您也可以使用
Idris,但如果需要,您还可以重新绑定其他构造,例如应用程序和变量绑定。您可以在本教程中找到更多详细信息,或在本文中找到完整详细信息:http:
//eb.host.cs.st-andrews.ac.uk/drafts/dsl-idris.pdf

另一个区别在于编译。Agda 主要通过 Haskell,Idris 通过 C。Agda 有一个实验性后端,它使用与 Idris 相同的后端,通过
C。我不知道它的维护情况如何。Idris 的主要目标始终是生成高效的代码——我们可以做得比现在更好,但我们正在努力。

Agda 和 Idris 中的类型系统在许多重要方面都非常相似。我认为主要区别在于对宇宙的处理。Agda 具有宇宙多态性,Idris
具有累积性(Set : Set如果您觉得这太严格并且不介意您的证明可能不可靠,您可以同时拥有这两者)。

2022-08-01