タグ付けされた質問 「pl.programming-languages」

特にプログラミング言語は、そのセマンティクスに焦点を当てています。

4
論理関係とシミュレーションの違いは何ですか?
私は、プログラムの同等性を証明する方法に取り組んでいる初心者です。2つのプログラムが同等であることを証明するために、論理関係またはシミュレーションを定義することに関するいくつかの論文を読みました。しかし、私はこれら2つの手法についてかなり混乱しています。 シミュレーションは共誘導に基づいているのに対し、論理関係は帰納的に定義されていることしか知りません。なぜこのように定義されているのですか?それぞれの長所と短所は何ですか?さまざまな状況でどちらを選ぶべきですか?


6
整数ではなく自然なのはなぜですか?
自然言語がプログラミング言語の理論と型理論に関する本の著者に愛されている理由に興味があります(たとえば、J。Mitchell、プログラミング言語の基礎、B。Pierce、型とプログラミング言語)。単純に型付けされたラムダ計算、特にPCFプログラミング言語の記述は、通常、NatとBoolに基づいています。汎用の工業用PLを使用および指導している人々にとって、自然の代わりに整数を扱う方がはるかに自然です。PL理論家がnatを好む理由をいくつか挙げてください。それに加えて、少し複雑ではありません。基本的な理由はありますか、それとも伝統を称えるだけですか? UPDナチュラルの「ファンダメンタリティ」に関するすべてのコメントについて:私はそれらのすべてのクールなものについてはかなり知っていますが、PLの理論の型理論でそれらの特性を持つことが本当に重要な場合、例を見てみたいです。例えば、広く言及された誘導。基本的な1次論理のように、任意の種類の論理(単純にLCと入力)がある場合、誘導を使用しますが、派生ツリー(ラムダにもあります)の誘導を使用します。 私の質問は基本的に、プログラミング言語の基本的な理論を獲得したい業界の人々から来ています。彼らはプログラムに整数を持ち、研究されている理論(私たちの場合は型理論)への具体的な議論と応用なしに、なぜnatだけで言語を研究するのか、彼らは全くがっかりしています。

4
最も強力な種類のパーサーは何ですか?
サイドプロジェクトとして、Pythonを使用して言語を書いています。私はPlyと呼ばれるフレックス/バイソンクローンを使用することから始めましたが、そのスタイルの文法で表現できる力の限界に近づいており、インピーダンスミスマッチのために言語をハッキングすることに興味はありません。ツール。したがって、自分で書くことに嫌気はありません。 それでは、最も強力なパーサーのタイプは何ですか?論文への引用(および入門記事)も歓迎します。 (「パワフル」が正確に定義されていないことは知っていますが、少しパワフルになって、答えがどこに行くか見てみましょう)

6
C実装の最大計算能力
この本(または、必要に応じて言語仕様のその他のバージョン)を調べてみると、C実装の計算能力はどれくらいですか? 「C実装」には技術的な意味があることに注意してください。実装定義の動作が文書化されているCプログラミング言語仕様の特定のインスタンス化です。AC実装は、実際のコンピューターで実行できる必要はありません。ビット文字列表現を持つすべてのオブジェクトと、実装定義のサイズを持つ型を含む、言語全体を実装する必要があります。 この質問のために、外部ストレージはありません。実行できる唯一の入出力は、getchar(プログラム入力を読み取るため)およびputchar(プログラム出力を書き込むため)です。また、未定義の動作を呼び出すプログラムは無効です。有効なプログラムの動作は、C仕様に加えて、付録J(C99の場合)にリストされている実装定義動作の実装の説明で定義されている必要があります。標準で言及されていないライブラリ関数の呼び出しは未定義の動作であることに注意してください。 私の最初の反応は、Cの実装はアドレス指定可能なメモリの量に制限があるため、有限オートマトンに過ぎないということでした(sizeof(char*) * CHAR_BIT格納する際に個別のメモリアドレスは個別のビットパターンを持たなければならないため、ストレージのビット以上をアドレス指定することはできません)バイトポインター)。 しかし、実装ではこれ以上のことができると思います。私が知る限り、標準は再帰の深さに制限を課していません。したがって、必要なだけ再帰関数呼び出しを行うことができregisterます。アドレス指定不可能な()引数を使用する必要があるのは、有限数の呼び出しを除いてすべてです。したがって、任意の再帰を許可し、registerオブジェクトの数に制限のないC実装は、決定性プッシュダウンオートマトンをエンコードできます。 これは正しいです?より強力なC実装を見つけることができますか?チューリング完全なC実装は存在しますか?


