仕様と実装の混同についてのメモ

人間はかくも不完全であるが恩寵によって全体を帰納=幻視する。

しかしそれは移植可能な方法でレジスタサイズを(つまり機械にとって自然な整数の最大値や浮動小数点数のマシンイプシロン≒「質量ギャップ」乃至「グルーボール」を)知ることが出来ないのと何が違うだろうか。
我々が同じとみなすコードが具体的なマシンアーキテクチャ上でどのような機械語に落ちるかを制御できないなら、移植可能ではないことになる。実際のところ、コンパイラのブートストラップの一番最初のところでは人間が手で書いたマシン定義を信頼するしかないし、たとえば64bitマシンで32bitのアーキテクチャ定義をしても問題が起きないようにはできるだろうけど、32bitマシンを64bitマシンと錯覚させてブースストラップさせようとしてもどこかでひっかかるのではないか(もちろん仮想記憶とか浮動小数点演算エミュレートの要領で64bitアドレッシング/演算命令をOSでトラップして処理するような場合、それはアプリケーションから見えているマシンアーキテクチャとしては64bitである)。対象言語とメタ言語の関係はCと機械語の関係であって、もちろんLISPのようにその両方が同じ言語であっても全然構わないけど、メタ言語の方が記述の抽象度が落ちる、例えば自然数空集合からつくったり宇宙(プロパークラス)を冪集合でエミュレートするのと、オブジェクトの宣言、生成破棄や参照の解決の裏側(所謂メタオブジェクトプロトコル)をメタ言語で記述するのは同じこと。
レジスタサイズが有限なら、それにおさまりきらない整数についての主張は自然な実装(多倍長整数のようなものではなく、1命令で演算できるような)を持たないわけで、これがNelsonの数学的帰納法の正当性についての懸念の背景にあると考えると別に奇妙なことを主張しているわけではないかも(つまりインダクションステップに対応するプログラムはバグらない自然な実装を持たない)。もちろん最初でちょっと触れたように、おそらく彼の中では構成的場の理論の問題とも関係がないわけでもない。ただ哲学的には混乱していると思う、つまり仕様と実装の混同がある。有限長で仕様(定義)が書けるとしてもその完全な実装(実現、具体化)が有限長で収まるとは限らない。KdV方程式とその解たるソリトンの無限自由度たちとか、Pour-Elの意味で「計算可能」な超越数の定義とその冪級数展開や10進展開とか、正規表現とそれにマッチする文字列たちとか。