ゼッケンドルフの定理

ゼッケンドルフの定理は整数のフィボナッチ数の和としての表現に関する定理である。名前はベルギーの数学者、Edouard Zeckendorf に由来する。 ゼッケンドルフの定理は、任意の正の整数が、連続するフィボナッチ数を含まないような形で、相異なる1つ以上のフィボナッチ数の和として一意に表現できるというものである。より厳密には、 定理 ― N を任意の正の整数とすれば、ci + 1 > ci + 1 を満たす正の整数 ci ≥ 2 が存在して、 N = ∑ i = 0 k F c i {\displaystyle N=\sum _{i=0}^{k}F_{c_{i}}} （ただし Fn は n 番目のフィボナッチ数） というものである。このような和は N の ゼッケンドルフの表現 と呼ばれる。 例えば、100 のゼッケンドルフの表現は 100 = 89 + 8 + 3 となる。100 をフィボナッチ数の和として表す方法は他にも 100 = 89 + 8 + 2 + 1 100 = 55 + 34 + 8 + 3 のように存在するが、これらはそれぞれ 1 と 2, 34 と 55 が連続するフィボナッチ数であるため、ゼッケンドルフ表現ではない。 任意の正の整数に対して、ゼッケンドルフの定理の条件を満たす表現は、各段階で可能な最大のフィボナッチ数を選ぶ貪欲法によって得ることができる。 ゼッケンドルフの定理はふたつの部分に分けられる。 存在: 任意の正の整数 n に対してゼッケンドルフの表現が存在する。 一意性: どの正の整数 n も、相異なるふたつのゼッケンドルフの表現を持たない。 存在 最初の部分（存在）は数学的帰納法によって示すことができる。n = 1, 2, 3 については（これらはフィボナッチ数だから）明らかに真であり、n = 4 に対しては 4 = 3 + 1 が当てはまる。さて、すべての n ≤ k に対してゼッケンドルフの表現が存在すると仮定する。k + 1 がフィボナッチ数ならばそれがゼッケンドルフの表現となり、そうでない場合には Fj < k + 1 < Fj + 1  となるような j が存在することになる。後者の場合に、 a = k + 1 − Fj  を考えると、a ≤ k であるから、 a は帰納法の仮定により、ゼッケンドルフの表現を持つ。さらに、Fj + a < Fj + 1 でありまた Fj + 1 = Fj + Fj − 1 （フィボナッチ数の定義から）だから、a < Fj − 1 となって a のゼッケンドルフ表現は Fj − 1  を含まないことがいえる。よって、k + 1 は Fj と a のゼッケンドルフの表現の和として表すことができる。 一意性 後半（一意性）を示すには次の補題が必要となる。 補題 ― 最大の要素が Fj であるような、連続せず互いに異なったフィボナッチ数の任意の空でない集合について、その和は Fj + 1 より（実際に）小さい。 この補題は j についての帰納法で証明することができる。 さて、和の等しい、互いに異なった連続しないフィボナッチ数の空でない集合 S と T を考える。ここで集合 S′ と T′ を考える。これはそれぞれ S と T から共通する要素を取り除いたものである（つまり、S′ = S \ T, T′ = T \ S である）。S と T の和は等しく、それぞれの集合から S ∩ {\displaystyle \cap } T を取り除いたものであることから、S′ の和と T′ の和もまた等しい。 ここから背理法によって S′ と T′ の一方は空であることを示す。S′ と T′ がいずれも空でないと仮定し、S′ の最大の要素を Fs, T′ の最大の要素を Ft とする。S′ と T′ には共通する要素はないから、Fs ≠ Ft である。ここで Fs < Ft としても一般性を失わない。このとき補題から、S′ の総和は Fs + 1 より小さく、従って Ft よりも小さいが、T′ の和は明らかに Ft 以上である。これは S′ と T′ の総和が等しいことと矛盾しており、従って S′ か T′ の少なくとも一方は空であるといえる。 このとき S′ が空であるとしても一般性を失わない。すると S′ の和は 0 であり、このため T′ の和も同様に 0 であるはずである。T′ の要素は正の整数のみであるから、これを満たすためには T′ は空集合でなければならない。従って S′ = T′ = ∅ {\displaystyle \emptyset } , すなわち S = T であって、ゼッケンドルフの表現の一意性が示された。 自然数 a, b に対して次のような演算 a ∘ b {\displaystyle a\circ b} を定義することができる。ゼッケンドルフの表現 a = ∑ i = 0 k F c i ( c i ≥ 2 ) {\displaystyle a=\sum _{i=0}^{k}F_{c_{i}}\;(c_{i}\geq 2)} と b = ∑ j = 0 l F d j ( d j ≥ 2 ) {\displaystyle b=\sum _{j=0}^{l}F_{d_{j}}\;(d_{j}\geq 2)} に対して、フィボナッチ積 a ∘ b = ∑ i = 0 k ∑ j = 0 l F c i + d j . {\displaystyle a\circ b=\sum _{i=0}^{k}\sum _{j=0}^{l}F_{c_{i}+d_{j}}.} 例えば、2 のゼッケンドルフの表現は F3, 4 に対するそれは F4 + F2 (F1 は用いない) であるから、 2 ∘ 4 = F 3 + 4 + F 3 + 2 = 13 + 5 = 18 {\displaystyle 2\circ 4=F_{3+4}+F_{3+2}=13+5=18} となる。 和の順序を入れ替えることでこれが可換であることは示すことができるが、ドナルド・クヌースはさらに、この演算が結合的でもあるということを証明した。 フィボナッチ数列は、漸化式を書き換えて F n − 2 = F n − F n − 1 , {\displaystyle F_{n-2}=F_{n}-F_{n-1},\,} とし、これをすべての整数について適用することで負数番 n にも拡張することができ、次の性質を満たす。 F − n = ( − 1 ) n + 1 F n . {\displaystyle F_{-n}=(-1)^{n+1}F_{n}.\,} 任意の整数は、連続したフィボナッチ数を使わない形で負数番のフィボナッチ数の和として一意に表すことができる。例えば −11 = F−4 + F−6 = (−3) + (−8) 12 = F−2 + F−7 = (−1) + 13 24 = F−1 + F−4 + F−6 + F−9 = 1 + (−3) + (−8) + 34 −43 = F−2 + F−7 + F−10 = (−1) + 13 + (−55) 0 は空集合に対する和として表される。 たとえば 0 = F−1 + F−2  であるから、この表現の一意性は連続するフィボナッチ数を用いないという条件に依存している。 この表現によって、ゼッケンドルフの表現と同様に整数を符号化することが可能である(en:NegaFibonacci_coding)。整数 x を表す文字列においては、n 番目の桁は Fn が x を表す和に現れるなら 1, そうでないなら 0 となる。例えば 24 = F−1 + F−4 + F−6 + F−9  であるから 24 は 9, 6, 4, 1 桁目に 1 を置いて 100101001 によって表現できる。整数 x が奇数桁でこのように表されることと、x > 0 であることは同値である。