形式化方法课程学习笔记(一)|Cop的安装以及简单使用


一、Cop的介绍以及安装


1、Cop介绍

Coq是一个著名的,也被广泛使用的正式证明管理系统。它提供了一种正式的语言来编写数学定义、可执行的算法和定理,以及用于机器检查证明的半交互式开发的环境。有关Coq的更多信息,以及Coq的文档。

在这门课中,我们将用Coq来做命题逻辑、谓词逻辑和构造逻辑的定理证明。

2、Cop安装

我们将安装使用8.4.0版本之后的Coq,以下是不同平台的安装说明:
Windows/MacOS
直接从从Cop项目发行页面下载安装包
我自己是用Windows系统安装Cop8.11.0
百度云链接:https://pan.baidu.com/s/1RvwKwSk88wPs4hxgvQ9b_g
提取码:1yj2

Linux(Ubuntu/Debian)

  # apt-get install coq

3、使用哪个Coq IDE?

Coq附带的用于编辑Coq源代码的官方IDE是“ CoqIde”。
还有另一个流行的IDE:Proof General,它在Coq社区中更受欢迎。

Proof general的安装很简单:
Ubuntu / Debian:

  #apt-get install proofgeneral
  #apt-get install proofgeneral-coq

4、Cop热身

打开Coq IDE并输入下面的代码文件,单击Go to end按钮,得到如下结果证明安装成功。

Inductive day : Type := 
| monday : day 
| tuesday : day 
| wednesday : day 
| thursday : day 
| friday : day 
| saturday : day 
| sunday : day. 

Definition next_weekday (d:day) : day := 
match d with 
| monday => tuesday 
| tuesday => wednesday 
| wednesday => thursday 
| thursday => friday 
| friday => monday 
| saturday => monday 
| sunday => monday 
end.

Eval compute in (next_weekday friday). 
Eval compute in (next_weekday (next_weekday saturday)). 

形式化方法课程学习笔记(一)|Cop的安装以及简单使用_第1张图片


二、Coq Tactics——Cop的简单使用


在本节中,让我们开始学习如何使用Coq进行证明开发。在证明开发的每个阶段,都有一个要证明的子目标列表。最初,列表由定理本身组成。应用某些策略后,目标列表包含该策略生成的子目标。
基本定理如下:

Theorem ident body: type.
Proof.
    Tactics
Qed.
    
  • Theorem - Coq中的一个命令,声明了一个需要证明的新定理;
  • ident - 新定理的名称;
  • body - 新定理的主体;
  • type - forall 新定理中出现的变量名(多个变量用空格隔开):Prop,所要证明的新定理;
  • Proof - 标示着证明新定理的开始;
  • Tactics - 指导证明的过程,在结论和前提之间提出演绎规则,实现反向推理。tactic用它产生的子目标来代替原来的目标。
  • Qed - 标示着完成了定理的证明。

1、Implication(蕴含): intros and apply tactic

形式化方法课程学习笔记(一)|Cop的安装以及简单使用_第2张图片
【蕴含的引入规则:intros】
【蕴含的删除规则:apply】

Example 1:

Theorem example1: forall P:Prop,
    P -> P.
Proof.
    intros.
    apply H.
Qed.

(1)当我们进入第3行时,目标窗口将显示为下图,我们的目标在水平线之下。目前,这与断言中表示的假设相同。在水平线上方没有任何内容表示local context为空,没有东西可以使用。
在这里插入图片描述
(2)执行intros策略,Local context得到2个可以使用的前提,如下图所示:
在这里插入图片描述
基于当前目标,intros策略具有不同的效果,如果是:

forall T: type, T-> U

将 T: type 和 Hn: T 放入 local context,新的子目标就是U。

(3)在步骤(2)中,我们得到了一个名为H的假设,并且该假设的值与我们唯一的子目标相同,当我们得出与目标相同的假设时,使用 apply 策略。
在这里插入图片描述
(4)使用Qed命令完成证明:

你可能感兴趣的:(形式化方法)