2
タイプスペースの対数またはルート演算とは何ですか?
私は最近、計算の2つの二重性:負のタイプと分数タイプを読んでいました。このペーパーでは、合計タイプと製品タイプを拡張し、タイプa - bとにセマンティクスを提供しますa/b。 加算および乗算とは異なり、べき乗、対数、および根の1つではなく2つの逆関数があります。関数型(a→b)が型理論的なべき乗である場合、型a → b(またはb^a)が与えられたlogb(c)場合、その型または型を持つとはどういう意味a√cですか? 対数と根を型に拡張するのは理にかなっていますか? もしそうなら、この分野で何か仕事がありましたか?また、その影響を理解する方法に関する良い方向性は何ですか? カリー・ハワード通信が私を助けてくれることを期待して、私は論理でこれに関する情報を調べてみましたが、役に立ちませんでした。


5
純粋な関数型プログラミング言語用の注釈付きの正式な検証システムはありますか?
ACSL(Ansi C仕様言語)は、特別なコメントが付けられたCコードの仕様であり、Cコードを正式に検証できます。 私はまだ調べていませんが、ACSL検証で使用される正式な方法はHoare Logicに似ていると思います。ただし、Haskellなどの純粋な関数型言語の場合、フォーマル検証にどのようなフォーマリズムが使用されるか想像できません。 ACSLに似たものを作った人はいますか?そうでない場合、関数型言語の仕様注釈付きスタイルのフォーマル検証に関する研究はありますか? 私は、多くの言語(Agda、イドリスなど)がサポートする依存型付けがあることを知っていますが、Haskellでは、いくつかの(判読できない?)型の奇妙なことをせずに、依存型付けは困難です。それを念頭に置いて、HaskellはAgdaやIdrisよりもはるかに優れたライブラリをサポートしているので、機能的な形式検証のためのこのようなシステムが役立つと思いますが、これについて研究が行われたかどうかはわかりません。

3
用語の書き換えとパターンマッチングの違いは何ですか?
Lambda the Ultimateで応答がなかったので、ここでもう一度試してください。たとえば、用語書き換えシステムは、記号計算を証明する自動定理で使用され、もちろん正式な文法を定義します。用語の書き換えに基づいたプログラミング言語はいくつかありますが、私が理解している限り、この概念はパターンマッチングとして知られています。関数型言語ではパターンマッチングがよく使用されます。バリー・ジェイはパターン計算と呼ばれる理論全体を作成しましたが、用語の書き換えについては簡単にしか言及していません。それらはすべて同じ基本的な考え方を指していると感じているので、用語の書き換えとパターンマッチングを同義的に使用できますか?

2
文脈依存文法とタイプ
1)静的型付けと正式な文法との関係は、もしあれば、何ですか? 2)特に、線形有界オートマトンは、たとえばC ++またはSMLプログラムが適切に入力されたかどうかをチェックできますか?ネストされたスタックオートマトン? 3)静的型付け規則を正式な文法用語で表現する自然な方法はありますか?

6
証明ネットについてどう考えるべきですか?
この質問に対する答えで、Stephane Gimenezは、線形論理の証明のための多項式時間正規化アルゴリズムを指摘しました。Girardの論文の証明では証明ネットを使用していますが、これは実際にはあまり知らない線形論理の側面です。 さて、私は以前に証明ネットに関する論文(Pierre-Louis Curienのメモなど)を読んだことがありますが、実際には理解していません。だから私の質問は次のとおりです。私はそれらについてどう考えるべきですか?「それらについて考える方法」とは、それらの背後にある非公式の直観(例えば、それらが計算的にどのように振る舞うか、またはそれらがシークエントとどのように関係するか)と、それらについての定理の両方を意味します。 この質問に答えるには、(1)線形論理の証明理論をよく知っています(カットエリミネーションの証明がどのように行われ、焦点を絞った形であるかなど)、(2)コヒーレンス空間に関するカテゴリのセマンティクスまたはデイコンボリューション、および(3)GoI構築の非常に基本的な初歩。

