Gallina和OCaml之间是什么关系?

时间:2019-05-28 15:25:12

标签: functional-programming ocaml coq

我了解到Coq是用OCaml编写的,但其规范语言为Gallina。除了它们都是功能性编程语言以外,这两种语言又有何关系?

1 个答案:

答案 0 :(得分:2)

这是一个充满挑战的问题。

Gallina可以独立于OCaml而存在,尽管它是Lambda演算,但它具有一些构造和语义,并且已经在OCaml世界中进行了开发,还共享了一些具体的语法。但是OCaml可能不适合代替Gallina。

一些相似之处:

  • 他们共享一种以lambda微积分为灵感的功能语言。
  • 它们具有相似的代数数据类型声明(尽管在允许和可表达的内容上有很多差异)。

(主要)差异

  • Gallina具有依赖类型,而OCaml具有接近于prenex-polymorphic System F的类型系统,并且具有一些子类型...我不确定如何调用它,但是它在某些类型中不如依赖类型那么富有表现力方式,尽管它具有Gallina所不具备的一些额外功能。
  • Gallina是合计的,这意味着所有函数必须在语法上表现良好,无论是明确终止还是在计算上取得进步。 OCaml是一种通用语言,在这种语言中,不需使用终止符即可。
  • Gallina是纯净的,而OCaml具有副作用原始语。
  • 如果您愿意,加里纳(Gallina)“仅能正常工作”。 OCaml具有对象的概念,具有一些“命令式”的功能(由于先前列出的所有差异)。

实际上,从历史上看,ML(OCaml是它的某种变体)对LCF来说就像Ltac对Gallina一样! :-D(哦,天哪,由于此注释,我可能会收到一些愤怒的评论...)