ZFC in LEAN 之 前集的等价关系(Equivalence on Pre-set)详解

《前集等价关系》 一文中,已经简单地描述了,等价关系的要求,以及前集的等价关系(Equivalence on Pre-set)的定义。因为,这个前集的等价关系,是对后面的讲述起到关键作用,因此,这里展开说说。

前集(pre-set)定义

前集(Pre-set)在LEAN中,定义为,

前集的等价关系(Equivalence Relation)定义

其等价关系(Equivalence Relation),定义为,

这里的Prop,指的是命题宇宙,即包含所有命题。这里,是LEAN的类型系统中的类型宇宙特性,详细内容可查看LEAN类型理论的文章

那么,Equiv,可看作是一个函数, 如 Equiv x y,输入两个 前集(x y :PSet),输出一个命题(:Prop),如果,该输出的命题是有证明的(Inhabited),那么,前集 x y 相等。

即,该函数表达了,如果对于两前集(Pre-set),第一前集的任一元素都与第二前集中的一个元素相等,反之亦然,那么两前集(Pre-set)相等(equivalent)。

这里,根据 PSet 的定义,其索引函数是用于索引所有包含的元素(members),因此,在 Equiv 函数中,其输出的命题,就是 需要归纳式(Inductively)地证明两前集相等。因为,前集(Pre-set)的定义也是归纳式的(Inductive)。即,前集(Pre-set)的元素(members)也是前集(Pre-set)。

等价关系要求的定义

也就是说,当一个二元关系(Binary Relation)满足等价关系要求是,该二元关系成为等价关系。其定义如下:

可见,该 Equivalence 结构包括了,自反性,对称性,及 传递性,其类型是命题。也就是,Equivalence 包含了其三属性的命题。因此,要使一个二元关系 r,满足等价关系(Equivalence),需要满足其中的三个属性,即,自反性(refl),对称性(symm),及 传递性(trans)。

前集的等价关系(PSet.Equiv)的等价属性

那么,前集的等价关系(PSet.Equiv)是如何满足等价关系的要求(Equivalence)呢?有如下定义:

  1. 自反性(Reflexivity):
  1. 相等替换(substitution):

即,x = y, z = y,那么,x = z。

这里需要解析一下,

  1. 前三个 〈_, _〉,对应着 x y z,表示忽略 x y z,其类型为 PSet。

  2. αβ 表示 Equiv x y 输出命题的左边部分。从 Equiv 的定义来看,其输出是一个与(∧, and)的命题,有左右两命题组成。因此,αβ 表示左边的部分,即 前集 x 中任一元素,都存在前集y的一个元素与之相等。即,αβ 是 Equiv x y 左命题的证明。

  3. 同理第二点,βα 是 Equiv x y 右命题的证明;γβ 是 Equiv z y 左命题的证明; βγ 是 Equiv z y 右命题的证明。

  4. 此时,需要通过 αβ,βα,γβ,βγ,来构建 Equiv x z 左右命题的证明。

  5. Equiv x z 左命题是,前集 x 中任一元素,都存在前集z的一个元素与之相等。

那么,上面的 fun a 的 a 就是前集x的任一元素,αβ a 为与之对应前集 y的元素 b,其中,ab 是元素 b 存在的证明,即代表了 a = b,亦 ab: a = b。

那么,通过,βγ b,找到与之对应的前集 z 的元素 c,其中 bc 是元素 c 存在的证明,即代表了 b = c,亦 bc: b = c。

那么,元素 c 便是 Equiv x z 左命题的 前集 z 中,与 前集x 中任一元素 a 对应的与之相等的元素。

另外,要证明存在命题,除了需要找到对应的元素外,还需提供其相等的证明,即 Equiv.euc ab bc,亦 a = b ∧ b = c。

这里有意思的是,一开始定义Equiv.euc 时,是对于前集间的相等,到其定义体(Body)里,即,Equiv.euc ab bc,是对于其元素间的相等,因为元素也是前集,因此递归下去求证。

那么,〈c, Equiv.euc ab bc〉 就是 Equiv x z 左命题 的证明了。

  1. 同理第5点,〈a, Equiv.euc ba cb〉 为 Equiv x z 右命题 的证明。

  2. Equiv x z 左右命题都得以证明,因此,Equiv x z 也得以证明。

  3. 对称性(Symmetricity)

  1. 传递性(Transitivity)

这里的参数名用 h₁,h₂来表示,是一种惯例(Convention),h for hypothesis。

相关推荐
THMAIL15 分钟前
深度学习从入门到精通 - LSTM与GRU深度剖析:破解长序列记忆遗忘困境
人工智能·python·深度学习·算法·机器学习·逻辑回归·lstm
JuneXcy19 分钟前
结构体简介
c语言·数据结构·算法
要做朋鱼燕20 分钟前
【C++】 priority_queue 容器模拟实现解析
开发语言·c++·笔记·职场和发展
jiaway25 分钟前
【C语言】第四课 指针与内存管理
c语言·开发语言·算法
励志不掉头发的内向程序员26 分钟前
C++进阶——继承 (1)
开发语言·c++·学习
菩提树下的凡夫29 分钟前
瑞芯微RV1126目标识别算法Yolov8的部署应用
java·算法·yolo
多打代码1 小时前
2025.09.05 用队列实现栈 & 有效的括号 & 删除字符串中的所有相邻重复项
python·算法
中国胖子风清扬3 小时前
Rust 序列化技术全解析:从基础到实战
开发语言·c++·spring boot·vscode·后端·中间件·rust
我就是全世界3 小时前
【存储选型终极指南】RustFS vs MinIO:5大维度深度对决,95%技术团队的选择秘密!
开发语言·分布式·rust·存储
j_xxx404_3 小时前
数据结构:栈和队列力扣算法题
c语言·数据结构·算法·leetcode·链表