逆関数と合成関数(暗号と可逆パイプライン)
「加工したデータを元通りに復元できるか?」y = x 対称のグラフとプログラムの関数合成
- 1
- 合成関数 (g ∘ f)(x) = g(f(x)) は、関数 f の出力をそのまま次の関数 g の入力に流し込むパイプライン処理を表す
- 2
- 逆関数 f⁻¹(x) は、出力 y から元の入力 x を逆算して一意に復元する関数であり、元の関数と「直線 y = x に関して線対称」になる
- 3
- データの暗号化と復号化(可逆圧縮・復号)、3D画面クリックから空間座標を逆算するアンプロジェクション処理はすべて逆関数の応用である
なぜこれを学ぶのか? — 現実社会とテクノロジーでの価値
なぜ生まれたのか?
一度加工・変換したデータを、元の情報に一寸の狂いもなく復元する「可逆性」を保証するために体系化された。
身につく武器・思考力
「入力を変換し、逆順で元に戻す」パイプライン思考を確立し、直線 y = x に関する対称性を通して関数の構造を深く把握できるようになる。
実社会・ITでの活躍現場
- •暗号化(f)と復号化(f⁻¹)による安全なセキュア通信
- •データ圧縮(Zip)と解凍におけるロスレス可逆変換
- •3Dゲームで画面上の2Dマウスクリックから3D空間座標を復元する逆射影
- •画像処理におけるエンコード(圧縮)とデコード(展開)パイプライン
Layer 1 — 直感・シミュレーター
元の関数 の傾きや切片をスライダーで操作してみよう。入力 が関数 を通過して変換され、逆関数 を通過することで一寸の狂いもなく元の に蘇る「可逆パイプライン」がリアルタイムに動作する。同時にグラフ上で、2つの曲線が鏡(直線 )に対して綺麗に対称になる様子を確認できる。
関数 f(x) = 2x + 3 の逆関数 f⁻¹(x) はどれか?
Layer 2 — 定義・受験・証明
定義
関数の合成と逆関数: - 合成関数: 集合 から への関数 と、 から への関数 に対し、各 に を対応させる関数を合成関数と呼び、 と表記する。 - 逆関数: 関数 が全単射(1対1対応)のとき、各 に対し となる唯一の を対応させる関数を の逆関数と呼び、 と表記する。
恒等写像の性質:
公式・数理モデル
証明・導出
逆関数が直線 に関して対称である幾何学的証明: 点 が関数 のグラフ上にあるとする。すなわち である。 逆関数の定義より、 が成り立つ。 これは、点 が逆関数 のグラフ上にあることを意味する。 座標平面において、点 と 座標と 座標を入れ替えた点 の関係を調べる。 2点の中点は であり、これは直線 上にある。 また2点を結ぶ直線の傾きは であり、直線 (傾き 1)と直交する。 したがって、点 と は直線 に関して鏡像(線対称)の位置にあり、関数 とその逆関数 のグラフ全体も必ず直線 に関して完全に対称となる。
押さえておきたいポイント
- 関数が逆関数を持つための必須条件は「単調増加」または「単調減少」(1対1対応の単射であること)
- 指数関数 と対数関数 は、互いに逆関数の関係( で対称)にある
- 合成関数の微分公式(チェインルール): は深層学習の誤差逆伝播法の基礎
- 逆関数の微分公式: (傾きが逆数になる)
本トピックの内容・数理モデルは、文部科学省学習指導要領(算数・数学・情報)および国際標準カリキュラムに準拠し、エンジニアリング現場の実装事例と照らし合わせてMath World Lab編集部により検証・作成されています。
Layer 3 — 工学応用・現場実装
関数型プログラミングにおける関数合成(Compose / Pipe)と可逆データ変換
入力データを複数の純粋関数で順次パイプライン変換する `pipe` 関数と、暗号化・復号化やデータ圧縮・解凍のように完全に可逆性を保証する双方向マッピングの実装。
1// 関数合成ユーティリティ (左から右へパイプ実行)2const pipe = <T>(...fns: Array<(arg: T) => T>) => (value: T): T =>3 fns.reduce((acc, fn) => fn(acc), value);45// 可逆暗号化関数とその逆関数 (アフィン暗号の原理)6class ReversibleTransform {7 constructor(private a: number, private b: number) {8 if (a === 0) throw new Error("係数 a は 0 以外である必要があります");9 }1011 // 暗号化関数: f(x) = a*x + b12 encrypt(x: number): number {13 return this.a * x + this.b;14 }1516 // 逆関数 (復号化): f^-1(y) = (y - b) / a17 decrypt(y: number): number {18 return (y - this.b) / this.a;19 }20}2122// 例: a = 3, b = 7 の可逆パイプライン23const transform = new ReversibleTransform(3, 7);24const originalSecret = 42;2526// 暗号化27const encrypted = transform.encrypt(originalSecret); // 3*42 + 7 = 13328// 復号化(逆関数適用)29const restored = transform.decrypt(encrypted); // (133 - 7) / 3 = 423031console.log(`平文: ${originalSecret}`);32console.log(`暗号文 (f(x)): ${encrypted}`);33console.log(`復元値 (f^-1(y)): ${restored} (完全一致: ${originalSecret === restored})`);
次に学ぶならコレ!おすすめトピック
この単元と深い繋がりを持つ、あわせて学ぶと理解が深まるおすすめ単元