2
従属型はサブタイプ化が行うすべてを提供しますか?
型とプログラミング言語はサブタイピングにかなり重点を置いていますが、私が知る限り、サブタイピングは特に基本的なものではないようです。サブタイピングは、依存型よりも多くのものを提供しますか?依存型の操作はより多くの作業にバインドされるため、サブタイプが実際に役立つ理由を理解できます。しかし、プログラミング言語の基礎としてよりも数学の基礎として型理論に興味があります。サブタイピングに注意を払うべきですか?

4
理論的CSはいつ直観主義的証明を重視するか(またはすべき)か?
私が理解していることから(これは非常に少ないので、私は間違いを修正してください!)、プログラミング言語の理論はしばしば「直観主義的」証明に関係しています。私自身の解釈では、このアプローチでは、論理と証明可能性に関する計算の結果を真剣に受け止める必要があります。仮説から結果を構築するアルゴリズムが存在しない限り、証明は存在できません。例えば、またはいずれかのオブジェクトを非構成的に示すため、除外された中間の原理を公理として拒否する場合があります。XXX¬X¬X\lnot X 上記の哲学は、そうでないものよりも直観的に有効な証明を好むようになるかもしれません。しかし、理論的CSの他の分野の論文で直観主義的論理を実際に使用することについて、私は何の懸念も見ていません。古典的なロジックを使用して結果を証明できてうれしいです。たとえば、除外された中間の原理を使用して、アルゴリズムが正しいことを証明することを想像できます。言い換えれば、計算結果に制限のある宇宙を気にし、真剣に受け止めていますが、必ずしもこれらの結果の証明ではありません。 1.理論的なCSの研究者は、直観的に有効な証明を書くことを心配していますか?TCSの結果、特にアルゴリズムの結果がいつ直観的論理を保持するか(または、より興味深いことに、保持しない場合)を理解しようとする理論的コンピューターサイエンスのサブフィールドを簡単に想像できます。しかし、私はまだ出会っていません。 2.彼らがすべき哲学的議論はありますか?1は、コンピュータサイエンスの結果は、可能な場合intuitionistically証明されるべきである、と私たちは必要とする結果を知るべきだと主張することができように思える例えば PEMを。誰かがそのような議論をしようとしましたか?それとも、この質問はあまり重要ではないというコンセンサスがあるのでしょうか? 3.副次的な質問として、私はこれが実際に重要な場合の例を知りたいと思っています。古典的な論理では成立するが直観主義的な論理では成立しないことが知られている重要なTCS結果はありますか?または、直観主義的な論理を持たないと思われる。 質問の柔らかさをおApびします!専門家の意見を聞いた後、言い直しや再解釈が必要になる場合があります。

2
型システムに表現力の階層はありますか?
複雑性理論に存在する広範な階層に触発され、そのような階層が型システムにも存在するのではないかと思いました。ただし、これまでに見つけた2つの例は、どちらも階層(連続してますます表現力豊かな型システムを使用)ではなく、チェックリスト(直交機能を使用)に似ています。 私が見つけた2つの例は、ラムダキューブとkランクの多型の概念です。1つ目は3つのオプションを持つチェックリスト、2つ目は実際の階層です(ただし、kの特定の値に対してkランクが付けられていることはまれです)。私が知っている他のすべての型システムの機能は、ほとんど直交しています。 私は自分の言語を設計しているので、これらの概念に興味があり、現在の既存のタイプシステムの中でどのようにランク付けされているか非常に興味があります(私の知る限り、タイプシステムはやや型破りです)。 「表現力」の概念は少し曖昧かもしれませんが、それはなぜ型システムがチェックリストのように見えるのかを説明するかもしれません。

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