見出し画像

💎メタ循環評価器 (MCE)  Meta-circular evaluator メタ円形評価器

計算機では、メタ循環評価器 (MCE) またはメタ循環インタプリタ (MCI) は、インタプリタのホスト言語の同様の機能を使用して、解釈言語の各機能を定義するインタプリタである。例えば、ラムダアプリケーションの解釈は関数アプリケーションを使って実装されることがある[1] メタ循環評価はLispの文脈で最も顕著である[1] 自己インタープリタは、解釈言語がホスト言語とほぼ同一であるメタ循環インタープリタであり、2つの用語はしばしば同義的に用いられる

https://en.wikipedia.org/wiki/Meta-circular_evaluator

Corrado Böhmの学位論文[3]にセルフホスティングコンパイラの設計が記述されている[4]。[高階関数のコンパイルが困難なため、多くの言語がインタープリタによって定義され、特にLispが有名である[1][5]。 この用語自体はJohn C. Reynoldsによって作られ[1]、Structure and Interpretation of Computer Programsという本で使用されて一般化した。

この評価サイクルは、4.1.1節で説明した評価器における2つの重要な機能、evaluateとapplyの相互作用によって具現化される(図4.2参照)。

https://sourceacademy.org/sicpjs/4.1
なんな、ふざけてないか、これ

強く正規化された関数型プログラミング言語の総和はチューリング完全ではありえない。そうでなければ、プログラムが型チェックするかどうかで停止問題を解くことができてしまう。

https://en.wikipedia.org/wiki/Meta-circular_evaluator

この質問には、いくつかの深いコンピュータサイエンスとプログラミングの概念が含まれています。具体的には、「強く正規化された言語」、「チューリング完全性」、および「停止問題」に関するものです。それぞれを簡潔に説明してから、全体的な意味を解説します。

  1. 強く正規化された言語: 強く正規化されたプログラミング言語では、すべての有効なプログラムが必ず終了します。無限ループや再帰が不可能な場合が多いです。

  2. チューリング完全性: 言語やシステムがチューリング完全であるとは、それが任意のアルゴリズムや計算をシミュレートする能力を持っていることを意味します。これは一般に、言語が非常に強力であることを示しています。

  3. 停止問題: アラン・チューリングによって未解決であることが示された問題です。具体的には、ある特定の入力に対して与えられたプログラムが終了するかどうかを判定するアルゴリズムが存在しないことが示されました。

これらの概念を組み合わせて考えると、強く正規化された関数型プログラミング言語は、プログラムが必ず終了するため、チューリング完全ではないと言えます。なぜなら、チューリング完全な言語は停止しないプログラム(無限ループなど)を表現できる必要があるからです。

さらに、強く正規化された言語がチューリング完全であると仮定すると、プログラムが型チェックに通るかどうかによって、そのプログラムが停止するかどうかを判断することができる。しかし、これは停止問題が解決できてしまうことを意味するため、このような言語が存在することはあり得ません。

要するに、強く正規化された関数型プログラミング言語がチューリング完全であると仮定すると、停止問題を解く方法が存在することになってしまうため、そのような言語は存在しない、というのがこの文の意味です

メタ循環インタープリタは言語を拡張するためのベースラインシステムを提供し、機能を追加することで上方へ、あるいは機能を解釈するのではなくコンパイルすることで下方へ拡張できる

https://neil.fraser.name/software/JS-Interpreter/
https://amzn.to/3QEaYbM


お願い致します