射影 (projection)
複数の分野に現れるが、共通核は同じ — 全体から一部の成分・次元だけを取り出し、残りを捨てる操作。多くは冪等(2回適用しても結果は変わらない: p(p(x)) = p(x))で、情報を落とす(非可逆)。双対は「埋め込む・注入する(injection)」。分野ごとに姿を整理する。
圏論・型の射影
積(product)A×B からの取り出し π₁ : A×B → A、π₂ : A×B → B(プログラムの fst / snd)。型では A ∧ B → A = ∧除去(カリー=ハワードで「タプルから片方を取る」)。積の普遍性そのものが射影で定義される(任意の対 f:C→A, g:C→B が一意の ⟨f,g⟩:C→A×B を経由し、πで戻る)。
双対は直和(coproduct)A+B への入射 inj₁ : A → A+B(型では A → A∨B = ∨導入)。射影=取り出す / 入射=埋め込むが積↔和の双対をなす。→ 直積/直和型の取り出しと構築。
矢印の向きが対照的(射影は外向き、入射は内向き):
flowchart LR
subgraph prod["積 A×B(射影 = 外向き)"]
direction TB
AB["A × B"]
AB -->|"π₁"| A1["A"]
AB -->|"π₂"| B1["B"]
end
subgraph cop["直和 A+B(入射 = 内向き)"]
direction TB
A2["A"] -->|"inj₁"| AC["A + B"]
B2["B"] -->|"inj₂"| AC
end
線形代数の射影
線形写像 P で P² = P(冪等) を満たすもの。空間をある部分空間へ「潰す」。
- 直交射影: さらに
Pᵀ = P(対称)。点から部分空間への最短距離の足を与える → 最小二乗法の幾何的中身 - 次元削減(PCA など)は「分散最大の部分空間への射影」
- 冪等=「一度潰したものを再度潰しても同じ」、情報落ち=「捨てた次元は戻せない」
冪等性(P²=P)を図で:
flowchart LR
x["x(全空間の点)"] -->|"P"| px["Px(部分空間へ落とす)"]
px -->|"P をもう一度(変化なし)"| px
関係代数の射影
RDB の π(列の選択)= SQL の SELECT 列…。テーブルから必要な属性(列)だけを残す。
- 対になるのは選択(selection)
σ=WHERE(行の絞り込み)。射影=縦に削る / 選択=横に削る - 集合意味論では重複を除くため冪等的
縦(列)に削るのが射影、横(行)に削るのが選択:
flowchart LR
T["テーブル(行 × 列)"] -->|"π 射影 = 列を選ぶ"| C["必要な列だけの表"]
T -->|"σ 選択 = 行を絞る"| R["条件に合う行だけの表"]
その他の「射影」
- Futamura 射影(二村射影) → 部分評価。インタプリタの特殊化を3段で重ねる別概念(名前が同じだけ)
- 透視射影(perspective projection) → 3D→2D 変換(lumen 等のグラフィックス数学)
共通する直感(押さえどころ)
- 射影とは → 全体から一部の成分/次元を取り出し残りを捨てる操作。多くは冪等(
p∘p = p)で情報を落とす(非可逆)。 - 圏論・型 → 積からの取り出し
π₁/π₂(fst/snd)、A∧B→A(∧除去)。双対は直和への入射A→A∨B(∨導入)。 - 線形代数 →
P²=Pの冪等写像。直交射影(Pᵀ=P)は最短距離=最小二乗、PCA は分散最大部分空間への射影。 - 関係代数 →
π=列の選択(SELECT)。行を絞る選択σ(WHERE)と対。 - 同名だが別物 → Futamura 射影(部分評価)、透視射影(3D→2D)。
関連
- duality — 射影(取り出す)↔ 入射(埋め込む)、積↔直和の双対
- curry-howard —
A∧B→Aは射影、A→A∨Bは入射という論理⇔型の対応 - adt-gadt — 直積/直和型。射影・入射はその基本操作
- category-theory — 積/余積の普遍性が射影/入射を定義する
- partial-evaluation — 同名の「Futamura 射影」(別概念)