02 · 整数:代表元与等价关系
整数:代表元与等价关系¶
用自然数对 `(a,b)` 表示差 `a-b`,并理解不同的数对为何能表示同一个整数。
阅读本章前
你已经能沿着自然数的递归定义阅读加法和相等。
完成本章后,你可以
- 用自己的话说明“整数:代表元与等价关系”中的数学定义
- 指出定义在 Python 数据中的表示方式
- 根据实际实现预测一段小规模执行过程
数学定义
`(a,b)` 与 `(c,d)` 表示同一整数,当且仅当 `a+d=b+c`。整数是数对在这一等价关系下形成的类。
数据表示
`Integer` 保存两个自然数 `positive` 和 `negative`。`(3,1)` 与 `(4,2)` 是不同对象,却都代表 2。
Python 实现
`(a,b) ~ (c,d)` → `a + d == b + c` → `Integer.__eq__`
与本章一起阅读的实现和测试
数学定义
数学定义¶
(a,b) 与 (c,d) 表示同一整数,当且仅当 a+d=b+c。整数是数对在这一等价关系下形成的类。
数据表示
数据表示¶
Integer 保存两个自然数 positive 和 negative。(3,1) 与 (4,2) 是不同对象,却都代表 2。
Python 实现
Python 实现¶
Integer.__eq__ 计算交叉和;normalize() 消去两边共有的部分,得到 (2,0) 这样的规范代表元。
本课程使用的精确对应关系:
执行过程
执行过程¶
比较两个整数会触发底层自然数加法和相等。日志因此展示定义如何复用上一章的运算。
运行前预测
先判断两个数对是否相等,并预测规范化后的表示。
实验 · 整数:代表元与等价关系
尚未运行
⌘ / Ctrl + Enter
输出
请先写下预测,再运行。
用测试核对
用测试核对¶
测试同时覆盖不同代表元的相等、运算闭包与规范化,确保等价关系下结果定义良好。
适用范围
适用范围¶
数对是教学表示,不如 Python int 高效;它的价值在于让商结构可见。