このブログは、旧・はてなダイアリー「檜山正幸のキマイラ飼育記 メモ編」(http://d.hatena.ne.jp/m-hiyama-memo/)のデータを移行・保存したものであり、今後(2019年1月以降)更新の予定はありません。

今後の更新は、新しいブログ http://m-hiyama-memo.hatenablog.com/ で行います。

プログラマへの注意とチューリング対象

計算的な万能性で、

  • 選択肢1: 万能対象=万能コード領域
  • 選択肢2: 万能対象=万能データ領域

が考えられるが、ノイマン方式の原理により コード領域=データ領域なので、通常は万能コード領域と万能データ領域は区別しない。Uが万能データ領域であることは、大雑把な表現で、

  • UU⊆U

これを反射性といったと思う。

  • U×U⊆U

も必要だが、これは反射性から出るような気がする。仮に、U×U⊆U じゃないとしても、

  • [U×U→U] \stackrel{\sim}{=} [U→UU] ⊆ [U→U] ⊆ U

なので、なんとかなる。

反射的万能データ領域が万能計算機のモデルになるが、チューリング対象=万能コード領域Aを使う方法は、コードとデータを区別する。データ、X, Y ごとに、

  • X, Yに関する万能計算機 τX,Y:A×X→Y
  • X, Yに関する一様モジュール f = {fe:X→Y | e∈E}
  • Eをエントリーポイント(名前)セットとするモジュールfに対するエンコーディング h:E→A

一様でないモジュール {fi:Xi→Yi | i∈I} に対しても、おそらく同じように扱えるだろう。X = ∪i{Xi}, Y = ∪{Yi} とすればよい。

モジュールfのエンコーディング(オブジェクトモジュール、ロードモジュール)は、関数の名前=エントリーポイントに対して、コンパイルされたコードを対応させる。

一様性を要求しないモジュールを混合モジュールと呼ぶ。モジュールはまたライブラリでもある。ライブラリ上のプログラミングとは、適当なモジュールまたはモジュールの集合を仮定して、モジュール達で実現される関数達を生成射とする自由生成圏を考える。その自由生成圏がモジュールベースの計算可能関数=計算射〈computational morphism〉。

チューリング圏に最初から備わっていると想定される基本射をプリミティブ射またはビルトイン射と呼ぶ。プリミティブ射の選び方で計算システムが決まる。計算システムは、ライブラリによって拡張できる。

  • 今まで出た概念:コード領域、データ領域、(型なし)万能計算機、型つき万能計算機、一様モジュール、混合モジュール、ライブラリ、プリミティブ(ビルトイン)、エントリーポイント。
  • 同義語:プリミティブ=アトミック=ビルトイン=基礎=基本=組み込み=原始=原始
  • 同義語:定義されたxxx=コンポジットxxx=構成されたxxx=ライブラリのxxx

プログラマの通常習慣からの脱却

  • リソース=コストは気にしない。メモリーは最初から無限にあり、実行速度は任意のnに対してn倍加速(n-ブースト)をかけられる。超富豪プログラミング
  • 超寛容プログラミング
    • エラーを出しても誰も怒らない。遠慮なくエラーしてよい。
    • エラーの分類(エラーコード)やエラーメッセージは必要ない。
    • エラーと無限走行は区別しない。

基本的に関数定義するが、次の構文が使える。

  1. let in end
  2. its where end
  3. proc do end 変数resultの最終の値が値となる。

proc内では、

  1. 文=状態付き式
  2. 代入文=状態遷移
  3. シーケンサ ; 値を捨てる順次結合
  4. do while end
  5. while do end