1 構文木のタグ
変数をv 0 , v 1 , … v_0,v_1,\ldots v 0 , v 1 , … と列挙する。次の相異なる標準自然数をタグとして固定する。
タグ 1 2 3 4 5 6 7 8 9 構成子 V a r Z e r o S u c c A d d M u l E q N e g I m p A l l \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 Var 2 Zero 3 Succ 4 Add 5 Mul 6 Eq 7 Neg 8 Imp 9 All
定義 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} Var ( i ) Zero Succ ( t ) Add ( t , u ) Mul ( t , u ) Eq ( t , u ) NegRaw ( y ) ImpRaw ( y , z ) AllRaw ( i , y ) = SeqCode ( 1 , i ) , = SeqCode ( 2 ) , = SeqCode ( 3 , t ) , = SeqCode ( 4 , t , u ) , = SeqCode ( 5 , t , u ) , = SeqCode ( 6 , t , u ) , = SeqCode ( 7 , y ) , = SeqCode ( 8 , y , z ) , = SeqCode ( 9 , i , y ) . 自然数y y y が項符号 (term code ) であるとは、Var、Zero、Succ、Add、Mul の規則から有限回で作られることをいう。自然数y y y が論理式符号 (formula code ) であるとは、項符号t , u t,u t , u に対する Eq( t , u ) (t,u) ( t , u ) から始め、NegRaw、ImpRaw、AllRaw により有限回で作られることをいう。
各構成子は Cons、固定長の有限列、および定数との合成なので原始再帰的である。定数タグを関数として用いる箇所では、単項ダミー定数関数C c ( x ) = c C_c(x)=c C c ( x ) = c を用いる。零項の自然数関数を初期関数へ追加したわけではない。
補題 1.2. 次の二つが成り立つ。
構文符号y y y の直下に現れる項または論理式の符号u u u はu < y u<y u < y を満たす。変数添字も、それを含む Var 符号より小さい。
項符号または論理式符号y y y に自由に現れる変数の添字i i i はi < y i<y i < y を満たす。これはy y y の直下に現れる添字だけでなく、入れ子の任意の深さに現れる自由な添字について成り立つ。
証明. (1) を示す。u u u はy y y を表す右入れ子の Cons 列の成分である。Cons ( a , t ) = 1 + pair ( a , t ) \operatorname{Cons}(a,t)=1+\operatorname{pair}(a,t) Cons ( a , t ) = 1 + pair ( a , t ) であり、pair ( a , t ) ≥ a , t \operatorname{pair}(a,t)\ge a,t pair ( a , t ) ≥ a , t なので、各成分と各尾は Cons 全体より小さい。外側のタグを含む Cons について同じ評価を行えばu < y u<y u < y を得る。Var の添字についても同じである。
(2) を、y y y の構成に関する帰納法で示す。(1) は直下の一段しか述べていないので、入れ子の深さについての帰納法をここで別に行う。y = Var ( j ) y=\operatorname{Var}(j) y = Var ( j ) では、自由に現れる添字はj j j だけであり、(1) によりj < y j<y j < y である。y = Zero y=\operatorname{Zero} y = Zero では自由に現れる添字が無い。
Succ、Add、Mul、Eq、NegRaw、ImpRaw では、y y y に自由に現れる添字i i i は直下の対象u u u のいずれかに自由に現れるので、帰納法の仮定によりi < u i<u i < u であり、(1) のu < y u<y u < y と合わせてi < y i<y i < y である。y = AllRaw ( j , z ) y=\operatorname{AllRaw}(j,z) y = AllRaw ( j , z ) では、y y y に自由に現れる添字i i i はi ≠ j i\ne j i = j を満たしz z z に自由に現れるので、同じくi < z < y i<z<y i < z < y である。▨
2 項、論理式、文の判定
Free の再帰節は通常の構文定義そのものである。Var( j ) (j) ( j ) ではi = j i=j i = j 、Zero では偽、関数構成子と Eq、NegRaw、ImpRaw では直下の対象の選言を取る。
AllRaw( j , z ) (j,z) ( j , z ) ではi = j i=j i = j なら偽、i ≠ j i\ne j i = j なら Free( z , i ) (z,i) ( z , i ) とする。v i v_i v i がy y y に自由に現れるなら補題 1.2 (2) によりi < y i<y i < y なので、Sentence の有界全称量化はすべての候補を調べている。
定理 2.2. Term、Formula、Free、Sentence は正のアリティをもつ原始再帰関係である。
証明. Len、Entry、等号、有限の場合分けは原始再帰的である。
Term、Formula、Free を一つの有限分岐評価へ具体化する。要求の種類を
Req T ( y ) , Req F ( y ) , Req f r e e ( y , i ) \operatorname{Req}_{\rm T}(y),\qquad
\operatorname{Req}_{\rm F}(y),\qquad
\operatorname{Req}_{\rm free}(y,i) Req T ( y ) , Req F ( y ) , Req free ( y , i ) の三つとし、階数をいずれもy y y とする。Term 要求では Succ に一つ、Add と Mul に二つの
Term 要求を子として割り当てる。Formula 要求では Eq に二つの Term 要求、NegRaw に一つの Formula 要求、
ImpRaw に二つの Formula 要求、AllRaw に一つの Formula 要求を割り当てる。Free 要求では、Var と Zero は子をもたず、各一項構成子に一つ、各二項構成子に二つの同じ添字i i i をもつ Free 要求を割り当てる。
AllRaw( j , z ) (j,z) ( j , z ) ではi = j i=j i = j なら子をもたず偽を返し、i ≠ j i\ne j i = j なら Reqf r e e ( z , i ) _{\rm free}(z,i) free ( z , i ) を唯一の子とする。親の結合関数はタグに応じて、子の特性値の連言または選言を取る。不正なタグでは子をもたず偽を返す。
子の個数は高々2 2 2 であり、すべての子の第1成分は補題 1.2 (1) によりy y y より小さい。要求の生成と親での結合は
Len、Entry、等号、および有限の場合分けから原始再帰的である。したがって§E16.17 補題 3.2 をK = 2 K=2 K = 2 で適用することができる。この適用では、
Eq の二つの Term 値、Add、Mul、ImpRaw の左右二つの値を同じ親が実際に受け取るため、一つの子の値だけを読む再帰に置き換えてはいない。
Sentence は Formula、Free、およびi ≤ y i\le y i ≤ 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 ( 0 ) = Zero , Num ( n + 1 ) = Succ ( Num ( n )) と定める。Num \operatorname{Num} Num を 数詞符号関数 (numeral-code function ) という。Num( n ) (n) ( n ) は数詞n ‾ \overline n n の項符号である。
Num はパラメータ列が空の原始再帰である。基底は自然数 Zero であり、再帰引数n n n が残るため Num は一変数関数である。
捕獲を避けるため、束縛変数の改名を記録する環境を用いる。環境E E E はpair ( i , j ) \operatorname{pair}(i,j) pair ( i , j ) の有限列であり、最も左にあるpair ( i , j ) \operatorname{pair}(i,j) pair ( i , j ) を、現在有効な束縛v i v_i v i の新しい名前v j v_j v j と読む。第1成分がi i i である成分が一つも無ければ、v i v_i v i を未束縛とする。この走査を行う関数をLook \operatorname{Look} Look と書き、その原始再帰的定義列を次の一つに固定する。下流の記事は、原始再帰性だけでなく、この定義列が満たす等式を対象理論の内部で用いるからである。
定義 3.2 (環境の走査). 環境検索関数 (environment-lookup function )Look ( E , i ) \operatorname{Look}(E,i) Look ( E , i ) を、第2引数i i i をパラメータとし、第1引数E E E を再帰引数とする次のコース再帰で定める。
Look ( 0 , i ) = 0 , Look ( E , i ) = { S right ( 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) Look ( 0 , i ) = 0 , Look ( E , i ) = { S right ( Head ( E )) Look ( Tail ( E ) , i ) left ( Head ( E )) = i , それ以外 ( 0 < E ) ここでleft \operatorname{left} left とright \operatorname{right} right は§E16.17 補題 1.2 の対関数の逆、Head \operatorname{Head} Head とTail \operatorname{Tail} Tail は§E16.17 定義 2.1 の先頭と尾である。
§E16.17 補題 1.2 のleft ( pair ( i , j ) ) = i \operatorname{left}(\operatorname{pair}(i,j))=i left ( pair ( i , j )) = i とright ( pair ( i , j ) ) = j \operatorname{right}(\operatorname{pair}(i,j))=j right ( pair ( i , j )) = j により、Look ( E , i ) \operatorname{Look}(E,i) Look ( E , i ) は、E E E の成分を先頭から順に調べ、第1成分がi i i に一致する最初の成分pair ( i , j ) \operatorname{pair}(i,j) pair ( i , j ) についてその第2成分j j j の後続者S j Sj S j を返し、一致する成分が一つも無ければ0 0 0 を返す。したがって「E E E がi i i の対応先をもつ」ことはLook ( E , i ) ≠ 0 \operatorname{Look}(E,i)\ne0 Look ( E , i ) = 0 と同値であり、そのときの対応先はLook ( E , i ) = S j \operatorname{Look}(E,i)=Sj Look ( E , i ) = S j を満たすj j j である。とくにLook ( 0 , i ) = 0 \operatorname{Look}(0,i)=0 Look ( 0 , i ) = 0 であり、Cons ( p , E ) \operatorname{Cons}(p,E) Cons ( p , E ) の先頭と尾がp p p とE E E であることから、Look ( Cons ( pair ( i ′ , j ) , E ) , i ) \operatorname{Look}\bigl(\operatorname{Cons}(\operatorname{pair}(i',j),E),i\bigr) Look ( Cons ( pair ( i ′ , j ) , E ) , i ) はi ′ = i i'=i i ′ = i のときS j Sj S j 、i ′ ≠ i i'\ne i i ′ = i のときLook ( E , i ) \operatorname{Look}(E,i) Look ( E , i ) に等しい。§E16.17 命題 2.2 により0 < E 0<E 0 < E のときTail ( E ) < E \operatorname{Tail}(E)<E Tail ( E ) < E が成り立つので、この再帰は§E16.17 補題 3.1 の形であり、Look \operatorname{Look} Look は正のアリティをもつ原始再帰全関数である。
定義 3.3. WalkTerm ( y , v , t , E ) \operatorname{WalkTerm}(y,v,t,E) WalkTerm ( y , v , t , E ) とWalkFormula ( y , v , t , E ) \operatorname{WalkFormula}(y,v,t,E) WalkFormula ( y , v , t , E ) (capture-avoiding substitution functions ) を次の構文再帰で定める。
Var( i ) (i) ( i ) では、Look ( E , i ) ≠ 0 \operatorname{Look}(E,i)\ne0 Look ( E , i ) = 0 ならばLook ( E , i ) = S j \operatorname{Look}(E,i)=Sj Look ( E , i ) = S j を満たすj j j について Var( j ) (j) ( j ) を返す。Look ( E , i ) = 0 \operatorname{Look}(E,i)=0 Look ( E , i ) = 0 かつi = v i=v i = v ならt t t 、Look ( E , i ) = 0 \operatorname{Look}(E,i)=0 Look ( E , i ) = 0 かつi ≠ v i\ne v i = v なら Var( i ) (i) ( i ) を返す。
Zero は Zero を返し、Succ、Add、Mul、Eq、NegRaw、ImpRaw は直下の対象へ同じ操作を適用して再構成する。
AllRaw( i , z ) (i,z) ( i , z ) では、次の三つがすべて成り立つときに限り
j = 1 + y + t + E + v + i j=1+y+t+E+v+i j = 1 + y + t + E + v + i
とし、それ以外の場合はj = i j=i j = i とする。第1条件はLook ( E , v ) = 0 \operatorname{Look}(E,v)=0 Look ( E , v ) = 0 であること、すなわちこの量化子より外側にv v v_v v v を束縛する量化子が無いことである。第2条件はi ≠ v i\ne v i = v であることである。第3条件は、v i v_i v i がt t t に自由に現れ、かつv v v_v v v がz z z に自由に現れることである。改名を発動する場合と発動しない場合のいずれにおいても、pair( i , j ) (i,j) ( i , j ) をE E E の先頭へ追加し、元の真部分符号z z z を一度だけ再帰的に処理して AllRaw( j , − ) (j,-) ( j , − ) を返す。
一般の項符号t t t による代入を
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} SubTermCode ( y , v , t ) = ⎩ ⎨ ⎧ WalkTerm ( y , v , t , 0 ) WalkFormula ( y , v , t , 0 ) 0 Term ( y ) ∧ Term ( t ) , Formula ( y ) ∧ Term ( t ) , それ以外 とする。下流で用いる数詞代入 API は
Sub ( y , v , n ) = SubTermCode ( y , v , Num ( n ) ) \operatorname{Sub}(y,v,n)
=\operatorname{SubTermCode}(y,v,\operatorname{Num}(n)) Sub ( y , v , n ) = SubTermCode ( y , v , Num ( n )) である。
選んだj j j はy , t , E , v , i y,t,E,v,i y , t , E , v , i より大きい。構文中のすべての変数添字はその構文符号より小さいので、v j v_j v j は対象y y y と代入項t t t のいずれにも現れない。環境E E E については、pair \operatorname{pair} pair が両引数以上の値を返し、Cons \operatorname{Cons} Cons が両引数より大きい値を返すことを用いる。E E E は右入れ子の Cons 列であるから、その各成分p p p はp < E p<E p < E を満たす。成分p = pair ( k , k ′ ) p=\operatorname{pair}(k,k') p = pair ( k , k ′ ) に現れる添字はk , k ′ ≤ p k,k'\le p k , k ′ ≤ p を満たすので、k , k ′ < E < j k,k'<E<j k , k ′ < E < j である。よってv j v_j v j は対象、代入項、現在の環境のいずれにも現れない新鮮変数である。環境を先頭から調べるので、同名の量化子が入れ子になった場合には最も内側の束縛が優先される。
改名の条件に第1条件と第2条件を置くのは、その量化子の下で実際に代入が起こる場合に限って改名する ためである。第2条件が破れる場合、すなわちi = v i=v i = v の場合、v v v_v v v は AllRaw( i , z ) (i,z) ( i , z ) に自由に現れず、この部分符号のどこにもt t t は入らない。第1条件が破れる場合、すなわち外側にすでにv v v_v v v の束縛がある場合も、z z z に現れるv v v_v v v はその束縛に属するのでt t t は入らない。どちらの場合にも捕獲は起こり得ないので、改名は不要である。これらの場合にも pair( i , j ) (i,j) ( i , j ) をj = i j=i j = i として環境へ追加するため、i = v i=v i = v のときは更新後の環境E ′ = Cons ( pair ( i , i ) , E ) E'=\operatorname{Cons}(\operatorname{pair}(i,i),E) E ′ = Cons ( pair ( i , i ) , E ) についてLook ( E ′ , v ) \operatorname{Look}(E',v) Look ( E ′ , v ) がS i Si S i を返し、z z z の中のv v v_v v v は代入対象ではなく束縛出現として扱われる。i = v i=v i = v のときに改名を発動させると、AllRaw ( i , z ) \operatorname{AllRaw}(i,z) AllRaw ( i , z ) を返すべき場合にAllRaw ( j , − ) \operatorname{AllRaw}(j,-) AllRaw ( j , − ) (j ≠ i j\ne i j = i )を返すことになり、代入対象が自由に現れない論理式を代入が変えないという性質が破れる。
定理 3.4. Num、SubTermCode、および Sub は正のアリティをもつ原始再帰全関数である。整形式入力では SubTermCode が名前付き構文に対する捕獲回避代入の符号を返し、Sub( y , v , n ) (y,v,n) ( y , v , n ) は自由なv v v_v v v へ数詞n ‾ \overline n n を代入した符号を返す。
証明. Num は表示した通常の原始再帰で得る。環境の走査Look \operatorname{Look} Look は、定義 3.2 が固定したとおり、0 < E 0<E 0 < E についてTail ( E ) < E \operatorname{Tail}(E)<E Tail ( E ) < E を減少量とするコース再帰であり、§E16.17 補題 3.1 により原始再帰的である。親節で用いるHead \operatorname{Head} Head 、left \operatorname{left} left 、right \operatorname{right} right 、等号判定、および有限の場合分けはいずれも原始再帰的である。新鮮変数j j j の計算、環境への Cons、Free の判定、および各構成子も原始再帰的である。
WalkTerm と WalkFormula を
Req W T ( y , v , t , E ) , Req W F ( y , v , t , E ) \operatorname{Req}_{\rm WT}(y,v,t,E),\qquad
\operatorname{Req}_{\rm WF}(y,v,t,E) Req WT ( y , v , t , E ) , Req WF ( y , v , t , E ) という二種類の要求として、階数y y y 、最大子数K = 2 K=2 K = 2 の有限分岐評価へ移す。
Succ、NegRaw、AllRaw は一つ、Add、Mul、Eq、ImpRaw は左右二つの要求を子にもつ。二項構成子の左右の子は同じv , t , E v,t,E v , t , E を受け取り、親の結合関数は返った二つの値から構成子を再構成する。
AllRaw( i , z ) (i,z) ( i , z ) では、表示した原始再帰的な場合分けでj j j を計算する。改名を発動させる三条件は、Look ( E , v ) = 0 \operatorname{Look}(E,v)=0 Look ( E , v ) = 0 という零判定、i ≠ v i\ne v i = v という等号判定、および Free の二つの判定の連言である。Look \operatorname{Look} Look は上で見たとおり原始再帰的であり、等号判定と零判定は原始再帰的で、Free は定理 2.2 により原始再帰的である。したがって、この場合分けを加えても親節は原始再帰関数の合成のままであり、原始再帰性は壊れない。このj j j から
E ′ = Cons ( pair ( i , j ) , E ) E'=\operatorname{Cons}(\operatorname{pair}(i,j),E) E ′ = Cons ( pair ( i , j ) , E ) を作り、ReqW F ( z , v , t , E ′ ) _{\rm WF}(z,v,t,E') WF ( z , v , t , E ′ ) を唯一の子とする。親はその子の値b b b から
AllRaw( j , b ) (j,b) ( j , b ) を返す。したがって、再帰的に呼び出される第1成分は常に元の構文y y y の真部分符号である一方、補助環境は親のE E E ではなく更新済みのE ′ E' E ′ でよい。改名後の構文全体を再帰引数にしないため、z < y z<y z < y という階数の減少も保たれる。
要求の生成と親の結合は原始再帰的であるから、§E16.17 補題 3.2 を適用すると、有限スタックの接頭トレースを長さに関する通常の原始再帰で作ることができる。これにより、二つの子の値と再帰呼出しごとの環境変更をともに扱った
WalkTerm と WalkFormula が原始再帰的になる。不正入力を零判定と場合分けで0 0 0 へ送れば全域性も保たれる。
正しさは元の構文y y y に関する構造帰納法で示す。変数の場合、環境にある変数は束縛出現として改名され、環境にないv v v_v v v だけがt t t へ置き換わる。各関数・論理結合子では帰納法の仮定を各直下の対象へ適用する。例えば Add と ImpRaw では、左右二つの子要求がそれぞれの変換値を返し、親がその二値を同じ構成子へ戻す。量化子∀ v i θ \forall v_i\,\theta ∀ v i θ では、改名の三条件のいずれかが破れる場合に名前を保つ。外側にすでにv v v_v v v の束縛がある場合(第1条件が破れる場合)とi = v i=v i = v の場合(第2条件が破れる場合)には、θ \theta θ の中のv v v_v v v の出現がすべて束縛出現でありt t t が入らないので、捕獲は起こり得ない。束縛変数がt t t に自由に現れない場合、または置換対象が本体に自由に現れない場合(第3条件が破れる場合)も同様である。捕獲が実際に起こり得る場合だけ、どこにも現れないv j v_j v j へ束縛とその束縛出現を同時に改名するため、t t t の自由変数は捕獲されない。同名の量化子∀ v i ∀ v i θ \forall v_i\forall v_i\,\theta ∀ v i ∀ v i θ では、内側で追加した pair( i , j ′ ) (i,j') ( i , j ′ ) が環境の先頭にあり、外側の pair( i , j ) (i,j) ( i , j ) を遮断する。さらにLook ( E , v ) = 0 \operatorname{Look}(E,v)=0 Look ( E , v ) = 0 、i ≠ v i\ne v i = v 、v i v_i v i がt t t に自由に現れ、v v v_v v v がθ \theta θ に自由に現れる∀ v i θ \forall v_i\,\theta ∀ v i θ では、子要求だけがE ′ E' E ′ を受け取るため、結果は∀ v j θ ′ \forall v_j\,\theta' ∀ v j θ ′ となり、t t t に由来する自由なv i v_i v 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 ( y ) Imp ( y , z ) = { NegRaw ( y ) 0 Formula ( y ) , それ以外 , = { ImpRaw ( y , z ) 0 Formula ( y ) ∧ Formula ( z ) , それ以外 . Neg \operatorname{Neg} Neg を 全域否定符号関数 (total negation-code function ) 、Imp \operatorname{Imp} Imp を 全域含意符号関数 (total implication-code function ) という。
Neg と Imp は構成子、構文判定、および有限の場合分けの合成なので原始再帰全関数である。
算術言語L A L_A L A の Hilbert 型体系をここで局所的に固定する。論理式符号a , b , c a,b,c a , b , c に対する命題公理は、次の三つの構文木パターンである。
H 1 ( a , b ) = ImpRaw ( a , ImpRaw ( b , a ) ) , H 2 ( a , b , c ) = ImpRaw ( ImpRaw ( a , ImpRaw ( b , c ) ) , ImpRaw ( ImpRaw ( a , b ) , ImpRaw ( a , c ) ) ) , H 3 ( 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} H1 ( a , b ) H2 ( a , b , c ) H3 ( a , b ) = ImpRaw ( a , ImpRaw ( b , a )) , = ImpRaw ( ImpRaw ( a , ImpRaw ( b , c )) , ImpRaw ( ImpRaw ( a , b ) , ImpRaw ( a , c )) ) , = ImpRaw ( ImpRaw ( NegRaw ( b ) , NegRaw ( a )) , ImpRaw ( a , b ) ) .
連言と双条件を原始構成子へ展開する符号を
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} AndCode ( a , b ) IffCode ( a , b ) = NegRaw ( ImpRaw ( a , NegRaw ( b ))) , = AndCode ( ImpRaw ( a , b ) , ImpRaw ( b , a ))
と定める。またe 0 = Eq ( Zero , Zero ) e_0=\operatorname{Eq}(\operatorname{Zero},\operatorname{Zero}) e 0 = Eq ( Zero , Zero ) と置き、空連言の符号を
Top A = ImpRaw ( e 0 , e 0 ) \operatorname{Top}_A=\operatorname{ImpRaw}(e_0,e_0) Top A = ImpRaw ( e 0 , e 0 )
に固定する。したがって、零項関数0 0 0 の合同公理でも空連言を省略せず、この一つの符号を前件として用いる。
項t t t が論理式φ \varphi φ の変数v i v_i v i へ自由に代入可能 であることを FreeFor( t , i , φ ) (t,i,\varphi) ( t , i , φ ) と書く。原子式では真とし、否定と含意では直下の論理式の条件を取る。∀ v j ψ \forall v_j\psi ∀ v j ψ では、j = i j=i j = i なら真、j ≠ i j\ne i j = 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) FreeFor ( t , i , ψ ) ∧ ( ¬ Free ( ψ , i ) ∨ ¬ Free ( t , j ) )
とする。この判定を Reqf f ( t , i , φ ) _{\rm ff}(t,i,\varphi) ff ( t , i , φ ) という要求で表し、階数をφ \varphi φ の符号とする。否定と量化には高々一つ、含意には左右二つの子要求を割り当て、親で表示した連言を取る。子の論理式符号は真部分符号として階数を真に減らすので、§E16.17 補題 3.2 をK = 2 K=2 K = 2 で適用することができる。したがって FreeFor も原始再帰的である。
以下で (H1)–(H3)、(Q1)、(Q2) と書くのは§E16.10 定義 1.1 が定めた一階 Hilbert 系の論理公理スキーマであり、Robinson 算術Q Q Q の公理 (Q1)–(Q7) とは別のものである。名前が重なるのは量化子の二つの公理スキーマだけなので、以下ではこれらを全称具体化の公理 (Q1) と全称分配の公理 (Q2) と呼び、どちらの体系の公理であるかを明示する。
定義 4.2. LogAx ( y ) \operatorname{LogAx}(y) LogAx ( y ) (logical-axiom instance predicate ) は、以下の有限個のコードパターンのいずれかへ一致することを表す。表示する小文字の式符号には Formula、項符号には Term を要求し、同じ文字を置いた位置では同じ自然数符号を要求する。
y = H 1 ( a , b ) y=\mathrm{H1}(a,b) y = H1 ( a , b ) 、y = H 2 ( a , b , c ) y=\mathrm{H2}(a,b,c) y = H2 ( a , b , c ) 、またはy = H 3 ( a , b ) y=\mathrm{H3}(a,b) y = H3 ( a , b ) である。
次の三つをすべて満たすi , t , a , b ≤ y i,t,a,b\le y i , t , a , b ≤ 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) y = ImpRaw ( AllRaw ( i , a ) , b ) , FreeFor ( t , i , a ) , b = SubTermCode ( a , i , t )
これは全称具体化の公理 (Q1) の∀ v i φ → φ [ v i : = t ] \forall v_i\varphi\to\varphi[v_i:=t] ∀ v i φ → φ [ v i := t ] を表す。
次の等式と¬ Free ( a , i ) \neg\operatorname{Free}(a,i) ¬ Free ( a , i ) をともに満たすi , a , b ≤ y i,a,b\le y i , a , b ≤ 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) y = ImpRaw ( AllRaw ( i , ImpRaw ( a , b )) , ImpRaw ( a , AllRaw ( i , b )) )
これは全称分配の公理 (Q2) を表す。
y = Eq ( t , t ) y=\operatorname{Eq}(t,t) y = Eq ( t , t ) を満たす項符号t t t が存在する。
0 , S , + , × 0,S,+,\times 0 , S , + , × の合同公理として、次のいずれかである。
y = ImpRaw ( Top A , Eq ( Zero , Zero ) ) , y = ImpRaw ( Eq ( t , u ) , Eq ( Succ ( t ) , Succ ( u ) ) ) , y = ImpRaw ( AndCode ( Eq ( t 1 , u 1 ) , Eq ( t 2 , u 2 ) ) , Eq ( Add ( t 1 , t 2 ) , Add ( u 1 , u 2 ) ) ) , y = ImpRaw ( AndCode ( Eq ( t 1 , u 1 ) , Eq ( t 2 , u 2 ) ) , Eq ( Mul ( t 1 , t 2 ) , Mul ( u 1 , u 2 ) ) ) . \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} y = y = y = y = ImpRaw ( Top A , Eq ( Zero , Zero )) , ImpRaw ( Eq ( t , u ) , Eq ( Succ ( t ) , Succ ( u ))) , ImpRaw ( AndCode ( Eq ( t 1 , u 1 ) , Eq ( t 2 , u 2 )) , Eq ( Add ( t 1 , t 2 ) , Add ( u 1 , u 2 )) ) , ImpRaw ( AndCode ( Eq ( t 1 , u 1 ) , Eq ( t 2 , u 2 )) , Eq ( Mul ( t 1 , t 2 ) , Mul ( u 1 , u 2 )) ) .
等号を二項関係として扱う合同公理
y = ImpRaw ( AndCode ( Eq ( t 1 , u 1 ) , Eq ( t 2 , u 2 ) ) , IffCode ( Eq ( t 1 , t 2 ) , Eq ( u 1 , u 2 ) ) ) 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) y = ImpRaw ( AndCode ( Eq ( t 1 , u 1 ) , Eq ( t 2 , u 2 )) , IffCode ( Eq ( t 1 , t 2 ) , Eq ( u 1 , u 2 )) )
である。
(2) では Term( t ) (t) ( t ) 、(4) から(6) では表示したすべての項符号に Term を要求する。各場合で最外タグ、有限列の長さ、各成分、および必要な同一性を照合するので、ここに表示していない公理スキーマは LogAx に含めない。
命題 4.3. LogAx は原始再帰関係である。
証明. H1–H3 は三つ、全称分配の公理 (Q2) は一つの構文木パターンであり、構成子タグ、固定された有限列の長さ、および繰り返し現れる成分符号の等号を有限回検査すればよい。全称分配の公理 (Q2) の変数条件は、原始再帰関係 Free の否定である。
全称具体化の公理 (Q1) ではi , a , b i,a,b i , a , b をy y y の成分から取得し、候補項t ≤ y t\le y t ≤ y を有界探索する。v i v_i v i がa a a に自由に現れる場合、置換結果b b b にt t t が部分項として現れるのでt < y t<y t < y である。v i v_i v i が自由に現れない場合は置換結果がa a a と一致する。この場合、a a a の原子部分式に現れる任意の項を候補に取ることができ、その項符号はa a a の真部分符号なのでy y y より小さい。したがって有界探索はすべての場合を含む。各候補について Term( t ) (t) ( t ) 、FreeFor( t , i , a ) (t,i,a) ( t , i , a ) 、およびb = SubTermCode ( a , i , t ) b=\operatorname{SubTermCode}(a,i,t) b = SubTermCode ( a , i , t ) を検査する。FreeFor は、最大二個の真部分式へ進む直前の有限分岐コース再帰で構成されており、Formula、Free、および有限の場合分けだけを親節で用いるため原始再帰的である。
L A L_A L A の非論理記号は0 , S , + , × 0,S,+,\times 0 , S , + , × の四個で、項数はそれぞれ0 , 1 , 2 , 2 0,1,2,2 0 , 1 , 2 , 2 に固定されている。反射律、四つの関数合同、および一つの等号関係合同は、定義に列挙した有限個のパターンだけである。AndCode、IffCode、TopA _A A は固定構成子の合成であり、零項の場合にも追加の探索を要しない。各項位置の Term と構文上の等号を検査すればよい。
原始再帰関係は有限選言、有限連言、否定、および有界存在量化について閉じている。以上の全場合を有限選言で結ぶと LogAx が原始再帰的になる。▨
上の証明が与えた構成を、LogAx \operatorname{LogAx} LogAx の原始再帰的定義列として次の一つに固定する。下流の記事は、原始再帰性だけでなく、この定義列が満たす等式を対象理論の内部で用いるからである。
定義 4.4 (論理公理例の判定の原始再帰的定義列). 定義 4.2 が並べた6節のそれぞれについて、命題 4.3 の証明が挙げた検査、すなわち構成子タグと有限列の長さと各成分の照合、繰り返し現れる成分符号の等号、Formula \operatorname{Formula} Formula 、Term \operatorname{Term} Term 、Free \operatorname{Free} Free 、FreeFor \operatorname{FreeFor} FreeFor 、SubTermCode \operatorname{SubTermCode} SubTermCode の値による条件、およびy y y で押さえた有界探索の合成として、その節への一致を表す関係の特性関数を定める。Formula \operatorname{Formula} Formula は、同定義が冒頭で表示する小文字の式符号へ課す検査であり、定義 4.2 (1) から定義 4.2 (3) のa , b , c a,b,c a , b , c がこれにあたる。定義列は、これら6個の特性関数の定義列を節の番号の順に並べ、最終段でそれらの有限選言を取るものとする。この定義列を 論理公理例判定の原始再帰的定義列 (primitive-recursive definition sequence for logical-axiom instances ) という。
最終段は、6節のいずれかへの一致からLogAx ( y ) \operatorname{LogAx}(y) LogAx ( y ) を導く合成の等式を与える。個別に与えた符号についてLogAx \operatorname{LogAx} 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) Line ( k , y , p , q , i ) = SeqCode ( k , y , p , q , i )
と符号化する。k k k は規則タグ、y y y はその行の論理式、p , q p,q p , q は先行行の添字、i i i は一般化する変数の添字である。規則タグを1 = 1= 1 = LogAx、2 = 2= 2 = 理論公理、3 = 3= 3 = modus ponens、4 = 4= 4 = 一般化と固定する。未使用欄には0 0 0 を入れる。Line の各成分取得は原始再帰的である。
定義 5.1. A ( y ) A(y) A ( y ) を原始再帰的な述語とし、A ( y ) → Sentence ( y ) A(y)\to\operatorname{Sentence}(y) A ( y ) → Sentence ( y ) をすべてのy y y について仮定する。有限列P P P の第r r r 成分ℓ r \ell_r ℓ r が長さ5 5 5 の Line 符号であることを要求し、その五成分を
ℓ r = Line ( k r , y r , p r , q r , i r ) \ell_r=\operatorname{Line}(k_r,y_r,p_r,q_r,i_r) ℓ r = Line ( k r , y r , p r , q r , i r ) とする。一般化行の変数条件を表す有界述語を
GenOK A ( P , r , i ) ⟺ ∀ s < r ( k s = 2 → ¬ Free ( y s , i ) ) \operatorname{GenOK}_A(P,r,i)\quad\Longleftrightarrow\quad
\forall s<r\,(k_s=2\to\neg\operatorname{Free}(y_s,i)) GenOK A ( P , r , i ) ⟺ ∀ s < r ( k s = 2 → ¬ Free ( y s , i )) と定める。ProofSeq A ( P ) \operatorname{ProofSeq}_A(P) ProofSeq A ( P ) (proof-sequence predicate ) は、各r < Len ( P ) r<\operatorname{Len}(P) r < Len ( P ) について Formula( y r ) (y_r) ( y r ) かつ、行ℓ r \ell_r ℓ r が次のいずれかのタグ付きパターンへ一致することを表す。
k r = 1 k_r=1 k r = 1 、LogAx( y r ) (y_r) ( y r ) 、p r = q r = i r = 0 p_r=q_r=i_r=0 p r = q r = i r = 0 である。
k r = 2 k_r=2 k r = 2 、A ( y r ) A(y_r) A ( y r ) 、p r = q r = i r = 0 p_r=q_r=i_r=0 p r = q r = i r = 0 である。
k r = 3 k_r=3 k r = 3 、p r , q r < r p_r,q_r<r p r , q r < r 、i r = 0 i_r=0 i r = 0 であり、次の二つの等式をともに満たす論理式符号a a a が存在する。
y p r = ImpRaw ( a , y r ) , y q r = a y_{p_r}=\operatorname{ImpRaw}(a,y_r),
\qquad
y_{q_r}=a y p r = ImpRaw ( a , y r ) , y q r = a
k r = 4 k_r=4 k r = 4 、p r < r p_r<r p r < r 、q r = 0 q_r=0 q r = 0 、y r = AllRaw ( i r , y p r ) y_r=\operatorname{AllRaw}(i_r,y_{p_r}) y r = AllRaw ( i r , y p r ) 、および GenOKA ( P , r , i r ) _A(P,r,i_r) A ( P , r , i r ) が成り立つ。
末尾関数を
End ( P ) = { y Len ( P ) − 1 Len ( P ) > 0 , 0 Len ( P ) = 0 \operatorname{End}(P)=
\begin{cases}
y_{\operatorname{Len}(P)-1}&\operatorname{Len}(P)>0,\\
0&\operatorname{Len}(P)=0
\end{cases} End ( P ) = { y Len ( P ) − 1 0 Len ( P ) > 0 , Len ( P ) = 0 とする。Deriv A ( P , y ) \operatorname{Deriv}_A(P,y) Deriv A ( P , y ) (derivation predicate ) はProofSeq A ( P ) ∧ End ( P ) = y \operatorname{ProofSeq}_A(P)\land\operatorname{End}(P)=y ProofSeq A ( P ) ∧ End ( P ) = y と定める。
LogAx の行は論理公理であり、一般化規則の前提依存条件へ入らない。タグ2 2 2 の行だけが理論A A A に由来するが、A ( y ) → Sentence ( y ) A(y)\to\operatorname{Sentence}(y) A ( y ) → Sentence ( y ) なので、任意のi i i について¬ Free ( y , i ) \neg\operatorname{Free}(y,i) ¬ Free ( y , i ) である。したがって GenOKA _A A は本記事の対象では常に成り立つ。この有界条件を第4のタグパターンに明示したことにより、一般化条件を省略したのではなく、文公理だけからなる理論証明へ特殊化したことをコード上でも確認することができる。
本記事の ProofSeqA _A A は、文公理をもつ理論における定理証明だけを扱う。自由変数を含む任意の仮定からの導出には、各行の依存前提集合を符号化する別の API が必要であり、本記事ではその拡張を定義しない。
定理 5.2. Term、Formula、Sentence、Free、FreeFor、Sub、Neg、Imp、LogAx、GenOKA _A A 、および End は原始再帰的である。さらにA A A が原始再帰的な文符号の述語なら ProofSeqA _A A と DerivA _A A も原始再帰的である。不正な自然数に対して、構文述語は偽、構文を返す関数と End は0 0 0 を返す。
証明. Term、Formula、Sentence、Free は定理 2.2 、FreeFor はその直前のコース再帰、
Sub は定理 3.4 、Neg と Imp は構成子と場合分け、LogAx は命題 4.3 により原始再帰的である。
End は Len、切捨て減法、Entry、行の固定成分取得、および零判定の合成である。
GenOKA _A A は、s < r s<r s < r の有界全称量化、規則タグの等号、および Free の否定からなるので原始再帰的である。
ProofSeqA _A A の各行条件はk r ∈ { 1 , 2 , 3 , 4 } k_r\in\{1,2,3,4\} k r ∈ { 1 , 2 , 3 , 4 } の有限場合分けである。タグ1 1 1 と2 2 2 では LogAx またはA A A と未使用欄の零を検査する。タグ3 3 3 ではp r , q r < r p_r,q_r<r p r , q r < r と先行行の式符号を取得し、ImpRaw の固定タグ、長さ、左右成分を照合する。タグ4 4 4 ではp r < r p_r<r p r < r 、AllRaw の固定タグと成分、および GenOKA _A A を照合する。各検査は原始再帰的であり、r < Len ( P ) r<\operatorname{Len}(P) r < Len ( P ) の有界全称量化も原始再帰性を保つ。
DerivA _A A は ProofSeqA _A A と End の等式の連言である。
この証明は「構文を符号化することができる」という存在主張だけに依存していない。各述語のタグ照合、各再帰で参照する真部分符号の減少、代入時の環境更新、各証明行の先行添字検査を具体的に構成した。▨
6 演習
問題 6.1.
Term と Formula の相互判定を一つのコース再帰で実行する方法を説明せよ。
量化子の代入節で、改名済みの構文を再帰引数にせず、元の真部分符号と環境を使う理由を説明せよ。
Sentence の有界全称量化をi ≤ y i\le y i ≤ y に限ってよい理由を示せ。
帰納的可算な公理集合の所属判定を、直ちに LogAx と同じ原始再帰的判定へ加えることができない理由を説明せよ。
解答 (確認問題の解答).
各u < y u<y u < y について Term( u ) (u) ( u ) と Formula( u ) (u) ( u ) の二つの特性値を pair にして履歴へ保存し、y y y のタグに応じて必要な過去の成分を参照する。
新鮮変数の添字を入れると改名済み符号は元の符号より大きくなり得る。元の真部分だけを処理すれば減少条件が保たれ、環境が改名を正確に伝える。
補題 1.2 (2) により、y y y に自由に現れる変数の添字はy y y より小さいからである。この主張は、直下の一段についての補題 1.2 (1) とは別に、構文の構成に関する帰納法で得ている。
帰納的可算性は列挙手続きの存在を与えるが、符号e e e がいつまでも列挙されない場合に、その非列挙性を有限時間で判定する手続きを一般には与えないからである。
▨