0
大学数学基礎解説
文献あり

【符号理論】クラフトの不等式と情報源符号化定理のメモ

16
0
$$$$

$$ $$
$$ \begin{array}{l} \text{データを、その情報を失うことなく圧縮するとき、その限界は何で決まるのだろうか?} \end{array} $$

Def.

文字 と アルファベット

形式言語を考えるために、あらかじめ対象の集合 $U$ を固定し、その元を記号、または文字として扱う。
文字とは、形式言語の構成において、それ以上分解せずに $1$ つの基本単位として扱う対象である。
ここでは、$\Sigma\subseteq U$ がアルファベットであるとは、$\Sigma$ が空でない有限集合であることをいう。

  1. すなわち、
    $$ \Sigma\ne\varnothing $$
    かつ、ある $n\in\mathbb N$ と互いに異なる $a_1,\ldots,a_n\in U$ が存在して、
    $$ \Sigma=\{a_1,\ldots,a_n\} $$
    と表せることである。
  2. このとき、$\Sigma$ の各元を、アルファベット $\Sigma$ の文字、または記号という。

したがって、
$$ a\in\Sigma $$
であることは、$a$ がアルファベット $\Sigma$ に属する文字(記号)であることを意味する。

文字列 と 文字列の長さ

$\Sigma$ をアルファベットとする。
$n\in\mathbb N$ とする。$\Sigma$ 上の長さ $n$ の文字列とは、写像
$$ w:\{1,\ldots,n\}\to\Sigma $$
のことをいう。

  1. このとき、各 $i=1,\ldots,n$ に対して、$w(i)$ は文字列 $w$ の第 $i$ 文字である。
    通常、
    $$ w(1)=a_1,\ \ldots,\ w(n)=a_n $$
    であるとき、この文字列を
    $$ a_1a_2\cdots a_n $$
    と書く。
  2. また、この文字列の長さを
    $$ |w|:=n $$
    で定める。
空文字列

$\Sigma$ をアルファベットとする。
$\Sigma$ 上の長さ $0$ の文字列とは、空集合から $\Sigma$ へのただ $1$ つの写像
$$ \varnothing\to\Sigma $$
のことをいう。

  1. この文字列を空文字列といい、
    $$ \varepsilon $$
    で表す。
  2. したがって、
    $$ |\varepsilon|=0 $$
    である。
空文字列の一意性

空集合 $\varnothing$ から $\Sigma$ への写像はただ $1$ つしか存在しない。
実際、写像 $f:\varnothing\to\Sigma$ は、任意の $x\in\varnothing$ に対して値 $f(x)\in\Sigma$ を定めるものである。
$ $
しかし、$\varnothing$ には元が存在しないため、値を指定すべき対象が存在しない。
したがって、空集合から $\Sigma$ への写像はただ $1$ つである。この意味で、長さ $0$ の文字列は一意である。

空文字列は文字ではない

空文字列 $\varepsilon$ は、長さ $0$ の文字列であって、アルファベット $\Sigma$ の文字ではない。
したがって、通常は
$$ \varepsilon\notin\Sigma $$
として扱う。
また、$\varepsilon$ はスペース記号ではない。
スペース記号を文字として扱いたい場合には、スペース記号を $\Sigma$ の元として明示的に含める必要がある。

$\Sigma^n$ とクリーネ閉包 $\Sigma^*$

$\Sigma$ をアルファベットとする。
$n\in\mathbb N$ に対して、$\Sigma$ 上の長さ $n$ の文字列全体の集合を
$$ \Sigma^n := \{w\mid w:\{1,\ldots,n\}\to\Sigma\} $$
で定める。

  1. また、長さ $0$ の文字列全体の集合を
    $$ \Sigma^0:=\{\varepsilon\} $$
    で定める。
    $ $
  2. $\Sigma$ 上のすべての有限文字列からなる集合を
    $$ \Sigma^* := \bigcup_{n=0}^{\infty}\Sigma^n $$
    で定める。

-この集合 $\Sigma^*$ を、$\Sigma$ のクリーネ閉包という。

定義より、空文字列は $\Sigma$ 上の長さ $0$ の文字列であるから、
$$ \varepsilon\in\Sigma^0\subseteq\Sigma^* $$
である。
したがって、
$$ \varepsilon\in\Sigma^* $$
である。

例えば $\Sigma=\{a,b,c\}$ とすると、
$$ \Sigma^1 = \{w\mid w:\{1\}\to\Sigma\} $$
である。
したがって、$\Sigma^1$ の元は、次の $3$ つの写像である。
$$ w_a:\{1\}\to\Sigma,\quad w_a(1)=a $$
$$ w_b:\{1\}\to\Sigma,\quad w_b(1)=b $$
$$ w_c:\{1\}\to\Sigma,\quad w_c(1)=c $$
よって、
$$ \Sigma^1=\{w_a,w_b,w_c\} $$
である。

文字と長さ $1$ の文字列の同一視

$a\in\Sigma$ を文字とする。
厳密には、文字 $a$ と、長さ $1$ の文字列
$$ w_a:\{1\}\to\Sigma,\quad w_a(1)=a $$
は、一般には異なる対象である。
しかし、対応
$$ \Sigma\to\Sigma^1,\quad a\mapsto w_a $$
は全単射である。
$ $
実際、各 $a\in\Sigma$ に対して、$w_a$ は第 $1$ 文字が $a$ である長さ $1$ の文字列である。
また、長さ $1$ の文字列 $w:\{1\}\to\Sigma$ は、値 $w(1)\in\Sigma$ によって一意に定まる。
$ $
そのため、ここでは文字 $a$ と長さ $1$ の文字列 $w_a$ を同一視し、どちらも同じ記号 $a$ で表す。
この同一視のもとで、
$$ \Sigma^1=\Sigma $$
とみなす(※1)。
$ $
例えば、
$$ \Sigma=\{\mathtt{0},\mathtt{1}\} $$
ならば、厳密には $\Sigma^1$ の元は
$$ w_{\mathtt{0}}:\{1\}\to\Sigma,\quad w_{\mathtt{0}}(1)=\mathtt{0} $$

$$ w_{\mathtt{1}}:\{1\}\to\Sigma,\quad w_{\mathtt{1}}(1)=\mathtt{1} $$
である。
しかし、$w_{\mathtt{0}}$$\mathtt{0}$ と書き、$w_{\mathtt{1}}$$\mathtt{1}$ と書く約束をすれば、
$$ \Sigma^1=\{\mathtt{0},\mathtt{1}\} $$
とみなせる。
この同一視のもとで、
$$ \Sigma\subseteq\Sigma^* $$
とみなす(※2)。
$ $
※1 より厳密には、$\Sigma^1\cong\Sigma$ である。
※2 より厳密には、写像 $\Sigma\to\Sigma^*,\quad a\mapsto w_a$ によって、$\Sigma$$\Sigma^*$ の部分集合と同一視している。

ここまでの定義を具体例を使って説明する

例えば、形式言語で扱う対象の集合 $U$ の中から、$2$ つの対象 $\mathtt{0}$$\mathtt{1}$ を選び、
$$ \Sigma=\{\mathtt{0},\mathtt{1}\} $$
と定める。
このとき、$\Sigma$ は空でない有限集合であるから、アルファベットである。
また、$\mathtt{0}\in\Sigma$$\mathtt{1}\in\Sigma$ であるから、$\mathtt{0}$$\mathtt{1}$ はアルファベット $\Sigma$ に属する文字、または記号である。
$ $
$\Sigma$ 上の長さ $3$ の文字列の例として、写像
$$ w:\{1,2,3\}\to\Sigma $$

$$ w(1)=\mathtt{0},\quad w(2)=\mathtt{1},\quad w(3)=\mathtt{0} $$
で定める。このとき、$w$$\Sigma$ 上の長さ $3$ の文字列であり、通常は
$$ \mathtt{010} $$
と書く。
また、この文字列の長さは
$$ |w|=3 $$
である。
一方、$\Sigma$ 上の長さ $0$ の文字列は、空集合 $\varnothing$ から $\Sigma$ へのただ $1$ つの写像であり、これを空文字列と呼び、
$$ \varepsilon $$
で表す。このとき、
$$ |\varepsilon|=0 $$
である。さらに、
$$ \Sigma^0=\{\varepsilon\} $$
である。
また、文字と長さ $1$ の文字列を同一視すれば、
$$ \Sigma^1=\{\mathtt{0},\mathtt{1}\} $$
とみなせる。
また、長さ $2$ の文字列全体は
$$ \Sigma^2=\{\mathtt{00},\mathtt{01},\mathtt{10},\mathtt{11}\} $$
である。
このように、
$$ \varepsilon,\quad \mathtt{0},\quad \mathtt{1},\quad \mathtt{00},\quad \mathtt{01},\quad \mathtt{10},\quad \mathtt{11},\quad \mathtt{010} $$
などはすべて $\Sigma$ 上の有限文字列であり、
$$ \Sigma^* = \bigcup_{n=0}^{\infty}\Sigma^n $$
は、これらのような $\Sigma$ 上のすべての有限文字列からなる集合である。

離散情報源

$\mathcal X$ を空でない有限集合とする。
確率空間 $(\Omega,\mathcal F,\mathbb P)$ 上の確率変数列
$$ S=(X_t)_{t\in\mathbb N} $$
を考える。

  1. 任意の $t\in\mathbb N$ に対して、
    $$ X_t:(\Omega,\mathcal F)\to(\mathcal X,\mathcal P(\mathcal X)) $$
    が可測関数であるとする。
    このとき、$S$ を、出力アルファベット $\mathcal X$ をもつ離散情報源という。
    すなわち、各時刻 $t\in\mathbb N$ において、$X_t$$\mathcal X$ の元を $1$ つ出力する確率変数である。
    $ $
  2. また、$X_t(\omega)$ は、実現結果 $\omega\in\Omega$ のもとで、時刻 $t$ に情報源が出力する記号を表す。
    $x\in\mathcal X$ に対して、
    $$ \mathbb P(X_t=x) = \mathbb P(\{\omega\in\Omega\mid X_t(\omega)=x\}) $$
    は、時刻 $t$ に記号 $x$ が出力される確率を表す。
一般の離散情報源について

