一、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)).
二、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
【蕴含的引入规则: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个可以使用的前提,如下图所示: