自反 Reflexive 自己到自己
每个元素都和自身相关。
Types and Programming Languages · Math Preliminaries
把这次对话里的定义、翻译和直觉解释整理成一页:从关系与有序集,到序列,再到归纳法。目标是以后看到 TAPL 证明时,能迅速想起每个符号背后的意思。
二元关系可以先粗略想成“两个元素之间画箭头”。这些性质描述箭头应该满足什么规律。
每个元素都和自身相关。
如果 s 能到 t,那么 t 也能到 s。
如果 s 到 t,t 到 u,那么 s 也到 u。
如果 s 到 t 且 t 到 s,那么它们其实是同一个元素。
| 概念 | 需要哪些性质 | 直觉 | 典型想法 |
|---|---|---|---|
| 预序 preorder | 自反 + 传递 | 可以比较“可达性”或“弱顺序”,允许两个不同元素互相可达。 | s ≤ t 表示 s 不超过 t;s < t 表示 s ≤ t 且 s ≠ t。 |
| 偏序 partial order | 预序 + 反对称 | 真正有“高低层级”的顺序,但不是任意两点都能比较。 | 集合包含关系 ⊆ 是偏序。 |
| 全序 total order | 偏序 + 任意两个元素可比较 | 所有元素都能排成一条线。 | 自然数上的 ≤ 是全序。 |
| 等价关系 equivalence | 自反 + 对称 + 传递 | 把元素分成若干“同类”。 | “模 n 同余”是一种等价关系。 |
j 是 s 和 t 的 join,意思是 j 同时在 s、t 上面,而且在所有共同上界里,j 是最低的那个。
m 是 s 和 t 的 meet,意思是 m 同时在 s、t 下面,而且在所有共同下界里,m 是最高的那个。
TAPL 这里的约定很轻量:序列就是用逗号隔开的元素列表,空序列写成 bullet 或留空。
设 a 是序列 3, 2, 1;b 是序列 5, 6。
1..n 表示从 1 到 n 的序列,中间只有两个点。
|a| 表示序列 a 的长度。
permutation 表示两个序列包含完全相同的元素,只是顺序可能不同。
逗号同时表示 cons 和 append;只要不讨论“序列的序列”,通常不会混淆。
归纳法的核心感觉是:只要能从“更小情况已经成立”推出“当前情况成立”,就能覆盖所有情况。
证明 P(0),再证明 P(i) 能推出 P(i+1),于是所有自然数 n 都满足 P(n)。
证明每个 n 时,可以假设所有 i < n 的 P(i) 都已经成立。
你问“这个公理应该怎么理解”,关键就在于把 (m,n) 想成二维表格里的一个格子。
蓝色格子是字典序上已经可以假设成立的情况;黄色格子是当前要证明的情况。
对一对自然数 (m,n) 做归纳:如果每一格只依赖它之前所有“更小的格子”,那整张无限表格上的所有格子都成立。
这就是嵌套归纳的抽象写法:外层对 m 归纳,固定 m 后内层再对 n 归纳。
0, 1, 2, 3... 每次只往前走一步。
证明 n 时,左边所有小于 n 的点都可以作为前提。
先读完上一行,再读当前行左边的格子,然后证明当前格子。
闭包的关键词是“最小”。不是随便扩展,而是在满足某性质的前提下,尽量少加东西。
给 R 补上所有 (s,s),让每个元素都和自己相关。
给 R 补上所有通过多步能到达的关系,通常记作 R+。
同时补自反性和传递性,通常记作 R*。
如果另一个关系也包含 R 且满足目标性质,那么闭包一定包含在那个关系里面。