写像の合成

数学において写像あるいは函数の**合成**（ごうせい、）とは、ある写像を施した結果に再び別の写像を施すことである。

たとえば、時刻  における飛行機の高度を  とし、高度  における酸素濃度を  で表せば、この二つの函数の合成函数  が時刻  における飛行機周辺の酸素濃度を記述するものとなる。

## 導入
例えば、二つの写像 *f*: *X* &rarr; *Y* および *g*: *Y* &rarr; *Z* について、*g* の引数を *x* の代わりに *f*(*x*) とすることにより、*f* と *g* を「合成」 することができる。直観的には、*z* が写像 *g* で対応する *y* の函数で、*y* が写像 *f* で対応付けられる *x* の函数ならば、*z* は *x* の函数であるということを述べている。

これにより、写像 *f*: *X* &rarr; *Y* と写像 *g*: *Y* &rarr; *Z* との**合成写像**  
: g\circ f\colon X\to Z,\quad 
  \underbrace{X \stackrel{f} Y \stackrel{g} Z}_{\qquad f;g (= g\circ f)}
 
が *X* の各元 *x* に対して
: (g\circ f)(x) := g(f(x))
とおくことによって定まる。"*g* ∘ *f*" は図式的に写像 *f*, *g* を施す順番とは逆順となるため、しばしば正順に "*fg*", "*f* ; *g*" などと記す流儀もみられる（後述）。これらに「読み」を与えるならば、「*f* と *g* との合成」「*f* に *g* を合成」「*f* に引き続いて *g* を施す」「*f* と *g* との積」、「*g* の前に *f* を施す」「*g* を *f* の後で施す」「*g* の *f*（の *x*）」「*g* まる *f*」などとなる。

写像の合成は、それが定義される限りにおいて常に結合的である。すなわち、*f*, *g*, *h* がそれぞれ（合成が定義できるように）適当に選ばれた始域および終域を備えた写像であるとするならば、
: h\circ(g\circ f) = (h\circ g)\circ f, \quad(f\,;\,g);\,h = f\,;(g\,;\,h)
が成り立つ。ここで、括弧はそれが付いているところから先に合成を計算することを指し示すためのものである。これは括弧をつける位置の選び方は写像の合成の結果に影響を及ぼさないということを意味しているから、括弧を取り除いても意味を損なうことは無く、しばしば括弧を省略して
: h\circ g\circ f, \quad f\,;\,g\,;\,h
と書かれる。写像の数がさらに増えても同様である。

二つの写像 *f* と *g* が互いに可換であるとは、
: g\circ f = f\circ g \quad(\iff  (g\circ f)(x) = (f\circ g)(x)\text{ for any } x)
を満たすことをいう。一般には写像の合成は可換ではなく（少なくとも *f*: *X* &rarr; *Y* かつ *g*: *Y* &rarr; *X* といったような形の写像になっておらず *f* ; *g* か *g* ; *f* の何れかが定義できないとか、*X* = *Y* といったような条件がないとこれらふたつの合成写像の値を等しいかどうか考えることすらできないといったような可能性があるのは明らかである）、合成の可換性は特定の写像の間でのみ、特殊な事情の下でしか成立しない特別な性質である。たとえば、*f*(*x*) = |*x*| を実数の絶対値をとる函数、*g*(*x*) = *x* + 3 とすれば、実数からなる半開区間 *X* = [0, &infin;) := {*x* &isin; **R** : *x* &ge; 0} 上の函数として、
: (g\circ f)(x) = |x| + 3 = |x + 3| = (f\circ g)(x) \text{ for any } x\ge 0
が成り立つが、これは負の実数も含めた実数全体では成り立たない。集合 *X* 上の変換写像 &phi;: *X* &rarr; *X* が逆写像 &phi;&minus;1: *X* &rarr; *X* を持つならば、これらは常に可換であり
: \varphi\circ\varphi^{-1} = \varphi^{-1}\circ\varphi = \mathrm{id}_X
が成り立つ。ここに、id*X* は集合 *X* 上の恒等写像である。

写像を関係の特別な場合（つまり一意対応あるいは函数関係）と考える場合にも、関係の合成 g \circ f \subset X \times Z が、f\subset X \times Y とg\subset Y \times Z   を用いた式として、同様に定義される。

可微分写像同士の合成写像の微分は連鎖律を用いることによって求められる。またその高階微分はで与えられる。

写像の合成によって与えられる構造は公理化され、圏論において一般化される。

## 写像の冪
集合 *X* とその部分集合 *Y* &sub; *X* に対し、写像 *f*: *X* &rarr; *Y* はそれ自身と合成することができる。この合成写像をしばしば *f*2 で表す。同様に自分自身との合成を繰り返して
:\begin{align}
 & (f\circ f)(x) = f(f(x)) = f^2(x);\\
 & (f\circ f\circ f)(x) = f(f(f(x))) = f^3(x);\\
 & (\underbrace{f\circ f \circ \cdots \circ f}_{n\text{ times}})(x) = \underbrace{f(f(\cdots(f(}_{n\text{ times}}x\underbrace{)\cdots)))}_{n\text{ times}} = f^n(x)
\end{align}

という合成写像の列が得られる。このようにある写像を自身と繰り返し合成することで得られる合成写像を**[[反復合成写像]]**などと呼ぶ。

