这是一个基本问题。 Coq具有Gallina形式的规范语言。据我了解,Coq本身是用OCaml编写的。
我的问题是,加利纳什么时候起作用?它有什么用,为什么?我认为我误解了规范语言和编程语言的使用。
答案 0 :(得分:7)
Gallina既是Coq的“编程语言”又是“规范语言”。
在某些校对助手中,用于构建程序的语言与用于构建规范的语言是一种不同的语言,而用于构建校对的语言甚至可能是第三种语言!在Coq中,您可以使用Gallina来完成所有这三个任务,因为它使用了支持所有这些工作的统一框架。
现在,使用OCaml作为用于构建语言和工具的编程语言来构建Coq系统(类型检查器,编译器,IDE等)。但是,就像其他编程语言一样,该语言和工具的实现方式几乎永远都不应该在该语言中看到:它是自托管的,使用C语言生成的,还是汇编语言,或者在某种程度上是实现细节。 >
OCaml确实出现在Coq的某些高级用法中(如果您想编写插件),但是在大多数情况下,您可以将其视为运行证明助手的“程序集”。
答案 1 :(得分:1)
对于普通用户而言,Coq是用OCaml编写的事实是不可见的。 Gallina是Coq的语法。 (它不是语法的全部,还是战术语言之类的东西。)如果用Coq编写程序,则用Gallina语法编写。当然,Coq不会将证明和程序的概念分开(这是Curry-Howard同构的重点,证明和程序是同一件事。)