すべてのコンピュータプログラムをグラフとして表すことはできますか?


7

先日考えていたところ、コンピュータープログラムはすべてグラフ(たとえば、抽象構文ツリー)として、または一般的な式を組み合わせると抽象構文グラフとして表現できるように思えました。

たぶん、どのコンピュータプログラムも、これらのグラフの1つ+それに付加された評価セマンティクスとして表すことができると思いました。これがチューリングマシンに対して普遍的に当てはまるかどうか誰かが知っているのであれば、私は興味があります(潜在的に無限のグラフを取得できると思いますが、これは数学なので問題ありません)。私はそれと、強力な型システムなどの多くのことを熟考してきましたが、この抽象化によく適合します(グラフに構造上の制約を課します)。型システムを独自のプログラムと見なして、それを別のグラフ+プログラムのグラフで動作する評価セマンティクスとして表すこともできます...

これが既知の同等であるかどうかに興味があります。


これは、コンパイラー設計を最適化するためのかなり基本的な概念です。
keshlam、2014年

1
どんな数式でもグラフで表現できます。ポイントは?
Val

かなり奇妙な答え:連続時間量子ランダムウォークは、普遍的な計算が可能であることが知られています。実際、断熱量子コンピューターも同様です。回路図でさえ、技術的には頂点が関数として機能するグラフであり、それらは普遍的な計算も可能です。あなたが考えていたのとは全く違うようです、それは:)
2014年

回答:


10

それが特によく知られている同等かどうかはわかりませんが、考えるとかなり簡単です。

チューリングマシンは、(型付けされていない)ラムダ計算と同等であることが知られています。Church-Turingの論文では、これが最も強力な計算形式であると提案しています。

ラムダ計算は、構文的に定義された用語書き換えシステムです。基本的に、それは非常に単純なプログラミング言語です。したがって、それを解析して抽象構文ツリー(グラフ)にすることができます。

だから、私たちは持っています:

  1. すべてのコンピュータープログラムは、型なしラムダ計算で表現できます。
  2. すべてのラムダ計算プログラムを抽象構文ツリーに解析できます

これは、すべてのコンピュータープログラムをLambda Calculus抽象構文ツリーとして表すことができることを意味します。

これらの木は、興味深い特性をあまり持っていないかもしれません。たとえば、それらは完全に一意ではありません。つまり、2つの異なるツリーが同じ計算を実行できます。


1
また、チューリング完全な汎用(できれば構造化された)プログラミング言語を使用することもできます。また、静的解析では、プログラムはサイクルのあるグラフとして表されます。
ベルピース2014年

2

はい、グラフとプログラミングの間にはかなりの数の領域で密接な関係があります。これを描く最も簡単な方法は、有向グラフの宛先としてコード内のループ、分岐、またはサブルーチンのエントリポイントとしてです。も参照

ビジュアルプログラミング言語 cs.se も参照

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.