一、Coq的安装与使用
1、Coq简介
Coq是一款交互式证明辅助工具,提供一套证明系统,可以编写证明、检查证明;也提供一套形式化语言,可编写数学算法、定义、定理;它还可以用于程序的正确性证明。
2、Coq的安装
Coq-8.11.0 安装包【Windows、MacOS】
链接:https://pan.baidu.com/s/1rAjW8D6G5GJI3sQP1JfG7g
提取码:ects
安装完成之后,Coq自带CoqIde,对于形式化方法课程来说应该是够用了。
【我有尝试使用另外一种IDE:Proof General,但是没有成功,等成功之后再来更新吧,目前就先用CoqIde了hhhh】
3、Warm-up Test
(1)创建一个名为 coq_warm_up.v 的文件,保存如下代码:
【其中 “.v” 是Coq文件的默认后缀】
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)).
(2)运行CoqIde,打开上述文件;
(3)单击 Go to end 按钮,会得到如下的输出:
= monday
: day
= tuesday
: day
此时说明Coq安装成功。
4、Coq功能分区
- Tool bar 工具栏:提供可执行的基本命令。
- Script buffers 脚本缓冲区:用于打开和编辑脚本。
- Goal window 目标窗口:显示待验证目标。
- Message window 消息窗口
二、Coq Tactics——如果使用Coq进行proof development
在proof development的每个阶段,都有一个要证明的子目标列表。
最初,该列表由所要证明的新定理的本身组成;
应用某些策略之后,目标列表包含该策略生成的子目标,接下来的工作就是分别对这些子目标进行处理。
主要包括以下策略:intros, apply, inversion, split, right and left。
A basic theorem:
Theorem ident body: type.
Proof.
Tactics
Qed.
-
Theorem - Coq中的一个命令,声明了一个需要证明的新定理;
-
ident - 新定理的名称;
-
body - 新定理的主体;
-
type -
forall 新定理中出现的变量名(多个变量用空格隔开):Prop,
所要证明的新定理.
-
Proof - 标示着证明新定理的开始
-
Tactics - 指导证明的过程,在结论和前提之间提出演绎规则,实现反向推理
-
Qed - 标示着证明新定理的完成
1、Implication(蕴含):intros and apply tactic
【蕴含的引入规则:intros】
主要用于拆分所要证明定理中的已知前提和所要证明的结论。【详见下方】
【蕴含的删除规则:apply】
【详见下方】
第一个栗子:证明定理 P -> P成立
证明代码如下:
Theorem example1: forall P: Prop,
P -> P.
Proof.
intros.
apply H.
Qed.