合成関数 逆関数 パイプライン 結合法則
合成関数
合成関数(Composition)
f: A → B, g: B → C のとき
(g ∘ f)(x) = g(f(x))
fを適用してから g を適用する。
注意:記号の順序(g ∘ f)と適用順序(f → g)は逆。
プログラミングでの表現
| 言語/概念 | 表現 |
|---|---|
| 数学 | (g ∘ f)(x) |
| JavaScript | g(f(x)) または pipe(f, g)(x) |
| Python | g(f(x)) |
| Unix | cmd1 | cmd2 | cmd3 |
| 関数型 | compose(g, f) または f >> g |
結合法則
合成関数は結合法則を満たす。
結合法則(Associativity)
(h ∘ g) ∘ f = h ∘ (g ∘ f)
どの順序でグループ化しても結果は同じ。
→ パイプラインの分割・統合が自由にできる。
逆関数
逆関数(Inverse Function)
f: A → B の逆関数 f⁻¹: B → A は
f⁻¹(f(x)) = x かつ f(f⁻¹(y)) = y
を満たす関数。
逆関数が存在する条件:f が全単射であること。
逆関数の例
| 関数 | 逆関数 | 応用 |
|---|---|---|
| f(x) = x + a | f⁻¹(x) = x - a | オフセット |
| f(x) = ax | f⁻¹(x) = x/a | スケーリング |
| f(x) = eˣ | f⁻¹(x) = ln(x) | 対数スケール |
| Base64エンコード | Base64デコード | データ変換 |
| 暗号化 | 復号 | セキュリティ |
逆関数が存在しない場合
単射でない関数には逆関数が存在しない。例えば f(x) = x² は、f(2) = f(-2) = 4 なので、4 から元の値を一意に決定できない。
ハッシュ関数は意図的に逆関数を持たないよう設計されている(一方向関数)。
実務での応用
WEB開発での応用
ミドルウェア:Express.js などのミドルウェアチェーンは関数の合成。
パイプライン:データ処理の各ステップを関数として連鎖。
エンコード/デコード:JSON.stringify/parse、encodeURI/decodeURI は逆関数の対。
変換の取り消し:Undo機能は逆関数の適用。
AI/MLでの応用
ニューラルネットワーク:層の連鎖は関数の合成。深層 = 多段合成。
正規化/逆正規化:前処理と後処理は逆関数の関係。
Autoencoder:エンコーダとデコーダは(近似的な)逆関数の対。
可逆ネットワーク:正確な逆関数を持つ特殊なアーキテクチャ。
深掘りリンク
- Wikipedia: 合成写像
- Wikipedia: 逆写像
- 関連:モナド、関数型プログラミング
- 次のステップ:圏論、Functor