从Coq中提取的Ocaml代码包括(在某些情况下)定义如下的类型__和函数__:let __ = let rec f _ = Obj.repr f in Obj.reprf
文档说,在过去,这种类型被定义为unit (因此__可以被视为()),但是存在(很少)将__类型的值应用于__类型的值的情况。__使用了OCaml中未记录的Obj模块函数,但似
我可以看到Coq用于定义引理的不同语法。例如,Lemma plus_n_O: forall n:nat, n = n + 0.和Lemma plus_n_O n: n = n + 0.都定义了零与任意数字之和等于该数字。这些定义有何不同?或者,这是Coq的一个新特性,可以从定义中删除forall量词。
LF编译文件时,我得到了错误: coqc: -Q: no such file or directory coqc信息: The Coq Proof Assistant, version 8.4pl6 (December 2020)
compiled on Dec 02 2020 23:06:36 with OCaml 4.02.0 奇怪的是,它以前对我是有效的。我格式化了我的磁盘到相同的操作系统,安装了相同的opam,但我得到了一个错误,我以前没有。出于遗留原因,也使用8.4.6。
我知道Coq允许定义相互递归的归纳类型。但是有没有一种方法可以用Coq编写递归定义呢?例如,我想将一个定义写为:
Definition myDefinition A := forall B C, (myDefinition B) \/ (A = C).上述定义中的重要部分是myDefinition B,它在另一个参数上递归调用相同的定义。在Coq中可以这
我刚刚了解到'record‘关键字可以用来定义一个Prop类型,例如: Record Equivalence (A : Type) (R : relation A) : Prop := Build_EquivalenceReflexive R; Equivalence_Transitive : Transitive R } 但是当我尝试使用记录来定义一个命题时我通过Coq得到以下消息: proprecord is defin