(メモ) 双対空間プログラミング? -- 妄想、アイデア

  • 9
    Like
  • 0
    Comment
More than 1 year has passed since last update.

思いついたアイデアの殴り書き。

1995年は Java、JavaScript、PHP、Ruby、Delphi などなど多くのプログラミング言語が誕生した「プログラミング言語の当たり年」だったとゆう。それから20年以上が過ぎた今でも、まだ新しいプログラミング言語が産まれる。過去に存在した言語とは、大して大きく違わない。次から次へと生まれるプログラミング言語にはいとまがない。それらは、どれも既存の言語をほんの僅かに改良しただけのものに過ぎない。大きくパラダイム・シフトをもたらすものではない。いつまでこんな事が続くんだろか。何か全く新しい発想はないんかな… と時々感じる。

別の空間での問題解決

そのまま表現するのが難しい複雑な波形でもフーリエ変換で簡単なパラメーターで表現できる、直接解くのが面倒な微分方程式もラプラス変換してs関数にしてしまえば簡単に計算できる… なんてゆうことがある。複雑な関数が双対空間に変換すると簡単になる場合がある。

最近、文字コード変換に連続関数の近似関数を使える可能性があることを確認できた。((メモ) 文字コード変換、探索、素数階段、そして、(メモ) 文字コード変換、探索、素数階段 (2))。この場合、変換のプロセスの一部分だけだけど、それでも、その一部分を8つかそこらの僅かな変数で表現できる。つまり変換関数を $f(x)$ とした時に、例えば、

$$f(x)=\displaystyle\sum_ja_jx^j$$

こんなふうに表現すれば、僅かな個数の $a_j$ で複雑さを要約できるってこと。フーリエ級数の係数でも同じことだ。

そこで思いついたのは、双対空間を使うプログラミングってゆうアイデア。

$$問題空間 \rightleftharpoons 双対空間$$

何かの問題をその空間の中で直接にコネクリ回すんでなく、いわばラプラス変換して簡単にした状態で問題を解いて逆変換で戻すってゆうやり方。

このアイデアは全くの妄想で具体的なもんぢゃない…。まだ自分でもどんなものになるのかも具体化していない。

ひとつのアイデア

ひとつのアイデアは、プログラミングのコードの列。プログラミング言語のコードの列がある。とゆうかアセンブリ言語のような原子レベルのものを想像している。それらの原子コード(それ以上分けられないと、そのシステムの中で定義されたコード)には番号が付いているとする。

位置 コード
1 コード1
2 コード2
3 コード3
$\vdots$
N コードN

これを思いっきりフーリエ変換なり何なりで変換して、僅かな数のパラメーターとして表現して、その空間の中で簡単な演算して逆変換することで、別のプログラムのコードを生成する、とか…

圧縮技術との関係

今回このアイデアを考えるにあたって、頭の片隅にあったのは、フラクタル圧縮(あるいは、あらゆる圧縮)の技術だ。

ある日、Yahoo! 知恵袋の質問の中に、

C 言語のプログラムをどうやったら EXE 形式に「圧縮」できますか。
というような内容の質問があった。その時にふと気付かされたのは、
コンパイルは圧縮とみなすこともできる。
コンパイルを圧縮の一つだと考えるのはアナガチ間違いじゃない。
ってこと。とゆうのは、
コンパイルとは、特定のマシンに特化した形式に変換すること、
あいるは、特定のマシンの言語に翻訳すること
だけれども、だとすれば、
圧縮とは、圧縮機とゆうマシンに特化した形式に変換すること、
あるいは、圧縮機の言語に翻訳すること
とも言えるからだ。

「圧縮する」とは圧縮空間での表現形式に変換することに他ならないし、「コンパイルする」とは何かのコンピューターマシン空間での表現形式に変換することに他ならない。

フラクタル圧縮も圧縮の一つだけれども、フラクタル圧縮でも、複雑なデータを、その中に潜む法則性を抽出して、それを僅かな個数のパラメーターとして表現することだ。級数展開の係数を求めるようなことだ。今考えてる「双対空間」とゆうイメージと合う。

ドメイン特化言語・モデル言語

そうなると気になるのは、ドメイン特化言語だ。システムを実装するのに使う言語とは、かけ離れた表現形式で問題領域でのオブジェクトや関係性を容易に記述できるようにするものだ。これもある意味では、今考えてる「双対空間プログラミング」というアイデアとも何がしか関係しているような気もする。

メタプログラミング

そうなると気になるのは、その他のメタプログラミング手法である

  • 高階関数
  • 汎用プログラミング(テンプレート)
  • マクロ
と「双対空間プログラミング」との関係性だ。これらはシステムを記述する言語とほど近い位置にある別空間と考える事もできそおだから。ただ「双対空間」とちょっと違うのは、これらのものは、すぐそばで人形を操る人形浄瑠璃にんぎょうじょうるり黒子くろこのように、問題空間そのものでこそないけれど、ピッタリ寄り添うように存在している。いわば「亜空間」に存在しているといえるのかも知れない。

人形のすぐそばで人形を操る人形浄瑠璃の黒子

パーセプトロン

ズブの素人の妄想だけど、1日24時間・1年365日、時々刻々押し寄せる膨大な情報を処理する人間の脳の中でも別空間表現が使われているんじゃないだろかと思う。情報を片っ端からその表現形式を変えずにそのままの形で記憶蓄積していったとしたら、たとえ200億個の脳細胞があったとしても、すぐに満杯になっとしまうんぢゃないだろか。おそらく何かの「圧縮」つまり別空間での表現形式に変換した上で情報は保存されているに違いない。そうだとすると、脳の神経回路網そのもの、つまり、ネットワーク・トポロジー自体が何かの形で符号化されて保存されているとゆうことに…。仮に回路網そのものが別空間での表現形式で処理できるとすれば、回路網トポロジーがパラメター化されていて、FPGA とか PCA(プラスチック・セル・アーキテクチャ)のような形になっているとゆうことになりそぉなもの…。もしそおだとしても不思議じゃない。というのは、脳細胞のこんなモデルを見たことがあるから…。

$$y=f\left(\displaystyle\sum_iw_ix_i\right)$$

もし、こんな単純だとすると、重み $\left\{w_i\right\}$ こそが神経回路網だとゆうことができる。$w_i$ 空間でネットワークを表現したことになる。面白いことに、このモデル式は、このメモの最初に書いた級数展開とかフーリエ級数みたいなイメージと合う。



何かこういう方向性で新しいプログラミング・パラダイムとか生まれたりしないかな?…なんて、ズブの素人の安っぽい妄想かな…。(*´艸`*)