Dummit and Foote の『抽象代数学』に存在するバグを発見する

2026/09/05 5:20

Dummit and Foote の『抽象代数学』に存在するバグを発見する

RSS: https://news.ycombinator.com/rss

要約

Japanese Translation:

以下に示す改良版は、主たるメッセージを維持しつつ、キーポイントリストに含まれていた欠落している具体的な事項を取り入れ、必要な場合定義の明確化も行ったものとなる:

Recurse Center の第 2 週目において、著者は Dummit and Foote の Abstract Algebra テキストブックを Rocq で形式化する作業を開始した。標準的な命題として、「関数 $f: A \to B$ が全単射であることと、すべての $a \in A$ について $g(f(a)) = a$ を満たす左逆関数 $g: B \to A$ が存在することとの同値性」が主張されている。この命題を形式化するには、以下の点を注意する必要がある:

  • 関数は、$A$ の異なる 2 つの要素が $B$ の同一の要素へ写像しないときに全単射である(例:整数上の $f(x)=x^2$ は全単射ではない)。
  • 左逆関数が存在するのは、ちょうど $B$ から $A$ への写像が存在し、それが $f$ を打ち消す場合のみである。

この命題は、$A = {}$ および $B = {1}$ の場合に成り立たない。ここで、唯一つの関数 $f: \emptyset \to {1}$(ペアの集合が空となる)は自明的に全単射であるが、関数 $g: {1} \to \emptyset$ は存在しないため、左逆関数は存在しない。著者はこの同値性を証明するために、追加の仮定が必要であることを示すしかなかった(例えば、$A$ が inhabited であるか、あるいは $B$ が空集合である場合など)。Rocq でこれを証明する試みが続いた後、著者はテキストブックの記述が誤っていることに気づき、書籍の Errata を確認して既にその誤りが記録されていることを確認した。このエピソードは、形式検証が広く使用されているテキストにおいても微妙な過ちを捉えるための価値を示すと同時に、標準的な演習に頼る際には Errata の確認が必要であるという点も強調する。

本文

デミット・アンド・フォートの『抽象代数』におけるバグ発見:rocQ を使った検証

リカースセンターの 2 ヶ月目以降、デミットとフォートの教科書**『抽象代数』rocQ で形式化する作業に取り組んでいました。 最初の証明演習では特に苦労しましたが、それは記された証明の目標自体が成立しないこと**に気づいたためです。この発見は、挫折感と同時に興奮を呼び起こしました。


関数と単射の定義

rocQ の文脈における基本概念を確認します。

関数の定義

集合 $A$ から集合 $B$ への関数 $f$(表記:

f: A -> B
)とは、以下の 3 つの条件を満たす対の集合です。

  • 各対の第 1 要素は必ず A に属する
  • 各対の第 2 要素は必ず B に属する
  • A の任意の要素は、かつちょうど 1 つの対において第 1 要素となる

注釈: プログラミングの視点では、関数は入力と出力からなる対全体で定義され、決定論的である必要があります。

単射(Injective)

ある関数 $f$ が単射とは、異なる 2 つの入力が同じ出力へ写像しないことを意味します。

  • : $f: \text{整数} \to \text{整数}$ で $f(x) = x^2$ とする。
  • $f(1) = f(-1)$ となるため、これは単射ではない

左逆元(Left Inverse)

関数 $f: A \to B$ が左逆元を持つとは、以下の条件を満たす関数 $g: B \to A$ が存在することです。

$$ \forall a \in A, \quad g(f(a)) = a $$

つまり、$f$ の左逆元 $g$ は $f$ を「取り消す」役割を果たします。


命題の誤り:空集合による角ケース(Corner Case)

本書の最初の演習では、「ある関数が単射であること」と「その関数が左逆元を持つこと」は同値であると示せとされていました。しかし、この命題は誤りです。

カウンターエクスンプルの構成

以下の設定を考えます:

  • $A = \emptyset$(空集合)
  • $B = {1}$

検証プロセス

  1. 関数としての成り立ち:

    • このとき、$f: A \to B$ は $f = \emptyset$(空関数)となります。
    • 関数の定義上の 3 つの条件はすべて満たすため、$f$ は正しい関数です。
  2. 単射としての成り立ち:

    • 「異なる 2 つの入力が同じ出力へ写像しない」という性質は、A が要素を持たないため(自明に)成り立ちます
    • よって、$f$ は単射であると言えます。
  3. 左逆元の有無:

    • $B \to A$ の関数 $g$ を考える必要がありますが、$A$ が空集合のため、条件を満たす $g$ は存在しません(実際には定義可能ですが、左逆元の等式 $g(f(a))=a$ を満たすような $f$ への対応は意味をなしません。より直接的には、空集合から非空集合への写像の逆関数が存在しないため)。
    • 結果として、$f$ は左逆元を持ちません

