Functional programming Gallina和OCaml之间的关系是什么?

Functional programming Gallina和OCaml之间的关系是什么?,functional-programming,ocaml,coq,Functional Programming,Ocaml,Coq,我了解到Coq是用OCaml编写的,但它的规范语言是Gallina。这两种语言除了都是函数式编程语言外,还有什么关系?这是一个有点复杂的问题 Gallina可以独立于OCaml而存在,但作为一种lambda演算,它与OCaml共享一些构造和语义,并且在OCaml世界中开发出来,它也共享一些具体语法。但OCaml不可能取代Gallina 一些相似之处: 它们共享一种受lambda演算启发的函数式语言 它们有类似的代数数据类型声明(尽管在允许和可表达的方面有很多不同) 一些(主要)差异: Ga

我了解到Coq是用OCaml编写的,但它的规范语言是Gallina。这两种语言除了都是函数式编程语言外,还有什么关系?

这是一个有点复杂的问题

Gallina可以独立于OCaml而存在,但作为一种lambda演算,它与OCaml共享一些构造和语义,并且在OCaml世界中开发出来,它也共享一些具体语法。但OCaml不可能取代Gallina

一些相似之处:

  • 它们共享一种受lambda演算启发的函数式语言
  • 它们有类似的代数数据类型声明(尽管在允许和可表达的方面有很多不同)
一些(主要)差异:

  • Gallina有依赖型,而OCaml有一个接近prenex多态系统F的类型系统,带有一些亚型。。。我不知道如何称呼它,但在某些方面,它的表现力不如依赖类型,尽管它有一些Gallina没有的额外特性
  • Gallina是total,这意味着所有函数必须在语法上表现良好,要么明确终止,要么明确进行计算。OCaml是一种更通用的语言,在这种语言中,不终止是可以接受的
  • Gallina是纯的,而OCaml有副作用的原语
  • 如果您愿意,Gallina是“功能性的”。OCaml有一个对象的概念,一些看起来“命令式”的特性(由于前面列出的所有差异)

事实上,从历史上看,ML(OCaml的一些变体)对LCF的影响与Ltac对Gallina的影响类似:-D(哦,天哪,我可能会因为这张便条而得到一些愤怒的评论…

Wrt最后一句话,现在还有Ltac2,据我所知,它比Ltac更接近OCaml。