§E16.18構文操作の原始再帰性

最終更新

有限列を自然数へ符号化しただけでは、どの列が項または論理式を表すかを判定する手続きはまだ得られていない。本記事では算術言語の構文木を同じ有限列符号で表し、構文判定から証明列検査までを具体的な原始再帰関数と関係として構成する。

1 構文木のタグ

変数をv0,v1,…v_0,v_1,\ldotsと列挙する。次の相異なる標準自然数をタグとして固定する。

タグ123456789構成子VarZeroSuccAddMulEqNegImpAll\begin{array}{c|cccccccccc} \text{タグ}&1&2&3&4&5&6&7&8&9\\ \hline \text{構成子}&\mathrm{Var}&\mathrm{Zero}&\mathrm{Succ}&\mathrm{Add}&\mathrm{Mul} &\mathrm{Eq}&\mathrm{Neg}&\mathrm{Imp}&\mathrm{All} \end{array}

定義 1.1.§E16.17 定義 2.1の有限列符号を用いて、構成子を次の全域関数で表す。

Var⁡(i)=SeqCode⁡(1,i),Zero⁡=SeqCode⁡(2),Succ⁡(t)=SeqCode⁡(3,t),Add⁡(t,u)=SeqCode⁡(4,t,u),Mul⁡(t,u)=SeqCode⁡(5,t,u),Eq⁡(t,u)=SeqCode⁡(6,t,u),NegRaw⁡(y)=SeqCode⁡(7,y),ImpRaw⁡(y,z)=SeqCode⁡(8,y,z),AllRaw⁡(i,y)=SeqCode⁡(9,i,y).\begin{aligned} \operatorname{Var}(i)&=\operatorname{SeqCode}(1,i),\\ \operatorname{Zero}&=\operatorname{SeqCode}(2),\\ \operatorname{Succ}(t)&=\operatorname{SeqCode}(3,t),\\ \operatorname{Add}(t,u)&=\operatorname{SeqCode}(4,t,u),\\ \operatorname{Mul}(t,u)&=\operatorname{SeqCode}(5,t,u),\\ \operatorname{Eq}(t,u)&=\operatorname{SeqCode}(6,t,u),\\ \operatorname{NegRaw}(y)&=\operatorname{SeqCode}(7,y),\\ \operatorname{ImpRaw}(y,z)&=\operatorname{SeqCode}(8,y,z),\\ \operatorname{AllRaw}(i,y)&=\operatorname{SeqCode}(9,i,y). \end{aligned}

自然数yyが項符号 (term code) であるとは、Var、Zero、Succ、Add、Mul の規則から有限回で作られることをいう。自然数yyが論理式符号 (formula code) であるとは、項符号t,ut,uに対する Eq(t,u)(t,u)から始め、NegRaw、ImpRaw、AllRaw により有限回で作られることをいう。

各構成子は Cons、固定長の有限列、および定数との合成なので原始再帰的である。定数タグを関数として用いる箇所では、単項ダミー定数関数Cc(x)=cC_c(x)=cを用いる。零項の自然数関数を初期関数へ追加したわけではない。

補題 1.2. 次の二つが成り立つ。

  1. 構文符号yyの直下に現れる項または論理式の符号uuはu<yu<yを満たす。変数添字も、それを含む Var 符号より小さい。
  2. 項符号または論理式符号yyに自由に現れる変数の添字iiはi<yi<yを満たす。これはyyの直下に現れる添字だけでなく、入れ子の任意の深さに現れる自由な添字について成り立つ。

証明.(1)を示す。uuはyyを表す右入れ子の Cons 列の成分である。Cons⁡(a,t)=1+pair⁡(a,t)\operatorname{Cons}(a,t)=1+\operatorname{pair}(a,t)であり、pair⁡(a,t)≥a,t\operatorname{pair}(a,t)\ge a,tなので、各成分と各尾は Cons 全体より小さい。外側のタグを含む Cons について同じ評価を行えばu<yu<yを得る。Var の添字についても同じである。

(2)を、yyの構成に関する帰納法で示す。(1)は直下の一段しか述べていないので、入れ子の深さについての帰納法をここで別に行う。y=Var⁡(j)y=\operatorname{Var}(j)では、自由に現れる添字はjjだけであり、(1)によりj<yj<yである。y=Zero⁡y=\operatorname{Zero}では自由に現れる添字が無い。 Succ、Add、Mul、Eq、NegRaw、ImpRaw では、yyに自由に現れる添字iiは直下の対象uuのいずれかに自由に現れるので、帰納法の仮定によりi<ui<uであり、(1)のu<yu<yと合わせてi<yi<yである。y=AllRaw⁡(j,z)y=\operatorname{AllRaw}(j,z)では、yyに自由に現れる添字iiはi≠ji\ne jを満たしzzに自由に現れるので、同じくi<z<yi<z<yである。▨

2 項、論理式、文の判定

定義 2.1. Term⁡(y)\operatorname{Term}(y) (term-code predicate) は、yyの長さと各成分を調べ、次のいずれかが成り立つことを表す。

  1. y=Var⁡(i)y=\operatorname{Var}(i)である。
  2. y=Zero⁡y=\operatorname{Zero}である。
  3. y=Succ⁡(t)y=\operatorname{Succ}(t)かつTerm⁡(t)\operatorname{Term}(t)である。
  4. y=Add⁡(t,u)y=\operatorname{Add}(t,u)またはy=Mul⁡(t,u)y=\operatorname{Mul}(t,u)であり、Term⁡(t)\operatorname{Term}(t)かつTerm⁡(u)\operatorname{Term}(u)である。

