ハクソク

世界を動かす技術を、日本語で。

カテゴリー理論の図解 – 順序

概要

  • 順序関係は、集合とその要素間の二項関係で定義
  • 線形順序(全順序)と部分順序の違い
  • 線形順序は反射律・推移律・反対称律・全域律を満たす
  • 部分順序は全域律を除いた三つの法則を満たす
  • 最大元・最小元・ジョイン・ミート・Hasse図などの概念解説

順序関係の本質

  • 順序は、要素の集合とその要素間の二項関係で構成
  • 二項関係は「どちらが先か/大きいか」を決定するルール
  • 数学的には、集合$S$とその要素間の関係$R$で表現
  • プログラミングでは「二つの要素を比較する関数」で順序を定義
  • 順序関係を定めるには、一定の法則を守る必要

線形順序(全順序)

  • 線形順序は、全ての要素が互いに比較可能な順序
  • 例:色の波長順・自然数の大小関係
  • 数学的定義:集合と反射律・推移律・反対称律・全域律を満たす関係
    • 反射律:全ての$a$について$a ≤ a$
    • 推移律:$a ≤ b$かつ$b ≤ c$なら$a ≤ c$
    • 反対称律:$a ≤ b$かつ$b ≤ a$なら$a = b$
    • 全域律:任意の$a, b$について$a ≤ b$または$b ≤ a$
  • プログラミング例:比較関数で順序を返す

部分順序

  • 全域律を除いた反射律・推移律・反対称律を満たす
  • 全ての要素が比較可能とは限らない
  • 例:サッカーの実力比較で、対戦履歴がない場合
  • **部分順序集合(poset)**と呼ばれる
  • 線形順序は部分順序の特殊ケース

順序の種類の違い

  • 線形順序:全ての要素が一列に並ぶ
  • 部分順序:一部の要素間でのみ順序が定まる
  • チェーン:部分順序内の線形な部分集合

数の順序と同型

  • 自然数の大小関係は線形順序の典型例
  • 有限集合の線形順序は自然数の順序と同型
  • 任意の有限な線形順序は自然数と一対一対応可能

最大元・最小元

  • 最大元:全ての要素$x$について$x ≤ a$となる$a$
  • 最小元:全ての要素$x$について$a ≤ x$となる$a$
  • 最大元・最小元が存在しない場合もある
  • 最大元が複数ある場合は「最大元」とは呼ばない

ジョイン(結び)とミート(交わり)

  • ジョイン(結び):二つの要素$a, b$の最小上界
    • $a ≤ G$かつ$b ≤ G$を満たす$G$のうち最小のもの
    • 線形順序では常に大きい方がジョイン
  • ミート(交わり):二つの要素の最大下界
    • ジョインの定義を逆にしたもの
  • ジョイン・ミートは一意性が必要

Hasse図

  • Hasse図:部分順序を視覚的に表す図
  • 上にある要素ほど「大きい」ことを示す
  • 矢印を省略し、直接上下関係のみで描画
  • ジョイン・ミートも図から直感的に把握可能

部分順序と同値関係の違い

  • 同値関係:反射律・推移律・対称律を満たす
  • 部分順序:対称律の代わりに反対称律を持つ

カテゴリー理論との関連

  • ジョインはカテゴリー理論の「余積(コープロダクト)」に類似
  • ミートは「積(プロダクト)」に類似
  • 構造の一般化や抽象化で重要な役割

【課題1】

  • 以前学んだ同値関係との違い:対称律vs反対称律

【課題2】

  • 身近な順序関係を考え、部分順序全順序かを分類

【課題3】

  • カテゴリー理論でジョインに類似する概念:余積(コープロダクト)

このように、順序関係は数学・プログラミング・日常生活で広く応用される基本構造。全順序部分順序の違い、構成する法則、最大元・最小元・ジョイン・ミートなどの概念を理解することで、より深く抽象構造を捉えることができる。

Hackerたちの意見

