エレファント・コンピューティング調査報告

極限に関する順序を論理プログラミングの手法を使って指定することを目指すブロクです。

中間報告(9)

「エレファントな群とリー代数」の項目では、項書き換え系の「項」を多項式のように見たものを「一般マグマの多項式」と呼びましたが、論理プログラミングの「論理式の項」に対する同様のものを「論理多項式」を呼ぶことにします。これは Wikipedia の「wikipedia:ユニフィケーション」の項目にある「一階の項」に当たるものです。

関数プログラミングと無限論理多項式」の項目では、「論理多項式」を拡張して「無限論理多項式」を作ることを目標としています。

「仮想サーバー」と「仮想ブラウザー」からなるシステムで、「仮想サーバー」を「変数が変更可能なクロージャー」で表すことによって、「仮想サーバー」のプログラムを書き換えることと、「仮想ブラウザー」のプログラムを書き換えることが同様の手順でできることを示そうとしています。無限論理多項式の一つの目的は、この手順を示すことです。

C#、F#、TypeScript、Python、Go でこのようなシステムを書いた例を掲載しています。これはコードを見たときに何かのヒントが得られることがあるためです。Rust、Kotlin、Elixir、Elm についても調査中です。

また、「仮想サーバー」を無限個の「変数が変更不可能なクロージャー」で表すことも無限論理多項式の一つの目的となります。

「変数が変更可能なクロージャー」のためのプログラミング言語として LOGO、Smalltalk が使えないかと思いましたが、LOGO は仕様がよくわからないのでやめました。Smalltalk については Squeak という処理系が使えるようですが、使うのは大変そうなので動作確認に使おうかと思います。Squeak から派生した処理系(Scratch など)についても調べてみたいと思います。

Lisp の簡単な処理系を自作しようと思います。「変数が変更可能なクロージャー」は実現できるとは思うのですが、Lisp の仕様はいろいろあって、どれが適しているのかよくわからないのでこの目的のためには適しているとは言えませんが、そのあたりも調べてみたいと思います。自作すれば変数を変更不可能にすることもできるところも長所になると思います。仕様については M.Hiroi's Home Page / Common Lisp Programming (お気楽 Common Lisp プログラミング入門)を参考にします。ここでは Steel Bank Common Lisp を使っているので動作確認で使ってみたいと思います。Gauche、ISLisp という処理系もあるようなのですが、これも動作確認で使ってみたいと思います。

Prolog についても自作の簡単な処理系があるのでこれを使って調べてみたいと思います。SWI-Prolog という処理系があるようで、これも動作確認で使ってみたいと思います。Prolog ではクロージャーがないので、これをどうするか考えなければなりません。論理プログラミングに対応するものを無限論理多項式として、クロージャーに対応するものは無限ラムダ多項式と呼びたいと思います。また、Prolog と Elixir の関係についても調べてみたいと思います。

OCamlHaskell の処理系もあるので、「変数が変更可能なクロージャー」と「変数が変更不可能なクロージャー」の対比で使えると思います。