この定義では、$X_1,X_2,\ldots$ の独立性や同分布性は仮定していない。
したがって、ここで定義した離散情報源は、一般の有限アルファベット値確率過程である。
無記憶情報源、定常情報源、独立同分布情報源などは、この離散情報源に追加の条件を課して得られる特別な場合である。
$ $
このように、調べると情報源にも様々な種類があるみたいなんだけど、
とりあえず、本稿ではそこまで立ち入る必要はない(と思われる)ので、この程度に留めておく(´ω`)

確率空間の意味

確率空間 $(\Omega,\mathcal F,\mathbb P)$ は、情報源に含まれるランダム性を記述するための基礎となる空間である。
$\omega\in\Omega$ は、情報源の $1$ つの実現結果を表す。
例えば、情報源が無限回のコイン投げにより記号を出力する場合、
$$ \Omega=\{\mathrm H,\mathrm T\}^{\mathbb N} $$
とおくことができる。
このとき、$\omega\in\Omega$
$$ \omega=(\omega_1,\omega_2,\omega_3,\ldots) $$
という無限列であり、各 $\omega_t$ は第 $t$ 回目のコイン投げの結果を表す。
$ $
厳密には、$\mathcal F$$\{\mathrm H,\mathrm T\}^{\mathbb N}$ 上の積 $\sigma$ 加法族とし、$\mathbb P$ をベルヌーイ測度の積測度として定める。
この確率空間 $(\Omega,\mathcal F,\mathbb P)$ 上で、各 $t\in\mathbb N$ に対して
$$ X_t:\Omega\to\{\mathrm H,\mathrm T\},\qquad X_t(\omega)=\omega_t $$
と定めれば、$X_t$ は第 $t$ 回目のコイン投げの結果を表す確率変数である。

符号と符号長

$\mathcal X$ を空でない集合とし、$\Sigma$ を空でない有限集合とする。
$\Sigma$ の元を符号記号という。

  1. $\Sigma^*$ を、$\Sigma$ 上のすべての有限文字列からなる集合(クリーネ閉包)とする。
    このとき、写像
    $$ f:\mathcal X\to\Sigma^* $$
    を、$\mathcal X$ から $\Sigma^*$ への符号、またはコードという。
    $ $
  2. $x\in\mathcal X$ に対して、文字列
    $$ f(x)\in\Sigma^* $$
    を、$x$ に対応する符号語という。
    $ $
  3. このとき、$x$ に対応する符号長 $\ell_f(x)$
    $$ \ell_f(x):=|f(x)| $$
    で定める。
    ここで、$|f(x)|$ は符号語 $f(x)$ に含まれる符号記号の個数である。
符号長の記号

符号 $f$ が文脈から明らかな場合には、$\ell_f(x)$ を単に
$$ \ell(x) $$
と書くことがある。

情報源記号と符号化対象

離散情報源
$$ S=(X_t)_{t\in\mathbb N} $$
の出力アルファベットが $\mathcal X$ であるとき、符号化では通常、この $\mathcal X$ の元を符号化対象とする。
すなわち、情報源が出力する記号 $x\in\mathcal X$ に対して、符号語
$$ f(x)\in\Sigma^* $$
を割り当てる。

非特異性について

上の定義では、符号 $f$ が単射であることは仮定していない。
したがって、異なる $x,y\in\mathcal X$ に対して
$$ f(x)=f(y) $$
となることも、定義上は排除されていない。
異なる符号化対象を異なる符号語で表したい場合には、追加で
$$ x\ne y\Rightarrow f(x)\ne f(y) $$
を仮定する。
この性質を満たす符号を非特異符号という。

空文字列について

$\Sigma^*$ には空文字列 $\varepsilon$ が含まれるため、上の定義だけでは
$$ f(x)=\varepsilon $$
となることも許される。
ただし、後で一意復号可能符号(後述)や接頭辞符号(後述)を扱う場合には、通常、各 $x\in\mathcal X$ に対して
$$ f(x)\ne\varepsilon $$
を追加で仮定する。

情報源記号を符号化する例

離散情報源
$$ S=(X_t)_{t\in\mathbb N} $$
の出力アルファベットを
$$ \mathcal X=\{\text{晴},\text{雨},\text{曇}\} $$
とする。
符号アルファベットを
$$ \Sigma=\{\mathtt 0,\mathtt 1\} $$
とし、符号
$$ f:\mathcal X\to\Sigma^* $$

$$ f(\text{晴})=\mathtt 0,\quad f(\text{雨})=\mathtt {10},\quad f(\text{曇})=\mathtt {11} $$
で定める。このとき、

  1. 情報源がある時刻に $\text{晴}$ を出力したならば、その記号に符号語
    $$ \mathtt 0 $$
    を割り当てる。
    $ $
  2. 同様に、情報源が $\text{雨}$ を出力したならば、
    $$ \mathtt {10} $$
    を割り当てる。
    $ $
  3. 情報源が $\text{曇}$ を出力したならば、
    $$ \mathtt {11} $$
    を割り当てる。

-したがって、符号長は
$$ \ell_f(\text{晴})=1,\quad \ell_f(\text{雨})=2,\quad \ell_f(\text{曇})=2 $$
である。例えば、情報源が
$$ \text{晴},\text{雨},\text{曇} $$
という $3$ 個の記号を順に出力したとする。
このとき、それぞれの符号語を連結すると、
$$ f(\text{晴})f(\text{雨})f(\text{曇}) = \mathtt 0\ \mathtt {10}\ \mathtt {11} = \mathtt {01011} $$
となる。
この連結された文字列の長さは
$$ | \mathtt {01011} |=5 $$
であり、
$$ \ell_f(\text{晴})+\ell_f(\text{雨})+\ell_f(\text{曇}) = 1+2+2 = 5 $$
と一致する。

非特異符号

符号 $f:\mathcal X\to\Sigma^*$ が非特異であるとは、任意の $x,y\in\mathcal X$ に対して、
$$ x\ne y\Rightarrow f(x)\ne f(y) $$
が成り立つことをいう。
すなわち、$f$ が写像として単射であることをいう。

非特異符号である例

符号化対象の集合を
$$ \mathcal X=\{a,b,c\} $$
とし、符号アルファベットを
$$ \Sigma=\{\mathtt 0,\mathtt 1\} $$
とする。
写像
$$ f:\mathcal X\to\Sigma^* $$

$$ f(a)=\mathtt 0,\quad f(b)=\mathtt {10},\quad f(c)=\mathtt {11} $$
で定める。
このとき、異なる元には異なる符号語が対応している。すなわち、任意の $x,y\in\mathcal X$ に対して、
$$ x\ne y\Rightarrow f(x)\ne f(y) $$
が成り立つ。
したがって、この $f$ は非特異符号である。

非特異符号でない例

符号化対象の集合を
$$ \mathcal X=\{a,b,c\} $$
とし、符号アルファベットを
$$ \Sigma=\{\mathtt 0,\mathtt 1\} $$
とする。ここで、写像
$$ g:\mathcal X\to\Sigma^* $$

$$ g(a)=\mathtt 0,\quad g(b)=\mathtt 0,\quad g(c)=\mathtt 1 $$
で定める。このとき、
$$ a\ne b $$
であるが、
$$ g(a)=g(b)=\mathtt 0 $$
である。したがって、$g$ は単射ではない。ゆえに、$g$ は非特異符号ではない。
この例では、符号語 $\mathtt 0$ だけを見ても、それが $a$ を表しているのか $b$ を表しているのか判別できない。

ビット

二進アルファベットを
$$ \mathcal D:=\{\mathtt 0,\mathtt 1\} $$
とする。$\mathcal D$ の各元を二進記号、またはビット記号という。
すなわち、ビット記号とは、$\mathtt 0$ または $\mathtt 1$ のいずれかである二進アルファベットの記号である。

ビット列

$n\in\mathbb N_0$ とする。
$\mathcal D$ 上の長さ $n$ の文字列を、長さ $n$ のビット列という。
すなわち、ビット列とは、二進アルファベット
$$ \mathcal D=\{\mathtt 0,\mathtt 1\} $$
上の有限文字列である。
したがって、ビット列全体の集合は
$$ \mathcal D^* $$
である。
特に、空文字列 $\varepsilon$ は長さ $0$ のビット列であり、
$$ \varepsilon\in\mathcal D^* $$
である。
例えば、
$$ \varepsilon,\quad \mathtt 0,\quad \mathtt 1,\quad \mathtt{00},\quad \mathtt{01},\quad \mathtt{10},\quad \mathtt{11},\quad \mathtt{0101} $$
などはビット列である。

ビット数

$u\in\mathcal D^*$ とする。
文字列 $u$ の長さ $|u|$ を、$u$ のビット数という。
すなわち、$|u|$ はビット列 $u$ に含まれるビット記号の個数である。
$ $
例えば、
$$ u=\mathtt{0101} $$
であれば、
$$ |u|=4 $$
であるから、$u$$4$ ビットのビット列である。
また、
$$ |\varepsilon|=0 $$
であるから、空文字列 $\varepsilon$$0$ ビットのビット列である。

情報理論のビットと符号理論のビットの関係

情報理論におけるビットと、符号理論におけるビット記号は、密接に関係するが、使われ方が異なる。

  1. 符号理論におけるビット記号は、二進アルファベット
    $$ \mathcal D=\{\mathtt 0,\mathtt 1\} $$
    の元である。
    ビット列のビット数は、そのビット列に含まれる二進記号の個数である。
    例えば、二進符号語
    $$ \mathtt{0101} $$
    $4$ 個の二進記号からなるので、$4$ ビットの符号語である。
    $ $
  2. 一方、情報理論におけるビットは、底 $2$ の対数で測った情報量の単位である。
    例えば、事象 $A$
    $$ \mathbb P(A)=\frac{1}{2} $$
    を満たすとき、自己情報量は
    $$ I_2(A) = -\log_2\mathbb P(A) = -\log_2\frac{1}{2} = 1 $$
    であるから、$A$ の自己情報量は $1$ ビットである( 詳しくはコチラ )。

-両者の関係は、符号化によって表される。
有限集合 $\mathcal X$ に値をもつ情報源 $X$ を二進符号 $C:\mathcal X\to\mathcal D^*$ によって符号化するとき、平均符号長
$$ L_X(C) = \sum_{x\in\mathcal X}p_X(x)\ell_C(x) $$
は、実際に平均して何個の二進記号を使うかを表す。
一方、エントロピー
$$ H_2(X) = -\sum_{x\in\mathcal X}p_X(x)\log_2 p_X(x) $$
は、情報源 $X$ が平均してどれだけの情報量をもつかを表す。
$ $
したがって、直感的には、
$$ \text{情報理論のビット} = \text{理論的な情報量の単位} $$
であり、
$$ \text{符号理論のビット} = \text{実際に使う二進記号の個数} $$
である。
適切な仮定のもとで、一意復号可能な二進符号では、平均符号長は情報源のエントロピーより小さくできない。
すなわち、有限値情報源 $X$ と一意復号可能な二進符号 $C$ に対して、
$$ L_X(C)\ge H_2(X) $$
が成り立つ。
この意味で、情報理論のビットは「どれだけの情報を表す必要があるか」を与え、符号理論のビットは「それを表すために実際に何個の二進記号を使うか」を与える。

二進符号

$\mathcal X$ を空でない有限集合とする。
二進アルファベットを
$$ \mathcal D:=\{\mathtt{0},\mathtt{1}\} $$
とする。

  1. 写像
    $$ C:\mathcal X\to\mathcal D^* $$
    を、$\mathcal X$ 上の二進符号という。
    $ $
  2. $x\in\mathcal X$ に対して、文字列
    $$ C(x)\in\mathcal D^* $$
    を、$x$ に対応する符号語という。
    $ $
  3. また、$x$ に対応する符号語の長さを
    $$ \ell_C(x):=|C(x)| $$
    で定める。
    このとき、$\ell_C(x)$ を、$x$ に対応する符号長という。
固定長符号

二進符号 $C:\mathcal X\to\mathcal D^*$ が固定長符号であるとは、ある $m\in\mathbb N_0$ が存在して、任意の $x\in\mathcal X$ に対して、
$$ \ell_C(x)=m $$
が成り立つことをいう。
このとき、$m$ をこの固定長符号の符号語長という。

すなわち、$\mathcal X\ne\varnothing$ のもとでは、任意の $x,y\in\mathcal X$ に対して、
$$ \ell_C(x)=\ell_C(y) $$
が成り立つことと同値である。

符号語長 $0$ の場合

上の定義では、固定長符号の符号語長として $m=0$ も許している。
この場合、任意の $x\in\mathcal X$ に対して、
$$ \ell_C(x)=0 $$
である。
長さ $0$ の文字列は空文字列 $\varepsilon$ のみであるから、任意の $x\in\mathcal X$ に対して、
$$ C(x)=\varepsilon $$
が成り立つ。
したがって、$\mathcal X$$2$ 個以上の元をもつ場合、異なる $x,y\in\mathcal X$ に対しても
$$ C(x)=C(y)=\varepsilon $$
となる。
ゆえに、この固定長符号は非特異符号ではない。

情報源記号と確率

情報源は、たとえば文字、単語、記号などを順に出力する確率的な仕組みとして考えられる。
このとき、各記号 $x\in\mathcal X$ には出現確率
$$ p(x) $$
が対応していると考えることができる。
自然言語の文章を情報源として見る場合、文字や単語の出現頻度は一般に一様ではない。
$ $
そのため、出現確率の高い記号と低い記号を同じ長さのビット列で表現する固定長符号よりも、
出現確率に応じて符号語の長さを変える可変長符号の方が、平均符号長を短くできる場合がある。

固定長符号の例

文字列 $\mathtt{HELLO}$ を考える。
この文字列で用いられている文字の集合は
$$ \mathcal X=\{\mathtt H,\mathtt E,\mathtt L,\mathtt O\} $$
である。
ここで、$\mathcal X$ の各文字に $\mathrm{ASCII}$$7$ ビット表現を割り当てると、
$$ C(\mathtt H)=\mathtt{1001000},\quad C(\mathtt E)=\mathtt{1000101},\quad C(\mathtt L)=\mathtt{1001100},\quad C(\mathtt O)=\mathtt{1001111} $$
である。
したがって、文字列 $\mathtt{HELLO}$
$$ \mathtt{1001000\,1000101\,1001100\,1001100\,1001111} $$
というビット列で表される。
この符号は、各文字に長さ $7$ のビット列を割り当てているので、固定長符号である。
$ $
ただし、この例で用いている $\mathrm{ASCII}$ は標準的な文字コードであり、$\mathcal X=\{\mathtt H,\mathtt E,\mathtt L,\mathtt O\}$ のみに対する最短の固定長符号ではない。
実際、$\mathcal X$$4$ 個の元からなるため、二進固定長符号としては長さ $2$ の符号語で各文字を区別できる。
例えば、
$$ C'(\mathtt H)=\mathtt{00},\quad C'(\mathtt E)=\mathtt{01},\quad C'(\mathtt L)=\mathtt{10},\quad C'(\mathtt O)=\mathtt{11} $$
とすれば、$C'$$\mathcal X$ 上の非特異な固定長二進符号である。

可変長符号

二進符号 $C:\mathcal X\to\mathcal D^*$ が可変長符号であるとは、$C$ が固定長符号ではないことをいう。
すなわち、$\mathcal X\ne\varnothing$ のもとでは、ある $x,y\in\mathcal X$ が存在して、
$$ \ell_C(x)\ne\ell_C(y) $$
が成り立つことをいう。

固定長符号と可変長符号の違い

固定長符号では、すべての情報源記号に対して同じ長さの符号語を割り当てる。
例えば、$\mathcal X=\{a,b,c,d\}$ に対して、
$$ C(a)=\mathtt{00},\quad C(b)=\mathtt{01},\quad C(c)=\mathtt{10},\quad C(d)=\mathtt{11} $$
と定めると、すべての符号語の長さは $2$ であるから、この符号は固定長符号である。
$ $
一方、可変長符号では、情報源記号によって符号語の長さが異なる。
例えば、$\mathcal X=\{a,b,c\}$ に対して、
$$ C(a)=\mathtt{0},\quad C(b)=\mathtt{10},\quad C(c)=\mathtt{11} $$
と定めると、
$$ \ell_C(a)=1,\quad \ell_C(b)=2,\quad \ell_C(c)=2 $$
であるから、この符号は可変長符号である。

可変長符号が存在するための条件

$\mathcal X$ の元が $1$ 個だけの場合、任意の二進符号 $C:\mathcal X\to\mathcal D^*$ は固定長符号である。
したがって、可変長符号が存在するためには、少なくとも
$$ |\mathcal X|\geq2 $$
であることが必要である。

可変長符号と復号可能性

可変長符号であることは、符号語の長さがすべて同じではないことだけを意味する。
したがって、可変長符号であることだけから、一意復号可能(後述)であることや接頭辞符号(後述)であることは従わない。
一意復号可能符号(後述)や接頭辞符号(後述)は、可変長符号に追加の条件を課して得られる符号のクラスである。

可変長符号の考え方

可変長符号では、記号ごとに符号語の長さを変える。
たとえば、出現確率の高い記号には短い符号語を割り当て、出現確率の低い記号には長い符号語を割り当てることで、符号長の平均を小さくできる場合がある。
$ $
ただし、この方針が数学的に最適であるというためには、符号のクラスと最小化する量を明示する必要がある。
たとえば、与えられた確率分布に対して、接頭辞符号の中で平均符号長
$$ \sum_{x\in\mathcal X}p(x)|C(x)| $$
を最小にする符号を考えると、ハフマン符号と呼ばれる符号化では、そのような最適な接頭辞符号を与える。

可変長符号の利点

可変長符号を使えば、必ずすべての個別の記号列が固定長符号より短く表現できるわけではない。
正確には、確率分布に適した可変長符号を用いることで、平均符号長を固定長符号より短くできる場合がある。
したがって、可変長符号の利点は、個々の記号列の長さではなく、確率分布に関する平均的な符号長によって評価するのが自然である。

符号の拡張

二進符号 $C:\mathcal X\to\mathcal D^*$ に対して、その拡張
$$ C^\dagger:\mathcal X^*\to\mathcal D^* $$
を次で定める。

  1. 空文字列については、
    $$ C^\dagger(\varepsilon):=\varepsilon $$
    とする。
    $ $
  2. また、$n\in\mathbb N$$x_1,\ldots,x_n\in\mathcal X$ に対して、
    $$ C^\dagger(x_1x_2\cdots x_n) := C(x_1)C(x_2)\cdots C(x_n) $$
    と定める。ここで、右辺は符号語 $C(x_1),C(x_2),\ldots,C(x_n)$ の連結を表す(補足を参照)。
    この写像 $C^\dagger$ を、符号 $C$ の拡張という。
記号 $*$$\dagger$ の意味

$\mathcal X^*$$\mathcal D^*$$*$ は、クリーネ閉包を表す。
一方、$C^\dagger$$\dagger$ は、符号 $C$ から定まる拡張写像を表す記号として用いる。

連結について

$u,v\in\mathcal D^*$ とする。
$u$$v$ の連結とは、文字列 $u$ の後ろに文字列 $v$ を続けて得られる文字列のことをいう。
この連結を
$$ uv $$
で表す。
例えば、
$$ u=\mathtt{01},\quad v=\mathtt{110} $$
であるとき、
$$ uv=\mathtt{01110} $$
である。
したがって、
$$ C(x_1)C(x_2)\cdots C(x_n) $$
は、各記号 $x_1,\ldots,x_n$ に対応する符号語を順番に連結して得られる $1$ つの二進文字列を表す。

一意復号可能性との関係

符号の拡張 $C^\dagger$ は、任意の二進符号 $C:\mathcal X\to\mathcal D^*$ に対して定義できる。
ただし、$C^\dagger$ が単射であるとは限らない。
$C^\dagger$ が単射であるとき、符号語を連結して得られた二進文字列から、もとの $\mathcal X$ 上の文字列を一意に復元できる。
この性質をもつ符号を、一意復号可能符号という。

空文字列の例

同じく、
$$ \mathcal X=\{a,b,c\},\quad \mathcal D=\{\mathtt 0,\mathtt 1\} $$
とし、
$$ C(a)=\mathtt 0,\quad C(b)=\mathtt {10},\quad C(c)=\mathtt {11} $$
とする。
このとき、空文字列 $\varepsilon\in\mathcal X^*$ については、拡張の定義により、
$$ C^\dagger(\varepsilon)=\varepsilon $$
である。
つまり、入力側で記号が何も並んでいない場合、出力側でも符号記号は何も出力されない。

符号長との関係が見える例

二進符号
$$ C:\mathcal X\to\mathcal D^* $$

$$ C(a)=\mathtt 0,\quad C(b)=\mathtt {10},\quad C(c)=\mathtt {11} $$
で定める。このとき、
$$ \ell_C(a)=1,\quad \ell_C(b)=2,\quad \ell_C(c)=2 $$
である。文字列
$$ bbac\in\mathcal X^* $$
を考えると、
$$ \begin{align} C^\dagger(bbac) &=C(b)C(b)C(a)C(c)\\ &=\mathtt {10}\mathtt {10}\mathtt 0\mathtt {11}\\ &=\mathtt {1010011} \end{align} $$
である。したがって、
$$ |C^\dagger(bbac)|=|\mathtt {1010011}|=7 $$
である。一方で、
$$ \ell_C(b)+\ell_C(b)+\ell_C(a)+\ell_C(c) = 2+2+1+2 = 7 $$
である。
よって、この例では
$$ |C^\dagger(bbac)| = \ell_C(b)+\ell_C(b)+\ell_C(a)+\ell_C(c) $$
が成り立っている。
一般に、$x_1,\ldots,x_n\in\mathcal X$ に対して、
$$ |C^\dagger(x_1x_2\cdots x_n)| = \sum_{i=1}^{n}|C(x_i)| = \sum_{i=1}^{n}\ell_C(x_i) $$
である。

拡張が単射でない例

二進アルファベットを
$$ \mathcal D=\{\mathtt 0,\mathtt 1\} $$
とし、情報源アルファベットを
$$ \mathcal X=\{a,b,c\} $$
とする。二進符号
$$ C:\mathcal X\to\mathcal D^* $$

$$ C(a)=\mathtt 0,\quad C(b)=\mathtt {01},\quad C(c)=\mathtt 1 $$
で定める。このとき、$C$ 自体は異なる記号に異なる符号語を割り当てているので、非特異符号である。
実際、
$$ C(a)=\mathtt 0,\quad C(b)=\mathtt {01},\quad C(c)=\mathtt 1 $$
は互いに異なる。
しかし、拡張 $C^\dagger$ を考えると、
$$ C^\dagger(b)=C(b)=\mathtt {01} $$
であり、また、
$$ C^\dagger(ac)=C(a)C(c)=\mathtt 0\mathtt 1=\mathtt {01} $$
である。したがって、
$$ C^\dagger(b)=C^\dagger(ac) $$
である。
一方で、$\mathcal X^*$ の文字列としては、
$$ b\ne ac $$
である。
ゆえに、この例では
$$ C^\dagger:\mathcal X^*\to\mathcal D^* $$
は単射ではない。
これは、符号語列として $\mathtt {01}$ が送られてきたとき、それを
$$ b $$
と読むことも、
$$ ac $$
と読むこともできることを意味する。

空符号語を含む場合の拡張

二進アルファベットを
$$ \mathcal D=\{\mathtt 0,\mathtt 1\} $$
とし、情報源アルファベットを
$$ \mathcal X=\{a,b\} $$
とする。二進符号
$$ C:\mathcal X\to\mathcal D^* $$

$$ C(a)=\varepsilon,\quad C(b)=\mathtt 0 $$
で定める。このとき、
$$ C^\dagger(a)=C(a)=\varepsilon $$
である。
また、拡張の定義により、
$$ C^\dagger(\varepsilon)=\varepsilon $$
である。したがって、
$$ C^\dagger(a)=C^\dagger(\varepsilon) $$
である。
しかし、$\mathcal X^*$ の文字列としては、
$$ a\ne\varepsilon $$
である。ゆえに、この例では $C^\dagger$ は単射ではない。
さらに、
$$ \begin{align} C^\dagger(ab) &=C(a)C(b)\\ &=\varepsilon\mathtt 0\\ &=\mathtt 0 \end{align} $$
であり、
$$ C^\dagger(b)=C(b)=\mathtt 0 $$
である。
したがって、
$$ C^\dagger(ab)=C^\dagger(b) $$
である。
このように、空符号語を許すと、拡張後の文字列の区切りが失われやすくなる。

一意復号可能符号

二進符号 $C:\mathcal X\to\mathcal D^*$ が一意復号可能であるとは、その拡張
$$ C^\dagger:\mathcal X^*\to\mathcal D^* $$
が単射であることをいう。
すなわち、任意の $u,v\in\mathcal X^*$ に対して、
$$ C^\dagger(u)=C^\dagger(v)\Rightarrow u=v $$
が成り立つことをいう。

空符号語について

一意復号可能符号では、空文字列 $\varepsilon$ は符号語として現れない。
実際、ある $x\in\mathcal X$ に対して
$$ C(x)=\varepsilon $$
であると仮定する。
このとき、(例えば 長さ $1$ の)文字列 $x\in\mathcal X^*$ について、
$$ C^\dagger(x)=C(x)=\varepsilon $$
となる。
一方、拡張の定義より
$$ C^\dagger(\varepsilon)=\varepsilon $$
である。
したがって、
$$ C^\dagger(x)=C^\dagger(\varepsilon) $$
である。
しかし、$x$ は長さ $1$ の文字列であり、$\varepsilon$ は長さ $0$ の文字列であるから、
$$ x\ne\varepsilon $$
である。よって、$C^\dagger$ は単射ではない。
したがって、一意復号可能符号であるためには、任意の $x\in\mathcal X$ に対して
$$ C(x)\ne\varepsilon $$
でなければならない。

非特異符号と一意復号可能符号の関係

非特異符号は、$1$ つの情報源記号を符号化したときに、異なる記号が同じ符号語に写らないことを意味する。
すなわち、二進符号 $C:\mathcal X\to\mathcal D^*$ が非特異であるとは、写像 $C$ が単射であることをいう。
$ $
一方、一意復号可能符号は、記号列全体を符号化したときに、異なる記号列が同じ符号列に写らないことを意味する。
すなわち、二進符号 $C:\mathcal X\to\mathcal D^*$ が一意復号可能であるとは、拡張写像
$$ C^\dagger:\mathcal X^*\to\mathcal D^* $$
が単射であることをいう。

一意復号可能性の意味が見える例

二進アルファベットを
$$ \mathcal D=\{\mathtt 0,\mathtt 1\} $$
とする。
情報源アルファベットを
$$ \mathcal X=\{a,b,c\} $$
とし、二進符号
$$ C(a)=\mathtt 0,\quad C(b)=\mathtt {10},\quad C(c)=\mathtt {11} $$
を考える。
このとき、符号列
$$ \mathtt {010110} $$
を受け取ったとする。
左から順に区切ると、
$$ \mathtt 0\,\mathtt {10}\,\mathtt {11}\,\mathtt 0 $$
である。
したがって、
$$ \mathtt 0=C(a),\quad \mathtt {10}=C(b),\quad \mathtt {11}=C(c),\quad \mathtt 0=C(a) $$
より、
$$ \mathtt {010110} = C^\dagger(abca) $$
である。
この符号では、この二進文字列を他の情報源記号列から得ることはできない。
すなわち、
$$ C^\dagger(u)=\mathtt {010110} $$
を満たす $u\in\mathcal X^*$
$$ u=abca $$
に限られる。
このように、符号化された二進文字列から元の情報源記号列がただ $1$ 通りに決まることが、一意復号可能性の意味である。

非特異であるが一意復号可能ではない例

二進アルファベットを
$$ \mathcal D=\{\mathtt 0,\mathtt 1\} $$
とする。情報源アルファベットを
$$ \mathcal X=\{a,b,c\} $$
とし、二進符号
$$ C:\mathcal X\to\mathcal D^* $$

$$ C(a)=\mathtt 0,\quad C(b)=\mathtt {01},\quad C(c)=\mathtt 1 $$
で定める。このとき、
$$ C(a),\ C(b),\ C(c) $$
は互いに異なる。したがって、$C$ は非特異符号である。
しかし、
$$ b\in\mathcal X^* $$

$$ ac\in\mathcal X^* $$
を考えると、
$$ b\ne ac $$
である。一方で、
$$ C^\dagger(b)=C(b)=\mathtt {01} $$
であり、
$$ \begin{align} C^\dagger(ac) &=C(a)C(c)\\ &=\mathtt 0\mathtt 1\\ &=\mathtt {01} \end{align} $$
である。したがって、
$$ C^\dagger(b)=C^\dagger(ac) $$
である。
よって、異なる情報源記号列 $b$$ac$ が同じ二進文字列 $\mathtt {01}$ に符号化される。
ゆえに、$C^\dagger$ は単射ではない。
したがって、この符号 $C$ は一意復号可能符号ではない。

非特異でないため一意復号可能でない例

二進アルファベットを
$$ \mathcal D=\{\mathtt 0,\mathtt 1\} $$
とする。
情報源アルファベットを
$$ \mathcal X=\{a,b,c\} $$
とし、二進符号
$$ C:\mathcal X\to\mathcal D^* $$

$$ C(a)=\mathtt 0,\quad C(b)=\mathtt 0,\quad C(c)=\mathtt 1 $$
で定める。
このとき、
$$ a\ne b $$
であるが、
$$ C(a)=C(b)=\mathtt 0 $$
である。したがって、$C$ は非特異符号ではない。
さらに、長さ $1$ の文字列 $a,b\in\mathcal X^*$ を考えると、
$$ a\ne b $$
である。
しかし、
$$ C^\dagger(a)=C(a)=\mathtt 0 $$
であり、
$$ C^\dagger(b)=C(b)=\mathtt 0 $$
である。したがって、
$$ C^\dagger(a)=C^\dagger(b) $$
である。よって、$C^\dagger$ は単射ではない。
したがって、この符号 $C$ は一意復号可能符号ではない。

空符号語を含むため一意復号可能でない例

二進アルファベットを
$$ \mathcal D=\{\mathtt 0,\mathtt 1\} $$
とする。
情報源アルファベットを
$$ \mathcal X=\{a,b\} $$
とし、二進符号
$$ C:\mathcal X\to\mathcal D^* $$

$$ C(a)=\varepsilon,\quad C(b)=\mathtt 0 $$
で定める。
このとき、長さ $1$ の文字列 $a\in\mathcal X^*$ について、
$$ C^\dagger(a)=C(a)=\varepsilon $$
である。
一方で、空文字列 $\varepsilon\in\mathcal X^*$ について、拡張の定義より、
$$ C^\dagger(\varepsilon)=\varepsilon $$
である。
したがって、
$$ C^\dagger(a)=C^\dagger(\varepsilon) $$
である。
しかし、
$$ a\ne\varepsilon $$
である。
よって、$C^\dagger$ は単射ではない。
したがって、この符号 $C$ は一意復号可能符号ではない。

接頭辞

$\Sigma$ をアルファベットとする。$u,v\in\Sigma^*$ とする。
$u$$v$ の接頭辞であるとは、ある $w\in\Sigma^*$ が存在して、
$$ v=uw $$
と書けることをいう。

真の接頭辞

$\Sigma$ をアルファベットとする。$u,v\in\Sigma^*$ とする。
$u$$v$ の真の接頭辞であるとは、ある非空文字列 $w\in\Sigma^*$ が存在して、
$$ v=uw $$
と書けることをいう。
すなわち、
$$ w\ne\varepsilon $$
を満たす $w\in\Sigma^*$ が存在して、
$$ v=uw $$
と書けることである。

接頭辞と真の接頭辞の違い

任意の $u\in\Sigma^*$ に対して、
$$ u=u\varepsilon $$
であるから、$u$ は自分自身の接頭辞である。
一方、真の接頭辞では、後ろに連結する文字列 $w$ が非空であることを要求する。
したがって、$u$ は自分自身の真の接頭辞ではない。

一意復号可能符号である例

二進アルファベットを
$$ \mathcal D=\{\mathtt 0,\mathtt 1\} $$
とする。情報源アルファベットを
$$ \mathcal X=\{a,b,c\} $$
とし、二進符号
$$ C:\mathcal X\to\mathcal D^* $$

$$ C(a)=\mathtt 0,\quad C(b)=\mathtt {10},\quad C(c)=\mathtt {11} $$
で定める。
このとき、例えば
$$ abc\in\mathcal X^* $$
に対して、
$$ \begin{align} C^\dagger(abc) &=C(a)C(b)C(c)\\ &=\mathtt 0\mathtt {10}\mathtt {11}\\ &=\mathtt {01011} \end{align} $$
である。また、
$$ cab\in\mathcal X^* $$
に対して、
$$ \begin{align} C^\dagger(cab) &=C(c)C(a)C(b)\\ &=\mathtt {11}\mathtt 0\mathtt {10}\\ &=\mathtt {11010} \end{align} $$
である。
この符号では、符号語
$$ \mathtt 0,\quad \mathtt {10},\quad \mathtt {11} $$
のどれも、他の符号語の真の接頭辞ではない。
したがって、左から順に読むと、
$$ \mathtt 0 $$
が出たときは $a$ と復号でき、
$$ \mathtt {10} $$
が出たときは $b$ と復号でき、
$$ \mathtt {11} $$
が出たときは $c$ と復号できる。
例えば、
$$ \mathtt {01011} $$

$$ \mathtt 0\,\mathtt {10}\,\mathtt {11} $$
と一意に区切られるので、
$$ abc $$
と一意に復号される。ゆえに、この符号 $C$ は一意復号可能符号である。

真の接頭辞である例

二進アルファベットを
$$ \mathcal D=\{\mathtt 0,\mathtt 1\} $$
とする。文字列
$$ u=\mathtt {01},\quad v=\mathtt {0110} $$
を考える。このとき、
$$ v=\mathtt {01}\mathtt {10} $$
と書ける。すなわち、
$$ v=uw $$
を満たす文字列
$$ w=\mathtt {10} $$
が存在する。さらに、
$$ w\ne\varepsilon $$
である。
したがって、$u=\mathtt {01}$$v=\mathtt {0110}$ の真の接頭辞である。
$ $
また、このとき
$$ |u|=2,\quad |v|=4 $$
であるから、
$$ |u|<|v| $$
も成り立つ。

接頭辞符号

$\mathcal X$ を空でない有限集合とし、二進符号
$$ C:\mathcal X\to\mathcal D^* $$
を考える。

  1. $C$ が接頭辞符号であるとは、任意の異なる $x,y\in\mathcal X$ に対して、$C(x)$$C(y)$ の接頭辞ではないことをいう。
    すなわち、任意の $x,y\in\mathcal X$ に対して、
    $$ x\ne y $$
    ならば、任意の $w\in\mathcal D^*$ に対して、
    $$ C(y)\ne C(x)w $$
    が成り立つことをいう。
    $ $
  2. ただし、本稿では接頭辞符号を考えるとき、各 $x\in\mathcal X$ に対して
    $$ C(x)\ne\varepsilon $$
    を仮定する。
固定長接頭辞符号の例

$\mathcal X=\{a,b,c,d\}$ とし、
$$ C(a)=\mathtt{00},\quad C(b)=\mathtt{01},\quad C(c)=\mathtt{10},\quad C(d)=\mathtt{11} $$
と定める。
$ $
このとき、すべての符号語の長さは $2$ である。したがって、この符号は二進固定長符号である。
また、異なる記号には異なる符号語が割り当てられているので、非特異符号である。
さらに、すべての符号語の長さが等しく、かつ互いに異なるため、ある符号語が別の符号語の接頭辞になることはない。
したがって、この符号は接頭辞符号である。

可変長接頭辞符号の例

$\mathcal X=\{a,b,c\}$ とし、
$$ C(a)=\mathtt 0,\quad C(b)=\mathtt{10},\quad C(c)=\mathtt{11} $$
と定める。このとき、
$$ \ell_C(a)=1,\quad \ell_C(b)=2,\quad \ell_C(c)=2 $$
であるから、この符号は可変長符号である。また、どの符号語も他の符号語の接頭辞ではない。
したがって、この符号は接頭辞符号である。ゆえに、この符号は一意復号可能である。

接頭辞符号と一意復号可能性

接頭辞符号は一意復号可能である。
接頭辞符号では、どの符号語も他の符号語の接頭辞にならない。
したがって、符号列を左から読んだとき、$1$ つの符号語が読み終わった時点で、その符号語の切れ目を一意に判断できる。
$ $
このため、接頭辞符号によって得られる符号列は、左から順に一意に復号できる。
ゆえに、
$$ \text{接頭辞符号} \Rightarrow \text{一意復号可能符号} $$
が成り立つ。
ただし、一意復号可能な符号が必ず接頭辞符号であるとは限らない。
すなわち、逆向きの
$$ \text{一意復号可能符号} \Rightarrow \text{接頭辞符号} $$
は一般には成り立たない。

  1. 接頭辞符号である例を考える。
    $\mathcal X=\{a,b,c\}$ とし、二進符号 $C:\mathcal X\to\mathcal D^*$
    $$ C(a)=\mathtt 0,\quad C(b)=\mathtt{10},\quad C(c)=\mathtt{11} $$
    で定める。
    このとき、どの符号語も他の符号語の接頭辞ではない。したがって、$C$ は接頭辞符号である。
    よって、$C$ は一意復号可能符号である。
    例えば、符号列
    $$ \mathtt{01011} $$
    は、左から順に
    $$ \mathtt 0,\quad \mathtt{10},\quad \mathtt{11} $$
    とただ $1$ 通りに分割できる。したがって、元の記号列は
    $$ abc $$
    であると一意に分かる。
    $ $
  2. 一意復号可能であるが、接頭辞符号ではない例を考える。
    $\mathcal X=\{a,b,c\}$ とし、二進符号 $C:\mathcal X\to\mathcal D^*$
    $$ C(a)=\mathtt 0,\quad C(b)=\mathtt{01},\quad C(c)=\mathtt{011} $$
    で定める。このとき、
    $$ C(b)=C(a)\mathtt 1 $$
    であるから、$C(a)=\mathtt 0$$C(b)=\mathtt{01}$ の真の接頭辞である。
    また、
    $$ C(c)=C(a)\mathtt{11} $$
    であるから、$C(a)=\mathtt 0$$C(c)=\mathtt{011}$ の真の接頭辞である。
    したがって、この符号は接頭辞符号ではない。
    $ $
    しかし、この符号は一意復号可能である。
    実際、この符号の各符号語は、すべて $\mathtt 0$ から始まり、その後に $\mathtt 1$$0$ 個、$1$ 個、または $2$ 個続く形をしている。
    すなわち、
    $$ C(a)=\mathtt 0,\quad C(b)=\mathtt 0\mathtt 1,\quad C(c)=\mathtt 0\mathtt 1\mathtt 1 $$
    である。
    したがって、符号列の中に現れる各 $\mathtt 0$ は、新しい符号語の始まりを表す。
    そのため、符号列全体を左から見て、$\mathtt 0$ が現れる位置で区切れば、符号語の切れ目が一意に定まる。
    例えば、
    $$ C^\dagger(abca) = C(a)C(b)C(c)C(a) = \mathtt 0\mathtt{01}\mathtt{011}\mathtt 0 = \mathtt{0010110} $$
    である。
    この符号列は、$\mathtt 0$ が現れる位置を符号語の始まりとして見ると、
    $$ \mathtt 0\ |\ \mathtt{01}\ |\ \mathtt{011}\ |\ \mathtt 0 $$
    とただ $1$ 通りに分割できる。したがって、元の記号列は
    $$ abca $$
    であると一意に分かる。
    同様に、任意の符号列についても、各 $\mathtt 0$ の位置が次の符号語の始まりを表すため、符号語の切れ目は一意に定まる。
    ゆえに、この符号は一意復号可能である。

-以上より、一意復号可能であっても接頭辞符号ではない符号が存在する。
したがって、
$$ \text{接頭辞符号} \Rightarrow \text{一意復号可能符号} $$
は成り立つが、その逆は一般には成り立たない。

空符号語を除く動機

ただし、本稿では、接頭辞符号を考えるとき、各 $x\in\mathcal X$ に対して
$$ C(x)\ne\varepsilon $$
を仮定する。
この仮定の動機は、空符号語を許すと、一意復号可能性は必ず壊れる。
実際、ある $x\in\mathcal X$ に対して
$$ C(x)=\varepsilon $$
であるとする。
このとき、符号の拡張の定義より、
$$ C^\dagger(x)=C(x)=\varepsilon $$
である。
一方、拡張の定義より
$$ C^\dagger(\varepsilon)=\varepsilon $$
である。
したがって、
$$ C^\dagger(x)=C^\dagger(\varepsilon) $$
である。
しかし、$x$ は長さ $1$ の文字列であり、$\varepsilon$ は長さ $0$ の文字列であるから、
$$ x\ne\varepsilon $$
である。
よって、$C^\dagger$ は単射ではない。
したがって、一意復号可能性を考える上では、空符号語を符号語として許さないのが自然である。

平均符号長

$(\Omega,\mathcal F,\mathbb P)$ を確率空間とし、$\mathcal X$ を空でない有限集合とする。
$X:(\Omega,\mathcal F)\to(\mathcal X,\mathcal P(\mathcal X))$ を有限集合に値をもつ離散確率変数とする。

  1. $x\in\mathcal X$ に対して、
    $$ p_X(x):=\mathbb P(X=x) = \mathbb P(\{\omega\in\Omega\mid X(\omega)=x\}) $$
    とおく。
    $ $
  2. また、$\Sigma$ を空でない有限集合とし、$\Sigma$ を符号アルファベットとする。
    符号
    $$ f:\mathcal X\to\Sigma^* $$
    が与えられているとする。
    $ $
  3. $x\in\mathcal X$ に対して、符号語 $f(x)$ の長さを
    $$ \ell_f(x):=|f(x)| $$
    で定める。

-このとき、符号 $f$$X$ に関する平均符号長を
$$ L_X(f) := \mathbb E[\ell_f(X)] = \sum_{x\in\mathcal X}p_X(x)\ell_f(x) $$
で定義する。
ここで、$|f(x)|$ は符号語 $f(x)$ に含まれる符号記号の個数である。

平均符号長の意味

平均符号長 $L_X(f)$ は、確率変数 $X$ が出力する記号を符号 $f$ で符号化するとき、$1$ 回の出力あたり平均して何個の符号記号を使うかを表す。
特に、二進符号
$$ C:\mathcal X\to\mathcal D^* $$
の場合、$L_X(C)$$1$ 回の出力あたり平均して何ビット使うかを表す。

二進符号の平均符号長

確率空間 $(\Omega,\mathcal F,\mathbb P)$ 上の確率変数 $X$ が、有限集合
$$ \mathcal X=\{a,b,c\} $$
に値をもつとする。
また、$X$ の確率質量関数が
$$ p_X(a)=\frac{1}{2},\quad p_X(b)=\frac{1}{4},\quad p_X(c)=\frac{1}{4} $$
で与えられているとする。
二進アルファベットを
$$ \mathcal D=\{\mathtt 0,\mathtt 1\} $$
とし、二進符号
$$ C:\mathcal X\to\mathcal D^* $$

$$ C(a)=\mathtt 0,\quad C(b)=\mathtt {10},\quad C(c)=\mathtt {11} $$
で定める。
このとき、各符号語の長さは
$$ \ell_C(a)=1,\quad \ell_C(b)=2,\quad \ell_C(c)=2 $$
である。
したがって、$C$$X$ に関する平均符号長は、
$$ \begin{align} L_X(C) &=\sum_{x\in\mathcal X}p_X(x)\ell_C(x)\\ &=p_X(a)\ell_C(a)+p_X(b)\ell_C(b)+p_X(c)\ell_C(c)\\ &=\frac{1}{2}\cdot 1+\frac{1}{4}\cdot 2+\frac{1}{4}\cdot 2\\ &=\frac{1}{2}+\frac{1}{2}+\frac{1}{2}\\ &=\frac{3}{2} \end{align} $$
である。
ゆえに、この符号では $1$ 回の出力あたり平均して
$$ \frac{3}{2} $$
個の二進符号記号を使う。
二進符号の場合、これは $1$ 回の出力あたり平均して
$$ \frac{3}{2}\text{ ビット} $$
を使うという意味である。

同じ符号でも分布が変わると平均符号長が変わる例

有限集合を
$$ \mathcal X=\{a,b,c\} $$
とし、二進符号
$$ C(a)=\mathtt 0,\quad C(b)=\mathtt {10},\quad C(c)=\mathtt {11} $$
を考える。
このとき、
$$ \ell_C(a)=1,\quad \ell_C(b)=2,\quad \ell_C(c)=2 $$
である。
まず、確率変数 $X$ の分布が
$$ p_X(a)=\frac{1}{2},\quad p_X(b)=\frac{1}{4},\quad p_X(c)=\frac{1}{4} $$
であるとする。このとき、
$$ L_X(C) = \frac{1}{2}\cdot 1+\frac{1}{4}\cdot 2+\frac{1}{4}\cdot 2 = \frac{3}{2} $$
である。
一方、確率変数 $Y$ の分布が
$$ p_Y(a)=\frac{1}{3},\quad p_Y(b)=\frac{1}{3},\quad p_Y(c)=\frac{1}{3} $$
であるとする。このとき、
$$ \begin{align} L_Y(C) &= \frac{1}{3}\cdot 1+\frac{1}{3}\cdot 2+\frac{1}{3}\cdot 2\\ &= \frac{1}{3}+\frac{2}{3}+\frac{2}{3}\\ &= \frac{5}{3} \end{align} $$
である。
したがって、同じ符号 $C$ を使っていても、情報源記号の出やすさが変わると、平均符号長も変わる。

Prop&Proof

固定長二進符号に必要なビット数

$N\in\mathbb N$ とする。

  1. 大きさ $N$ のアルファベット
    $$ \mathcal X=\{x_1,\ldots,x_N\} $$
    を考える。ただし、$x_1,\ldots,x_N$ は互いに異なるとする。
  2. 二進アルファベットを
    $$ \mathcal D:=\{\mathtt 0,\mathtt 1\} $$
    とする。
  3. 各記号を一意に識別できるように、固定長の二進符号語で符号化する。
    ただし、長さ $0$ の符号語として空文字列 $\varepsilon$ を許すものとする。

-このとき、非特異な固定長二進符号を構成するために必要な符号語長の最小値は
$$ \lceil\log_2 N\rceil $$
である。

$m\in\mathbb N_0$ とし、各記号を長さ $m$ の二進符号語で符号化するとする。
長さ $m$ の二進符号語全体の集合は
$$ \mathcal D^m $$
であり、その元の個数は
$$ |\mathcal D^m|=2^m $$
である(補足を参照)。

  1. 各記号を一意に識別できるように符号化するためには、異なる記号に異なる符号語を割り当てる必要がある。
    すなわち、符号
    $$ C:\mathcal X\to\mathcal D^m $$
    は単射でなければならない。
    ここで、有限集合 $A,B$ について、単射 $A\to B$ が存在することと
    $$ |A|\leq |B| $$
    が成り立つことは同値である。
    したがって、単射
    $$ C:\mathcal X\to\mathcal D^m $$
    が存在するための必要十分条件は
    $$ |\mathcal X|\leq|\mathcal D^m| $$
    である。
    いま、
    $$ |\mathcal X|=N,\qquad |\mathcal D^m|=2^m $$
    であるから、この条件は
    $$ N\leq2^m $$
    である。
    $2$ の対数関数は $(0,\infty)$ 上で単調増加であるから、これは
    $$ \log_2N\leq m $$
    と同値である。
    $m$ は整数であるから、
    $$ m\geq\lceil\log_2N\rceil $$
    である。
    よって、任意の非特異な固定長二進符号の符号語長 $m$
    $$ m\geq\lceil\log_2N\rceil $$
    を満たす。
    $ $
  2. 逆に、
    $$ m_0:=\lceil\log_2N\rceil $$
    とおく。
    天井関数の定義より、
    $$ \log_2N\leq m_0 $$
    である。底 $2$ の指数関数は単調増加であるから、
    $$ N\leq2^{m_0} $$
    である。
    したがって、
    $$ |\mathcal X|=N\leq2^{m_0}=|\mathcal D^{m_0}| $$
    である。
    ゆえに、有限集合に関する上の事実より、単射
    $$ C:\mathcal X\to\mathcal D^{m_0} $$
    が存在する。
    したがって、符号語長 $m_0$ の非特異な固定長二進符号を構成できる。

-以上より、非特異な固定長二進符号を構成するために必要な符号語長の最小値は
$$ \lceil\log_2N\rceil $$
である。
$$ \Box$$

長さ $m$ の二進符号語全体の具体例

二進アルファベットを
$$ \mathcal D=\{\mathtt 0,\mathtt 1\} $$
とする。

  1. $m=0$ の場合、長さ $0$ の二進符号語は空文字列だけである。
    $$ \mathcal D^0=\{\varepsilon\} $$
    したがって、
    $$ |\mathcal D^0|=1=2^0 $$
    である。
    $ $
  2. $m=1$ の場合、長さ $1$ の二進符号語は
    $$ \mathcal D^1=\{\mathtt 0,\mathtt 1\} $$
    である。したがって、
    $$ |\mathcal D^1|=2=2^1 $$
    である。
    $ $
  3. $m=2$ の場合、長さ $2$ の二進符号語は
    $$ \mathcal D^2= \{\mathtt{00},\mathtt{01},\mathtt{10},\mathtt{11}\} $$
    である。
    したがって、
    $$ |\mathcal D^2|=4=2^2 $$
    である。
    $ $
  4. $m=3$ の場合、長さ $3$ の二進符号語は
    $$ \mathcal D^3= \{\mathtt{000},\mathtt{001},\mathtt{010},\mathtt{011}, \mathtt{100},\mathtt{101},\mathtt{110},\mathtt{111}\} $$
    である。
    したがって、
    $$ |\mathcal D^3|=8=2^3 $$
    である。

-一般に、長さ $m$ の二進符号語では、各位置に $\mathtt 0$ または $\mathtt 1$$2$ 通りの選択肢がある。
したがって、積の法則より、
$$ |\mathcal D^m| = \underbrace{2\cdot2\cdots2}_{m\text{ 個}} = 2^m $$
である。

固定長符号と可変長符号

固定長二進符号の範囲では、$N$ 個の記号を一意に識別するために必要なビット数の最小値は
$$ \lceil\log_2 N\rceil $$
である。ただし、これは各記号に同じ長さの符号語を割り当てる場合の最適性である。
(何度も言うようで悪いけど...)情報源の確率分布を考慮して可変長符号を用いると、平均符号長を固定長符号より短くできる場合がある。

その他

英語の大文字 $26$ 文字だけを固定長二進符号で表す場合、
$$ \lceil\log_2 26\rceil=5 $$
である。したがって、少なくとも $5$ ビットが必要である。
$ $
標準 $\mathrm{ASCII}$$128$ 個のコードポイントを扱うため、
$$ \lceil\log_2 128\rceil=7 $$
より、$7$ ビットで表現できる。
$ $
一方、いわゆる拡張 $\mathrm{ASCII}$ では $256$ 個の値を扱うことが多く、
$$ \lceil\log_2 256\rceil=8 $$
より、$8$ ビット表現になる。

文字列の連結と長さ

二進アルファベットを
$$ \mathcal D:=\{\mathtt 0,\mathtt 1\} $$
とする。
任意の $u,v\in\mathcal D^*$ に対して、
$$ |uv|=|u|+|v| $$
が成り立つ。

$u,v\in\mathcal D^*$ を任意にとる。

  1. $u\in\mathcal D^*$ であるから、ある $m\in\mathbb N_0$ が存在して、
    $$ u\in\mathcal D^m $$
    である。
    同様に、$v\in\mathcal D^*$ であるから、ある $n\in\mathbb N_0$ が存在して、
    $$ v\in\mathcal D^n $$
    である。
    したがって、
    $$ |u|=m,\qquad |v|=n $$
    である。
    ここで、$m=0$ の場合は $u=\varepsilon$ であり、$n=0$ の場合は $v=\varepsilon$ である。
    $ $
  2. 連結 $uv$ は、長さ $m+n$ の文字列として次のように定義される。
    $m+n=0$ の場合は、
    $$ uv:=\varepsilon $$
    とする。
    $m+n\geq1$ の場合は、写像
    $$ uv:\{1,\ldots,m+n\}\to\mathcal D $$
    を、各 $i=1,\ldots,m+n$ に対して、
    $$ (uv)(i) := \begin{cases} u(i),&1\leq i\leq m,\\ v(i-m),&m+1\leq i\leq m+n \end{cases} $$
    で定める。
    この定義により、$uv$ は長さ $m+n$ の文字列である。
    すなわち、
    $$ uv\in\mathcal D^{m+n} $$
    である。したがって、文字列の長さの定義より、
    $$ |uv|=m+n $$
    である。
    $ $
  3. 一方、
    $$ |u|+|v|=m+n $$
    である。
    ゆえに、
    $$ |uv|=|u|+|v| $$
    が成り立つ。

-以上より、任意の $u,v\in\mathcal D^*$ に対して、
$$ |uv|=|u|+|v| $$
である。
$$ \Box$$

有限個の語の連結の長さ

$\Sigma$ をアルファベットとし、$\Sigma^*$$\Sigma$ 上の有限語全体の集合(クリーネ閉包)とする。
$w_1w_2\cdots w_n$ は左から順に連結した語、すなわち
$$ w_1w_2\cdots w_n := (((w_1w_2)w_3)\cdots)w_n $$
として読むものとする。
このとき、任意の $n\in\mathbb N$ と任意の $w_1,\ldots,w_n\in\Sigma^*$ に対して、
$$ |w_1w_2\cdots w_n| = \sum_{i=1}^{n}|w_i| $$
が成り立つ。

$n$ に関する数学的帰納法で示す。

  1. $n=1$ の場合を示す。
    任意の $w_1\in\Sigma^*$ に対して、
    $$ |w_1| = \sum_{i=1}^{1}|w_i| $$
    である。
    したがって、$n=1$ の場合は成り立つ。
    $ $
  2. $n=m$ の場合に成り立つと仮定する。
    ある $m\in\mathbb N$ を固定する。
    帰納法の仮定として、任意の $w_1,\ldots,w_m\in\Sigma^*$ に対して、
    $$ |w_1w_2\cdots w_m| = \sum_{i=1}^{m}|w_i| $$
    が成り立つと仮定する。
    この仮定のもとで、任意の $w_1,\ldots,w_m,w_{m+1}\in\Sigma^*$ に対して、
    $$ |w_1w_2\cdots w_mw_{m+1}| = \sum_{i=1}^{m+1}|w_i| $$
    が成り立つことを示す。
    $ $
  3. $n=m+1$ の場合を示す。
    任意に $w_1,\ldots,w_m,w_{m+1}\in\Sigma^*$ を取る。
    語の連結の長さの基本性質より、任意の $u,v\in\Sigma^*$ に対して、
    $$ |uv|=|u|+|v| $$
    が成り立つ($1$つ上で示した命題)。
    ここで、
    $$ u:=w_1w_2\cdots w_m, \qquad v:=w_{m+1} $$
    とおく。
    $\Sigma^*$ は連結について閉じているので、
    $$ u\in\Sigma^*, \qquad v\in\Sigma^* $$
    である。
    左結合の約束より、
    $$ w_1w_2\cdots w_mw_{m+1} = (w_1w_2\cdots w_m)w_{m+1} $$
    である。
    したがって、
    $$ \begin{align} |w_1w_2\cdots w_mw_{m+1}| &= |(w_1w_2\cdots w_m)w_{m+1}|\\ &= |w_1w_2\cdots w_m|+|w_{m+1}|\\ &= \sum_{i=1}^{m}|w_i|+|w_{m+1}|\\ &= \sum_{i=1}^{m+1}|w_i| \end{align} $$
    である。
    したがって、$n=m+1$ の場合も成り立つ。

-以上より、数学的帰納法により、任意の $n\in\mathbb N$ と任意の $w_1,\ldots,w_n\in\Sigma^*$ に対して、
$$ |w_1w_2\cdots w_n| = \sum_{i=1}^{n}|w_i| $$
が成り立つ。
$$ \Box$$

拡張符号による符号列の長さ

$\mathcal X$ を空でない集合とし、二進アルファベットを
$$ \mathcal D:=\{\mathtt 0,\mathtt 1\} $$
とする。二進符号
$$ C:\mathcal X\to\mathcal D^* $$
を考える。
$x\in\mathcal X$ に対して、符号語 $C(x)$ の長さを
$$ \ell_C(x):=|C(x)| $$
で定める。
また、$C$ の拡張写像
$$ C^\dagger:\mathcal X^*\to\mathcal D^* $$

$$ C^\dagger(\varepsilon):=\varepsilon $$
および、$n\in\mathbb N$$x_1,\ldots,x_n\in\mathcal X$ に対して
$$ C^\dagger(x_1x_2\cdots x_n) := C(x_1)C(x_2)\cdots C(x_n) $$
で定める。
このとき、任意の $n\in\mathbb N$ と任意の $x_1,\ldots,x_n\in\mathcal X$ に対して、
$$ |C^\dagger(x_1x_2\cdots x_n)| = \sum_{i=1}^{n}|C(x_i)| = \sum_{i=1}^{n}\ell_C(x_i) $$
が成り立つ。

$n\in\mathbb N$ とし、$x_1,\ldots,x_n\in\mathcal X$ を任意に取る。各 $i=1,\ldots,n$ に対して、$C(x_i)\in\mathcal D^*$ である。

  1. 拡張写像 $C^\dagger$ の定義より、
    $$ C^\dagger(x_1x_2\cdots x_n) = C(x_1)C(x_2)\cdots C(x_n) $$
    である。
    したがって、
    $$ |C^\dagger(x_1x_2\cdots x_n)| = |C(x_1)C(x_2)\cdots C(x_n)| $$
    である。ここで、($1$つ上で示した)補題「有限個の語の連結の長さ」を、$\Sigma=\mathcal D$ とし、
    $$ w_i:=C(x_i)\quad (i=1,\ldots,n) $$
    として適用する。
    すると、
    $$ |C(x_1)C(x_2)\cdots C(x_n)| = \sum_{i=1}^{n}|C(x_i)| $$
    が成り立つ。
    よって、
    $$ |C^\dagger(x_1x_2\cdots x_n)| = \sum_{i=1}^{n}|C(x_i)| $$
    である。
    $ $
  2. また、符号長の定義より、任意の $i=1,\ldots,n$ に対して、
    $$ \ell_C(x_i)=|C(x_i)| $$
    である。したがって、
    $$ \sum_{i=1}^{n}|C(x_i)| = \sum_{i=1}^{n}\ell_C(x_i) $$
    である。

-以上より、
$$ |C^\dagger(x_1x_2\cdots x_n)| = \sum_{i=1}^{n}|C(x_i)| = \sum_{i=1}^{n}\ell_C(x_i) $$
が成り立つ。
$$ \Box$$

真の接頭辞と接頭辞の関係

$\Sigma$ をアルファベットとする。$u,v\in\Sigma^*$ とする。
$u$$v$ の真の接頭辞であることと、$u$$v$ の接頭辞であり、かつ
$$ u\ne v $$
であることは同値である。
また、この同値な条件が成り立つとき、
$$ |u|<|v| $$
が成り立つ。

  1. $\Rightarrow$ を示す。
    $u$$v$ の真の接頭辞であるとする。
    真の接頭辞の定義より、ある非空文字列 $w\in\Sigma^*$ が存在して、
    $$ v=uw $$
    と書ける。
    したがって、接頭辞の定義より、$u$$v$ の接頭辞である。
    また、$w$ は非空文字列であるから、
    $$ w\ne\varepsilon $$
    である。
    ここで、仮に
    $$ u=v $$
    であるとする。
    このとき、$v=uw$$u=v$ より、
    $$ u=uw $$
    である。
    両辺の長さを取ると、
    $$ |u|=|uw| $$
    である。
    文字列の連結と長さの性質(既に示した命題)より、
    $$ |uw|=|u|+|w| $$
    であるから、
    $$ |u|=|u|+|w| $$
    である。
    したがって、
    $$ |w|=0 $$
    である。長さ $0$ の文字列は空文字列に限るので、
    $$ w=\varepsilon $$
    である。これは $w\ne\varepsilon$ に矛盾する。
    したがって、
    $$ u\ne v $$
    である。
    以上より、$u$$v$ の接頭辞であり、かつ $u\ne v$ である。
    $ $
  2. $\Leftarrow$ を示す。
    $u$$v$ の接頭辞であり、かつ
    $$ u\ne v $$
    であるとする。
    接頭辞の定義より、ある $w\in\Sigma^*$ が存在して、
    $$ v=uw $$
    と書ける。
    ここで、仮に
    $$ w=\varepsilon $$
    であるとする。
    このとき、
    $$ v=uw=u\varepsilon=u $$
    である。
    これは $u\ne v$ に矛盾する。
    したがって、
    $$ w\ne\varepsilon $$
    である。
    よって、ある非空文字列 $w\in\Sigma^*$ が存在して、
    $$ v=uw $$
    と書ける。
    したがって、真の接頭辞の定義より、$u$$v$ の真の接頭辞である。
    $ $
  3. 長さの不等式を示す。
    $u$$v$ の真の接頭辞であるとする。
    真の接頭辞の定義より、ある非空文字列 $w\in\Sigma^*$ が存在して、
    $$ v=uw $$
    と書ける。
    文字列の連結と長さの性質(既に示した命題)より、
    $$ |v|=|uw|=|u|+|w| $$
    である。
    また、$w$ は非空文字列であるから、
    $$ |w|>0 $$
    である。
    したがって、
    $$ |v|=|u|+|w|>|u| $$
    である。
    ゆえに、
    $$ |u|<|v| $$
    が成り立つ。

-以上より、
$$ u\text{ は }v\text{ の真の接頭辞である} \Longleftrightarrow \bigl(u\text{ は }v\text{ の接頭辞であり、かつ }u\ne v\bigr) $$
であり、この同値な条件が成り立つとき、
$$ |u|<|v| $$
が成り立つ。
$$ \Box$$

文字列の連結の左消去律

$\Sigma$ をアルファベットとする。$p,u,v\in\Sigma^*$ とする。
このとき、
$$ pu=pv $$
ならば、
$$ u=v $$
である。

$pu=pv$ と仮定する。
$p,u,v$ の長さをそれぞれ
$$ |p|=k,\qquad |u|=m,\qquad |v|=n $$
とおく。

  1. $u$$v$ の長さが等しいことを示す。
    文字列の連結と長さの性質(証明済み)より、
    $$ |pu|=|p|+|u|=k+m $$
    であり、
    $$ |pv|=|p|+|v|=k+n $$
    である。仮定より、
    $$ pu=pv $$
    である。
    等しい文字列は長さも等しいので、
    $$ |pu|=|pv| $$
    である。したがって、
    $$ k+m=k+n $$
    である。ゆえに、
    $$ m=n $$
    である。
    $ $
  2. $u$$v$ の各文字が一致することを示す。
    i) $m=0$ の場合を考える。
      このとき、$n=m=0$ であるから、$u$$v$ はともに長さ $0$ の文字列である。
      長さ $0$ の文字列は空文字列に限るので、
    $$ u=v=\varepsilon $$
      である。
      したがって、
    $$ u=v $$
      である。
    $ $
    ii) $m\geq1$ の場合を考える。
      このとき、$n=m$ であるから、$u$$v$ はそれぞれ
    $$ u=u_1u_2\cdots u_m,\qquad v=v_1v_2\cdots v_m $$
      と書ける。ただし、各 $i=1,\ldots,m$ に対して、
    $$ u_i,v_i\in\Sigma $$
      である。
      任意の $i=1,\ldots,m$ を取る。
      連結の定義より、文字列 $pu$ の第 $k+i$ 文字は $u_i$ であり、文字列 $pv$ の第 $k+i$ 文字は $v_i$ である。
      仮定より、
    $$ pu=pv $$
      であるから、同じ位置の文字は等しい。
      したがって、
    $$ u_i=v_i $$
      である。
      任意の $i=1,\ldots,m$ に対して $u_i=v_i$ が成り立つので、
    $$ u_1u_2\cdots u_m = v_1v_2\cdots v_m $$
      である。すなわち、
    $$ u=v $$
      である。

-以上より、
$$ pu=pv\Rightarrow u=v $$
が成り立つ。
$$ \Box$$

文字列の連結の右消去律

$\Sigma$ をアルファベットとする。$p,u,v\in\Sigma^*$ とする。
このとき、
$$ up=vp $$
ならば、
$$ u=v $$
である。

$up=vp$ と仮定する。
$p,u,v$ の長さをそれぞれ
$$ |p|=k,\qquad |u|=m,\qquad |v|=n $$
とおく。

  1. $u$$v$ の長さが等しいことを示す。
    文字列の連結と長さの性質(証明済み)より、
    $$ |up|=|u|+|p|=m+k $$
    であり、
    $$ |vp|=|v|+|p|=n+k $$
    である。仮定より、
    $$ up=vp $$
    である。
    等しい文字列は長さも等しいので、
    $$ |up|=|vp| $$
    である。
    したがって、
    $$ m+k=n+k $$
    である。
    よって、
    $$ m=n $$
    である。
    $ $
  2. $u$$v$ の各文字が一致することを示す。
    i) $m=0$ の場合を考える。
      このとき、$m=n$ より $n=0$ である。
      したがって、$u$$v$ はともに長さ $0$ の文字列である。
      長さ $0$ の文字列は空文字列に限るので、
    $$ u=v=\varepsilon $$
      である。
      したがって、
    $$ u=v $$
      である。
    $ $
    ii) $m\geq1$ の場合を考える。
      このとき、$m=n$ であるから、$u$$v$ はともに長さ $m$ の文字列である。
      したがって、$u$$v$
    $$ u=u_1u_2\cdots u_m,\qquad v=v_1v_2\cdots v_m $$
      と書ける。ただし、各 $i=1,\ldots,m$ に対して、
    $$ u_i,v_i\in\Sigma $$
      である。
      任意の $i=1,\ldots,m$ を取る。
      連結の定義より、文字列 $up$ の第 $i$ 文字は $u_i$ であり、文字列 $vp$ の第 $i$ 文字は $v_i$ である。
      仮定より、
    $$ up=vp $$
      であるから、同じ位置の文字は等しい。
      したがって、
    $$ u_i=v_i $$
      である。
      任意の $i=1,\ldots,m$ に対して $u_i=v_i$ が成り立つので、
    $$ u_1u_2\cdots u_m = v_1v_2\cdots v_m $$
      である。
      すなわち、
    $$ u=v $$
      である。

-以上より、
$$ up=vp\Rightarrow u=v $$
が成り立つ。
$$ \Box$$

一意復号可能符号は非特異符号である

$\mathcal X$ を空でない有限集合とし、二進アルファベットを
$$ \mathcal D:=\{\mathtt 0,\mathtt 1\} $$
とする。二進符号
$$ C:\mathcal X\to\mathcal D^* $$
を考える。
$C$ が一意復号可能符号であるとする。すなわち、$C$ の拡張写像
$$ C^\dagger:\mathcal X^*\to\mathcal D^* $$
が単射であるとする。このとき、$C$ は非特異符号である。
すなわち、任意の $x,y\in\mathcal X$ に対して、
$$ C(x)=C(y)\Rightarrow x=y $$
が成り立つ。

任意の $x,y\in\mathcal X$ をとり、
$$ C(x)=C(y) $$
と仮定する。
$x$ に対応する長さ $1$ の文字列を
$$ w_x:\{1\}\to\mathcal X,\quad w_x(1)=x $$
とし、$y$ に対応する長さ $1$ の文字列を
$$ w_y:\{1\}\to\mathcal X,\quad w_y(1)=y $$
とする。
拡張写像 $C^\dagger$ の定義より、
$$ C^\dagger(w_x)=C(x) $$
かつ
$$ C^\dagger(w_y)=C(y) $$
である。
したがって、仮定 $C(x)=C(y)$ より、
$$ C^\dagger(w_x)=C^\dagger(w_y) $$
である。
いま、$C$ は一意復号可能符号であるから、$C^\dagger$ は単射である。
よって、
$$ w_x=w_y $$
である。
したがって、特に第 $1$ 文字を比較すれば、
$$ x=w_x(1)=w_y(1)=y $$
である。よって、
$$ C(x)=C(y)\Rightarrow x=y $$
が成り立つ。
したがって、$C$ は単射である。ゆえに、$C$ は非特異符号である。
$$ \Box$$

逆は一般には成り立たない

ただし、逆は一般には成り立たない。
例えば、$\mathcal X=\{a,b,c\}$ とし、
$$ C(a)=\mathtt 0,\quad C(b)=\mathtt{01},\quad C(c)=\mathtt 1 $$
と定める。
このとき、$C(a),C(b),C(c)$ は互いに異なるので、$C$ は非特異符号である。
しかし、
$$ C^\dagger(b)=\mathtt{01} $$
である一方、
$$ C^\dagger(ac)=C(a)C(c)=\mathtt 0\mathtt 1=\mathtt{01} $$
である。
したがって、
$$ C^\dagger(b)=C^\dagger(ac) $$
である。
一方で、$\mathcal X^*$ の文字列として、
$$ b\ne ac $$
である。ゆえに、$C^\dagger$ は単射ではない。
したがって、この符号は非特異符号であるが、一意復号可能符号ではない。

接頭辞符号は一意復号可能である

二進アルファベットを
$$ \mathcal D:=\{\mathtt 0,\mathtt 1\} $$
とする。
$\mathcal X$ を空でない有限集合とし、二進符号
$$ C:\mathcal X\to\mathcal D^* $$
を考える。
次の $2$ つを仮定する。

  1. 任意の $x\in\mathcal X$ に対して、
    $$ C(x)\ne\varepsilon $$
    である。
    $ $
  2. $C$ は接頭辞符号である。すなわち、任意の異なる $x,y\in\mathcal X$ に対して、任意の $w\in\mathcal D^*$ について、
    $$ C(y)\ne C(x)w $$
    が成り立つ。

-このとき、$C$ は一意復号可能符号である。
すなわち、拡張写像
$$ C^\dagger:\mathcal X^*\to\mathcal D^* $$
は単射である。

$u,v\in\mathcal X^*$ とし、
$$ C^\dagger(u)=C^\dagger(v) $$
であると仮定する。
このとき、
$$ u=v $$
を示せばよい。
$s:=|u|+|v|$ に関する数学的帰納法(補足を参照)で示す。

  1. $s=0$ の場合を示す。
    $s=0$ であるから、
    $$ |u|=0,\quad |v|=0 $$
    である。したがって、
    $$ u=\varepsilon,\quad v=\varepsilon $$
    である。よって、
    $$ u=v $$
    である。
    $ $
  2. $s<1$ で真であると仮定する。
    強い帰納法の仮定として、任意の $u_0,v_0\in\mathcal X^*$ について、
    $$ |u_0|+|v_0|< s $$
    かつ
    $$ C^\dagger(u_0)=C^\dagger(v_0) $$
    ならば、
    $$ u_0=v_0 $$
    であると仮定する。
    $ $
  3. $s\geq1$ の場合を示す。
    i) まず、$u=\varepsilon$ の場合を考える。
      もし $v\ne\varepsilon$ ならば、ある $n\in\mathbb N$$y_1,\ldots,y_n\in\mathcal X$ が存在して、
    $$ v=y_1y_2\cdots y_n $$
      と書ける。
      このとき、拡張写像の定義より、
    $$ C^\dagger(v)=C(y_1)C(y_2)\cdots C(y_n) $$
      である。
      仮定より、任意の $i=1,\ldots,n$ に対して、
    $$ C(y_i)\ne\varepsilon $$
      である。
      したがって、
    $$ |C(y_i)|>0 $$
      である。
      有限個の語の連結の長さの補題(既に証明済み)より、
    $$ |C^\dagger(v)| = \sum_{i=1}^{n}|C(y_i)| >0 $$
      である。よって、
    $$ C^\dagger(v)\ne\varepsilon $$
      である。
      一方、
    $$ C^\dagger(u)=C^\dagger(\varepsilon)=\varepsilon $$
      である。したがって、
    $$ C^\dagger(u)\ne C^\dagger(v) $$
      となり、仮定に矛盾する。ゆえに、
    $$ v=\varepsilon $$
      である。
      したがって、
    $$ u=v $$
      である。同様に、$v=\varepsilon$ の場合も $u=\varepsilon$ が従う。
    $ $
    ii) よって、以下では
    $$ u\ne\varepsilon,\quad v\ne\varepsilon $$
      とする。
      このとき、ある $m,n\in\mathbb N$$x_1,\ldots,x_m,y_1,\ldots,y_n\in\mathcal X$ が存在して、
    $$ u=x_1x_2\cdots x_m,\quad v=y_1y_2\cdots y_n $$
      と書ける。仮定
    $$ C^\dagger(u)=C^\dagger(v) $$
      より、
    $$ C(x_1)C(x_2)\cdots C(x_m) = C(y_1)C(y_2)\cdots C(y_n) $$
      である。ここで、先頭の符号語 $C(x_1)$$C(y_1)$ を比較する。
      両者は同じ二進文字列の先頭から現れているため、短い方は長い方の接頭辞である(補足を参照)。
    $ $
      ■ $|C(x_1)|<|C(y_1)|$ の場合。
        このとき、ある非空文字列 $r\in\mathcal D^*$ が存在して、
    $$ C(y_1)=C(x_1)r $$
        と書ける。
        もし $x_1=y_1$ ならば、
    $$ C(x_1)=C(y_1) $$
        であるから、
    $$ |C(x_1)|=|C(y_1)| $$
        となり、$|C(x_1)|<|C(y_1)|$ に矛盾する。
        したがって、
    $$ x_1\ne y_1 $$
        である。
        接頭辞符号の仮定(命題本文の2.)に、$x=x_1$$y=y_1$ を代入すると、任意の $w\in\mathcal D^*$ に対して、
    $$ C(y_1)\ne C(x_1)w $$
        でなければならない。
        しかし、上である非空文字列 $r\in\mathcal D^*$ が存在して、
    $$ C(y_1)=C(x_1)r $$
        と書けることが分かっている。
        これは、接頭辞符号の仮定に反する。よって、この場合は起こらない。
    $ $
      ■ $|C(x_1)|>|C(y_1)|$ の場合。
        同様に、ある非空文字列 $r\in\mathcal D^*$ が存在して、
    $$ C(x_1)=C(y_1)r $$
        と書ける。
        もし $x_1=y_1$ ならば、
    $$ C(x_1)=C(y_1) $$
        であるから、
    $$ |C(x_1)|=|C(y_1)| $$
        となり、$|C(x_1)|>|C(y_1)|$ に矛盾する。
        したがって、
    $$ x_1\ne y_1 $$
        である。
        接頭辞符号の仮定(命題本文の2.)に、$x=y_1$$y=x_1$ を代入すると、任意の $w\in\mathcal D^*$ に対して、
    $$ C(x_1)\ne C(y_1)w $$
        でなければならない。
        しかし、上である非空文字列 $r\in\mathcal D^*$ が存在して、
    $$ C(x_1)=C(y_1)r $$
        と書けることが分かっている。
        これは、接頭辞符号の仮定に反する。よって、この場合は起こらない。
    $ $
      ■ $|C(x_1)|=|C(y_1)|$ の場合。
        両者は同じ二進文字列の先頭 $|C(x_1)|$ 文字であるから、
    $$ C(x_1)=C(y_1) $$
        である。
        もし $x_1\ne y_1$ ならば、
    $$ C(y_1)=C(x_1)\varepsilon $$
        となる。これは接頭辞符号の仮定に反する。
        したがって、
    $$ x_1=y_1 $$
        である。
    $ $
    以上より、必ず
    $$ x_1=y_1 $$
    である。したがって、
    $$ C(x_1)=C(y_1) $$
    である。
    $ $
    ここで、
    $$ u':=x_2\cdots x_m,\quad v':=y_2\cdots y_n $$
    とおく。ただし、$m=1$ のときは $u'=\varepsilon$ とし、$n=1$ のときは $v'=\varepsilon$ とする。
    すると、
    $$ u=x_1u',\quad v=y_1v' $$
    である。
    また、拡張写像の定義より、
    $$ C^\dagger(u)=C(x_1)C^\dagger(u') $$
    かつ
    $$ C^\dagger(v)=C(y_1)C^\dagger(v') $$
    である。
    さらに、$x_1=y_1$ より、
    $$ C(x_1)=C(y_1) $$
    である。
    したがって、
    $$ C(x_1)C^\dagger(u') = C(x_1)C^\dagger(v') $$
    である。
    文字列の連結の左消去律(証明済み)より、
    $$ C^\dagger(u')=C^\dagger(v') $$
    である。ここで、$u'$$v'$ は、それぞれ $u$$v$ から先頭の $1$ 文字を取り除いた文字列である。
    したがって、
    $$ |u'|=|u|-1,\quad |v'|=|v|-1 $$
    である。
    よって、
    $$ \begin{align} |u'|+|v'| &=(|u|-1)+(|v|-1)\\ &=|u|+|v|-2\\ &=s-2\\ &< s \end{align} $$
    である。
    したがって、$u'$$v'$ の組には帰納法の仮定を適用できる。
    ゆえに、帰納法の仮定より、
    $$ u'=v' $$
    である。
    $ $
    よって、
    $$ u=x_1u'=y_1v'=v $$
    である。

-以上より、任意の $u,v\in\mathcal X^*$ に対して、
$$ C^\dagger(u)=C^\dagger(v)\Rightarrow u=v $$
が成り立つ。したがって、$C^\dagger$ は単射である。
ゆえに、$C$ は一意復号可能符号である。
$$ \Box$$

強い数学的帰納法を用いる理由

この証明では、
$$ s:=|u|+|v| $$
に関する強い数学的帰納法を用いている。
$ $
通常の数学的帰納法では、$s-1$ の場合から $s$ の場合を示すことが多い。
しかし、今回の証明では、先頭の $1$ 文字を取り除いた
$$ u',\quad v' $$
を考えるため、長さの和は
$$ |u'|+|v'|=|u|+|v|-2=s-2 $$
となる。
したがって、直前の $s-1$ の場合ではなく、$s$ より小さい場合全体について主張が使える形にしておくと自然である。
$ $
そのため、ここでは強い数学的帰納法を用いる。
すなわち、長さの和が $s$ より小さい任意の文字列の組 $(u,v)$ について、
$$ C^\dagger(u)=C^\dagger(v)\Rightarrow u=v $$
が成り立つと仮定し、長さの和が $s$ である組について同じ主張を示す。

同じ文字列の先頭部分である $2$ つの文字列について

$\Sigma$ をアルファベットとし、$a,b,z\in\Sigma^*$ とする。
$a$$b$ がともに $z$ の先頭部分であるとする。すなわち、$a$$b$ はともに $z$ の接頭辞であるとする。
さらに、
$$ |a|\leq |b| $$
とする。このとき、$a$$b$ の接頭辞である。
$ $
実際、
$$ |a|=m,\qquad |b|=n $$
とおく。仮定より、
$$ m\leq n $$
である。
$ $
$a$$b$ はともに $z$ の先頭部分であるから、$z$ の第 $1$ 文字から第 $m$ 文字までを並べた文字列が $a$ であり、
$z$ の第 $1$ 文字から第 $n$ 文字までを並べた文字列が $b$ である。
$ $
いま $m\leq n$ であるから、$b$ は、先頭の $m$ 文字からなる部分と、その後ろに続く残りの $n-m$ 文字からなる部分に分けられる。
$b$ の先頭の $m$ 文字は、$z$ の第 $1$ 文字から第 $m$ 文字までと一致する。これは $a$ である。
$ $
したがって、ある文字列 $r\in\Sigma^*$ が存在して、
$$ b=ar $$
と書ける。よって、接頭辞の定義より、$a$$b$ の接頭辞である。
$ $
特に、
$$ |a|<|b| $$
である場合には、$n-m>0$ であるから、$r$ は非空文字列である。
したがって、この場合には $a$$b$ の真の接頭辞である。

接頭辞符号の一意復号可能性

二進アルファベットを
$$ \mathcal D:=\{\mathtt 0,\mathtt 1\} $$
とする。

  1. $\mathcal C\subseteq\mathcal D^*$ を空文字列を含まない符号語集合とする。すなわち、任意の $c\in\mathcal C$ に対して、
    $$ c\ne\varepsilon $$
    であるとする。
    $ $
  2. また、$\mathcal C$ は接頭辞符号であるとする。すなわち、任意の異なる $a,b\in\mathcal C$ に対して、$a$$b$ の接頭辞ではないとする。

-このとき、$\mathcal C$ の符号語を連結して得られる符号列は一意に分割できる。
すなわち、$m,\ell\in\mathbb N_0$ とし、空個の連結を $\varepsilon$ と約束する。
$$ S=u_1u_2\cdots u_m $$
かつ
$$ S=v_1v_2\cdots v_\ell $$
が成り立ち、各 $u_i,v_j\in\mathcal C$ であるならば、
$$ m=\ell $$
であり、さらに任意の $i=1,\ldots,m$ に対して、
$$ u_i=v_i $$
が成り立つ。

$m+\ell$ に関する(強い)数学的帰納法で示す。
$P(N)$ を、$m+\ell=N$ を満たす任意の $m,\ell\in\mathbb N_0$ と任意の $u_1,\ldots,u_m,v_1,\ldots,v_\ell\in\mathcal C$ について、
$$ u_1u_2\cdots u_m = v_1v_2\cdots v_\ell $$
ならば、
$$ m=\ell $$
かつ、任意の $i=1,\ldots,m$ に対して、
$$ u_i=v_i $$
が成り立つ、という命題とする。

  1. $N=0$ の場合を示す。
    $m+\ell=0$ であるから、
    $$ m=0,\quad \ell=0 $$
    である。
    したがって、
    $$ m=\ell $$
    である。
    また、この場合は比較すべき符号語が存在しないので、任意の $i=1,\ldots,m$ に対して $u_i=v_i$ である、という条件は空虚に成り立つ。
    したがって、$P(0)$ は成り立つ。
    $ $
  2. $N\geq1$ の場合を示す。
    $N$ より小さいすべての $N'\in\mathbb N_0$ について $P(N')$ が成り立つと仮定する。
    $m+\ell=N$ とし、
    $$ u_1u_2\cdots u_m = v_1v_2\cdots v_\ell $$
    が成り立つとする。
    $ $
    i) まず、$m=0$ の場合を考える。
      このとき、左辺は空個の連結であるから、
    $$ u_1u_2\cdots u_m=\varepsilon $$
      である。
      したがって、もとの等式
    $$ u_1u_2\cdots u_m = v_1v_2\cdots v_\ell $$
      より、
    $$ \varepsilon = v_1v_2\cdots v_\ell $$
      を得る。
      もし $\ell\geq1$ ならば、各 $v_j\in\mathcal C$ は非空文字列であるから、
    $$ |v_j|>0 \quad (j=1,\ldots,\ell) $$
      である。
      有限個の語の連結の長さの補題(証明済み)より、
    $$ |v_1v_2\cdots v_\ell| = \sum_{j=1}^{\ell}|v_j| >0 $$
      である。したがって、
    $$ v_1v_2\cdots v_\ell\ne\varepsilon $$
      であり、等式
    $$ \varepsilon=v_1v_2\cdots v_\ell $$
      に矛盾する。よって、
    $$ \ell=0 $$
      である。したがって、
    $$ m=\ell $$
      であり、比較すべき符号語が存在しないので結論が成り立つ。
    $ $
    ii) $\ell=0$ の場合を考える。
      このとき、右辺 $v_1v_2\cdots v_\ell$ は空個の連結であるから、約束により
    $$ v_1v_2\cdots v_\ell=\varepsilon $$
      である。
      したがって、もとの等式
    $$ u_1u_2\cdots u_m = v_1v_2\cdots v_\ell $$
      より、
    $$ u_1u_2\cdots u_m = \varepsilon $$
      を得る。
      もし $m\geq1$ ならば、各 $u_i\in\mathcal C$ は非空文字列であるから、
    $$ |u_i|>0 \quad (i=1,\ldots,m) $$
      である。
      有限個の語の連結の長さの補題(証明済み)より、
    $$ |u_1u_2\cdots u_m| = \sum_{i=1}^{m}|u_i| >0 $$
      である。したがって、
    $$ u_1u_2\cdots u_m\ne\varepsilon $$
      である。これは
    $$ u_1u_2\cdots u_m=\varepsilon $$
      に矛盾する。よって、
    $$ m=0 $$
      であり、比較すべき符号語が存在しないので結論が成り立つ。
    $ $
    iii) よって、以下では
    $$ m\geq1,\quad \ell\geq1 $$
      とする。このとき、$u_1$$v_1$ は、どちらも同じ文字列
    $$ S:=u_1u_2\cdots u_m=v_1v_2\cdots v_\ell $$
      の先頭から始まる符号語である。
    $ $
      まず、
    $$ u_1=v_1 $$
      を示す。
      ■ $|u_1|<|v_1|$ の場合を考える。
        $u_1$$v_1$ は同じ文字列 $S$ の先頭から始まり、$u_1$ の方が短い。
        したがって、ある非空文字列 $r\in\mathcal D^*$ が存在して、
    $$ v_1=u_1r $$
        と書ける。よって、$u_1$$v_1$ の真の接頭辞である。
        特に、$u_1$$v_1$ の接頭辞であり、
    $$ u_1\ne v_1 $$
        である。
        しかし、$u_1,v_1\in\mathcal C$ であり、$\mathcal C$ は接頭辞符号であるから、異なる符号語の一方が他方の接頭辞になることはできない。
        これは矛盾である。したがって、この場合は起こらない。
    $ $
      ■ $|u_1|>|v_1|$ の場合を考える。
        同様に、ある非空文字列 $r\in\mathcal D^*$ が存在して、
    $$ u_1=v_1r $$
        と書ける。よって、$v_1$$u_1$ の真の接頭辞である。
        特に、$v_1$$u_1$ の接頭辞であり、
    $$ v_1\ne u_1 $$
        である。
        しかし、$u_1,v_1\in\mathcal C$ であり、$\mathcal C$ は接頭辞符号であるから、異なる符号語の一方が他方の接頭辞になることはできない。
        これは矛盾である。したがって、この場合も起こらない。
    $ $
      ■ $|u_1|=|v_1|$ の場合を考える。
        $u_1$$v_1$ は、どちらも同じ文字列 $S$ の先頭から始まる同じ長さの文字列である。
        したがって、
    $$ u_1=v_1 $$
        である。
    $ $
    i)、ii)、iii) より、
    $$ u_1=v_1 $$
    である。そこで、
    $$ u':=u_2u_3\cdots u_m,\quad v':=v_2v_3\cdots v_\ell $$
    とおく。
    ただし、$m=1$ のときは $u'=\varepsilon$ とし、$\ell=1$ のときは $v'=\varepsilon$ とする。
    もとの等式と $u_1=v_1$ より、
    $$ u_1u'=u_1v' $$
    である。
    文字列の連結の左消去律(証明済み)より、
    $$ u'=v' $$
    である。
    ここで、$u'$$m-1$ 個の符号語の連結であり、$v'$$\ell-1$ 個の符号語の連結である。
    また、
    $$ (m-1)+(\ell-1)=m+\ell-2=N-2< N $$
    である。
    したがって、帰納法の仮定を $u'$$v'$ の分割に適用できる。
    帰納法の仮定より、
    $$ m-1=\ell-1 $$
    であり、さらに任意の $j=1,\ldots,m-1$ に対して、
    $$ u_{j+1}=v_{j+1} $$
    が成り立つ。
    ここで $i=j+1$ とおけば、$j=1,\ldots,m-1$ に対応して $i=2,\ldots,m$ であるから、
    任意の $i=2,\ldots,m$ に対して、
    $$ u_i=v_i $$
    が成り立つ。
    したがって、
    $$ m=\ell $$
    である。
    また、すでに
    $$ u_1=v_1 $$
    を示しているので、任意の $i=1,\ldots,m$ に対して、
    $$ u_i=v_i $$
    が成り立つ。
    $ $
    以上より、$P(N)$ が成り立つ。

-したがって、強い数学的帰納法により、任意の $N\in\mathbb N_0$ について $P(N)$ が成り立つ。
ゆえに、$\mathcal C$ の符号語を連結して得られる符号列の分割は一意である。
$$ \Box$$

接頭辞符号に対するクラフトの不等式

$q\in\mathbb N$ とし、
$$ q\geq2 $$
とする。
$\mathcal A$ を大きさ $q$ のアルファベットとする。すなわち、
$$ |\mathcal A|=q $$
とする。
$K\in\mathbb N$ とし、
$$ \mathcal C=\{c_1,\ldots,c_K\}\subseteq\mathcal A^* $$
を接頭辞符号とする。ただし、$c_1,\ldots,c_K$ は互いに異なる符号語であるとする。
$k=1,\ldots,K$ に対して、
$$ l_k:=|c_k| $$
とおく。
このとき、
$$ \sum_{k=1}^{K}q^{-l_k}\leq1 $$
が成り立つ。

符号語長の最大値を
$$ L:=\max_{1\leq k\leq K}l_k $$
とおく。
$\mathcal A$ は大きさ $q$ のアルファベットであるから、長さ $L$ の文字列全体の集合 $\mathcal A^L$ について、
$$ |\mathcal A^L|=q^L $$
である。
$k=1,\ldots,K$ に対して、$c_k$ を接頭辞にもつ長さ $L$ の文字列全体の集合を
$$ D_k := \{w\in\mathcal A^L\mid c_k\text{ は }w\text{ の接頭辞である}\} $$
とおく。

  1. まず、$|D_k|=q^{L-l_k}$ を示す。
    $c_k$ の長さは $l_k$ であり、$l_k\leq L$ である。
    $w\in D_k$ であることは、ある $z\in\mathcal A^{L-l_k}$ が存在して、
    $$ w=c_kz $$
    と書けることと同値である。
    実際、$w$ は長さ $L$ の文字列であり、その先頭部分が $c_k$ であるから、$c_k$ の後ろに残る部分は長さ $L-l_k$ の文字列である。
    したがって、写像
    $$ \mathcal A^{L-l_k}\to D_k,\quad z\mapsto c_kz $$
    は全単射である(補足を参照)。
    よって、
    $$ |D_k| = |\mathcal A^{L-l_k}| = q^{L-l_k} $$
    である。
    $ $
  2. 次に、$D_1,\ldots,D_K$ が互いに排反であることを示す。
    $i\ne j$ とし、仮に
    $$ D_i\cap D_j\ne\varnothing $$
    であるとする。
    このとき、ある $w\in\mathcal A^L$ が存在して、
    $$ w\in D_i\cap D_j $$
    である。
    したがって、$c_i$$c_j$$w$ の接頭辞である。
    また、$i\ne j$ であり、$c_1,\ldots,c_K$ は互いに異なるので、
    $$ c_i\ne c_j $$
    である。
    $ $
    i) $|c_i|<|c_j|$ の場合。
      $c_i$$c_j$ はどちらも $w$ の先頭から始まる文字列であり、$c_i$ の方が短い。
      したがって、ある非空文字列 $r\in\mathcal A^*$ が存在して、
    $$ c_j=c_ir $$
      と書ける。ゆえに、$c_i$$c_j$ の接頭辞である。
      これは、$\mathcal C$ が接頭辞符号であることに矛盾する。
    $ $
    ii) $|c_i|>|c_j|$ の場合。
      同様に、ある非空文字列 $r\in\mathcal A^*$ が存在して、
    $$ c_i=c_jr $$
      と書ける。ゆえに、$c_j$$c_i$ の接頭辞である。
      これは、$\mathcal C$ が接頭辞符号であることに矛盾する。
    $ $
    iii) $|c_i|=|c_j|$ の場合。
      $c_i$$c_j$ は、どちらも $w$ の先頭 $|c_i|$ 文字からなる文字列である。
      したがって、
    $$ c_i=c_j $$
      である。これは $c_i\ne c_j$ に矛盾する。
    $ $
    i)、ii)、iii) より、仮定
    $$ D_i\cap D_j\ne\varnothing $$
    は矛盾する。したがって、
    $$ D_i\cap D_j=\varnothing \quad (i\ne j) $$
    である。
    $ $
  3. 最後に、クラフトの不等式を示す。
    $D_1,\ldots,D_K$$\mathcal A^L$ の部分集合であり、互いに排反であるから、
    $$ \left|\bigcup_{k=1}^{K}D_k\right| = \sum_{k=1}^{K}|D_k| $$
    である(証明要(後日更新))。
    また、
    $$ \bigcup_{k=1}^{K}D_k \subseteq \mathcal A^L $$
    であるから、
    $$ \sum_{k=1}^{K}|D_k| = \left|\bigcup_{k=1}^{K}D_k\right| \leq |\mathcal A^L| = q^L $$
    である(単調性の証明要(後日更新))。
    ここで、$|D_k|=q^{L-l_k}$ であるから、
    $$ \sum_{k=1}^{K}q^{L-l_k}\leq q^L $$
    である。
    両辺を $q^L$ で割ると、
    $$ \sum_{k=1}^{K}q^{-l_k}\leq1 $$
    を得る。

-以上より、
$$ \sum_{k=1}^{K}q^{-l_k}\leq1 $$
が成り立つ。
$$ \Box$$

$\mathcal A^{L-l_k}\to D_k,\quad z\mapsto c_kz$ は全単射である
  1. まず、$|D_k|=q^{L-l_k}$ を示す。
    $k\in\{1,\ldots,K\}$ を固定する。
    $c_k$ の長さは
    $$ |c_k|=l_k $$
    であり、$L$ は符号語長の最大値であるから、
    $$ l_k\leq L $$
    である。
    したがって、
    $$ L-l_k\in\mathbb N_0 $$
    である。
    ここで、写像
    $$ \Phi_k:\mathcal A^{L-l_k}\to D_k $$

    $$ \Phi_k(z):=c_kz $$
    で定める。
    $ $
  2. $\Phi_k$ が well-defined であることを示す。
    $z\in\mathcal A^{L-l_k}$ とする。このとき、
    $$ |z|=L-l_k $$
    である。
    文字列の連結と長さの性質(証明済み)より、
    $$ |\Phi_k(z)| = |c_kz| = |c_k|+|z| = l_k+(L-l_k) = L $$
    である。
    したがって、
    $$ c_kz\in\mathcal A^L $$
    である。
    また、定義より $c_k$$c_kz$ の接頭辞である。
    ゆえに、
    $$ \Phi_k(z)=c_kz\in D_k $$
    である。
    したがって、$\Phi_k$$\mathcal A^{L-l_k}$ から $D_k$ への写像である。
    $ $
  3. 次に、$\Phi_k$ が単射であることを示す。
    $z,z'\in\mathcal A^{L-l_k}$ とし、
    $$ \Phi_k(z)=\Phi_k(z') $$
    と仮定する。
    このとき、
    $$ c_kz=c_kz' $$
    である。
    文字列の連結の左消去律(証明済み)より、
    $$ z=z' $$
    である。
    したがって、$\Phi_k$ は単射である。
    $ $
  4. 次に、$\Phi_k$ が全射であることを示す。
    任意に
    $$ w\in D_k $$
    を取る。
    $D_k$ の定義より、$w\in\mathcal A^L$ であり、$c_k$$w$ の接頭辞である。
    したがって、接頭辞の定義より、ある $z\in\mathcal A^*$ が存在して、
    $$ w=c_kz $$
    と書ける。
    両辺の長さを取ると、
    $$ |w|=|c_kz| $$
    である。
    ここで、
    $$ |w|=L $$
    であり、文字列の連結と長さの性質(証明済み)より、
    $$ |c_kz|=|c_k|+|z|=l_k+|z| $$
    である。したがって、
    $$ L=l_k+|z| $$
    であるから、
    $$ |z|=L-l_k $$
    である。ゆえに、
    $$ z\in\mathcal A^{L-l_k} $$
    である。また、
    $$ \Phi_k(z)=c_kz=w $$
    である。
    したがって、任意の $w\in D_k$ に対して、ある $z\in\mathcal A^{L-l_k}$ が存在して $\Phi_k(z)=w$ となる。
    よって、$\Phi_k$ は全射である。
    $ $

-以上より、$\Phi_k$ は全単射である。
したがって、
$$ |D_k| = |\mathcal A^{L-l_k}| $$
である。
また、$\mathcal A$ は大きさ $q$ のアルファベットであるから、任意の $r\in\mathbb N_0$ に対して、
$$ |\mathcal A^r|=q^r $$
である。
これを $r=L-l_k$ に適用すると、
$$ |\mathcal A^{L-l_k}|=q^{L-l_k} $$
である。
したがって、
$$ |D_k|=q^{L-l_k} $$
である。

一意復号可能符号に対するクラフトの不等式

$q\in\mathbb N$ とし、
$$ q\geq2 $$
とする。
$\mathcal A$ を大きさ $q$ のアルファベットとする。すなわち、
$$ |\mathcal A|=q $$
とする。
$K\in\mathbb N$ とし、
$$ \mathcal C=\{c_1,\ldots,c_K\}\subseteq\mathcal A^* $$
を有限符号語集合とする。ただし、$c_1,\ldots,c_K$ は互いに異なる非空文字列であるとする。
$k=1,\ldots,K$ に対して、
$$ l_k:=|c_k| $$
とおく。
$\mathcal C$ が一意復号可能であるとする。すなわち、任意の $m,\ell\in\mathbb N_0$ と任意の添字列
$$ i_1,\ldots,i_m\in\{1,\ldots,K\}, \quad j_1,\ldots,j_\ell\in\{1,\ldots,K\} $$
に対して、
$$ c_{i_1}c_{i_2}\cdots c_{i_m} = c_{j_1}c_{j_2}\cdots c_{j_\ell} $$
ならば、
$$ m=\ell $$
かつ、任意の $r=1,\ldots,m$ に対して
$$ i_r=j_r $$
が成り立つとする。
このとき、
$$ \sum_{k=1}^{K}q^{-l_k}\leq1 $$
が成り立つ。

証明すべき不等式の左辺を
$$ S:=\sum_{k=1}^{K}q^{-l_k} $$
とおく。また、符号語長の最大値を
$$ L:=\max_{1\leq k\leq K}l_k $$
とおく。
$c_k$ は非空文字列であるから、
$$ 1\leq l_k\leq L $$
である。$S\leq1$ を示せばよい。
任意の $n\in\mathbb N$ を固定する。

  1. $S^n$ を展開する。
    有限和の積の展開より、
    $$ \begin{align} S^n &= \left(\sum_{k=1}^{K}q^{-l_k}\right)^n\\ &= \sum_{i_1=1}^{K}\sum_{i_2=1}^{K}\cdots\sum_{i_n=1}^{K} q^{-(l_{i_1}+l_{i_2}+\cdots+l_{i_n})}. \end{align} $$
    ここで、添字列
    $$ (i_1,\ldots,i_n)\in\{1,\ldots,K\}^n $$
    に対して、対応する連結語を
    $$ c_{i_1}c_{i_2}\cdots c_{i_n} $$
    とする。
    その長さは、有限個の語の連結の長さの補題(証明済み)より、
    $$ |c_{i_1}c_{i_2}\cdots c_{i_n}| = l_{i_1}+l_{i_2}+\cdots+l_{i_n} $$
    である。
    $ $
  2. 同じ長さごとに添字列を数える。
    $t\in\mathbb N_0$ に対して、
    $$ N_t := \#\left\{ (i_1,\ldots,i_n)\in\{1,\ldots,K\}^n \mid l_{i_1}+\cdots+l_{i_n}=t \right\} $$
    とおく。ただし、$\#$ は有限集合の元の個数を表す。
    このとき、
    $$ S^n = \sum_{t=0}^{nL}N_tq^{-t} $$
    である。
    実際、各 $l_{i_r}$$1\leq l_{i_r}\leq L$ を満たすので、
    $$ n\leq l_{i_1}+\cdots+l_{i_n}\leq nL $$
    である。したがって、$t$ は高々 $0,\ldots,nL$ の範囲を考えれば十分である。
    $ $
  3. $N_t\leq q^t$ を示す。
    $t\in\{0,\ldots,nL\}$ を固定する。
    長さ和が $t$ である添字列 $(i_1,\ldots,i_n)$ に対して、連結語
    $$ c_{i_1}c_{i_2}\cdots c_{i_n} $$
    $\mathcal A$ 上の長さ $t$ の文字列である。
    したがって、対応
    $$ (i_1,\ldots,i_n) \mapsto c_{i_1}c_{i_2}\cdots c_{i_n} $$
    は、長さ和が $t$ である添字列の集合から $\mathcal A^t$ への写像を定める。
    この写像は単射である。
    実際、長さ和が $t$ である $2$ つの添字列
    $$ (i_1,\ldots,i_n), \quad (j_1,\ldots,j_n) $$
    について、
    $$ c_{i_1}c_{i_2}\cdots c_{i_n} = c_{j_1}c_{j_2}\cdots c_{j_n} $$
    が成り立つとする。
    $\mathcal C$ は一意復号可能であるから、
    $$ i_r=j_r \quad (r=1,\ldots,n) $$
    である。
    したがって、
    $$ (i_1,\ldots,i_n)=(j_1,\ldots,j_n) $$
    である。よって、この写像は単射である。
    したがって、長さ和が $t$ である添字列全体の集合から $\mathcal A^t$ への単射が存在する。
    ゆえに、有限集合の濃度に関する基本事実より、
    $$ N_t\leq|\mathcal A^t| $$
    である。また、$|\mathcal A|=q$ であるから、
    $$ |\mathcal A^t|=q^t $$
    である。
    ゆえに、
    $$ N_t\leq q^t $$
    である。
    $ $
  4. $S^n$ を上から評価する。
    上で示した $N_t\leq q^t$ より、
    $$ \begin{align} S^n &= \sum_{t=0}^{nL}N_tq^{-t}\\ &\leq \sum_{t=0}^{nL}q^tq^{-t}\\ &= \sum_{t=0}^{nL}1\\ &= nL+1 \end{align} $$
    である。したがって、任意の $n\in\mathbb N$ に対して、
    $$ S^n\leq nL+1 $$
    が成り立つ。
    $ $
  5. $S\leq1$ を示す。
    上で示したように、任意の $n\in\mathbb N$ に対して、
    $$ S^n\leq nL+1 $$
    が成り立つ。
    ここで、$S\geq0$ であるから、両辺の $n$ 乗根を取って、
    $$ S\leq(nL+1)^{1/n} $$
    を得る。
    また、
    $$ \lim_{n\to\infty}(nL+1)^{1/n}=1 $$
    である。
    したがって、
    $$ S\leq1 $$
    である。

-すなわち、
$$ \sum_{k=1}^{K}q^{-l_k}\leq1 $$
が成り立つ。
$$ \Box$$

証明の考え方

接頭辞符号に対するクラフトの不等式では、符号語を接頭辞にもつ長さ $L$ の語の集合を互いに排反にして数えた。
一方、一意復号可能符号は接頭辞符号とは限らないので、その方法をそのまま使うことはできない。
そこで、一意復号可能性を使うために、$n$ 個の符号語の連結を考える。
一意復号可能性により、異なる符号語列は異なる連結語を与える。
したがって、長さ $t$ の連結語として現れるものの個数は、長さ $t$ の全語の個数 $q^t$ 以下である。
この数え上げから、
$$ \left(\sum_{k=1}^{K}q^{-l_k}\right)^n\leq nL+1 $$
が得られ、$n\to\infty$ とすることで、
$$ \sum_{k=1}^{K}q^{-l_k}\leq1 $$
が従う。

一意復号可能符号の平均符号長の下界

$(\Omega,\mathcal F,\mathbb P)$ を確率空間とし、$\mathcal X$ を空でない有限集合とする。
$X:\Omega\to\mathcal X$ を有限集合に値をもつ離散確率変数とする。
$x\in\mathcal X$ に対して、
$$ p(x):=\mathbb P(X=x) $$
とおく。
また、二進アルファベットを
$$ \mathcal D:=\{\mathtt 0,\mathtt 1\} $$
とし、二進符号
$$ C:\mathcal X\to\mathcal D^* $$
が一意復号可能であるとする。
$x\in\mathcal X$ に対して、符号語 $C(x)$ の長さを
$$ l(x):=|C(x)| $$
とおく。
このとき、平均符号長
$$ L_X(C):=\sum_{x\in\mathcal X}p(x)l(x) $$
は、エントロピー
$$ H_2(X):=-\sum_{\substack{x\in\mathcal X\\ p(x)>0}}p(x)\log_2p(x) $$
に対して、
$$ L_X(C)\geq H_2(X) $$
を満たす。

  1. 一意復号可能符号は非特異符号であるから、$C$ は単射である。
    したがって、符号語の集合
    $$ \mathcal C_C:=\{C(x)\mid x\in\mathcal X\} $$
    は有限個の相異なる符号語からなる。
    また、一意復号可能符号では空符号語は現れないので、任意の $x\in\mathcal X$ に対して、
    $$ C(x)\ne\varepsilon $$
    である。
    さらに、$\mathcal C_C$ は一意復号可能な符号語集合である。
    実際、$m,\ell\in\mathbb N_0$ とし、$x_1,\ldots,x_m,y_1,\ldots,y_\ell\in\mathcal X$ について、
    $$ C(x_1)\cdots C(x_m)=C(y_1)\cdots C(y_\ell) $$
    が成り立つとする。
    これは、
    $$ C^\dagger(x_1\cdots x_m)=C^\dagger(y_1\cdots y_\ell) $$
    を意味する。
    $C$ は一意復号可能であるから、$C^\dagger$ は単射である。
    したがって、
    $$ x_1\cdots x_m=y_1\cdots y_\ell $$
    である。ゆえに、
    $$ m=\ell $$
    であり、任意の $i=1,\ldots,m$ に対して、
    $$ x_i=y_i $$
    が成り立つ。
    したがって、$\mathcal C_C$ は一意復号可能な符号語集合である。
    ゆえに、一意復号可能符号に対するクラフトの不等式より、
    $$ K:=\sum_{x\in\mathcal X}2^{-l(x)}\leq1 $$
    である。
    $ $
  2. そこで、各 $x\in\mathcal X$ に対して、
    $$ q(x):=\frac{2^{-l(x)}}{K} $$
    と定める。
    このとき、任意の $x\in\mathcal X$ に対して、
    $$ q(x)>0 $$
    であり、また、
    $$ \begin{align} \sum_{x\in\mathcal X}q(x) &= \sum_{x\in\mathcal X}\frac{2^{-l(x)}}{K} \qquad \because q(x):=\frac{2^{-l(x)}}{K}\\ &= \frac{1}{K}\sum_{x\in\mathcal X}2^{-l(x)} \qquad \because K\text{ は }x\text{ に依存しない定数である}\\ &= \frac{1}{K}K \qquad \because K:=\sum_{x\in\mathcal X}2^{-l(x)}\\ &= 1 \qquad \because K>0 \end{align} $$
    である。したがって、$q$$\mathcal X$ 上の確率分布である。
    $ $
  3. ギブスの不等式より、
    $$ \sum_{\substack{x\in\mathcal X\\ p(x)>0}} p(x)\log_2\frac{p(x)}{q(x)} \geq0 $$
    である( 証明はコチラ )
    一方、任意の $x\in\mathcal X$ に対して、
    $$ \begin{align} \log_2 q(x) &= \log_2\frac{2^{-l(x)}}{K}\\ &= \log_2 2^{-l(x)}-\log_2K\\ &= -l(x)-\log_2K \end{align} $$
    である。したがって、
    $$ \begin{align} &\sum_{\substack{x\in\mathcal X\\ p(x)>0}} p(x)\log_2p(x) - \sum_{\substack{x\in\mathcal X\\ p(x)>0}} p(x)\log_2q(x)\\ &= \sum_{\substack{x\in\mathcal X\\ p(x)>0}} p(x)\log_2p(x) + \sum_{\substack{x\in\mathcal X\\ p(x)>0}} p(x)l(x) + \log_2K \sum_{\substack{x\in\mathcal X\\ p(x)>0}}p(x) \end{align} $$
    である。ここで、
    $$ \sum_{\substack{x\in\mathcal X\\ p(x)>0}}p(x)=1 $$
    である。
    また、$p(x)=0$ である $x\in\mathcal X$ については
    $$ p(x)l(x)=0 $$
    であるから、
    $$ \sum_{\substack{x\in\mathcal X\\ p(x)>0}}p(x)l(x) = \sum_{x\in\mathcal X}p(x)l(x) = L_X(C) $$
    である。
    さらに、エントロピーの定義より、
    $$ \sum_{\substack{x\in\mathcal X\\ p(x)>0}} p(x)\log_2p(x) = -H_2(X) $$
    である。
    よって、
    $$ \sum_{\substack{x\in\mathcal X\\ p(x)>0}} p(x)\log_2\frac{p(x)}{q(x)} = -H_2(X)+L_X(C)+\log_2K $$
    である。
    $ $
  4. また、ギブス不等式より
    $$ -H_2(X)+L_X(C)+\log_2K\geq0 $$
    である。したがって、
    $$ L_X(C)\geq H_2(X)-\log_2K $$
    を得る( 詳しくはコチラ )。
    また、クラフトの不等式より、
    $$ 0< K\leq1 $$
    である。
    $2$ の対数関数は $(0,\infty)$ 上で単調増加であるから、
    $$ \log_2K\leq\log_2 1=0 $$
    である。したがって、
    $$ -\log_2K\geq0 $$
    である。ゆえに、
    $$ H_2(X)-\log_2K\geq H_2(X) $$
    である。
    以上より、
    $$ L_X(C)\geq H_2(X)-\log_2K\geq H_2(X) $$
    である。

-したがって、
$$ L_X(C)\geq H_2(X) $$
が成り立つ。
$$ \Box$$

参考文献

投稿日:5日前
更新日:5日前
数学の力で現場を変える アルゴリズムエンジニア募集 - Mathlog served by OptHub

この記事を高評価した人

高評価したユーザはいません

この記事に送られたバッジ

バッジはありません。

投稿者

Kagura
Kagura
7
4970
■ 分野を問わず数学の証明が好きです。あとで自分が読み返したときに、きちんと理解できるノートを作ることを心がけています。不定期に過去のノートを確認し、修正&更新 (追加&削除) しています。定義、命題、証明などに誤りや不正確な点がございましたら、ご指摘いただけますと幸いです(2025年12月28日)。          ----------------------------------------------- ■ ノート『数学概論』の読み方     STEP1:まずは定義を一通り理解し覚える。 STEP2:具体例を考えてみる。    STEP3:各命題の主張を一通り理解する。 STEP4:証明を繰り返し読んで流れを掴む。 (まずはココまでで良い)         STEP5:何も見ずに定義に従って証明を創る。 STEP6:STEP5の他の証明方法を創ってみる。    STEP7:自由に命題と証明を創ってみる  

コメント

他の人のコメント

コメントはありません。
読み込み中...
読み込み中