Coq箭头是什么意思 - >在Coq定理?

时间:2018-02-13 21:25:13

标签: coq

我想了解Coq定理:

public interface IDbService<T> where T: IEntity { .... }

public class DbService<T> : IDbService<T> where T : IEntity { .... }

来自https://github.com/GU-CLASP/FraCoq/blob/master/Tutorial.org

箭头符号Theorem thm0 : UseCl Pos (PredVP (UsePN john_PN) walk_V) -> UseCl Pos (PredVP (UsePN john_PN) walk_V). intro H. exact H. Qed. 是什么意思?据我了解,Coq使用两个箭头https://softwarefoundations.cis.upenn.edu/lf-current/Basics.html:1)双箭头用于定义类型构造函数,2)单箭头->用于definint新类型。但这个定理是陈述,而不是类型定义。为什么会出现这个箭头?如何将此陈述理解为Coq定理?

1 个答案:

答案 0 :(得分:4)

在Coq中使用双箭头(=>)来标记模式匹配分支。例如,我们可以像这样定义布尔否定:

Definition negb (b : bool) : bool :=
  match b with
  | true  => false
  | false => true
  end.

单箭头(->)用于表达两个看似无关的概念:

  1. 功能类型。例如,nat -> bool是从自然数到布尔值的函数类型。

  2. 逻辑含义。这是您在定理陈述中看到的用法。声明A -> B表示只要B AA -> B就会成立。

  3. 然而,实际上,这种区别只是肤浅的:在Coq中,暗示和功能的证明实际上是同一件事!对于Coq来说,蕴涵的证据A在准确的意义上是一个函数,它接受证明B真理的证明,并返回一个证明MachineFunctionPass真相的证据。如果这听起来令人困惑,请不要担心:你可以假装大多数时候箭头的两次使用都指的是不同的东西,这不会伤害你。软件基础书有一个chapter,可以更详细地讨论这些问题。