Formula⁡(y)\operatorname{Formula}(y) (formula-code predicate) は次のいずれかが成り立つことを表す。

  1. y=Eq⁡(t,u)y=\operatorname{Eq}(t,u)かつTerm⁡(t)\operatorname{Term}(t)かつTerm⁡(u)\operatorname{Term}(u)である。
  2. y=NegRaw⁡(z)y=\operatorname{NegRaw}(z)かつFormula⁡(z)\operatorname{Formula}(z)である。
  3. y=ImpRaw⁡(z,w)y=\operatorname{ImpRaw}(z,w)かつFormula⁡(z)\operatorname{Formula}(z)かつFormula⁡(w)\operatorname{Formula}(w)である。
  4. y=AllRaw⁡(i,z)y=\operatorname{AllRaw}(i,z)かつFormula⁡(z)\operatorname{Formula}(z)である。

Free⁡(y,i)\operatorname{Free}(y,i) (free-variable predicate) は、論理式または項yyに変数viv_iが自由に現れることを表す。 Sentence⁡(y)\operatorname{Sentence}(y) (sentence-code predicate) は

Formula⁡(y)∧∀i≤y ¬Free⁡(y,i)\operatorname{Formula}(y)\land \forall i\le y\,\neg\operatorname{Free}(y,i)

と定める。

Free の再帰節は通常の構文定義そのものである。Var(j)(j)ではi=ji=j、Zero では偽、関数構成子と Eq、NegRaw、ImpRaw では直下の対象の選言を取る。 AllRaw(j,z)(j,z)ではi=ji=jなら偽、i≠ji\ne jなら Free(z,i)(z,i)とする。viv_iがyyに自由に現れるなら補題 1.2 (2)によりi<yi<yなので、Sentence の有界全称量化はすべての候補を調べている。

定理 2.2. Term、Formula、Free、Sentence は正のアリティをもつ原始再帰関係である。

証明. Len、Entry、等号、有限の場合分けは原始再帰的である。 Term、Formula、Free を一つの有限分岐評価へ具体化する。要求の種類を

Req⁡T(y),Req⁡F(y),Req⁡free(y,i)\operatorname{Req}_{\rm T}(y),\qquad \operatorname{Req}_{\rm F}(y),\qquad \operatorname{Req}_{\rm free}(y,i)

の三つとし、階数をいずれもyyとする。Term 要求では Succ に一つ、Add と Mul に二つの Term 要求を子として割り当てる。Formula 要求では Eq に二つの Term 要求、NegRaw に一つの Formula 要求、 ImpRaw に二つの Formula 要求、AllRaw に一つの Formula 要求を割り当てる。Free 要求では、Var と Zero は子をもたず、各一項構成子に一つ、各二項構成子に二つの同じ添字iiをもつ Free 要求を割り当てる。 AllRaw(j,z)(j,z)ではi=ji=jなら子をもたず偽を返し、i≠ji\ne jなら Reqfree(z,i)_{\rm free}(z,i)を唯一の子とする。親の結合関数はタグに応じて、子の特性値の連言または選言を取る。不正なタグでは子をもたず偽を返す。

子の個数は高々22であり、すべての子の第1成分は補題 1.2 (1)によりyyより小さい。要求の生成と親での結合は Len、Entry、等号、および有限の場合分けから原始再帰的である。したがって§E16.17 補題 3.2をK=2K=2で適用することができる。この適用では、 Eq の二つの Term 値、Add、Mul、ImpRaw の左右二つの値を同じ親が実際に受け取るため、一つの子の値だけを読む再帰に置き換えてはいない。

Sentence は Formula、Free、およびi≤yi\le yの有界全称量化の合成である。原始再帰関係は有界量化について閉じているため Sentence も原始再帰的である。▨

3 数詞と捕獲回避代入

定義 3.1 (数詞符号).

Num⁡(0)=Zero⁡,Num⁡(n+1)=Succ⁡(Num⁡(n))\operatorname{Num}(0)=\operatorname{Zero}, \qquad \operatorname{Num}(n+1)=\operatorname{Succ}(\operatorname{Num}(n))

と定める。Num⁡\operatorname{Num}を 数詞符号関数 (numeral-code function) という。Num(n)(n)は数詞n‾\overline nの項符号である。

Num はパラメータ列が空の原始再帰である。基底は自然数 Zero であり、再帰引数nnが残るため Num は一変数関数である。

捕獲を避けるため、束縛変数の改名を記録する環境を用いる。環境EEはpair⁡(i,j)\operatorname{pair}(i,j)の有限列であり、最も左にあるpair⁡(i,j)\operatorname{pair}(i,j)を、現在有効な束縛viv_iの新しい名前vjv_jと読む。第1成分がiiである成分が一つも無ければ、viv_iを未束縛とする。この走査を行う関数をLook⁡\operatorname{Look}と書き、その原始再帰的定義列を次の一つに固定する。下流の記事は、原始再帰性だけでなく、この定義列が満たす等式を対象理論の内部で用いるからである。

定義 3.2 (環境の走査). 環境検索関数 (environment-lookup function)Look⁡(E,i)\operatorname{Look}(E,i)を、第2引数iiをパラメータとし、第1引数EEを再帰引数とする次のコース再帰で定める。

