対関数

対関数（ついかんすう、英: Pairing function）とは、2つの自然数を一意に符号化して1つの自然数を返す関数である。 集合論では、任意の対関数を用いて、有理数全体の集合 Q が可算濃度であることを証明できる。理論計算機科学では、自然数の多変数関数 f : Nk → N を一変数関数 g : N → N に変換するために使われる。 対関数は非可算無限個存在する。したがってその中には計算可能関数でないものが非可算無限個存在する。計算可能性理論や計算複雑性理論の文脈では、ある複雑性クラスの中で対をコード化して扱いたいことがあることから、対関数とその逆関数がともに目的の関数クラスに属するような符号化を見つけることが重要となる。 対関数は次のような全単射関数である。 π : N × N → N . {\displaystyle \pi :\mathbb {N} \times \mathbb {N} \to \mathbb {N} .} カントールの対関数は次のように定義される対関数である。 π ( k 1 , k 2 ) := 1 2 ( k 1 + k 2 ) ( k 1 + k 2 + 1 ) + k 2 {\displaystyle \pi (k_{1},k_{2}):={\frac {1}{2}}(k_{1}+k_{2})(k_{1}+k_{2}+1)+k_{2}} k 1 {\displaystyle k_{1}} と k 2 {\displaystyle k_{2}} への対関数の適用をするとき、それによって得られる数を ⟨ k 1 , k 2 ⟩ {\displaystyle \langle k_{1},k_{2}\rangle } と表記することが多い。 この定義を帰納的に一般化すると、カントールのタプル関数となる。すなわち、 π ( n ) : N n → N {\displaystyle \pi ^{(n)}:\mathbb {N} ^{n}\to \mathbb {N} } であり、ここで π ( n ) ( k 1 , … , k n − 1 , k n ) := π ( π ( n − 1 ) ( k 1 , … , k n − 1 ) , k n ) {\displaystyle \pi ^{(n)}(k_{1},\ldots ,k_{n-1},k_{n}):=\pi (\pi ^{(n-1)}(k_{1},\ldots ,k_{n-1}),k_{n})} ここで z を次のように定義する。 z = ⟨ x , y ⟩ = ( x + y ) ( x + y + 1 ) 2 + y {\displaystyle z=\langle x,y\rangle ={\frac {(x+y)(x+y+1)}{2}}+y} このときの x と y を求めたい。そのために中間的な値を定義する。 w = x + y {\displaystyle w=x+y\!} t = w ( w + 1 ) 2 = w 2 + w 2 {\displaystyle t={\frac {w(w+1)}{2}}={\frac {w^{2}+w}{2}}} z = t + y {\displaystyle z=t+y\!} ここで t は w の三角数である。そこで次の二次方程式を解く。 w 2 + w − 2 t = 0 {\displaystyle w^{2}+w-2t=0\!} w を t の関数で表すと、次のようになる。 w = 8 t + 1 − 1 2 {\displaystyle w={\frac {{\sqrt {8t+1}}-1}{2}}} t が非負実数であれば、これは単調増加する連続関数である。ここで t ≤ z = t + y < t + ( w + 1 ) = ( w + 1 ) 2 + ( w + 1 ) 2 {\displaystyle t\leq z=t+y<t+(w+1)={\frac {(w+1)^{2}+(w+1)}{2}}} が成り立つので、次が得られる。 w ≤ 8 z + 1 − 1 2 < w + 1 {\displaystyle w\leq {\frac {{\sqrt {8z+1}}-1}{2}}<w+1} 従って w = ⌊ 8 z + 1 − 1 2 ⌋ {\displaystyle w=\left\lfloor {\frac {{\sqrt {8z+1}}-1}{2}}\right\rfloor } . 以上から z から x と y を計算すると次のようになる。 w = ⌊ 8 z + 1 − 1 2 ⌋ {\displaystyle w=\left\lfloor {\frac {{\sqrt {8z+1}}-1}{2}}\right\rfloor } t = w 2 + w 2 {\displaystyle t={\frac {w^{2}+w}{2}}} y = z − t {\displaystyle y=z-t\!} x = w − y {\displaystyle x=w-y\!} 以上のようにカントールの対関数には逆関数が存在し、一対一対応している。 順序の言葉で述べるならば、 ( x , y ) {\displaystyle (x,y)} を和 x + y {\displaystyle x+y} が小さい順に並べ、和が等しいものについては y {\displaystyle y} が小さい順に並べたとき、 N 2 {\displaystyle \mathbb {N} ^{2}} から N {\displaystyle \mathbb {N} } への一意的な順序同型がカントールの対関数である。 対 ( x , y ) {\displaystyle (x,y)} を最大値 max ( x , y ) {\displaystyle \max(x,y)} が小さい順に並べ、最大値が等しいものについては辞書式順序で並べれば、 N 2 {\displaystyle \mathbb {N} ^{2}} から N {\displaystyle \mathbb {N} } への一意的な順序同型 P : N 2 → N {\displaystyle P\colon \mathbb {N} ^{2}\to \mathbb {N} } が存在する。この関数は次のように表せる。 P ( x , y ) = { x + y 2 x < y x 2 + x + y x ≥ y {\displaystyle P(x,y)={\begin{cases}x+y^{2}&x<y\\x^{2}+x+y&x\geq y\end{cases}}} 逆関数 Q , R : N → N {\displaystyle Q,R\colon \mathbb {N} \to \mathbb {N} } は次のように表せる。 Q ( z ) = min ( ⌊ z ⌋ , E ( z ) ) {\displaystyle Q(z)=\min(\lfloor {\sqrt {z}}\rfloor ,E(z))} R ( z ) = { ⌊ z ⌋ E ( z ) < ⌊ z ⌋ E ( z ) − ⌊ z ⌋ E ( z ) ≥ ⌊ z ⌋ {\displaystyle R(z)={\begin{cases}\lfloor {\sqrt {z}}\rfloor &E(z)<\lfloor {\sqrt {z}}\rfloor \\E(z)-\lfloor {\sqrt {z}}\rfloor &E(z)\geq \lfloor {\sqrt {z}}\rfloor \end{cases}}} ただし E ( z ) = z − ⌊ z ⌋ 2 {\displaystyle E(z)=z-\lfloor {\sqrt {z}}\rfloor ^{2}} である。 Pigeon, Steven. "Pairing function". mathworld.wolfram.com (英語). Nagashima, Takashi (1965), “On a certain class of recursive functions”, Hitotsubashi Journal of Arts and Sciences 16: 72–81  Fueter–Pólya theorem Cantor の対関数の全単射性の証明 (PDF) N×NからNへの全単射の存在｜カントールの対関数｜単射・全射トレーニング - YouTube N×NからNへの全単射の存在｜素因数分解を使って示す｜単射・全射トレーニング - YouTube