アッカーマン関数の明示的なミュー再帰式


15

標準のミュー再帰演算子を使用して、アッカーマン関数(実際、RózsaPéterとRaphael Robinsonが提案したバージョンに興味があります)の作成方法を指摘していただけますか?PéterとRobinsonによるオリジナルの論文を試しましたが、Péterの論文は英語とは異なる言語を使用し、Robinsonの論文「Recursion and Double Recursion」および「Primitive Recursive Functions」も助けになりません。 Ackerman関数を定義するために二重再帰演算子と呼ばれるため、この場合はmu再帰項での演算子の明示的な定義が求められます。

答えに最も近いのは、P。スミスの「Godelの定理の紹介」(CUP、2007)(29.4 Ackermann-Peter関数はμ再帰的)ですが、彼は次のように思い付きます。難しくはありませんが退屈です。ここで詳細を説明することから学ぶことは何もありません。

RózsaPéterの本「Recursive functions」(1967年、アカデミックプレス)も試しました。そこに与えられた再帰演算子のバリアントがたくさんあります。通常、一方が他方に減少します。アッカーマン関数の定義に適したタイプの再帰演算子と、それをプリミティブなリデュレーション演算子と最小化演算子に減らす一連のステップがあると思いますが、全体を調査することはできません。


1
実際、これは最初に見えるほど難しくはありません。その秘trickは、演算子にAckerman関数の計算、つまり入力までの値のテーブルを検索させ、テーブルが関数の定義に従っていることを確認することです。必要なのは、有限シーケンスのエンコード/デコード、およびテーブルのチェックです。エンコード/デコードは多くの教科書で明示的に定義されています。チェックは、テーブルのエントリ間の単純な関係に対して、制限された汎用数量化子によって実行できます。有界普遍数量詞は有界乗算として表すことができますμ
— Kaveh

また、再帰に関する有界乗算の明示的な定義は、教科書にも記載されています。μ
— カヴェー

@Kavehはい、P。スミスの「ゲーデルの定理の紹介」で実装されたのと同じアイデア。最小化演算子のエンコーディングとアプリケーションがそこに与えられています。トリッキーな部分は、名前のとおりに「テーブル」を生成する方法です。スミスはそれをスキップしました。だから、ここで解決策を待つのではなく、もっと厳しく考えなければならないようです;)少なくとも、一般的なアプローチの承認に感謝します。
— アルテムペレニツィン

このテーブルは、ペアリング関数の結果によってエントリがインデックス付けされる有限シーケンスです。R (C 、X 、Y )μc:∀バツ<Len(c)∀y、z<バツ、バツ= <y、z>→c<y、z>=R(c、バツ、y)R(c、バツ、y)の方程式のrhsです。Ack(バツ、y)
— カヴェー

回答:


13

アッカーマン関数を基本演算子にまで分解することは、実際には非常に時間がかかりますが、スケッチは次のとおりです。

再帰的に計算するとき、計算の任意の時点で、フォームA (m 1、A (m 2、… 、A (m k、z )… )の式を扱っていることに注意してください。全単射ペアリング関数P反転し(π 1、π 2)、我々は、この状態を符号化することができ、P (Z 、P (KA(m,x)A(m1,A(m2,…,A(mk,z)…)p(π1,π2)( k = 0の場合はちょうど p (z 、0 ))。次に、状態を指定して、ワンステップ評価関数を定義できます。p(z,p(k,p(mk,…,p(m2,m1)…)p(z,0)k=0

;e(p(z,0))=p(z,0)

;e(p(z,p(k,p(0,c))))=p(z+1,p(k−1,c))

;e(p(0,p(k,p(m+1,c))))=p(1,p(k,p(m,c)))

。e(p(z+1、p(k、p(m+1、c))))=p(z、p(k+1、p(m+1、p(m、c))))

次に、プリミティブ再帰を使用してnステップ評価関数を取得します。

および E (n + 1 、m 、x )= e (E (n 、m 、x ))。E(0、m、バツ)=p(バツ、p(1、m))E(n+1、m、バツ)=e(E(n、m、バツ))

最後に、ラップの周りに-recursion Eを、我々は、フォームの状態を取得する点を見つけるためにPを(Z 、0 ) - ZがあろうA (M 、X )。μEp(z、0)zA(m、バツ)


ありがとう!もう1つの質問(非常に単純で、申し訳ありません):パターンマッチングのような定義(f(0)= ...、f(n + 1)= ...)が広く使用されていますが、 mu-再帰関数の定義。彼らは?
— アルテムペレニツィン

この種のケースの区別(たとえば、をf (0 、y )= g (y )およびf (x + 1 、y )= h (x 、y )で定義することは、特別なケースです実際に以前の値を使用しないプリミティブ再帰の A (x 、y )の計算では、補助関数と逆πをさらに使用しますf(バツ、y)f(0、y)=g(y)f(バツ+1、y)=h(バツ、y)A(バツ、y)あなたが操作の基本セットには、このダウンを破るしたいかなります。π1、π2
— クラウスドレーゲル

たとえば、定義翻訳可能性としてE (複数可)= F 1(π 1(S )、π 2(S ))、ここで、F 1(Z 、0 )= P (Z 、0 )とF 1(Z 、M + 1 )= fは2(Z 、π 1ee(s)=f1(π1(s),π2(s))f1(z,0)=p(z,0)、 fは2 ...あなたのアイデアを得ます。f1(z,m+1)=f2(z,π1(m+1),π2(m+1))f2…
— クラウスドレーゲル

7

これはKavehによって投稿されたアイデアの変形ですが、実際に手を振ることなく、敷物の下に多くの厄介な詳細をスイープできるため、とにかく投稿しています。

重要な事実は、アッカーマン関数のグラフが原始再帰的であることです。A (m 、n )= wを検証するために必要なアッカーマン値のテーブルのコードで、非常に粗雑な原始再帰的境界を見つけることはそれほど難しくありません。鋭い境界線を取得しようとしないでください-粗野な方が簡単です!以下のようなB (M 、N 、W )= 2 M 、W 、WB(m,n,w)A(m,n)=wB(m、n、w)=2mww十分なはずですが、それはコーディングスキームの選択に依存します。テーブル値の検証は境界のある式で記述できるため、プリミティブな再帰的です。

あなたは原始再帰グラフの定義たらアッカーマン関数のを、単に規定A (M 、N )= μ WG(m、n、w)。A(m、n)=μwG(m、n、w)

B(m、n、w)μμ


1
こんにちはフランソワ。cstheoryでお会いできてうれしいです。
— カベ

こんにちは、カベ。ここで何かに答えることができてうれしいです!
— フランソワG.ドライス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.