カテゴリー理論を矢印だけで表現する方法があるんだよね。アイデンティティの矢印(すべてのオブジェクトが持ってるやつ)をそのオブジェクト自体に関連付けることで。ある意味、オブジェクトは文法的な砂糖みたいなもんだね。
記事を開いて3秒も経たずにわかるよ。カラフルなM&M'sでいっぱいだし、すぐに閉じたくなる。
抽象数学全般、特にカテゴリー理論のチャレンジは、「線形順序」が何かを理解できないことじゃなくて、日常生活からあまりにも遠くて完全に無意味に思えることだと思う。まるで完璧に滑らかなガラスの上に水を注ぐような感じだね。
カテゴリー理論についての「驚くべき事実」ってあるのかな?グループ理論を使って、次数が5を超える多項式方程式に解析解がないことを証明できるって初めて聞いたときは衝撃的だった。カテゴリー理論の対になるようなものは何だろう?
思ってる以上に正しいよ。数学の本質は正確な思考なのに、この記事はすごく不正確なんだ。誰も気にしないし、指摘もしないみたい。この記事が不正確だって誰も指摘しないのを見て、信じられない気持ちだよ。詳しくは兄弟スレッドを見てね、(すごく)不完全なリストがあるから、これが真剣な読み物としては不適格だってわかるはずだよ: https://news.ycombinator.com/item?id=47814213 結論としては、一般の実務者には役に立たないと思う。間違った数学も正しい数学と同じように評価されるからね。
すごく明らかだって言うけど、博士課程の2年間でこれを意識するようになったよ。そして、気づいた瞬間、終わったら自分の分野を離れたいってすぐに思ったんだ。
> 日常生活からかけ離れていて、完全に無意味に思える。これは教え方の問題だと思う!順序理論はプログラミングにめっちゃ役立つよ。主な課題は、「無意味さ」の壁を越えることと、完全順序や「比較器」の世界観から脱却することだね。前順序は強力なんだ。テストする時に「正しい」という意味を考える新しい方法を提供してくれる。例えば、状態遷移は時々前順序として見ることができるし、それに合わせられれば、複雑なテストも「<= が成り立つ」と主張するだけに簡略化できる。これには結構考える時間がかかるけど、日常生活から遠い分、逆に日常に取り入れることで馴染んでくるんだ。テストを見て「お、あの条件式は[blah]の前順序としてモデル化できるかも」と思えるようになるよ。
誰かが数学を行ごとにチェックしたくないなら、この記事を疑ってかかるのもいいけど、これもJavaScriptを紹介してるからね: [1, 3, 2].sort((a, b) => { if (a > b) { return true } else { return false } }) これは有効な比較関数じゃないよ。APIが負の数、ゼロ、または正の結果を期待してるのに、真偽値を返すから、私のChromeでは`[1, 3, 2]`が返ってくる。この記事の数学の正確さもだいたいこんな感じで、兄弟コメントで説明しようとしてるよ: https://news.ycombinator.com/item?id=47814213
なんでJavaScriptだと思うの? 記事のどこにも言語についての記載が見当たらないんだけど。
このリソースは順序関係をすごくわかりやすく説明してる。こうやって構造を視覚化すると、抽象的な概念がずっと理解しやすくなるね。
より正統的な方法でカテゴリー理論を学びたいなら、トム・ラインスターの『基本カテゴリー理論』を勧める人が多いよ。これ、無料なんだ。[1] 近々これを進めていくつもりだけど、ちょっと見た感じではすごく良さそう。ただ、TFAみたいなものよりは「数学的」な感じがするかな。カテゴリー理論が学問として存在する理由を説明するのも(私の意見では)うまくやってると思う。[1] https://arxiv.org/pdf/1612.09375
この本とカテゴリー理論全般についての注意点:ほとんどの本は、すでに学部レベルの数学をマスターしている人向けに最適化されてる。代数構造や線形代数、位相幾何学に不慣れなら、他のリソースを使って学ぶ準備をしておいた方がいいよ。カテゴリー理論は、統一しようとしている意味論のいくつかを理解していないと、あまり印象的じゃないからね。この点で、この本は例えば初期の性質を最初は当たり前のこととして提示してるけど、任意の構造に対して単純に成り立つわけじゃないって気づかないとね。
これ、Haskellの型クラスを思い出させるね。自分のルールセットで秩序の概念を優雅に定義して、関係性をきれいに捉えてる。
2015年に修士課程でカテゴリー理論を学んで、秩序がデータ構造からアルゴリズムまで影響を与えることを知ったよ。基礎的なことだけどね。
著者の文体とカッコの使いすぎが苦痛だわ。真のカッコ付きの内容は珍しいし、良い技術的なライターはそれを控えめに使うもんだよ。
カッコの使い方でその人のADHDレベルがわかるね。ただし、リスプのプログラマーは別だけど。
一度、ノートと鉛筆を持った男がこういう図を描いてるのを見たことがある。その時、グラフ理論だと思ったけど、外向的な気分じゃなかったから聞くチャンスを逃しちゃった。彼は楽しんでやってるみたいだったな。これらの理論や数学を使って簡単に作れるパズルについて考えてるんだけど、実践者の皆さん、何かアイデアある?
> 以前、ノートと鉛筆を持った男がこういう図を描いているのを見たことがあるんだけど、その時はグラフ理論だと思ったんだ。今は代数グラフ理論でs-アーク遷移グラフに関する仕事をしてる。実際のグラフを描くことって、意外と少ないんだよね。大体はグループ作用や自己同型、アーク安定化子について考えることが多い。実際にどういう感じか興味がある人のために、ここに簡単なノートがあるよ: https://susam.net/26c.html#algebraic-graph-theory。s-アーク遷移に関する具体的な結果は載ってないけど、この分野の雰囲気は伝わると思う。グラフ理論の大部分は、特定のグラフを描かずに進んでいくんだ。