跳转至

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__`

与本章一起阅读的实现和测试

peano/integer.py · tests/test_integer.py

数学定义

数学定义

(a,b) 与 (c,d) 表示同一整数,当且仅当 a+d=b+c。整数是数对在这一等价关系下形成的类。

数据表示

数据表示

Integer 保存两个自然数 positive 和 negative。(3,1) 与 (4,2) 是不同对象,却都代表 2。

Python 实现

Python 实现

Integer.__eq__ 计算交叉和;normalize() 消去两边共有的部分,得到 (2,0) 这样的规范代表元。

本课程使用的精确对应关系:

`(a,b) ~ (c,d)` → `a + d == b + c` → `Integer.__eq__`

执行过程

执行过程

比较两个整数会触发底层自然数加法和相等。日志因此展示定义如何复用上一章的运算。

运行前预测

先判断两个数对是否相等,并预测规范化后的表示。

实验 · 整数:代表元与等价关系 尚未运行
⌘ / Ctrl + Enter
输出
请先写下预测,再运行。

用测试核对

用测试核对

测试同时覆盖不同代表元的相等、运算闭包与规范化,确保等价关系下结果定义良好。

适用范围

适用范围

数对是教学表示,不如 Python int 高效;它的价值在于让商结构可见。

关于“整数:代表元与等价关系”的实现,哪一种说法正确?