微積分とプログラミング言語の違いは何ですか?


13

私は微積分学と呼ばれるものとプログラミング言語と呼ばれるものについてかなり混乱していると思います。

私は、微積分はプログラムの等価性について推論するための正式なシステムであると考える傾向があり、言われたかもしれません。プログラムには、マシンによって指定された操作上のセマンティクスがあります。このようにして、言語Lの(正しい)計算Lは、プログラムの等価性の証明方法です。

これは私にとって合理的な分割のように思えますが、これは一般に受け入れられている意味ですか?それとも間違っているのでしょうか?

関連して、なぜいくつかの操作上のセマンティクスは非決定的です(コンフルエントであると仮定します)?戦略の選択を自由にしておくことから何が得られますか?

これらについて明確に説明していただければ幸いです。さらに具体的なリファレンス!ありがとう!


3
それらは、同じものを見る異なる方法のための異なる言葉です。
ラファエル

1
@Raphael、質問にどのように答えますか?これは哲学をする場所ではありません。
fade2black

4
時々、どこかで少しの哲学が必要です。
アンドレスーザレ

回答:


10

言葉の意味は決まっていませんが、私の解釈をお伝えします。

計算は、私たちがいることを何かであると計算ジャグリング方程式の意味での(テイラーシリーズや分析における積分の計算の操作を考えます)。微積分は、操作の規則が何であるかを示しますが、特定の状況でどの規則を使用する必要があるかは示しません。

プログラミング言語は教えてくれるものです計算します。ルールの使用方法を正確に教えてくれます。はるかに高速であるため、通常はコンピューターにルールを使用させます。ルールは非決定的である可能性があり、それらが非決定的である非常に良い理由があるかもしれません。計算の性質上、非決定的である(同時通信プロセスを考える)ことも、特定の戦略を修正することは、実装技術と最適化にとって有害なこともあります。

λλ

対照的に、標準MLはプログラミング言語です。これは、操作上のセマンティクス、つまり計算規則の観点から与えられます。あり我々は微積分の一種と考えて、その上に置くことができる平等(文脈的同等性、観測的同等性、など)の概念は。

もちろん、微積分とプログラミング言語としてのその表現の間には、しばしば有用な関係があります。コンフルエントな正規化は、微積分からプログラミング言語に渡す1つの方法にすぎません(悲しいことに、ある種の宗教になった人もいます)。計算とプログラミング言語の相互作用は重要です。プログラミング言語は実際に使用できますが、計算はプログラムの内容を説明します。

人々をイライラさせるだけでなく、計算とその運用上の表現に違いがないというふりをすると、プログラミングコミュニティ内のプログラミングとミニ宗教の見方がゆがむことにつながる場合があることも述べておきます。あなたは私が念頭に置いている言語を推測しようとするかもしれません。(とてもクールな言語です!)


プログラミング言語は、それと互換性のある戦略/書き換えシステムを備えた微積分学ですか?
xavierm02

ppp=p

π

プログラムについてだけでなく、その環境(状態または遷移)についても話す方程式を提示できます。しかし、私はそのようなことを微積分とは言いません。むしろ、代数モデルです。
アンドレイバウアー

Andrej、ありがとう。これは私にとって理にかなっている。私はそれが人によって異なるかもしれないことを理解していますが、私はそれが最良の答えだと思います。
グイド

2

計算の目的は、プログラムの等価性を研究することだけではなく、プログラムを研究することです。空想の計算の例は、この戦略は、(コール値ごとまたはコールバイ名)ローカルに決定されます。いつかプログラミング言語で実装できますが、最初は計算として研究されました。また、型システムを研究するために計算を使用します(Martin-Löf型理論の計算などの計算も型を計算します)。


主な違いは、計算は(比較的)形式的に勉強しやすいのに対し、プログラミング言語は(比較的)使いやすいということです。これにより、次の違いが生じます。

Calculiはミニマリストになりがちですが、PLには冗長性があります(whileループが既にある場合はループの場合、ifが既にある場合は切り替えます)。

Calculiはセマンティクスを完全に指定していますが、PLのセマンティクスは多くの場合、デフォルトのインタープリター/コンパイラーによって記述されます。


一部の操作セマンティクスは、以下を許可するため非決定的です:

  • すべての「サブセマンティクス」に関することを証明する。
  • 実装が選択できるようにし、そのために(おそらく)速度を上げます。
  • 時々、「radnom()」操作があり、確率だけを気にせず、可能なことだけを考えている場合、非決定論がそれを表す良い方法だからです。

値による呼び出しは非決定的であることに注意してください。最初に関数または引数を評価することを選択できます。


いや、それは形式化や洗練のレベルについてだとは思わない。
アンドレイバウアー

2

「プログラミング言語」と「計算」は多義語です。つまり、コンテキストに応じて異なることを意味します。

一部のコンテキストでは、プログラミング言語と計算が、「機械的に」適用できる一連の正式なルールに基づく書き換えシステムの概念と同じ概念を指すように収束しています。

この収束が時折私たちにとって不可解である理由は(実際のソフトウェア開発者や数学者ではない)私たちの仕事は、あたかもそれらが計算であるかのように具体的なプログラミング言語を考え、具体的なプログラミング言語で物理的に具体化することです。

あなたの質問に直接答えるために、計算とプログラミング言語の混乱は(存在する限り)偶然ではなく、プロジェクトです。私たちのプロジェクト。これは科学分野としての相対的な成功の証です。

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