自然数 *n* に対し帰納的に定まる写像の**反復合成[[冪乗|冪]]**  *f* ∘ *f**n* = *f**n* ∘ *f* = *f**n*+1 は以下のように拡張すると便利である。
* 規約として、*f*0 := id*D*(*f*) とする（右辺は *f* の始域 *D*(*f*) 上の恒等写像である）。
* *f*: *X* &rarr; *X* が逆写像 *f*&minus;1 を持つならば、写像*f* の負の整数を指数とする合成冪を、逆写像の自然数冪 f^{-k} := (f^{-1})^k = f^{-1}\circ \cdots \circ f^{-1} \quad (k > 0)と定める。

; 注意: *f* が環に値をとる写像（特に *f* が実数値や複素数値函数）のときは冪の記法に誤解の余地が生じる。すなわち、*f*2(*x*) = *f*(*x*) &bull; *f*(*x*) のように、*f* の *n* 個の元ごとの積に対して *f**n* という記法を用いている可能性があることに注意すべきである。
: 三角函数の慣習的な記法は、少なくとも（正の）自然数冪については後者（元ごとの冪）の意味で用いられている。たとえば、sin2(*x*) = {sin(*x*)}2 の意味である（三角函数の項などを参照）。ただし、負の整数冪については事情が異なり、特に (&minus;1)-乗は、例えば tan&minus;1(*x*) = arctan(*x*) (&ne; 1/tan(*x*)) のように、逆函数の意味（合成冪）として用いるのが普通である。

ある場合には、*f* についての式 *g*(*x*) = *f* *r*(*x*) が適当な *g* の満たす性質から整数ではない *r* について成立することが導かれることがありうる。これを**[[分数回反復]]**  と呼ぶ。たとえば、写像 *f* の1/2回反復  とは *g*(*g*(*x*)) = *f*(*x*) を満たす写像 *g* のことである。別な例として、*f* を後継函数  として *f* *r*(*x*) = *x* + *r* とすることが考えられる。この考え方を一般化して、反復回数を表す添字を連続パラメータに取り替えることを考えることもできるが、このような系は**[[流れ (数学)|流れ]]**  と呼ばれる。

反復合成写像および流れはフラクタルや力学系の研究に自然に現れる。

## 合成に関するモノイド

ふたつ（あるいはそれ以上の数の）写像 *f*: *X* &rarr; *X*, *g*: *X* &rarr; *X* が同一の集合を始域および終域に持つものとすれば、（重複を許した）長い合成の鎖を *f* ∘ *f* ∘ *g* ∘ *f* のようにして作ることができる。このような鎖の全体は変換モノイドまたは合成モノイドと呼ばれるモノイドの代数的構造を持つ。一般に、変換モノイドは極めて複雑な構造を持つ。特筆すべき例のひとつはである。*X* 上の変換 *f*: *X* &rarr; *X* の全体が成す集合は、*X* 上の全変換半群  と呼ばれる。

*X* 上の変換の集合 *S* の各元 *f*: *X* &rarr; *X* が全単射であるとき、*S* に属する変換から可能な限りの組合せをとって得られる合成の鎖の全体は変換群を成す。このとき、個の変換群は *S* で生成されるという。*X* 上の全単射な変換 *f*: *X* &rarr; *X* の全体は、写像の合成に関して群を成す。これを対称群と呼び、また**合成群**  と呼ばれることもある。

## 合成の記法について

* *g* ∘ *f* の合成の記号を落として、単に *gf* と書かれることも多い。
* 20世紀のなかごろ、（左から右へ読む文章中で）"*g* ∘ *f*" と書いたものが "最初に *f* を施してから *g* を施す" という意味になるのは非常にややこしいため、記号を改めて "*f*(*x*)" の代わりに "*xf*" と書き、"*g*(*f*(*x*))" の代わりに "(*xf*)*g*" と書いた者もあった。このような記法は後置記法と呼ばれる。分野によってはこのようにしたほうが、写像を左から作用させるよりも自然で単純であるようにも思われる（例えば線型代数学では *x* を行ベクトルとして、行列 *f* および *g* と右からの行列の積によって合成を行うことができる。行列の積は可換ではないから、順番は重要である）。連続して変換することと合成とが、合成の列を左から右に読むことによってちょうど一致する。  
* 後置記法を採用している文脈では、"*fg*" と書くことで、初めに *f* を適用してから *g* を適用するという意味となるが、後置記法では記号の現れる順番を保たなければならないので、"*fg*" と書くのは（どこまでが一つの記号なのかわかりにくいため）曖昧さを含んでしまう。計算機科学者はこれを "*f;g*" と書き、これによって合成の順番に関する曖昧さを除くことができる。左合成演算子と地の文における約物としてセミコロンとを区別するために、Z記法では「太いセミコロン」⨟ (U+2A1F) で左を表すが、写像は二項関係であるから、写像の合成に太いセミコロンを用いるのは意味的にも正しい（この記号法についての議論は関係の合成の項を参照）。

## 合成作用素

写像 *g* が与えられたとき、*g* の定める**合成作用素**  *C**g* とは

:g^{*}(f) := f \circ g,\quad g_{*}(f) := g\circ f

によって定義される、写像を別の写像に写す作用素のことである。g^*(f) は写像 *f* の *g* による、g_*(f) は写像 *f* の *g* によると呼ばれる。合成作用素は作用素論の分野で研究される。

## 関連項目
* 組合せ論理
* 関係の合成: 写像の合成の関係への一般化
* 
* : 合成の逆の操作
* 高階函数
* : 写像の合成をプロットする方法
* ラムダ計算

## 外部リンク
*"Composition of Functions" by Bruce Atwood, the Wolfram Demonstrations Project, 2007.