関数を連鎖させる。f の出力を g の入力にする。このシンプルな操作が、パイプライン処理、ミドルウェア、データ変換の基盤になっている。そして逆関数は、暗号化と復号、エンコードとデコードという対の関係を数学的に表現する。

合成関数 逆関数 パイプライン 結合法則

合成関数

合成関数(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:エンコーダとデコーダは(近似的な)逆関数の対。

可逆ネットワーク:正確な逆関数を持つ特殊なアーキテクチャ。

深掘りリンク