跳转至

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 有效率;其價值在於讓商結構可見。

關於「整數:代表元與等價關係」的實作,哪一種說法正確?