カントール関数

**カントール関数**（カントールかんすう、）または**悪魔の階段**（あくまのかいだん、）とは、連続ではあるが絶対連続ではない関数の一つである。カントール関数の名前はゲオルク・カントールに由来する。

## 定義

カントール関数の構成法を示したものが右のアニメーションである。正確には、カントール関数 c : [0, 1] \to [0, 1] は次のように定義される。
# 引数 *x* を三進小数展開する。
# 得られた小数の中に数字 **1** が含まれていれば、そのうち最初に現れるもののみを残してそれより後の全ての桁を **0** に置換する。
# 得られた小数の中に数字 **2** が残っていれば、それらを全て **1** に置換する。
# 得られた小数を二進小数だと思って解釈する。この結果が *c*(*x*) の値である。

例として、幾つかの値についてカントール関数の値を計算過程を示す。
* 0 は三進小数展開すると 0.00000000... となる。ここに数字 1 は含まれていないので、上の手順の 2. では何も起こらない。数字 2 も含まれていないので、 3. でも何も起こらない。これは 二進小数表示でも 0 であるから、結局 *c*(0) = 0 が得られる。
* 1/4 は三進小数展開すると 0.02020202... となる。ここに数字 1 は含まれていないので、上の手順の 2. では何も起こらない。続いて数字 2 を全て 1 に置換すると 0.01010101... という小数が得られる。これは 1/3 の二進小数表示であるから、結局 *c*(1/4) = 1/3 が得られる。
* 1/5 は三進小数展開すると 0.01210121... となる。このうち最初の 1（小数第2位）より後の桁を全て 0 に置換すると 0.01000000... という小数が得られる。ここに数字 2 は含まれていないので、上の手順の 3. では何も起こらない。こうして得られた小数 0.01000000... は 1/4 の二進小数表示であるから、結局 *c*(1/5) = 1/4 が得られる。
* 200/243 は三進小数展開すると 0.21102 或いは 0.211012222... となる。このうち最初の 1（小数第2位）より後の桁を全て 0 に置換すると 0.21000000... という小数が得られる。続いて数字 2 を全て 1 に置換すると 0.11000000... という小数が得られる。これは 3/4 の二進小数表示であるから、結局 *c*(200/243) = 3/4 が得られる。
* 1 は三進小数展開すると 0.22222222... となる。ここに数字 1 は含まれていないので、上の手順の 2. では何も起こらない。続いて数字 2 を全て 1 に置換すると 0.11111111... という小数が得られる。これは 1 の二進小数表示であるから、結局 *c*(1) = 1 が得られる。

## 性質
カントール関数は、関数の連続性や測度に関して直感に反する例として有名である。
カントール関数は定義域 [0, 1] 全域において連続であり、かつほとんど至るところでその微分係数の値が 0 であるにもかかわらず、関数は 0 から 1 までのすべての値を連続的にとる。
カントール関数は一様連続（より正確に書くと指数 \log2/\log3 のヘルダー連続) ではあるが絶対連続ではない例として最も代表的な例である。

カントール関数は、カントール集合 *C* に属さない任意の点 x \not\in C の近傍で定数関数である、すなわち微分可能であって微分係数の値が 0 である。その一方で、カントール関数は非可算無限個の微分不可能点を持ち、それらはいずれもカントール集合上の点である。例えば、三進小数を用いて (0.x_1x_2x_3\ldots x_n0222\ldots, 0.x_1x_2x_3\ldots x_n2) \subseteq [0, 1] \setminus C という形で表される任意の開集合について、カントール関数はその内部では定数関数であるが両端点では微分不可能である。

*x*  1 に対して *c*(*x*) = 1 として定義域を実数全体に拡張することで、カントール関数はカントール集合上の一様乱数に対する累積分布関数（カントール分布）となる。
この分布は離散的な部分を持たない、すなわち対応する測度は atomless (:en:Atom (measure theory)) である。故にカントール関数は跳躍不連続点（これは測度における atom に対応する）を持たない。
しかしながら、カントール関数は何らかの確率密度関数の積分の形で表現することはできない。何故ならば、カントール分布に対する確率密度はほとんど至るところで 0 でなければならず、するとその積分は定義域全体で 0 になってしまうからである。

