【Coq】?Rel I 关系

这一短小的(可选的)章节发展了一些关于Coq中二元关系的基本定义和几个定理。关键定义在实际使用的地方重复(在编程语言基础的Smallstep一章中),因此已经熟悉这些概念的读者可以安全地浏览或跳过本章。然而,关系也是使用Coq的基本推理工具开发工具的一个很好的练习来源,因此在IndProp一章之后查看此材料可能会很有用。

Set Warnings "-notation-overridden,-parsing,-deprecated-hint-without-locality".
From LF Require Export IndProp.

关系 Relations

集合X上的二元关系是由X的两个元素参数化的命题族,即关于X元素对的命题。

Definition relation (X: Type) := X -> X -> Prop.

相当令人困惑的是,Coq标准库劫持了这个想法的特定实例的通用术语“关系”。为了保持与库的一致性,我们也将这样做。因此,从今往后,Coq标识符关系将始终指某个集合(集合与自身之间)上的二元关系,而在普通数学英语中,“关系”一词可以指这个特定概念,也可以指任何数量的可能不同集合之间关系的更一般概念。讨论的背景应始终明确其含义。

nat上的一个示例关系是le,小于或等于关系,我们通常写n1≤ n2。

Print le.
(* ====> Inductive le (n : nat) : nat -> Prop :=
             le_n : n <= n
           | le_S : forall m : nat, n <= m -> n <= S m *)
Check le : nat -> nat -> Prop.
Check le : relation nat.
Inductive le (n : nat) : nat -> Prop :=  le_n : n <= n | le_S : forall m : nat, n <= m -> n <= S m

Arguments le (_ _)%nat_scope
Arguments le_n _%nat_scope
Arguments le_S (_ _)%nat_scope _

(为什么我们这样写,而不是从

Inductive le : relation nat...

?因为我们想把第一个nat放在:,的左边,这使得Coq产生了一个更好的归纳原理来推理≤。)

【学习】函数语言程序设计 文章被收录于专栏

函数语言程序设计 Coq章节 Ch1 Basics【COQ中的函数编程】 Ch2 Induction【归纳法证明】 Ch3 Lists【使用结构化数据】 Ch4 Poly【多态性与高阶函数】 Ch5 Tactics【更基本的战术】 Ch6 Logic【COQ中的逻辑】 Ch7 IndProp【归纳定义命题】 Ch8 Maps【全图和局部图】 Ch9 Rel【关系的性质】

全部评论

相关推荐

11-11 14:21
西京学院 C++
Java抽象练习生:教育背景放最前面,不要耍小聪明
点赞 评论 收藏
分享
我已成为0offer的糕手:别惯着,胆子都是练出来的,这里认怂了,那以后被裁应届被拖工资还敢抗争?
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务