Look⁡(0,i)=0,Look⁡(E,i)={Sright⁡(Head⁡(E))left⁡(Head⁡(E))=i,Look⁡(Tail⁡(E),i)それ以外(0<E)\operatorname{Look}(0,i)=0, \qquad \operatorname{Look}(E,i)= \begin{cases} S\operatorname{right}(\operatorname{Head}(E)) &\operatorname{left}(\operatorname{Head}(E))=i,\\ \operatorname{Look}(\operatorname{Tail}(E),i)&\text{それ以外} \end{cases} \quad(0<E)

ここでleft⁡\operatorname{left}とright⁡\operatorname{right}は§E16.17 補題 1.2の対関数の逆、Head⁡\operatorname{Head}とTail⁡\operatorname{Tail}は§E16.17 定義 2.1の先頭と尾である。

§E16.17 補題 1.2のleft⁡(pair⁡(i,j))=i\operatorname{left}(\operatorname{pair}(i,j))=iとright⁡(pair⁡(i,j))=j\operatorname{right}(\operatorname{pair}(i,j))=jにより、Look⁡(E,i)\operatorname{Look}(E,i)は、EEの成分を先頭から順に調べ、第1成分がiiに一致する最初の成分pair⁡(i,j)\operatorname{pair}(i,j)についてその第2成分jjの後続者SjSjを返し、一致する成分が一つも無ければ00を返す。したがって「EEがiiの対応先をもつ」ことはLook⁡(E,i)≠0\operatorname{Look}(E,i)\ne0と同値であり、そのときの対応先はLook⁡(E,i)=Sj\operatorname{Look}(E,i)=Sjを満たすjjである。とくにLook⁡(0,i)=0\operatorname{Look}(0,i)=0であり、Cons⁡(p,E)\operatorname{Cons}(p,E)の先頭と尾がppとEEであることから、Look⁡(Cons⁡(pair⁡(i′,j),E),i)\operatorname{Look}\bigl(\operatorname{Cons}(\operatorname{pair}(i',j),E),i\bigr)はi′=ii'=iのときSjSj、i′≠ii'\ne iのときLook⁡(E,i)\operatorname{Look}(E,i)に等しい。§E16.17 命題 2.2により0<E0<EのときTail⁡(E)<E\operatorname{Tail}(E)<Eが成り立つので、この再帰は§E16.17 補題 3.1の形であり、Look⁡\operatorname{Look}は正のアリティをもつ原始再帰全関数である。

定義 3.3. WalkTerm⁡(y,v,t,E)\operatorname{WalkTerm}(y,v,t,E)とWalkFormula⁡(y,v,t,E)\operatorname{WalkFormula}(y,v,t,E) (capture-avoiding substitution functions) を次の構文再帰で定める。

  1. Var(i)(i)では、Look⁡(E,i)≠0\operatorname{Look}(E,i)\ne0ならばLook⁡(E,i)=Sj\operatorname{Look}(E,i)=Sjを満たすjjについて Var(j)(j)を返す。Look⁡(E,i)=0\operatorname{Look}(E,i)=0かつi=vi=vならtt、Look⁡(E,i)=0\operatorname{Look}(E,i)=0かつi≠vi\ne vなら Var(i)(i)を返す。
  2. Zero は Zero を返し、Succ、Add、Mul、Eq、NegRaw、ImpRaw は直下の対象へ同じ操作を適用して再構成する。
  3. AllRaw(i,z)(i,z)では、次の三つがすべて成り立つときに限り j=1+y+t+E+v+ij=1+y+t+E+v+i とし、それ以外の場合はj=ij=iとする。第1条件はLook⁡(E,v)=0\operatorname{Look}(E,v)=0であること、すなわちこの量化子より外側にvvv_vを束縛する量化子が無いことである。第2条件はi≠vi\ne vであることである。第3条件は、viv_iがttに自由に現れ、かつvvv_vがzzに自由に現れることである。改名を発動する場合と発動しない場合のいずれにおいても、pair(i,j)(i,j)をEEの先頭へ追加し、元の真部分符号zzを一度だけ再帰的に処理して AllRaw(j,−)(j,-)を返す。

一般の項符号ttによる代入を

SubTermCode⁡(y,v,t)={WalkTerm⁡(y,v,t,0)Term⁡(y)∧Term⁡(t),WalkFormula⁡(y,v,t,0)Formula⁡(y)∧Term⁡(t),0それ以外\operatorname{SubTermCode}(y,v,t)= \begin{cases} \operatorname{WalkTerm}(y,v,t,0)&\operatorname{Term}(y)\land\operatorname{Term}(t),\\ \operatorname{WalkFormula}(y,v,t,0)&\operatorname{Formula}(y)\land\operatorname{Term}(t),\\ 0&\text{それ以外} \end{cases}

とする。下流で用いる数詞代入 API は

Sub⁡(y,v,n)=SubTermCode⁡(y,v,Num⁡(n))\operatorname{Sub}(y,v,n) =\operatorname{SubTermCode}(y,v,\operatorname{Num}(n))

である。

選んだjjはy,t,E,v,iy,t,E,v,iより大きい。構文中のすべての変数添字はその構文符号より小さいので、vjv_jは対象yyと代入項ttのいずれにも現れない。環境EEについては、pair⁡\operatorname{pair}が両引数以上の値を返し、Cons⁡\operatorname{Cons}が両引数より大きい値を返すことを用いる。EEは右入れ子の Cons 列であるから、その各成分ppはp<Ep<Eを満たす。成分p=pair⁡(k,k′)p=\operatorname{pair}(k,k')に現れる添字はk,k′≤pk,k'\le pを満たすので、k,k′<E<jk,k'<E<jである。よってvjv_jは対象、代入項、現在の環境のいずれにも現れない新鮮変数である。環境を先頭から調べるので、同名の量化子が入れ子になった場合には最も内側の束縛が優先される。

改名の条件に第1条件と第2条件を置くのは、その量化子の下で実際に代入が起こる場合に限って改名するためである。第2条件が破れる場合、すなわちi=vi=vの場合、vvv_vは AllRaw(i,z)(i,z)に自由に現れず、この部分符号のどこにもttは入らない。第1条件が破れる場合、すなわち外側にすでにvvv_vの束縛がある場合も、zzに現れるvvv_vはその束縛に属するのでttは入らない。どちらの場合にも捕獲は起こり得ないので、改名は不要である。これらの場合にも pair(i,j)(i,j)をj=ij=iとして環境へ追加するため、i=vi=vのときは更新後の環境E′=Cons⁡(pair⁡(i,i),E)E'=\operatorname{Cons}(\operatorname{pair}(i,i),E)についてLook⁡(E′,v)\operatorname{Look}(E',v)がSiSiを返し、zzの中のvvv_vは代入対象ではなく束縛出現として扱われる。i=vi=vのときに改名を発動させると、AllRaw⁡(i,z)\operatorname{AllRaw}(i,z)を返すべき場合にAllRaw⁡(j,−)\operatorname{AllRaw}(j,-)(j≠ij\ne i)を返すことになり、代入対象が自由に現れない論理式を代入が変えないという性質が破れる。

定理 3.4. Num、SubTermCode、および Sub は正のアリティをもつ原始再帰全関数である。整形式入力では SubTermCode が名前付き構文に対する捕獲回避代入の符号を返し、Sub(y,v,n)(y,v,n)は自由なvvv_vへ数詞n‾\overline nを代入した符号を返す。

証明. Num は表示した通常の原始再帰で得る。環境の走査Look⁡\operatorname{Look}は、定義 3.2が固定したとおり、0<E0<EについてTail⁡(E)<E\operatorname{Tail}(E)<Eを減少量とするコース再帰であり、§E16.17 補題 3.1により原始再帰的である。親節で用いるHead⁡\operatorname{Head}、left⁡\operatorname{left}、right⁡\operatorname{right}、等号判定、および有限の場合分けはいずれも原始再帰的である。新鮮変数jjの計算、環境への Cons、Free の判定、および各構成子も原始再帰的である。

WalkTerm と WalkFormula を

Req⁡WT(y,v,t,E),Req⁡WF(y,v,t,E)\operatorname{Req}_{\rm WT}(y,v,t,E),\qquad \operatorname{Req}_{\rm WF}(y,v,t,E)

という二種類の要求として、階数yy、最大子数K=2K=2の有限分岐評価へ移す。 Succ、NegRaw、AllRaw は一つ、Add、Mul、Eq、ImpRaw は左右二つの要求を子にもつ。二項構成子の左右の子は同じv,t,Ev,t,Eを受け取り、親の結合関数は返った二つの値から構成子を再構成する。 AllRaw(i,z)(i,z)では、表示した原始再帰的な場合分けでjjを計算する。改名を発動させる三条件は、Look⁡(E,v)=0\operatorname{Look}(E,v)=0という零判定、i≠vi\ne vという等号判定、および Free の二つの判定の連言である。Look⁡\operatorname{Look}は上で見たとおり原始再帰的であり、等号判定と零判定は原始再帰的で、Free は定理 2.2により原始再帰的である。したがって、この場合分けを加えても親節は原始再帰関数の合成のままであり、原始再帰性は壊れない。このjjから

E′=Cons⁡(pair⁡(i,j),E)E'=\operatorname{Cons}(\operatorname{pair}(i,j),E)

を作り、ReqWF(z,v,t,E′)_{\rm WF}(z,v,t,E')を唯一の子とする。親はその子の値bbから AllRaw(j,b)(j,b)を返す。したがって、再帰的に呼び出される第1成分は常に元の構文yyの真部分符号である一方、補助環境は親のEEではなく更新済みのE′E'でよい。改名後の構文全体を再帰引数にしないため、z<yz<yという階数の減少も保たれる。

要求の生成と親の結合は原始再帰的であるから、§E16.17 補題 3.2を適用すると、有限スタックの接頭トレースを長さに関する通常の原始再帰で作ることができる。これにより、二つの子の値と再帰呼出しごとの環境変更をともに扱った WalkTerm と WalkFormula が原始再帰的になる。不正入力を零判定と場合分けで00へ送れば全域性も保たれる。

正しさは元の構文yyに関する構造帰納法で示す。変数の場合、環境にある変数は束縛出現として改名され、環境にないvvv_vだけがttへ置き換わる。各関数・論理結合子では帰納法の仮定を各直下の対象へ適用する。例えば Add と ImpRaw では、左右二つの子要求がそれぞれの変換値を返し、親がその二値を同じ構成子へ戻す。量化子∀vi θ\forall v_i\,\thetaでは、改名の三条件のいずれかが破れる場合に名前を保つ。外側にすでにvvv_vの束縛がある場合(第1条件が破れる場合)とi=vi=vの場合(第2条件が破れる場合)には、θ\thetaの中のvvv_vの出現がすべて束縛出現でありttが入らないので、捕獲は起こり得ない。束縛変数がttに自由に現れない場合、または置換対象が本体に自由に現れない場合(第3条件が破れる場合)も同様である。捕獲が実際に起こり得る場合だけ、どこにも現れないvjv_jへ束縛とその束縛出現を同時に改名するため、ttの自由変数は捕獲されない。同名の量化子∀vi∀vi θ\forall v_i\forall v_i\,\thetaでは、内側で追加した pair(i,j′)(i,j')が環境の先頭にあり、外側の pair(i,j)(i,j)を遮断する。さらにLook⁡(E,v)=0\operatorname{Look}(E,v)=0、i≠vi\ne v、viv_iがttに自由に現れ、vvv_vがθ\thetaに自由に現れる∀vi θ\forall v_i\,\thetaでは、子要求だけがE′E'を受け取るため、結果は∀vj θ′\forall v_j\,\theta'となり、ttに由来する自由なviv_iは束縛されない。よって得た符号は捕獲回避代入の結果である。▨

4 否定、含意、公理例

定義 4.1 (全域構文操作 Neg と Imp).

Neg⁡(y)={NegRaw⁡(y)Formula⁡(y),0それ以外,Imp⁡(y,z)={ImpRaw⁡(y,z)Formula⁡(y)∧Formula⁡(z),0それ以外.\begin{aligned} \operatorname{Neg}(y)&= \begin{cases}\operatorname{NegRaw}(y)&\operatorname{Formula}(y),\\0&\text{それ以外},\end{cases}\\ \operatorname{Imp}(y,z)&= \begin{cases}\operatorname{ImpRaw}(y,z)&\operatorname{Formula}(y)\land\operatorname{Formula}(z),\\0&\text{それ以外}.\end{cases} \end{aligned}

Neg⁡\operatorname{Neg}を 全域否定符号関数 (total negation-code function)、Imp⁡\operatorname{Imp}を 全域含意符号関数 (total implication-code function) という。

Neg と Imp は構成子、構文判定、および有限の場合分けの合成なので原始再帰全関数である。

算術言語LAL_Aの Hilbert 型体系をここで局所的に固定する。論理式符号a,b,ca,b,cに対する命題公理は、次の三つの構文木パターンである。

H1(a,b)=ImpRaw⁡(a,ImpRaw⁡(b,a)),H2(a,b,c)=ImpRaw⁡(ImpRaw⁡(a,ImpRaw⁡(b,c)),ImpRaw⁡(ImpRaw⁡(a,b),ImpRaw⁡(a,c))),H3(a,b)=ImpRaw⁡(ImpRaw⁡(NegRaw⁡(b),NegRaw⁡(a)),ImpRaw⁡(a,b)).\begin{aligned} \mathrm{H1}(a,b)&=\operatorname{ImpRaw}(a,\operatorname{ImpRaw}(b,a)),\\ \mathrm{H2}(a,b,c)&=\operatorname{ImpRaw}\bigl( \operatorname{ImpRaw}(a,\operatorname{ImpRaw}(b,c)), \operatorname{ImpRaw}(\operatorname{ImpRaw}(a,b),\operatorname{ImpRaw}(a,c))\bigr),\\ \mathrm{H3}(a,b)&=\operatorname{ImpRaw}\bigl( \operatorname{ImpRaw}(\operatorname{NegRaw}(b),\operatorname{NegRaw}(a)), \operatorname{ImpRaw}(a,b)\bigr). \end{aligned}

連言と双条件を原始構成子へ展開する符号を

AndCode⁡(a,b)=NegRaw⁡(ImpRaw⁡(a,NegRaw⁡(b))),IffCode⁡(a,b)=AndCode⁡(ImpRaw⁡(a,b),ImpRaw⁡(b,a))\begin{aligned} \operatorname{AndCode}(a,b) &=\operatorname{NegRaw}(\operatorname{ImpRaw}(a,\operatorname{NegRaw}(b))),\\ \operatorname{IffCode}(a,b) &=\operatorname{AndCode}(\operatorname{ImpRaw}(a,b),\operatorname{ImpRaw}(b,a)) \end{aligned}

と定める。またe0=Eq⁡(Zero⁡,Zero⁡)e_0=\operatorname{Eq}(\operatorname{Zero},\operatorname{Zero})と置き、空連言の符号を

Top⁡A=ImpRaw⁡(e0,e0)\operatorname{Top}_A=\operatorname{ImpRaw}(e_0,e_0)

に固定する。したがって、零項関数00の合同公理でも空連言を省略せず、この一つの符号を前件として用いる。

項ttが論理式φ\varphiの変数viv_iへ自由に代入可能であることを FreeFor(t,i,φ)(t,i,\varphi)と書く。原子式では真とし、否定と含意では直下の論理式の条件を取る。∀vjψ\forall v_j\psiでは、j=ij=iなら真、j≠ij\ne iなら

FreeFor⁡(t,i,ψ)∧(¬Free⁡(ψ,i)∨¬Free⁡(t,j))\operatorname{FreeFor}(t,i,\psi)\land \bigl(\neg\operatorname{Free}(\psi,i)\lor\neg\operatorname{Free}(t,j)\bigr)

とする。この判定を Reqff(t,i,φ)_{\rm ff}(t,i,\varphi)という要求で表し、階数をφ\varphiの符号とする。否定と量化には高々一つ、含意には左右二つの子要求を割り当て、親で表示した連言を取る。子の論理式符号は真部分符号として階数を真に減らすので、§E16.17 補題 3.2をK=2K=2で適用することができる。したがって FreeFor も原始再帰的である。

以下で (H1)–(H3)、(Q1)、(Q2) と書くのは§E16.10 定義 1.1が定めた一階 Hilbert 系の論理公理スキーマであり、Robinson 算術QQの公理 (Q1)–(Q7) とは別のものである。名前が重なるのは量化子の二つの公理スキーマだけなので、以下ではこれらを全称具体化の公理 (Q1) と全称分配の公理 (Q2) と呼び、どちらの体系の公理であるかを明示する。

定義 4.2. LogAx⁡(y)\operatorname{LogAx}(y) (logical-axiom instance predicate) は、以下の有限個のコードパターンのいずれかへ一致することを表す。表示する小文字の式符号には Formula、項符号には Term を要求し、同じ文字を置いた位置では同じ自然数符号を要求する。

  1. y=H1(a,b)y=\mathrm{H1}(a,b)、y=H2(a,b,c)y=\mathrm{H2}(a,b,c)、またはy=H3(a,b)y=\mathrm{H3}(a,b)である。
  2. 次の三つをすべて満たすi,t,a,b≤yi,t,a,b\le yが存在する。 y=ImpRaw⁡(AllRaw⁡(i,a),b),FreeFor⁡(t,i,a),b=SubTermCode⁡(a,i,t)y=\operatorname{ImpRaw}(\operatorname{AllRaw}(i,a),b), \quad \operatorname{FreeFor}(t,i,a), \quad b=\operatorname{SubTermCode}(a,i,t) これは全称具体化の公理 (Q1) の∀viφ→φ[vi:=t]\forall v_i\varphi\to\varphi[v_i:=t]を表す。
  3. 次の等式と¬Free⁡(a,i)\neg\operatorname{Free}(a,i)をともに満たすi,a,b≤yi,a,b\le yが存在する。 y=ImpRaw⁡(AllRaw⁡(i,ImpRaw⁡(a,b)),ImpRaw⁡(a,AllRaw⁡(i,b)))y=\operatorname{ImpRaw}\bigl( \operatorname{AllRaw}(i,\operatorname{ImpRaw}(a,b)), \operatorname{ImpRaw}(a,\operatorname{AllRaw}(i,b))\bigr) これは全称分配の公理 (Q2) を表す。
  4. y=Eq⁡(t,t)y=\operatorname{Eq}(t,t)を満たす項符号ttが存在する。
  5. 0,S,+,×0,S,+,\timesの合同公理として、次のいずれかである。 y=ImpRaw⁡(Top⁡A,Eq⁡(Zero⁡,Zero⁡)),y=ImpRaw⁡(Eq⁡(t,u),Eq⁡(Succ⁡(t),Succ⁡(u))),y=ImpRaw⁡(AndCode⁡(Eq⁡(t1,u1),Eq⁡(t2,u2)),Eq⁡(Add⁡(t1,t2),Add⁡(u1,u2))),y=ImpRaw⁡(AndCode⁡(Eq⁡(t1,u1),Eq⁡(t2,u2)),Eq⁡(Mul⁡(t1,t2),Mul⁡(u1,u2))).\begin{aligned} y={}&\operatorname{ImpRaw}(\operatorname{Top}_A, \operatorname{Eq}(\operatorname{Zero},\operatorname{Zero})),\\ y={}&\operatorname{ImpRaw}(\operatorname{Eq}(t,u), \operatorname{Eq}(\operatorname{Succ}(t),\operatorname{Succ}(u))),\\ y={}&\operatorname{ImpRaw}\bigl( \operatorname{AndCode}(\operatorname{Eq}(t_1,u_1),\operatorname{Eq}(t_2,u_2)), \operatorname{Eq}(\operatorname{Add}(t_1,t_2),\operatorname{Add}(u_1,u_2))\bigr),\\ y={}&\operatorname{ImpRaw}\bigl( \operatorname{AndCode}(\operatorname{Eq}(t_1,u_1),\operatorname{Eq}(t_2,u_2)), \operatorname{Eq}(\operatorname{Mul}(t_1,t_2),\operatorname{Mul}(u_1,u_2))\bigr). \end{aligned}
  6. 等号を二項関係として扱う合同公理 y=ImpRaw⁡(AndCode⁡(Eq⁡(t1,u1),Eq⁡(t2,u2)),IffCode⁡(Eq⁡(t1,t2),Eq⁡(u1,u2)))y=\operatorname{ImpRaw}\bigl( \operatorname{AndCode}(\operatorname{Eq}(t_1,u_1),\operatorname{Eq}(t_2,u_2)), \operatorname{IffCode}(\operatorname{Eq}(t_1,t_2),\operatorname{Eq}(u_1,u_2))\bigr) である。

(2)では Term(t)(t)、(4)から(6)では表示したすべての項符号に Term を要求する。各場合で最外タグ、有限列の長さ、各成分、および必要な同一性を照合するので、ここに表示していない公理スキーマは LogAx に含めない。

命題 4.3. LogAx は原始再帰関係である。

証明. H1–H3 は三つ、全称分配の公理 (Q2) は一つの構文木パターンであり、構成子タグ、固定された有限列の長さ、および繰り返し現れる成分符号の等号を有限回検査すればよい。全称分配の公理 (Q2) の変数条件は、原始再帰関係 Free の否定である。

全称具体化の公理 (Q1) ではi,a,bi,a,bをyyの成分から取得し、候補項t≤yt\le yを有界探索する。viv_iがaaに自由に現れる場合、置換結果bbにttが部分項として現れるのでt<yt<yである。viv_iが自由に現れない場合は置換結果がaaと一致する。この場合、aaの原子部分式に現れる任意の項を候補に取ることができ、その項符号はaaの真部分符号なのでyyより小さい。したがって有界探索はすべての場合を含む。各候補について Term(t)(t)、FreeFor(t,i,a)(t,i,a)、およびb=SubTermCode⁡(a,i,t)b=\operatorname{SubTermCode}(a,i,t)を検査する。FreeFor は、最大二個の真部分式へ進む直前の有限分岐コース再帰で構成されており、Formula、Free、および有限の場合分けだけを親節で用いるため原始再帰的である。

LAL_Aの非論理記号は0,S,+,×0,S,+,\timesの四個で、項数はそれぞれ0,1,2,20,1,2,2に固定されている。反射律、四つの関数合同、および一つの等号関係合同は、定義に列挙した有限個のパターンだけである。AndCode、IffCode、TopA_Aは固定構成子の合成であり、零項の場合にも追加の探索を要しない。各項位置の Term と構文上の等号を検査すればよい。

原始再帰関係は有限選言、有限連言、否定、および有界存在量化について閉じている。以上の全場合を有限選言で結ぶと LogAx が原始再帰的になる。▨

上の証明が与えた構成を、LogAx⁡\operatorname{LogAx}の原始再帰的定義列として次の一つに固定する。下流の記事は、原始再帰性だけでなく、この定義列が満たす等式を対象理論の内部で用いるからである。

定義 4.4 (論理公理例の判定の原始再帰的定義列).定義 4.2が並べた6節のそれぞれについて、命題 4.3の証明が挙げた検査、すなわち構成子タグと有限列の長さと各成分の照合、繰り返し現れる成分符号の等号、Formula⁡\operatorname{Formula}、Term⁡\operatorname{Term}、Free⁡\operatorname{Free}、FreeFor⁡\operatorname{FreeFor}、SubTermCode⁡\operatorname{SubTermCode}の値による条件、およびyyで押さえた有界探索の合成として、その節への一致を表す関係の特性関数を定める。Formula⁡\operatorname{Formula}は、同定義が冒頭で表示する小文字の式符号へ課す検査であり、定義 4.2 (1)から定義 4.2 (3)のa,b,ca,b,cがこれにあたる。定義列は、これら6個の特性関数の定義列を節の番号の順に並べ、最終段でそれらの有限選言を取るものとする。この定義列を 論理公理例判定の原始再帰的定義列 (primitive-recursive definition sequence for logical-axiom instances) という。

最終段は、6節のいずれかへの一致からLogAx⁡(y)\operatorname{LogAx}(y)を導く合成の等式を与える。個別に与えた符号についてLogAx⁡\operatorname{LogAx}の成立を対象理論の内部で示す議論は、当該の節の条件を確かめたうえで、この最終段の等式を用いる。

5 導出と証明列

証明の一行を

Line⁡(k,y,p,q,i)=SeqCode⁡(k,y,p,q,i)\operatorname{Line}(k,y,p,q,i)=\operatorname{SeqCode}(k,y,p,q,i)

と符号化する。kkは規則タグ、yyはその行の論理式、p,qp,qは先行行の添字、iiは一般化する変数の添字である。規則タグを1=1=LogAx、2=2=理論公理、3=3=modus ponens、4=4=一般化と固定する。未使用欄には00を入れる。Line の各成分取得は原始再帰的である。

定義 5.1.A(y)A(y)を原始再帰的な述語とし、A(y)→Sentence⁡(y)A(y)\to\operatorname{Sentence}(y)をすべてのyyについて仮定する。有限列PPの第rr成分ℓr\ell_rが長さ55の Line 符号であることを要求し、その五成分を

ℓr=Line⁡(kr,yr,pr,qr,ir)\ell_r=\operatorname{Line}(k_r,y_r,p_r,q_r,i_r)

とする。一般化行の変数条件を表す有界述語を

GenOK⁡A(P,r,i)⟺∀s<r (ks=2→¬Free⁡(ys,i))\operatorname{GenOK}_A(P,r,i)\quad\Longleftrightarrow\quad \forall s<r\,(k_s=2\to\neg\operatorname{Free}(y_s,i))

と定める。ProofSeq⁡A(P)\operatorname{ProofSeq}_A(P) (proof-sequence predicate) は、各r<Len⁡(P)r<\operatorname{Len}(P)について Formula(yr)(y_r)かつ、行ℓr\ell_rが次のいずれかのタグ付きパターンへ一致することを表す。

  1. kr=1k_r=1、LogAx(yr)(y_r)、pr=qr=ir=0p_r=q_r=i_r=0である。
  2. kr=2k_r=2、A(yr)A(y_r)、pr=qr=ir=0p_r=q_r=i_r=0である。
  3. kr=3k_r=3、pr,qr<rp_r,q_r<r、ir=0i_r=0であり、次の二つの等式をともに満たす論理式符号aaが存在する。 ypr=ImpRaw⁡(a,yr),yqr=ay_{p_r}=\operatorname{ImpRaw}(a,y_r), \qquad y_{q_r}=a
  4. kr=4k_r=4、pr<rp_r<r、qr=0q_r=0、yr=AllRaw⁡(ir,ypr)y_r=\operatorname{AllRaw}(i_r,y_{p_r})、および GenOKA(P,r,ir)_A(P,r,i_r)が成り立つ。

末尾関数を

End⁡(P)={yLen⁡(P)−1Len⁡(P)>0,0Len⁡(P)=0\operatorname{End}(P)= \begin{cases} y_{\operatorname{Len}(P)-1}&\operatorname{Len}(P)>0,\\ 0&\operatorname{Len}(P)=0 \end{cases}

とする。Deriv⁡A(P,y)\operatorname{Deriv}_A(P,y) (derivation predicate) はProofSeq⁡A(P)∧End⁡(P)=y\operatorname{ProofSeq}_A(P)\land\operatorname{End}(P)=yと定める。

LogAx の行は論理公理であり、一般化規則の前提依存条件へ入らない。タグ22の行だけが理論AAに由来するが、A(y)→Sentence⁡(y)A(y)\to\operatorname{Sentence}(y)なので、任意のiiについて¬Free⁡(y,i)\neg\operatorname{Free}(y,i)である。したがって GenOKA_Aは本記事の対象では常に成り立つ。この有界条件を第4のタグパターンに明示したことにより、一般化条件を省略したのではなく、文公理だけからなる理論証明へ特殊化したことをコード上でも確認することができる。

本記事の ProofSeqA_Aは、文公理をもつ理論における定理証明だけを扱う。自由変数を含む任意の仮定からの導出には、各行の依存前提集合を符号化する別の API が必要であり、本記事ではその拡張を定義しない。

定理 5.2. Term、Formula、Sentence、Free、FreeFor、Sub、Neg、Imp、LogAx、GenOKA_A、および End は原始再帰的である。さらにAAが原始再帰的な文符号の述語なら ProofSeqA_Aと DerivA_Aも原始再帰的である。不正な自然数に対して、構文述語は偽、構文を返す関数と End は00を返す。

証明. Term、Formula、Sentence、Free は定理 2.2、FreeFor はその直前のコース再帰、 Sub は定理 3.4、Neg と Imp は構成子と場合分け、LogAx は命題 4.3により原始再帰的である。

End は Len、切捨て減法、Entry、行の固定成分取得、および零判定の合成である。 GenOKA_Aは、s<rs<rの有界全称量化、規則タグの等号、および Free の否定からなるので原始再帰的である。 ProofSeqA_Aの各行条件はkr∈{1,2,3,4}k_r\in\{1,2,3,4\}の有限場合分けである。タグ11と22では LogAx またはAAと未使用欄の零を検査する。タグ33ではpr,qr<rp_r,q_r<rと先行行の式符号を取得し、ImpRaw の固定タグ、長さ、左右成分を照合する。タグ44ではpr<rp_r<r、AllRaw の固定タグと成分、および GenOKA_Aを照合する。各検査は原始再帰的であり、r<Len⁡(P)r<\operatorname{Len}(P)の有界全称量化も原始再帰性を保つ。 DerivA_Aは ProofSeqA_Aと End の等式の連言である。

この証明は「構文を符号化することができる」という存在主張だけに依存していない。各述語のタグ照合、各再帰で参照する真部分符号の減少、代入時の環境更新、各証明行の先行添字検査を具体的に構成した。▨

注意 5.3 (帰納的可算な公理集合との境界). 任意の帰納的可算理論TTについて、所属述語y∈Ax⁡(T)y\in\operatorname{Ax}(T)自体が原始再帰的であるとは限らない。その場合は、公理列挙プログラムの有限計算証人を証明行へ添え、証人を含む行の検査を原始再帰的にする必要がある。本記事の LogAx と証明列 API は、その後続構成の構文部分だけを供給する。

例 5.4 (不正符号の扱い). 空列の符号00は項でも論理式でもないので Term(0)(0)と Formula(0)(0)は偽である。したがって Neg(0)=0(0)=0、Sub(0,v,n)=0(0,v,n)=0である。一方、有限列そのものには bad code がなく、00は正しい空列である。「列として復号可能であること」と「算術構文として整形式であること」は異なる判定である。

6 演習

問題 6.1.

  1. Term と Formula の相互判定を一つのコース再帰で実行する方法を説明せよ。
  2. 量化子の代入節で、改名済みの構文を再帰引数にせず、元の真部分符号と環境を使う理由を説明せよ。
  3. Sentence の有界全称量化をi≤yi\le yに限ってよい理由を示せ。
  4. 帰納的可算な公理集合の所属判定を、直ちに LogAx と同じ原始再帰的判定へ加えることができない理由を説明せよ。
解答 (確認問題の解答).
  1. 各u<yu<yについて Term(u)(u)と Formula(u)(u)の二つの特性値を pair にして履歴へ保存し、yyのタグに応じて必要な過去の成分を参照する。
  2. 新鮮変数の添字を入れると改名済み符号は元の符号より大きくなり得る。元の真部分だけを処理すれば減少条件が保たれ、環境が改名を正確に伝える。
  3. 補題 1.2 (2)により、yyに自由に現れる変数の添字はyyより小さいからである。この主張は、直下の一段についての補題 1.2 (1)とは別に、構文の構成に関する帰納法で得ている。
  4. 帰納的可算性は列挙手続きの存在を与えるが、符号eeがいつまでも列挙されない場合に、その非列挙性を有限時間で判定する手続きを一般には与えないからである。

▨

参考文献

  1. Herbert B. Enderton, A Mathematical Introduction to Logic, 2nd ed., Academic Press, 2001.項、論理式、代入、および形式的証明の Gödel 符号化の扱いを参考にした。
  2. George S. Boolos, John P. Burgess, and Richard C. Jeffrey, Computability and Logic, 5th ed., Cambridge University Press, 2007.構文集合と構文操作の原始再帰性の扱いを参考にした。

前提記事