4.2 Kraft の不等式
符号語を短くする自由には限りがある.𝐷 =2でXが3文字のとき,語頭符号では全部の符号語を長さ1にはできない.長さ1の列は0と1の二つしかなく,同じ列を二つの文字に与えれば一方が他方の語頭になってしまうからである.長さ2の符号語,たとえば01を一つ使えば,01で始まる列はどれも他の符号語には使えなくなる.これは0で始まる列の半分,全体の4分の1にあたる.符号語が長いほど,使えなくなる割合は小さい.この割合を全部の符号語について足し合わせて一つの不等式にしたのが本節の主題である.
語頭符号が満たす制約
定理 4.2.1(Kraft の不等式). Xを有限アルファベット,𝐷 ≥2を整数とする.𝑐をX上の𝐷元語頭符号,ℓ(𝑥)をその符号語長とすると
∑𝑥∈X𝐷−ℓ(𝑥)≤1が成り立つ.
証明. Xが空なら左辺は0で主張は成り立つから,空でないとしてよい.ℓmax :=max𝑥∈Xℓ(𝑥)とおく.
長さℓmaxの列を数える.{0,1,…,𝐷 −1}の文字をℓmax個並べた列は全部で𝐷ℓmax本ある.各𝑥 ∈Xについて,𝑐(𝑥)を語頭にもつ長さℓmaxの列の集合を𝑆(𝑥)と書く.𝑐(𝑥)の後ろに残りのℓmax −ℓ(𝑥)文字を自由に並べればよいので
|𝑆(𝑥)|=𝐷ℓmax−ℓ(𝑥)である.
これらが互いに交わらないことを見る.𝑥 ≠𝑦で𝑆(𝑥) ∩𝑆(𝑦)に属する列があるとすると,𝑐(𝑥)と𝑐(𝑦)はどちらもその列の語頭だから,長さの短いほうが長いほうの語頭になる.これは𝑐が語頭符号であることに反する.
交わらない集合の合併は全体に含まれるから
∑𝑥∈X𝐷ℓmax−ℓ(𝑥)=∣⋃𝑥∈X𝑆(𝑥)∣≤𝐷ℓmaxであり,両辺を𝐷ℓmaxで割れば主張を得る.◼
列の全体を,1文字伸ばすごとに枝分かれする木と見ておく.符号語は節点にあたり,語頭の関係は先祖と子孫の関係にあたる.以下の「深さ」はこの木の言葉で,列の長さのことである.証明が数えているのは「深さℓmaxでどれだけの場所が塞がるか」である.符号語𝑐(𝑥)を一つ決めると,それを語頭にもつ長さℓmaxの列がまとめて使えなくなり,その本数は符号語が短いほど多い.語頭符号であるという条件は,塞がる範囲どうしが重ならないことを意味する.重ならないものの総量が全体を超えないというだけの勘定が,Kraft の不等式である.𝐷−ℓ(𝑥)という項は,符号語𝑥が全体の何割を塞ぐかを表している.
逆向きの構成
定理 4.2.2. Xを有限アルファベット,𝐷 ≥2を整数とし,ℓ :X →{1,2,3,…}が
∑𝑥∈X𝐷−ℓ(𝑥)≤1を満たすとする.このときX上の𝐷元語頭符号𝑐で,すべての𝑥 ∈Xについて𝑐(𝑥)の長さがℓ(𝑥)に等しいものが存在する.
証明. 以下は,符号語を長さの短い順に前から詰めていく手続きを,そのまま式で書き下したものである.Xが空なら空の符号が主張を満たすから,空でないとしてよい.ℓmax :=max𝑥∈Xℓ(𝑥)とおく.長さℓmaxの列を,先頭を最上位の桁とする𝐷進表示と読んで,0以上𝐷ℓmax未満の整数と同一視する.𝐷進表示については三つのことを既知とする.第一に,長さℓmaxの列とこの範囲の整数との対応が1対1であること.第二に,0 ≤𝑘 ≤ℓmaxのとき,整数が𝐷𝑘の倍数であることと,対応する列の末尾𝑘文字がすべて0であることが同値であること.第三に,長さ𝑗の列を語頭にもつ長さℓmaxの列に対応する整数が,𝐷ℓmax−𝑗個の連続した整数の並びになることである.
順序を一つ選ぶ.Xに,ℓの値が小さい文字ほど先に来るような全順序≺を入れる(値が等しい文字どうしの順序はどう決めてもよい).各𝑥 ∈Xに対して
𝑠(𝑥):=∑𝑦≺𝑥𝐷ℓmax−ℓ(𝑦)とおく.仮定の不等式の両辺を𝐷ℓmax倍すると∑𝑦𝐷ℓmax−ℓ(𝑦) ≤𝐷ℓmaxである.𝑠(𝑥)の和の範囲に𝑥自身を足したものはXに含まれるから,どの𝑥についても
𝑠(𝑥)+𝐷ℓmax−ℓ(𝑥)≤𝐷ℓmaxが従う.とくに𝑠(𝑥) <𝐷ℓmaxであり,𝐷進表示の第一の性質より𝑠(𝑥)は長さℓmaxの列に対応する.
符号語を定める.𝑦 ≺𝑥ならばℓ(𝑦) ≤ℓ(𝑥)なので,𝑠(𝑥)の各項𝐷ℓmax−ℓ(𝑦)は𝐷ℓmax−ℓ(𝑥)の倍数である.したがって𝑠(𝑥)は𝐷ℓmax−ℓ(𝑥)で割り切れ,𝐷進表示の第二の性質より,𝑠(𝑥)に対応する長さℓmaxの列は末尾ℓmax −ℓ(𝑥)文字がすべて0である.そこで𝑐(𝑥)を,その列の先頭ℓ(𝑥)文字と定める.長さはℓ(𝑥)である.𝐷進表示の第三の性質より,𝑐(𝑥)を語頭にもつ長さℓmaxの列に対応する整数はちょうど
𝑠(𝑥),𝑠(𝑥)+1,…,𝑠(𝑥)+𝐷ℓmax−ℓ(𝑥)−1の並びになる.
語頭符号であることを示す.𝑥 ≠𝑦で𝑐(𝑥)が𝑐(𝑦)の語頭だとする.このときℓ(𝑥) ≤ℓ(𝑦)であり,𝑐(𝑦)を語頭にもつ列は𝑐(𝑥)も語頭にもつ.すなわち𝑐(𝑦)を語頭にもつ長さℓmaxの列の並びは,𝑐(𝑥)を語頭にもつ列の並びの中にすっぽり入る.二つの並びの左端と幅を比べると𝑠(𝑥) ≤𝑠(𝑦) <𝑠(𝑥) +𝐷ℓmax−ℓ(𝑥)が従う.一方,𝑥 ≺𝑦ならば𝑠(𝑦)の和の範囲は𝑠(𝑥)の和の範囲に𝑥を足したものを含むので𝑠(𝑦) ≥𝑠(𝑥) +𝐷ℓmax−ℓ(𝑥)となり,右側の不等号に反する.𝑦 ≺𝑥ならば≺の決め方からℓ(𝑦) ≤ℓ(𝑥)で,ℓ(𝑥) ≤ℓ(𝑦)と合わせてℓ(𝑥) =ℓ(𝑦)であり,同じ理由で𝑠(𝑥) ≥𝑠(𝑦) +𝐷ℓmax−ℓ(𝑦) >𝑠(𝑦)となって,左側の不等号に反する.どちらの場合も矛盾するから,𝑐は語頭符号である.◼
証明は「深さℓmaxの𝐷ℓmax個の場所を,長さの短い順に前から詰めていく」という手続きそのものである.𝑠(𝑥)が詰め始めの位置で,𝑥が占める幅が𝐷ℓmax−ℓ(𝑥)である.短いものから詰めるので,占める幅は単調に狭くなり,境界がつねに幅の倍数のところに来る.そのおかげで区間が入れ子にならず,語頭の関係が生じない.Kraft の不等式は,最後まで詰めきっても場所が足りるという条件として使われている.
例 4.2.3(実現できる長さの組とできない長さの組). 𝐷 =2とし,4文字からなるアルファベットを考える.四つの符号語長が1,2,3,3である二元語頭符号は存在する.四つの符号語長が1,2,2,3である二元語頭符号は存在しない.
証明. 前半は2−1 +2−2 +2−3 +2−3 =1だから定理 4.2.2 で従う.その構成をたどると例 4.1.4 の符号がそのまま出てくる.ℓmax =3で,長さの小さい順に並べた四つの文字の詰め始めの位置は0,23−1 =4,4 +23−2 =6,6 +23−3 =7である.これらを長さ3の二進表示000,100,110,111と読み,先頭からそれぞれ1,2,3,3文字を取れば0,10,110,111となる.後半は2−1 +2−2 +2−2 +2−3 =9/8 >1だから,定理 4.2.1 の対偶による.◼
定義 4.2.4(Kraft の不等式を満たす長さの組). Xを有限アルファベット,𝐷 ≥2を整数とする.X上で定義され0以上の整数値をとる関数ℓを,X上の 長さの組 と呼ぶ.長さの組ℓが
∑𝑥∈X𝐷−ℓ(𝑥)≤1を満たすとき,ℓは Kraft の不等式を満たす と言う.
長さの組の値に0を許してあるのは,確率1の記号に切り上げが長さ0を与える場合(4.4 節)にも,次節の下界をそのまま当てるためである.符号から来る長さの組がこの値をとることはない.定義 4.1.1 より符号語は空でないからℓ(𝑥) ≥1である.
系 4.2.5. Xを有限アルファベット,𝐷 ≥2を整数とし,ℓをX上の長さの組(定義 4.2.4)とする.ℓがある𝐷元語頭符号の符号語長の組であることと,ℓが Kraft の不等式を満たしかつすべての𝑥 ∈Xでℓ(𝑥) ≥1であることは同値である.
証明. ℓがある𝐷元語頭符号𝑐の符号語長の組ならば,定義 4.1.1 より符号語は空でないのでℓ(𝑥) ≥1であり,定理 4.2.1 よりℓは Kraft の不等式を満たす.逆にℓが Kraft の不等式を満たしすべての𝑥でℓ(𝑥) ≥1ならば,定理 4.2.2 より各𝑥の符号語長がℓ(𝑥)に等しい𝐷元語頭符号が存在する.◼
系 4.2.5 が言っているのは,符号語の中身は長さの組さえ許されていれば必ず作れる,ということである.だから符号を設計する問題は,長さの組を選ぶ問題に置き換えてよい.次節はこの形のℓすべてにわたって平均符号長を下から抑える.
InformationTheory — 形式化検証つき情報理論教科書(レビュー版).数式は MathJax + AMS Euler で事前レンダリング.