結論

  • 単射である $\iff$ 左逆元を持つという命題は、$A=\emptyset, B \neq \emptyset$ の場合に反例になります。

rocQ による発見プロセス

もしこの演習を紙の上で行っていた場合、おそらくこのような角ケースには気づかなかっただろうと考えられます。

  • rocQ を使用したからこそ、命題の記された形で証明しようとするとつまずかずに済みました。
  • 私が見つけたあらゆる証明アプローチは、以下のいずれかの制約を必要としました:
    • $A$ が空でない場合
    • $B$ が空である場合
  • 長い時間を費やして「そもそもこの命題自体が成立していないのではないか?」と疑い始めました。

記事執筆中に確認したところ、本書の**誤謬表(Errata)**には既にこのミスは記載されていました。

同じ日のほかのニュース

一覧に戻る →

2026/09/08 3:52

ロサンゼルスが一つ一つのビル建設を通じて発展していく姿を見てください(1880 年~2026 年)

## Japanese Translation: 本テキストは、ロサンゼルス独自の視覚マップを説明している。既存の構造物それぞれが建設年によって配置された一つの箱として表現されており、現在も存続している建物のみが含まれ、取り壊されたものは除外されている。その結果、この可視化は都市の歴史的景観や完全なタイムラインではなく、現在の建築環境を示している。これは生存する建築への明確な年代的概要を提供する一方で、過去の構造物や将来の開発については洞察を与えず、ロサンゼルの進化を現在にのみ焦点を当てており不完全な画像として提示する。 ## Text to translate : This text describes a unique visual map of Los Angeles where each existing structure is shown as one box arranged by its construction year. Only buildings still standing today are included; those that have been demolished are excluded. As a result, the visualization shows the current built environment rather than the city's historical appearance or full timeline. While it provides a clear chronological overview of surviving architecture, it offers no insight into former structures or future developments, presenting an incomplete picture of Los Angeles's evolution by focusing solely on the present.

2026/09/05 20:25

Linux ディストリビューション全体に対する信頼を誤用した攻撃 (Trust-Trust Attack)

## Japanese Translation: Ken Thompson の「信頼の連鎖」攻撃は、以前はコンパイラレベルでの改ざんが必要とされていたものが、GNU strip 内でも実行可能であることを実証した。本研究では、GNU strip が完成済みの ELF ファイルを改変することで、ソースコードを確認せず・改変せずにも、Linux 全体のビルド環境に永続的なバックドアを埋め込むことを示している。NixOS のブートストラッププロセスにおいて、バイナリシードに含まれる GNU strip の単一のパッチ済みバージョンによってペイロードが挿入され、それが次のビルド世代へと伝播し、シードが依存関係の閉じ外に出た後の最終的な標準環境においても存続する。実際の nixpkgs リビジョンにおいて、この攻撃は障害なく完全なグラフィカルインストールメディアを構築でき、任意の悪意のある挙動を行う汚染されたバイナリを生み出した。この発見は、NixOS のような不変系ディストリビューションに依存するユーザーや組織に対し、一見安全なツールが大規模な侵害の主要なベクトルとなるリスクを提起している。この研究成果は Aman Sharma(メール:[メールを表示])によって提出され、UTC 2026 年 7 月 27 日 12:59:15 に投稿された(バージョン 1)。

2026/09/04 1:06

WeatherNext 3

## 日本語翻訳: ## サマリー:Google は、年間毎日ごとに正確な時間ごとの予報を生成する、これまで最も高度な全球気象 AI モデル「WeatherNext 3」をローンチしました。以前のモデルとは異なり、本モデルは生きた衛星画像を直接分析することで、降雨や降雪といった急速な変化を追跡し、トレーニングが施されたことのない場所であっても精密なローカルデータを提供します。この機能は、ジャマイカでのハリケーンメリサの上陸地点を特定して予測することを支援するなど、最近のイベントにおいて極めて重要であることを実証しました。Google Search、Maps、Gemini などの日常的な消費者向け利用に加え、WeatherNext 3 は風力発電所や太陽光発電所向けの放射線量および雲量予測という重要な産業用途に最適化されています。これにより、運営者は運用コストを削減しながら再生可能エネルギー源をより効率的に管理できるようになります。また、温度などの地表変数を 5km〜10km の高精度で予測することで、インフラがより信頼性高く動作するよう確保するとともに、ユーザーには日々の意思決定を賢く行うための精密なローカルデータを提供します。

Dummit and Foote の『抽象代数学』に存在するバグを発見する | そっか~ニュース