計算可能性理論において、μ演算子、最小化演算子、または無制限探索演算子は、与えられた性質を持つ最小の自然数を探索します。μ演算子を基本的な再帰関数に加えることで、すべての計算可能な関数を定義することが可能になります。
R ( y , x 1 , ..., x k ) が自然数上の固定された ( k +1) 項関係であると仮定します。μ 演算子 "μ y " は、非有界形式でも有界形式でも、自然数から自然数への「数論的関数」として定義されます。ただし、"μ y " の定義には自然数に関する述語が含まれており、これは条件として考えることができ、述語が満たされている場合は真、満たされていない場合は偽と評価されます。
有界μ演算子は、Kleene (1952) 第IX章「原始再帰関数」、§45「述語、素因数表現」に次のように登場します。
スティーブン・クリーネは、変数yの範囲に対する 6 つの不等式制約、すなわちy < z、y ≤ z、 w < y < z、w < y ≤ z 、w ≤ y < zおよびw ≤ y ≤ z のいずれかが許容されることを指摘しています。「指定された範囲にR ( y ) [が「真」である]ようなyが含まれていない場合、「μ y 」式の値は範囲の基数になります」(p. 226)。これが、上記の定義にデフォルトの「z」が表示される理由です。以下に示すように、有界 μ 演算子「μ y y < z 」は、有限和 Σ および有限積 Π と呼ばれる 2 つの原始再帰関数、テストを実行する述語関数、および{t, f} を {0, 1} に変換する表現関数によって定義されます。
第XI章§57「一般再帰関数」において、クリーネは変数y上の非有界μ演算子を次のように定義している。
この場合、R自体、またはそれを表す関数は、条件が満たされたとき(つまり、真を返したとき)に0を返して、関数は数値yを返します。yには上限が存在しないため、その定義には不等式は現れません。
与えられたR ( y ) に対して、非有界 μ 演算子 μ yR ( y ) (「「 ) は部分関数である。クリーネはそれを全関数として定義した(317ページ参照 )。
非有界μ演算子の完全版は、高階逆算術において次の形式で研究されています。[ 1 ]
ここで、上付き文字は、 nが0次、fが1次、μが2次であることを意味します。この公理は、高次逆算の通常の基礎理論と組み合わせることで、ビッグファイブシステムACA 0を生み出します。
(i)原始再帰関数の文脈において、 μ演算子の探索変数yが有界である場合(例えば、以下の式ではy < z) 、述語Rが原始再帰的である場合(クリーネの証明#E、p.228 )、
(ii)(全)再帰関数の文脈において、探索変数yは無制限であるが、全再帰述語R のパラメータのすべての値x iに対して存在することが保証されている。
すると、5つの基本的な再帰演算子と、無限だが全関数であるμ演算子によって、クリーネが「一般」再帰関数(つまり、6つの再帰演算子によって定義される全関数)と呼んだものが生じる。
(iii)部分再帰関数の文脈において: 関係Rがy、x 1、 ...、x nに対して成り立つのは、 y 、 x 1 、 ...、 x n上で部分再帰関数が定義され、ゼロに等しい場合に限ると仮定します。また、 μ yR ( y 、 x 1、 ...、x k ) が定義され、 yがμ yR ( y、x 1、 ...、x k ) 以下であるときはいつでも、その部分再帰関数が定義されている(ただし、必ずしもゼロに等しいとは限らない)と仮定します。すると、関数 μ yR ( y 、x 1 、 ... 、 x k )も部分再帰関数となります。
μ演算子は、計算可能な関数をμ再帰関数として特徴付けるために使用されます 。
有界μ演算子は、 CASE関数を定義するためにも使用される2つの原始再帰関数(以下「prf」)である項の積Πと項の和Σを用いて、比較的簡単に表現できます(Kleene #B 224ページ参照)。(必要に応じて、変数の境界としてs ≤ t、t < z、5 < x < 17など、任意の値を設定できます)。例:
先に進む前に、述語 R の「表現関数」と呼ばれる関数 ψ を導入する必要があります。関数 ψ は、入力 (t = "真", f = "偽") から出力 (0, 1) へと定義されます (順序に注意してください! )。この場合、ψ への入力、つまり {t, f} は、R の出力から来ています。
クリーネは、μ y y < z R ( y ) が次のように定義されることを示しています。積関数 Π はブール論理 OR 演算子のように動作し、和 Σ はブール論理 AND のように動作しますが、{1, 0} だけでなく {Σ≠0, Σ=0} を生成します。
クリーネが示した例で見ると、この方程式は理解しやすい。彼は表現関数 ψ( R ( y )) のエントリを適当に作った。彼は表現関数をψ( x , y )ではなくχ( y ) と指定した。
非有界μ演算子(関数μy )は、教科書で一般的に定義されているものです。しかし、読者は、なぜ非有界μ演算子が、他の自然数ではなく、ゼロを返す関数R ( x , y )を探しているのか疑問に思うかもしれません。
ゼロになる理由は、無制限演算子μ y が、 μ 演算子が探索するにつれてインデックスyが「大きくなる」ことを許容する関数「積」 Π によって定義されるためです。上記の例で述べたように、数値列 ψ( x , 0) *, ..., * ψ( x , y ) の積 Π x < yは、その要素 ψ( x , i )のいずれかがゼロである場合にゼロになります。
0≤ i≤ sの場合、ψ( x , i ) = 0 となります。したがって、Π はブール論理 AND のように動作します。
関数 μ y は「出力」として単一の自然数y = {0, 1, 2, 3, ...} を生成します。しかし、演算子内部では、次の 2 つの「状況」のいずれかが現れることがあります。(a) 単一の自然数を生成する「数論的関数」χ、または (b) {t = true、f = false} のいずれかを生成する「述語」R。 (そして、部分再帰関数の文脈で、クリーネは後に 3 番目の結果「μ = 未決定」を認めています。[ 2 ] )
クリーネは、無制限μ演算子の定義を分割して、2つの状況(a)と(b)に対応させている。状況(b)では、述語R ( x , y )が積Πにおいて算術的機能を果たすためには、まずその出力{t,f}を表現関数χで「操作」して{0,1}を得なければならない。また、状況(a)では、1つの定義を用いる場合、数論的関数χはμ演算子を「満たす」ためにゼロを生成しなければならない。この問題が解決すると、彼は単一の「証明III」で、タイプ(a)または(b)と5つの原始再帰演算子を組み合わせると、(全)再帰関数が得られることを示している。ただし、全関数には次の但し書きがある。
クリーネはまた、「すべてのxに対してψ( x , y ) となるようなyが存在する」という証明を必要としない第 3 の状況 (c) も認めている。彼はこれを、列挙できるよりも多くの全再帰関数が存在するという証明に用いている。脚注「全関数の証明」を参照。
クリーネの証明は非形式的で、最初の例と似た例を使用していますが、まず彼はμ演算子を、関数χに作用する「項の積」Πを使用する別の形式に変換します。この形式は、任意の自然数である自然数nと、μ演算子のテストが「満たされる」場合には0を生成します。
これは微妙な点です。一見すると、これらの式は原始的な再帰を用いているように見えます。しかし、クリーネは、次のような一般的な形式の基底ステップと帰納ステップを私たちに示していません。
何が起こっているのかを確認するには、まず、すべての変数x iにパラメータ (自然数) を割り当てたことを思い出す必要があります。次に、 y (つまりy' )を反復する後継演算子が動作していることがわかります。そして、関数 μ y y < z χ( y , x ) は、インスタンスが 0 を返すまで、χ( y , x )のインスタンス、つまり χ(0, x ), χ(1, x ), ... を生成していることがわかります。4番目に、インスタンス χ( n , x ) が 0 を返すと、τ の中間項、つまり v = π( x , y' ) が 0 を返します。最後に、中間項v = 0 になると、μ y y < z χ( y ) は行 (iii) を実行して「終了します」。クリーネの式(ii)と(iii)の表現は、(iii)が出口を表しているという点を強調するために入れ替えられています。出口は、探索がχ( y )を満たすy を正常に見つけ、中間の積項 π( x , y' ) が 0 の場合にのみ取られます。その後、演算子は τ( z' , 0, y ) = yで探索を終了します。
例として、クリーネは「( x i , ..., x n ) の任意の固定値を考慮し、 'χ( x i , ..., x n ), y )' に対して単に 'χ( y )'と記述する」と述べています。
Minsky (1967) p. 21 と Boolos-Burgess-Jeffrey (2002) p. 60-61 の両方で、μ 演算子は抽象機械として定義されています。脚注「μ の代替定義」を参照してください。
以下のデモンストレーションは、脚注で言及されている「特異性」を除いたミンスキーのモデルに従います。このデモンストレーションでは、ペアノ公理と原始再帰関数に密接に関連する「後継」カウンタマシンモデルを使用します。このモデルは、(i)命令テーブルと、いわゆる「状態レジスタ」(これを「命令レジスタ」(IR)と改名します)を備えた有限状態マシン、(ii)それぞれが単一の自然数のみを格納できるいくつかの「レジスタ」、および(iii)次の表で説明されている4つの「コマンド」からなる命令セットで構成されています。
最小化演算子 μ y [φ( x , y )]のアルゴリズムは、本質的には、パラメータy (自然数)の値が増加するにつれて関数 φ( x , y )のインスタンスのシーケンスを作成します。このプロセスは、関数 φ( x , y )の出力と事前に設定された数値 (通常は 0) が一致するまで続きます (下記の注記 † を参照)。したがって、φ( x , y ) の評価には、まず、各変数xに自然数を割り当て、レジスタ " w " に「一致番号」(通常は 0) を、レジスタyに数値 (通常は 0)を割り当てる必要があります。
以下では、命令レジスタ (IR) が命令番号 " n " で μ y "ルーチンに遭遇すると仮定します。最初の動作は、専用の " w " レジスタに数値を設定することです。これは、アルゴリズムが終了する前に関数 φ( x , y ) が生成しなければならない数値の「例」です(通常、これは数値 0 ですが、0 以外の数値の使用については脚注を参照してください)。命令 " n +1" でのアルゴリズムの次の動作は、" y " レジスタをクリアすることです。 " y " は 0 から始まる「アップカウンタ」として機能します。次に、命令 " n +2" で、アルゴリズムは関数 φ( x , y ) を評価します (これにはj命令かかると仮定します) 。評価の最後に、φ( x , y ) はその出力をレジスタ "φ" に格納します。 ( n + j + 3) 番目の命令で、アルゴリズムは「 w 」レジスタ内の数値(例えば 0)と「φ」レジスタ内の数値を比較します。両者が同じであれば、アルゴリズムは成功し、exit 命令で終了します。そうでなければ、「 y」レジスタの内容をインクリメントし、この新しい y 値でループバックして、関数 φ( x , y )を再度テストします。
関数が全関数であるためには、他の方法(例えば帰納法)によって、そのパラメータx iのあらゆる組み合わせに対して、ある自然数y がμ 演算子を満たし、計算を表すアルゴリズムが終了できることが証明されなければならない。
これが実際に何を意味するのかの例については、一般的な再帰関数の例を参照してください。最も単純な切り捨て減算アルゴリズム「x - y = d」でさえ、x < yの未定義ケースでは、(1) 終了しない、(2) 数値がない(つまり、フォーマットに問題があり、結果が自然数とみなされない)、または (3) 不正:正しいフォーマットで間違った数値が出力される、といった結果になる可能性があります。「適切な」減算アルゴリズムでは、すべての「ケース」に細心の注意を払う必要があります。
しかし、アルゴリズムがインスタンス {(0, 0), (1, 0), (0, 1), (2, 1), (1, 1), (1, 2)} で期待される出力を生成することが示されたとしても、ケース ( x , y ) = ( n , m )がすべて期待される結果をもたらすことを「説得力のある実証」で示すことができるまでは、不安な気持ちが残ります。クリーネの指摘にあるように、私たちの「実証」(つまり、実証であるアルゴリズム)は、効果的であると見なされるほど説得力があるのでしょうか?
無制限μ演算子はMinsky (1967) p. 210で定義されていますが、特異な欠陥があります。述語(IF-THEN-ELSEテスト)が満たされても、 演算子はt = 0を出力せず、 t = 2を出力します。Minskyのバージョンでは、カウンタは「t」であり、関数φ( t , x )はその数値をレジスタφに格納します。通常のμ定義では、レジスタwには0が格納されますが、Minskyは任意の数値kを格納できると指摘しています。Minskyの命令セットは、次のものと同等です。ここで「JNE」は「等しくない場合はzにジャンプ」を意味します。
無制限μ演算子は、Boolos-Burgess-Jeffrey (2002) p. 60-61 によって、以下の命令セットと同等のカウンタマシンに対しても定義されています。
このバージョンでは、カウンタ「y」は「r2」と呼ばれ、関数f( x , r2)はその数値をレジスタ「r3」に格納します。Boolos-Burgess-Jeffreyがr3をクリアする理由は、ループへの無条件ジャンプを容易にするためかもしれません。これは通常、「0」を格納する専用レジスタ「0」を使用することで実現されます。