证明辅助工具 coq 简介
DESCRIPTION
证明辅助工具 Coq 简介. 郭宇 2010-07-20 中科大 - 耶鲁高可信软件联合研究中心. http://kyhcs.ustcsz.edu.cn/summer-school. 课程主页. http://kyhcs.ustcsz.edu.cn/summer-school. 问题. 如何表示数学证明?. Miracles often occur …. 费马大定理 ( 1673). X n = Y n + Z n 当 n>2 时无整数解 A. Wiles 1993 证明 ? 超过一百页 世界上能看懂的人屈指可数 原始证明有错,一年多以后更正. - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: 证明辅助工具 Coq 简介](https://reader033.vdocuments.site/reader033/viewer/2022050615/568148e5550346895db600a2/html5/thumbnails/1.jpg)
证明辅助工具证明辅助工具 CoqCoq 简介简介
郭宇2010-07-20
中科大 - 耶鲁高可信软件联合研究中心
http://kyhcs.ustcsz.edu.cn/summer-school
![Page 2: 证明辅助工具 Coq 简介](https://reader033.vdocuments.site/reader033/viewer/2022050615/568148e5550346895db600a2/html5/thumbnails/2.jpg)
课程主页课程主页http://kyhcs.ustcsz.edu.cn/summer-sch
ool
![Page 3: 证明辅助工具 Coq 简介](https://reader033.vdocuments.site/reader033/viewer/2022050615/568148e5550346895db600a2/html5/thumbnails/3.jpg)
问题问题• 如何表示数学证明?
•Miracles often occur…
![Page 4: 证明辅助工具 Coq 简介](https://reader033.vdocuments.site/reader033/viewer/2022050615/568148e5550346895db600a2/html5/thumbnails/4.jpg)
费马大定理 费马大定理 ((1673)1673)• Xn = Yn + Zn
• 当 n>2 时无整数解• A. Wiles
• 1993• 证明 ?
• 超过一百页• 世界上能看懂的人屈指可数• 原始证明有错,一年多以后更正
![Page 5: 证明辅助工具 Coq 简介](https://reader033.vdocuments.site/reader033/viewer/2022050615/568148e5550346895db600a2/html5/thumbnails/5.jpg)
四色定理四色定理• K. Appel & W. Haken
• 1976 年证明
• 证明?• 分 1,936 种情况讨论• 利用计算机程序来自动分析,不产生证明• 一些数学家拒绝承认• 仍然难以检查证明是否正确
![Page 6: 证明辅助工具 Coq 简介](https://reader033.vdocuments.site/reader033/viewer/2022050615/568148e5550346895db600a2/html5/thumbnails/6.jpg)
四色定理四色定理• G. Gonthier & B. Werner
• 2004 年证明
• 证明?• 完整详细的 Coq 证明• 机器可检查• 没有跳过任何步骤• 证明检查程序规模小
![Page 7: 证明辅助工具 Coq 简介](https://reader033.vdocuments.site/reader033/viewer/2022050615/568148e5550346895db600a2/html5/thumbnails/7.jpg)
高可信软件高可信软件• 嵌入式系统内核—— seL4
• G. Klein 等人• OSDI’09 Best Paper• 8700 lines of C• 经过形式化验证
• 证明?• 机器可检查证明• 200,000 lines of Isabelle script
![Page 8: 证明辅助工具 Coq 简介](https://reader033.vdocuments.site/reader033/viewer/2022050615/568148e5550346895db600a2/html5/thumbnails/8.jpg)
VeriSoftVeriSoft
• 芯片• 嵌入式内核
• 汽车电子控制单元• 应用
• 宝马汽车的应急呼叫系统• 证明:
• Isabelle 2005
![Page 9: 证明辅助工具 Coq 简介](https://reader033.vdocuments.site/reader033/viewer/2022050615/568148e5550346895db600a2/html5/thumbnails/9.jpg)
CompCertCompCert
• 经过完全证明的 C 语言编译器•Xavier Leroy [CACM ’09]•Power PC backend
• 证明?•机器可检查证明•使用 Coq 代码编写并证明•抽取出 O’Caml 代码运行
![Page 10: 证明辅助工具 Coq 简介](https://reader033.vdocuments.site/reader033/viewer/2022050615/568148e5550346895db600a2/html5/thumbnails/10.jpg)
Certified SoftwareCertified Software
• Certified Software = Program + Proof
![Page 11: 证明辅助工具 Coq 简介](https://reader033.vdocuments.site/reader033/viewer/2022050615/568148e5550346895db600a2/html5/thumbnails/11.jpg)
CoqCoq 是什么是什么• 一个证明系统
• 编写证明,检查证明• 一套形式化语言
• 编写数学定义、算法、定理• 类型化 演算
• 一个环境• 交互式证明
![Page 12: 证明辅助工具 Coq 简介](https://reader033.vdocuments.site/reader033/viewer/2022050615/568148e5550346895db600a2/html5/thumbnails/12.jpg)
其它证明辅助工具其它证明辅助工具• Isabelle 2005
• Twelf
• Agda
![Page 13: 证明辅助工具 Coq 简介](https://reader033.vdocuments.site/reader033/viewer/2022050615/568148e5550346895db600a2/html5/thumbnails/13.jpg)
CoqCoq 介绍介绍• Coq 环境
• 函数式编程
• 逻辑推理
• 归纳
![Page 14: 证明辅助工具 Coq 简介](https://reader033.vdocuments.site/reader033/viewer/2022050615/568148e5550346895db600a2/html5/thumbnails/14.jpg)
运行 运行 coqcoq• 命令行解释器
•coqtop
• 编译器 •coqc
![Page 15: 证明辅助工具 Coq 简介](https://reader033.vdocuments.site/reader033/viewer/2022050615/568148e5550346895db600a2/html5/thumbnails/15.jpg)
用户界面用户界面• CoqIDE
![Page 16: 证明辅助工具 Coq 简介](https://reader033.vdocuments.site/reader033/viewer/2022050615/568148e5550346895db600a2/html5/thumbnails/16.jpg)
用户界面用户界面• emacs + proofgeneral(推荐 )
![Page 17: 证明辅助工具 Coq 简介](https://reader033.vdocuments.site/reader033/viewer/2022050615/568148e5550346895db600a2/html5/thumbnails/17.jpg)
运行 运行 CoqCoq• 运行 coqtop
• 检查一个表达式的类型Coq< Check 3.
3 : natCoq< Check 3 + 5.
3+5 : nat
Coq 命令 (以 . 结尾 )
![Page 18: 证明辅助工具 Coq 简介](https://reader033.vdocuments.site/reader033/viewer/2022050615/568148e5550346895db600a2/html5/thumbnails/18.jpg)
类型检查类型检查• 每一个合式的项都有一个类型
•每一个类型也是一个项
> Check 3 + true.Error: The term “true” has type “boo
l”While it is expected to have type “na
t”.
![Page 19: 证明辅助工具 Coq 简介](https://reader033.vdocuments.site/reader033/viewer/2022050615/568148e5550346895db600a2/html5/thumbnails/19.jpg)
定义定义> Definition a := 5.a is defined
> Definition b := a + 6.b is defined
> Eval compute in b. = 11 : nat
![Page 20: 证明辅助工具 Coq 简介](https://reader033.vdocuments.site/reader033/viewer/2022050615/568148e5550346895db600a2/html5/thumbnails/20.jpg)
CoqCoq 命令——打印命令——打印Coq< Print b.b = a + 6 : natCoq< Set Printing All.
Coq< Print b.b = plus a (S (S (S (S (S (S O)))))) : nat
![Page 21: 证明辅助工具 Coq 简介](https://reader033.vdocuments.site/reader033/viewer/2022050615/568148e5550346895db600a2/html5/thumbnails/21.jpg)
自然数加法自然数加法
Coq< Check plus.plus : nat -> nat -> natCoq< Unset Printing All.Coq< Eval compute in (plus 7 8). = 15 : nat
![Page 22: 证明辅助工具 Coq 简介](https://reader033.vdocuments.site/reader033/viewer/2022050615/568148e5550346895db600a2/html5/thumbnails/22.jpg)
自然数加法自然数加法Coq < Print plus.plus =fix plus (n m : nat) : nat := match n with | 0 => m | S p => S (plus p m) end : nat -> nat -> nat
Argument scopes are [nat_scope nat_scope]
![Page 23: 证明辅助工具 Coq 简介](https://reader033.vdocuments.site/reader033/viewer/2022050615/568148e5550346895db600a2/html5/thumbnails/23.jpg)
函数式语言编程函数式语言编程
![Page 24: 证明辅助工具 Coq 简介](https://reader033.vdocuments.site/reader033/viewer/2022050615/568148e5550346895db600a2/html5/thumbnails/24.jpg)
函数式语言编程函数式语言编程• 函数是一等公民
•First-class• 可以做参数,也可以作为函数返回值• 高阶函数
![Page 25: 证明辅助工具 Coq 简介](https://reader033.vdocuments.site/reader033/viewer/2022050615/568148e5550346895db600a2/html5/thumbnails/25.jpg)
示例一:布尔值计算示例一:布尔值计算Coq < Inductive bool : Set := true : bool | false : bool.bool is definedbool_rect is definedbool_ind is definedbool_rec is defined
Coq < Print bool.
![Page 26: 证明辅助工具 Coq 简介](https://reader033.vdocuments.site/reader033/viewer/2022050615/568148e5550346895db600a2/html5/thumbnails/26.jpg)
示例一:布尔值计算示例一:布尔值计算Coq < Inductive bool : Set := true : bool | false : bool
Coq < Definition negb (a : bool) : bool := match a with | true => false | false => true end.
Coq < Eval compute in (negb true).
![Page 27: 证明辅助工具 Coq 简介](https://reader033.vdocuments.site/reader033/viewer/2022050615/568148e5550346895db600a2/html5/thumbnails/27.jpg)
示例一:布尔值计算示例一:布尔值计算Coq < Inductive bool : Set := true : bool | false : bool
Coq < Definition andb (a : bool) (b : bool) : bool := match a with | true => b | false => false end.
Coq < Eval compute in (andb true false).
![Page 28: 证明辅助工具 Coq 简介](https://reader033.vdocuments.site/reader033/viewer/2022050615/568148e5550346895db600a2/html5/thumbnails/28.jpg)
示例一:布尔值计算示例一:布尔值计算Coq < Inductive bool : Set := true : bool | false : bool
Coq < Definition andb (a : bool) (b : bool) : bool := match a with | true => b | false => false end.
Coq < Check (andb).Coq < Check (andb true).
![Page 29: 证明辅助工具 Coq 简介](https://reader033.vdocuments.site/reader033/viewer/2022050615/568148e5550346895db600a2/html5/thumbnails/29.jpg)
示例一:布尔值计算示例一:布尔值计算Coq < Inductive bool : Set := true : bool | false : bool
Coq < Definition andb (a : bool) : bool -> bool := match a with | true => fun (b : bool) => b | false => fun (b : bool) => false end.
Coq < Check (andb).Coq < Check (andb true).
![Page 30: 证明辅助工具 Coq 简介](https://reader033.vdocuments.site/reader033/viewer/2022050615/568148e5550346895db600a2/html5/thumbnails/30.jpg)
示例一:布尔值计算示例一:布尔值计算Coq < Definition double (f : bool -> bool) : bool -> bool
:= fun (a : bool) => f (f a).
Coq < Eval compute in (double negb true).
![Page 31: 证明辅助工具 Coq 简介](https://reader033.vdocuments.site/reader033/viewer/2022050615/568148e5550346895db600a2/html5/thumbnails/31.jpg)
示例二:自然数示例二:自然数Coq < Inductive nat : Set := O : nat | S : nat -> nat. nat is definednat_rect is definednat_ind is definednat_rec is defined
![Page 32: 证明辅助工具 Coq 简介](https://reader033.vdocuments.site/reader033/viewer/2022050615/568148e5550346895db600a2/html5/thumbnails/32.jpg)
偶数判定偶数判定Fixpoint evenb (n:nat) : bool := match n with | O => true | S O => false | S (S n') => evenb n' end.
![Page 33: 证明辅助工具 Coq 简介](https://reader033.vdocuments.site/reader033/viewer/2022050615/568148e5550346895db600a2/html5/thumbnails/33.jpg)
加法加法
• 原始递归函数( Primitive Recursion)•保证函数的终止性
Fixpoint plus (n : nat) (m : nat) {struct n}: nat := match n with | O => m | S n’ => S (plus n’ m) end.
![Page 34: 证明辅助工具 Coq 简介](https://reader033.vdocuments.site/reader033/viewer/2022050615/568148e5550346895db600a2/html5/thumbnails/34.jpg)
基本逻辑推理基本逻辑推理
![Page 35: 证明辅助工具 Coq 简介](https://reader033.vdocuments.site/reader033/viewer/2022050615/568148e5550346895db600a2/html5/thumbnails/35.jpg)
原子命题定义原子命题定义Variables A B C : Prop.
![Page 36: 证明辅助工具 Coq 简介](https://reader033.vdocuments.site/reader033/viewer/2022050615/568148e5550346895db600a2/html5/thumbnails/36.jpg)
定理证明演示定理证明演示Theorem T1 : A -> A.
![Page 37: 证明辅助工具 Coq 简介](https://reader033.vdocuments.site/reader033/viewer/2022050615/568148e5550346895db600a2/html5/thumbnails/37.jpg)
证明构造的编程证明构造的编程
![Page 38: 证明辅助工具 Coq 简介](https://reader033.vdocuments.site/reader033/viewer/2022050615/568148e5550346895db600a2/html5/thumbnails/38.jpg)
打印证明打印证明Theorem T1 : A -> A.
Coq < Print T1.T1 = fun H : A => H : A -> A
• Curry-Howard 同构• 类型形如 A ->B 的证明是一个函数• 以命题 A 的证明为参数,返回 B 的证明
![Page 39: 证明辅助工具 Coq 简介](https://reader033.vdocuments.site/reader033/viewer/2022050615/568148e5550346895db600a2/html5/thumbnails/39.jpg)
程序即证明程序即证明
Definition T1’ := fun (H : A) => H.
Check T1’.
![Page 40: 证明辅助工具 Coq 简介](https://reader033.vdocuments.site/reader033/viewer/2022050615/568148e5550346895db600a2/html5/thumbnails/40.jpg)
程序即证明程序即证明
Definition T1’’:= fun (H : A) => T1 H.
Check T1’’.
• 证明的构造方式并不唯一• 构造 —— Construction
Definition T1’ := fun (H : A) => H.
Check T1’.
![Page 41: 证明辅助工具 Coq 简介](https://reader033.vdocuments.site/reader033/viewer/2022050615/568148e5550346895db600a2/html5/thumbnails/41.jpg)
练习练习
Theorem T2 : A -> B -> A.Proof ?
![Page 42: 证明辅助工具 Coq 简介](https://reader033.vdocuments.site/reader033/viewer/2022050615/568148e5550346895db600a2/html5/thumbnails/42.jpg)
答案答案
Theorem T2 : A -> B -> A. Proof fun (H : A) => fun (H2 : B) => H.
• T2 是定理 A->B ->A 的“构造”
![Page 43: 证明辅助工具 Coq 简介](https://reader033.vdocuments.site/reader033/viewer/2022050615/568148e5550346895db600a2/html5/thumbnails/43.jpg)
合取连接词合取连接词
Theorem T3 : A /\ B -> A. Proof fun (H : A /\ B) => (proj1 H).Theorem T4 : A /\ B -> B. Proof fun (H : A /\ B) => (proj2 H).
![Page 44: 证明辅助工具 Coq 简介](https://reader033.vdocuments.site/reader033/viewer/2022050615/568148e5550346895db600a2/html5/thumbnails/44.jpg)
析取连接词析取连接词
Theorem T6 : A /\ B -> A \/ B. Proof ?
Theorem T5 : A -> A \/ B. Proof fun (H : A) => or_intro1 H.
![Page 45: 证明辅助工具 Coq 简介](https://reader033.vdocuments.site/reader033/viewer/2022050615/568148e5550346895db600a2/html5/thumbnails/45.jpg)
析取连接词析取连接词
Theorem T6 : A /\ B -> A \/ B. Proof fun (H : A /\ B) => T5 (T3 H).
Theorem T5 : A -> A \/ B.
Theorem T3 : A /\ B -> A.
![Page 46: 证明辅助工具 Coq 简介](https://reader033.vdocuments.site/reader033/viewer/2022050615/568148e5550346895db600a2/html5/thumbnails/46.jpg)
全称量词全称量词Theorem T7 : forall A : Prop, A -> A.
• Curry-Howard 同构• 类型形如 forall x :A, B 的证明仍然是一个函数• 以 x 为参数,返回 B 的证明
![Page 47: 证明辅助工具 Coq 简介](https://reader033.vdocuments.site/reader033/viewer/2022050615/568148e5550346895db600a2/html5/thumbnails/47.jpg)
全称量词全称量词Theorem T7 : forall A : Prop, A -> A.Proof fun (A : Prop) => fun (x : A) => x.
【思考】下面证明构造的含义:Definition T4 := T3 (forall A : Prop, A)
![Page 48: 证明辅助工具 Coq 简介](https://reader033.vdocuments.site/reader033/viewer/2022050615/568148e5550346895db600a2/html5/thumbnails/48.jpg)
全称量词全称量词
Theorem T7 : forall A : Prop, A -> A.
【思考】下面证明构造的含义:Definition T8 := T7 (forall A : Prop, A)
T8 : False -> False
![Page 49: 证明辅助工具 Coq 简介](https://reader033.vdocuments.site/reader033/viewer/2022050615/568148e5550346895db600a2/html5/thumbnails/49.jpg)
练习练习
Theorem T9 : forall A B C: Prop, (A -> B) -> (B -> C) -> (A -> C).Proof ?.
函数复合
![Page 50: 证明辅助工具 Coq 简介](https://reader033.vdocuments.site/reader033/viewer/2022050615/568148e5550346895db600a2/html5/thumbnails/50.jpg)
归纳归纳
![Page 51: 证明辅助工具 Coq 简介](https://reader033.vdocuments.site/reader033/viewer/2022050615/568148e5550346895db600a2/html5/thumbnails/51.jpg)
归纳谓词归纳谓词
Inductive EqNat : nat -> nat -> Prop := | OEq : EqNat O O | SEq : forall m n : nat, EqNat m n -> EqNat (S m) (S n).
P (m, n) iff m = n
![Page 52: 证明辅助工具 Coq 简介](https://reader033.vdocuments.site/reader033/viewer/2022050615/568148e5550346895db600a2/html5/thumbnails/52.jpg)
归纳谓词归纳谓词• 问题:证明 EqNat 0 0 ?
• 写出类型为 EqNat 0 0 的证明构造
• 答案: OEq
Lemma LEqNat1 : EqNat O O. Proof OEq.
Definition LEqNat1 : EqNat O O := OEq.
![Page 53: 证明辅助工具 Coq 简介](https://reader033.vdocuments.site/reader033/viewer/2022050615/568148e5550346895db600a2/html5/thumbnails/53.jpg)
归纳谓词归纳谓词• 问题:证明 EqNat 1 1 ?
• 写出类型为 EqNat 1 1 的证明构造
Lemma LEqNat1 : EqNat 1 1.Proof (SEq 0 0 LEqNat0).
Definition LEqNat1 : EqNat O O := (SEq 0 0 LEqNat0)..
Inductive EqNat : nat -> nat -> Prop := | OEq : EqNat O O | SEq : forall m n : nat, EqNat m n -> EqNat (S m) (S n).
![Page 54: 证明辅助工具 Coq 简介](https://reader033.vdocuments.site/reader033/viewer/2022050615/568148e5550346895db600a2/html5/thumbnails/54.jpg)
归纳谓词归纳谓词• 练习:证明 EqNat 2 2 ?
Inductive EqNat : nat -> nat -> Prop := | OEq : EqNat O O | SEq : forall m n : nat, EqNat m n -> EqNat (S m) (S n).
![Page 55: 证明辅助工具 Coq 简介](https://reader033.vdocuments.site/reader033/viewer/2022050615/568148e5550346895db600a2/html5/thumbnails/55.jpg)
归纳谓词归纳谓词• 问题:证明 forall n, EqNat n n ?
Definition LEqNatn : forall n, EqNat n n := ?
Inductive EqNat : nat -> nat -> Prop := | OEq : EqNat O O | SEq : forall m n : nat, EqNat m n -> EqNat (S m) (S n).
![Page 56: 证明辅助工具 Coq 简介](https://reader033.vdocuments.site/reader033/viewer/2022050615/568148e5550346895db600a2/html5/thumbnails/56.jpg)
归纳谓词归纳谓词• 问题:证明 forall n, EqNat n n ?• 答案:递归函数
Fixpoint LEqNatn (n : nat) : EqNat n n := match n return (EqNat n n) with | O => OEq | S n' => SEq n' n' (LEqNatn n') end.
Inductive EqNat : nat -> nat -> Prop := | OEq : EqNat O O | SEq : forall m n : nat, EqNat m n -> EqNat (S m) (S n).
![Page 57: 证明辅助工具 Coq 简介](https://reader033.vdocuments.site/reader033/viewer/2022050615/568148e5550346895db600a2/html5/thumbnails/57.jpg)
归纳谓词归纳谓词• 问题:证明 forall n, EqNat n n ?• 交互式证明(演示)
Lemma LEqNatn : forall n, EqNat n n.
![Page 58: 证明辅助工具 Coq 简介](https://reader033.vdocuments.site/reader033/viewer/2022050615/568148e5550346895db600a2/html5/thumbnails/58.jpg)
归纳谓词归纳谓词• 交互式证明产生的证明构造?
LEqNatn = fun n : nat =>nat_ind (fun n0 : nat => EqNat n0 n0) OEq (fun (n0 : nat) (IHn : EqNat n0 n0) => SEq n0 n0 IHn) n : forall n : nat, EqNat n n
Print LEqNatn.Lemma LEqNatn : forall n, EqNat n n.
![Page 59: 证明辅助工具 Coq 简介](https://reader033.vdocuments.site/reader033/viewer/2022050615/568148e5550346895db600a2/html5/thumbnails/59.jpg)
通用归纳原理通用归纳原理
nat_rect = fun (P : nat -> Type) (f : P 0) (f0 : forall n : nat, P n -> P (S n)) =>fix F (n : nat) : P n := match n as n0 return (P n0) with | 0 => f | S n0 => f0 n0 (F n0) end : forall P : nat -> Type, P 0 -> (forall n : nat, P n -> P (S n)) -> forall n : nat, P n
nat_ind = fun P : nat -> Prop => nat_rect P : forall P : nat -> Prop, P 0 -> (forall n : nat, P n -> P (S n)) -> forall n : nat, P n
![Page 60: 证明辅助工具 Coq 简介](https://reader033.vdocuments.site/reader033/viewer/2022050615/568148e5550346895db600a2/html5/thumbnails/60.jpg)
Coq & CICCoq & CIC
• CC: Calculus of Constructions
• CiC: Calculus of Inductive Constructions
![Page 61: 证明辅助工具 Coq 简介](https://reader033.vdocuments.site/reader033/viewer/2022050615/568148e5550346895db600a2/html5/thumbnails/61.jpg)
CoqCoq 不能做什么不能做什么• Coq 不能自动给出问题的形式化描述
•我们要明确问题,并形式化问题
• Coq 不能自动证明出所有定理•给出证明思路
• Coq 不能直接证明程序•只是一个基础而且底层的逻辑工具•需要开发更多更有效的基于 Coq 的工具
![Page 62: 证明辅助工具 Coq 简介](https://reader033.vdocuments.site/reader033/viewer/2022050615/568148e5550346895db600a2/html5/thumbnails/62.jpg)
我们用我们用 CoqCoq 做什么做什么• 内核原型
• 150 lines of assembly code • 证明:
• 82,000 lines of coq scripts• Machine model• Safety policy• Specifications• Logics & their soundness proof• Code safety proof
![Page 63: 证明辅助工具 Coq 简介](https://reader033.vdocuments.site/reader033/viewer/2022050615/568148e5550346895db600a2/html5/thumbnails/63.jpg)
谢谢谢谢
![Page 64: 证明辅助工具 Coq 简介](https://reader033.vdocuments.site/reader033/viewer/2022050615/568148e5550346895db600a2/html5/thumbnails/64.jpg)
逻辑推理与计算逻辑推理与计算• 莱布尼兹之梦• 罗素悖论• 希尔伯特计划• 哥德尔定理• 图灵机与 演算
![Page 65: 证明辅助工具 Coq 简介](https://reader033.vdocuments.site/reader033/viewer/2022050615/568148e5550346895db600a2/html5/thumbnails/65.jpg)
Lambda CubeLambda Cube
λω
λ2
λ→ λP
λω λPωλP2
λPω