関数型プログラミングには、ラムダ計算と組み合わせロジックの理論的基礎があります。統計計算に携わる人として、これらの概念はモデリングに非常に役立つと思います。
命令型プログラミングと同等の数学的な基礎はありますか、それとも単に機械語での実用的なハードウェアアプリケーションとその後のFORTRANの開発から発展したのですか?
関数型プログラミングには、ラムダ計算と組み合わせロジックの理論的基礎があります。統計計算に携わる人として、これらの概念はモデリングに非常に役立つと思います。
命令型プログラミングと同等の数学的な基礎はありますか、それとも単に機械語での実用的なハードウェアアプリケーションとその後のFORTRANの開発から発展したのですか?
回答:
一般に、数学を使用してXを研究する場合、まずXのモデルが必要であり、次にそのモデルに関する一連の結果である理論を開発します。理論はXの「理論的基礎」であると言えるかもしれないと思います。次に、X = computationを設定します。多くの計算モデルがあり、その多くは「状態」に関係しています。各モデルには独自の「理論」があり、モデル間で「翻訳」することもできます。どのモデルがより「基本」であるかを言うのは難しいと思います---それらは単に異なる目標を念頭に置いて設計されています。
チューリングマシンは、何が計算可能かを定義するように設計されました。したがって、特定の問題に対するアルゴリズムが存在するかどうかを気にする場合、彼らは良いモデルを作ります。このモデルは、時には勉強に悪用された効率のアルゴリズムや硬さだけ多項式/非多項式を心配している場合、それは少なくとも、良い十分だという口実の下で、問題のを。RAMモデルは実際のコンピューターに近いため、アルゴリズムの正確な分析が必要な場合に適しています。それはに優れている問題の硬度に下限を入れていません現在のコンピューターに非常によく似たモデルを使用します。これは、可能な限りのコンピューターをカバーしたいが、それでも単なる多項式/非多項式よりも正確であるためです。これに関連して、たとえばセルプローブモデルが使用されているのを見ました。
正確性に関心がある場合は、他のモデルも役立ちます。ここには、操作上のセマンティクス(ステートフル計算のラムダ計算の類似物だと思います)、公理的セマンティクス(1967年のフロイドの帰納的主張に基づいて1969年にHoareによって開発され、The Art of Computer Programmingで普及しています)ボリューム1)、その他。
要約すると、あなたは計算のモデルを求めていると思います。さまざまな目標を念頭に置いて開発されたこのようなモデルは数多くあり、多くは状態を持っているため、命令型プログラミングに対応しています。何かを計算できるかどうか知りたい場合は、チューリングマシンを見てください。効率を重視する場合は、RAMモデルをご覧ください。正確性を重視する場合は、操作上のセマンティクスなど、「セマンティクス」で終わるモデルを見てください。
最後に、ジョン・サベージによる計算のモデルのみに関するオンラインの大きな本があることを言及させてください。それは主に効率性についてです。正確さについては、フロイド(1967)、ホア(1969)、ダイクストラ(1975)、およびプロトキン(1981)の古典的な論文から始めることをお勧めします。彼らはすべてかなりクールです。
命令型プログラムの最も単純な理論モデルは、チューリングマシン自体です。命令型プログラムの必須コンポーネントである、無制限の変更可能な状態と、その上で動作する状態マシンの両方を備えています。
Haskellプログラミング言語で行われているように、プログラムをグローバルステートの変更されたバージョンを渡して返すモナド演算の構成と見なすことにより、命令型プログラミングを関数型プログラミングに組み込むこともできます。
要するに、命令型プログラミングは機械語とプログラミングの実践から進化したと言えます。一方、モナドは、命令型プログラミング言語の機能のセマンティクスを記述するための適切なセマンティックフレームワークを提供します。Moggiによる論文 「計算とモナドの概念」は、正式な基盤を確立しました。Phil Wadlerはこのアイデアを広め、プログラミング言語Haskellに命令型機能を組み込むための重要な方法であることに大きく貢献しました。Plotkinによる最近の研究と計算のべき概念がモナドを決定する すべてではありませんが、一部の(命令型)計算の概念は実際にモナドを与えます。つまり、非常に本質的な方法で、モナドは命令型(およびその他の)計算の概念に対応します。
私はこの質問に遅れて来ていますが、それは魅力的な質問です。だから、ここに私の意見があります。
私が学部生だった頃、数学の素晴らしい教授がいて、数学の歴史と発展に関する講義をしていました。彼によると、数学は「拡大」と「統合」の波で発展しました。拡張フェーズでは、これまで知られていなかった新しいアイデアが検討され、調査されました。次に、統合フェーズ中に、新しい理論が既存の知識体系に統合されました。しかし、20世紀には、拡張と統合が並行して行われていると彼は言いました。
命令型プログラミングは現在、数学の拡張活動です。以前は「不明」でした。(それは完全に真実ではないかもしれない 。Hoareは、ユークリッドがGeometryで命令型プログラミングのようなことをしていたと言っている。彼らにとっての損失は大きい。しかし、私はコンピューターサイエンスのすべてを抽象的な意味での数学の分野と考えています。私たちはそれを研究しており、その過程で数学を拡大しています。
ですから、命令型プログラミングに先験的な理論的根拠があるかどうかは特に気にしません。見つからない場合は、探しに行きましょう。私たちが知っていることから、命令型プログラミングは素晴らしく深く美しいことがわかっています。関数型プログラミングは比較して見劣りします。しかし、この理論をすべて人々に伝えるためには、やるべきことがたくさんあります。
関数型プログラミングは数学に明確な基盤を持っています。関数型プログラミング言語は関連する数学と並行して進化し、その設計者は通常数学を高く評価していたためです。強固で率直な関係は、自己実現的な予言です。
命令型プログラミングには、ビジネスやエンジニアリングの問題とより密接に結びついた非常に厄介な歴史があり、歴史的には、コンパイラとそれらが生成するコードのパフォーマンスに数学的な形式を尊重するよりもはるかに関心がありました。
多くの人々は、命令型プログラミングを(従来の)機能的な用語で説明しようとしました。これはあなたが探しているものに最も近いかもしれませんが、これらの試みは常に厄介で退屈で法医学的です。CLRの進捗/保存の証拠を読むよりも、顔から目を引き裂くほうがましだと確信しています。
通常、まともなpl教科書(Pierceの型とプログラミング言語など)の終わりに近づくと、命令型言語機能の正式なモデリングが見られるようになります。これはあなたにとって興味深いかもしれません。
An Axiomatic Basis for Computer Programming
CAR HOARE
この論文では、幾何学の研究に最初に適用され、後に数学の他の分野に拡張された技術を使用して、コンピュータープログラミングの論理的基盤を探求しようとしました。これには、コンピュータープログラムの特性の証明に使用できる公理と推論規則のセットの解明が含まれます。そのような公理と規則の例が与えられ、簡単な定理の正式な証明が表示されます。最後に、これらのトピックの追求から、理論的および実用的な重要な利点が得られる可能性があると主張されています。
http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.85.8553&rep=rep1&type=pdf
次に、アレクサンドルが言ったことは、チューリングマシンが命令型プログラミングの元の理論的基礎を提供したということです。命令型プログラミング言語の編成がマシンアーキテクチャを反映している限り、John Von Neumannの仕事もその理論的基盤の重要な部分になると思います。
ホアロジックと分離ロジックに言及している投稿は、この件に関する正しい投稿です。Hoareロジックを使用すると、プログラムのヒープ構成全体のプロパティを指定できます。また、分離ロジックは、プロパティが保持するコードのセグメントに事前条件と事後条件として指定できる「分離接続詞」を使用できる、より現代的な相対です残りのヒープを定量化する際にプログラムセグメントが操作するヒープの部分。
haskellではモナドが使用されるのは、評価制約の順序のエンコードと「IOの使用可能性」プロパティの明示的な追跡を可能にする抽象化だけであるため、モナドに関する答えは厳密には正確ではありません。
ホーア/分離ロジックはモナドと見なすことができることと、これらのトピックを調査しているハーバード大学のynotプロジェクトなど、多くの現代的なプロジェクトがあることを指摘する価値があります。
分離ロジックの研究は継続的かつ活発な分野です。
私はこの質問に後ほど出ますが、それにも同様に魅了されます。
命令型プログラミングの理論が関数型プログラミングの理論よりも落ち着いていると思われる理由は私を回避します。単純な命令型言語での再帰の意味の分析から、1969年にスコットとデバッカーに真剣になり始めたと思われます[1]。命令型言語が機能を獲得すると、ストーリーは少し乱雑になりますが、それは金属に近づくために支払う代価です。1980年に、より包括的な取り組みの1つとして、de Bakker、de Bruin、およびZuckerがこの主題に関するモノグラフを作成しました[2]。他のものは上で言及されました。もちろん、これらの参照は日付の分離ロジックよりも前ですが、[2]それにもかかわらず配列と相互再帰的な手順に取り組んでいます。
[1]:1969年に未公開ですが、Jaco W. de BakkerおよびDana S. Scottとして登場しました。プログラムの理論、 1-30ページ。Klop et al。JW de Bakker、25 jaar semantiek。CWI、アムステルダム、1989。LiberAmoricum。
[2]:Jacobus W. de Bakker、Arie de Bruin、Jeffrey Zucker:プログラムの正確性の数学的理論。プレンティスホール1980。
質問をした直後に、マクマスター大学のマークベンダーが論文:Assignment Calculus:A Pure Imperative Reasoning Language(2010 Sep 8)を発表しました。この論文では、ラムダ計算に対応するシンプルで命令型の言語について説明します。
割り当て計算は、割り当て
X:=t
、シーケンスt;u
、プロシージャ形成¡t
、およびプロシージャ呼び出しの4つの基本構成のみで構成されます!t
。ACには、操作セマンティクス、表示セマンティクス、および用語書き換えシステムの3つの解釈があります。3つは同等であることが示されています。
Mark Benderの論文は、遅延評価、バックトラッキング、手順構成で拡張されたバリアントを調査し続けています。これは、小さな拡張の使用によるラムダ計算の調査に似ています。
全体として、論文はOPの質問に対する比較的直接的な答えを提供します。