カントール関数は特異関数 (:en:singular function) の標準的な例である。

カントール関数は単調非減少であり、故にそのグラフは有限の長さを持つ ( rectifiable である)。実際に、カントール関数のグラフの弧長は 2 である。このことは後述の関数列の弧長の極限値として初等的に求められる。

## 別の定義

### 反復的構成

単位区間 [0, 1] における関数列 \{ f_n \}_{n=0}^\infty を次のように帰納的に定義すると、これはカントール関数に収束する。
:f_0(x) = x
:f_{n+1}(x) =
\begin{cases}
\frac{1}{2} \times f_n(3x) &\mbox{if } 0 \le x 
各 *n* に対し *f**n*(0) = 0, *f**n*(1) = 1 であるから、*f* は *x* = 1/3, 2/3 において連続である。ここで、*n* ≥ 1 において
:\max_{x \in [0, 1]} |f_{n+1}(x) - f_n(x)| \le \frac{1}{2} \max_{x \in [0, 1]} |f_n(x) - f_{n-1}(x)|
すなわち
:\max_{x \in [0, 1]} |f_{n+1}(x) - f_n(x)| \le 2^{-n} \max_{x \in [0, 1]} |f_1(x) - f_0(x)|
が成り立つ。よって、各 *x* ∈ [0, 1] と *m* > *n* ≥ 1 について次式が成り立つ。
:|f_m(x) - f_n(x)| = \sum_{i = n}^{m-1} |f_{i+1}(x) - f_i(x)| \le \sum_{i = n}^\infty 2^{-i} \max_{x \in [0, 1]} |f_1(x) - f_0(x)| = 2^{-n+1} \max_{x \in [0, 1]} |f_1(x) - f_0(x)|
従って数列 \{ f_n(x) \}_{n=0}^{\infty} はコーシー列であるから、極限値 *f*(*x*) を持つ（各点収束）。更に、上の式で *m* → ∞ とすることで
:|f(x) - f_n(x)| 
が得られる。これは関数列が *f* に一様収束することを意味する。

なお、ここでは初期関数として *f*0(*x*) = *x* を用いたが、実際には *f*0(0) = 0, *f*0(1) = 1 なる有界関数でさえあれば何でも構わない。

### フラクタル体積
カントール関数はカントール集合と密接に関係している。カントール集合は、0次元体積（点の個数）は無限大である一方で1次元体積（長さ）は0であるようなフラクタルであり、そのハウスドルフ次元は D = \log2/\log3 である。カントール関数は、カントール集合の部分集合の *D*-次元体積 *H**D* を用いて次式で定義できる。
:f(x) = H_D(C \cap (0,x))

## 一般化
閉区間 [0, 1] 上の数 *y* に対し、その二進小数展開を
:y = \sum_{k=1}^\infty b_k 2^{-k}
とする。この *y* について、
:C_z(y) = \sum_{k=1}^\infty b_k z^k
という関数 *C*z を考える。このとき、*z* = 1/3 とすると、
:x = 2 C_{\frac{1}{3}}(y)
の逆関数 *y* = *y*(*x*) はカントール関数となる。一般に *z* *z*(*y*) のグラフはカントール関数のグラフを横倒しにしたような形になっており、その幅は *z* の値が 0 に近づくほど広くなっていく。

ミンコフスキーの疑問符関数 は見た目はカントール関数とよく似ており、カントール関数を「滑らかにした」ようなものに見える。
カントール関数が三進小数展開を二進小数展開に変換することで構成されるのと同じように、疑問符関数は連分数展開を二進小数展開に変換することで構成される。
疑問符関数は全ての有理数における微分係数が 0 であるという興味深い性質を持っている。

## 脚注

## 参考文献
* 
** 

## 関連項目
* カントール集合

## 外部リンク
* ''Cantor ternary function'' at Encyclopaedia of Mathematics
* Cantor Function by Douglas Rivers, the Wolfram Demonstrations Project.
*