16.1 無限級数
厳密でない言い方をすれば、母関数 (generating function) とは次の形をした無限級数 \(F(x)\) を意味する:
母関数 \(F(x)\) の \(x^{n}\) の係数を \([x^{n}]F(x)\) と表記する。つまり \([x^{n}]F(x) ::= f_{n}\) と定める。また、上記の \(F(x)\) を「無限列 \((f_{0}, f_{1}, \ldots)\) の母関数」と呼ぶ。
任意の数列 \(f_{0}\), \(f_{1}\), \(\ldots\), \(f_{n}\), \(\ldots\) を母関数の係数が並んだ列とみなせば、その母関数を調べることで数列の振る舞いを解析できる。数え上げ、再帰的定義、プログラミングに関する問題で姿を現す複雑な列の中には、母関数の係数が並んだ列とみなすことで扱いが容易になるものが存在する。
母関数からは係数の列が自明な場合でも目を見張る結果が得られる。例えば、係数を並べた無限列が \((1,1,\ldots)\) である母関数を \(G(x)\) とする。この \(G(x)\) は幾何級数である:
母関数で頻繁に使われる簡単なテクニックを使って \(G(x)\) を表す単純な式を求めてみよう。このアプローチは第 14.1.2 項で説明した摂動法を簡単にしたバージョンである:
\(G(x)\) に関して解けば次の等式を得る:
この事実は次のようにも表せる:
同じアプローチを使うと、次の関数に等しい単純な式も見つけられる:
同様の変形から次の等式が分かる:
\(N(x)\) に関して解けば次を得る:
この事実は次のようにも表せる:
16.1.1 収束性は気にしない
等式 \(\text{(16.3)}\), \(\text{(16.5)}\) は数値的には \(|x| < 1\) のときに限って成立し、\(|x| \geq 1\) だといずれも発散する。しかし、母関数を考える文脈では、無限級数は純粋に代数的なオブジェクトと解釈される。つまり等式 \(\text{(16.3)}\), \(\text{(16.5)}\) は代数的理由のみによって成立する記号的恒等式を主張する。実は、母関数の考え方を使うと (\(x = 0\) を除いて) どの点でも収束しない無限級数にも利用価値が生まれる。この話題は章末の第 16.5 節でさらに詳しく触れるので、今は「とりあえず収束は気にしなくていい」と思ってほしい。