コンテンツにスキップ
Pythonの仕組みから読む、数の構成

数を、一歩ずつ作る。

基本的なPythonを道具として、数の規則がクラス、演算子、 デコレータへどう移されるかを読みます。 ペアノ算術や数の構成は、知らない状態から始められます。

この教材でたどる道
  1. 0 と「次の数」 自然数の保存方法と足し算を作る
  2. 二つの自然数 差が同じ組を、同じ整数として扱う
  3. 二つの整数 比が同じ組を、同じ有理数として扱う
  4. 式と範囲 有理数で書けない実数を指定する

「数を構成する」とは、最初から使えるものとルールを決め、 そこから新しい数を作ることです。

普段は 2 や 1/2 を完成した数として使います。 この教材では、まず 0 と「次の数を作る操作」だけを用意し、 足し算、負の数、分数へ進みます。そのたびに、数学の定義が どの属性・メソッド・分岐へ移されたかを実コードで確かめます。

ペアノ算術は、0と「次の数」を手掛かりに自然数を考えるための枠組みです。 この名前も内容も、最初の章で具体例から説明します。

前提にするPython、前提にしない数学

代入、関数、クラス、条件分岐、ループ、コレクション、例外、型注釈など、 基本的なPython構文は読めるものとします。一方で、次の仕組みは前提にしません。 このライブラリの設計を理解するために必要なので、最初の準備章から説明します。

  • a + b と __add__ を結ぶPythonのデータモデル
  • 関数を別の関数で包むデコレータ
  • dataclass が生成するメソッドと、その生成を止める指定
  • __post_init__、property、total_ordering
  • 等値比較・ハッシュ・NotImplemented が守る約束

インストールは不要です。入力したコードはブラウザ内で実行されます。 ペアノ算術、整数や有理数の構成、多項式による実数の指定は、最初から説明します。

この教材での学び方

1 · 数学何を対象とし、どの規則で扱うかを定める 2 · 表現対象をどの属性と、常に守る条件で保存するか読む 3 · 実装定義に対応するメソッドと分岐を読む 4 · 観察実装から出力を予想し、ログと照合する 5 · テストどの性質を、どの入力で検査しているか読む 6 · 境界定理、設計上の選択、高速化、未実装を分ける

各章の冒頭には「ここまでに分かったこと」と「この章で学ぶこと」があります。 その後、上の6項目を同じ順序で進みます。実行ログは最初から意味が分かる説明文ではなく、 実装を読んだあとに、予想と実際の動きを照らし合わせる材料です。テストが通ることと、 数学の一般的な証明が済むことも区別します。

各章には、その場の問いに必要な peano の実装を掲載します。 抜粋の前後や別メソッドまで読みたい場合は、章内のリンクまたは 実装リファレンスから完全なファイルを開けます。 実装を事前に読んでいることは前提にしません。

読み終わりの基準

答えを出せるだけでなく、「どの定義を、どの表現と分岐で実行し、 このログとテストから何が言えるか」を自分の言葉で説明できたら、その章の完了です。

学習ルート

この教材の範囲

ここでは、数体系の完全な形式化よりも、数学上の構成と公開ライブラリの実装を 対応付けて読むことを重視します。証明を省略する定理は、使う前に内容と役割を明示します。

次の内容は、最後まで前提にしません。

  • Pythonの開発環境やパッケージ管理
  • Pythonの基本構文そのものの入門
  • ペアノ公理系の形式的な証明
  • 抽象代数学や解析学の履修
  • このリポジトリを事前に読んだ経験

準備ができたら、まずPythonが演算をライブラリへ委譲する仕組みから始めてください。

準備: Pythonのデータモデルとメタプログラミングへ →