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

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

1
「代数効果とハンドラーのための効果システム」のハンドラーのサブタイプに関する質問
論文「代数的効果とハンドラーのための効果システム」のサブタイプについて質問がありました。ハンドラー型の両側にエフェクトを追加するためのサブタイピングルールがないのはなぜですか? T!A⇒R!B⩽T!(A∪C)⇒R!(B∪C)T!A⇒R!B⩽T!(A∪C)⇒R!(B∪C) \frac{ }{ T!A \;\Rightarrow\; R!B \;\leqslant\; T!(A \cup C) \;\Rightarrow \;R!(B \cup C) } これは、ハンドラータイプの変数を左側にあるハンドラータイプよりも多くの効果を持つ計算に適用する場合に役立ちます。 ハンドラーの入力規則を使用して、ハンドラー型の両側に効果を追加できますが、これは変数では機能しません。たとえば、ハンドラーが関数の引数である場合。

2
どのような理論上のオブジェクトがC ++の概念に対応していますか?
理論的なコンピューターサイエンスのバックグラウンドはありませんが、C ++の概念がどのような理論的なオブジェクトに対応するのかを理解したいと思います。基本的に、C ++の概念では、制約のリストを満たす型のセットを定義できます。それで、理論的な観点から、どのC ++の概念が対応する、またはおおまかに対応する(そしてその場合、違いは何である)のでしょうか。

1
厳密な完全部分注文の2デカルトの閉じたカテゴリ(Hask)
プログラミング言語が合計、積、非終了を一緒に持つことができないことはよく知られているようです。 Q1。これは本当ですか?以下(または私が挙げた上記のリンク)は部分的な議論です。 ただし、どのカテゴリが関連するカテゴリであるかをある程度正確に説明した後でも、Hinzeの付属物を使用したジェネリックプログラミングでは、この問題は無視されます。特に、Haskellが厳密な連続部分注文のカテゴリによってモデル化され、合計と積を持っていることについて、彼は(おそらく予約なしで)話します。しかし、Haskellには合計がないことを知っています(右?)。(論文の一部は代わりにS e tを使用していますが、これは非終了を許可していません)。SCpoSCpo\mathbf{SCpo}SetSet\mathbf{Set} Q2 では、何が欠けていますか?4つのオプションが表示されます。 人々はしばしば、Haskellについて議論するとき、意図的に非終了を無視します。おそらく、この論文もそれをしている。しかし、なぜCPOに言及するのでしょうか。 私が議論する障壁は巧妙な方法で回避することができます。具体的には、紙モデルは、非厳密Haskellの関数の厳密な機能によってF :A ⊥ → B、他の理由。f:A→Bf:A→Bf : A \to Bf:A⊥→Bf:A⊥→Bf : A_{\bot} \to B この論文ではその制限について触れていますが、見逃しています。私はこの言及を探すためにいくらかの努力を費やしましたが、何も見つけることができませんでした。 これは実際の誤りであり、紙が主張Eitherするものはそうであるにもかかわらず、誰もがHaskellを確かに主張し続けているので、確かに(他の人々が同意するように)カテゴリカルな合計に欠けています。代わりに、帰納型と共帰型のすべての言語ですべてがうまく機能します。 バックグラウンド A≅A×1≅A×0≅0A≅A×1≅A×0≅0A \cong A \times 1 \cong A \times 0 \cong 0AAA これは、たとえば、オブジェクトがゼロの先のとがったセットのカテゴリは、2デカルト閉ではあり得ないことを意味します。 ⊥⊥\botωω\omega⊥⊥\botCPO⊥CPO⊥\mathbf{CPO}_{\bot}CPOCPO\mathbf{CPO} ⊥⊥\bot

1
ハイパーシーケンス:証明用語の割り当てまたはハイブリッドロジックへの変換
私は公理でモーダルロジックを見てきました (◊ A ∧ ◊ B )→ ◊ ((A ∧ ◊ B )∨ (A ∧ B )∨ (A ∧ ◊ B ))(◊あ∧◊B)→◊((あ∧◊B)∨(あ∧B)∨(あ∧◊B)) (\Diamond A \land \Diamond B) \to \Diamond((A \land \Diamond B) \vee (A \land B) \vee (A \land \Diamond B)) おおまかに言って、これはアクセシビリティ関係が線形であることを示しています。 ハイパーシーケンスを使用してこの言語の証明理論を与えることができるようです(S4.3のAndrzej IndrzejczakのCut-Free Hypersequent Calculusを参照してください)。 あるいは、ハイパーシーケンスの計算をハイブリッドロジックに変換する方法を誰かが示してくれれば、私も同じように幸せになります。 ポインタはありますか?

1
プレスブルガー算術における帰納的不変の存在の決定可能性
問題: 有限数の制御状態(「初期」状態と「不良」状態を含む)、有限数の整数変数、および順序付けられた状態の各ペアについて、プレスブルガー演算で表される遷移関係について考えます。 プレスブルガー算術で定義可能な、不良状態ではなく初期状態を含む帰納的不変式(=遷移関係の事後状態によって安定)が存在するかどうかを判断します。 (この問題は、プレスブルガー算術の到達可能性の問題とは異なることに注意してください。これは明らかに(2カウンターマシンからの削減によって)決定できません。) この問題は決定不可能だと思いますが、その証拠はわかりません。(明らかに半決定的です。)誰かがこれを証明しましたか?

3
アルゴリズム分析を自動化できますか?
コンパイラが最悪の場合の漸近分析を自動的に実行できるように、プログラミング言語とコンパイラの可能性について誰かが考えましたか?私が考えているユースケースは、コードを書いてコンパイルするプログラミング言語です。コンパイラーは、コードがO(n ^ 2)で実行されることを教えてくれます(たとえば)。これは、アルゴリズム分析を行う賢い人々が行うこと、おそらくループを数えることなどによって行われます。 問題の問題を停止するため、そしてP = NPの場合の多項式時間で実行されるSATのLevinアルゴリズムなど、ダブテールで機能するプログラムを使用できるため、プログラミング言語を十分に制限して、このようなもの。特定の種類のプログラミング言語がそのようなコンパイラーを使用できないようにする否定的な結果はありますか? 正確な漸近分析ではなく、「興味深い」上限を与えるシステムにも興味があります。 私は特にしていないでブラックボックスと特定の長さの入力からのサンプルの統計的手法に興味を持って、プログラムにかかる時間を見つけます。これらの方法は非常に興味深いですが、私が探している方法ではありません。おおよその限界を与える正確な方法に興味があります。 誰かが私にこの方向での仕事についてのいくつかの参照を指摘してくれれば私は非常に感謝します。

2
再開ベースのIOシステム?
私は最近、主にAbramskyの古典的な論文Retracing Some Paths in Process Algebraからの再開をいじっています。それらは非常に洗練されており(基本的にはドメイン方程式R = I → (O × R )の解)、カーンネットワークを非常に連想させます。R=I→(O×R)R=I→(O×R)R = I \to (O \times R) もちろん、この観察は私には元々ありません---それらは追跡されたモノイドカテゴリを形成し、この事実は線形論理に意味論を与えるためにAbramskyとJagadeesanによって使用されました。いずれにせよ、再開にタイプIの入力を供給すると、タイプOの出力と更新された再開r ′が得られることに注意してください。これにより、データフローノードが入力を見ると変化するという事実をモデル化できます。お入りください。rrrIIIOOOr′r′r' 結果として、MLやHaskellなどの高次言語でI / Oトランスデューサーを構築するための優れたAPIを提供できるように思えますが、そのようなことを説明する論文は見つかりません。しかし、彼らは何十年も前から存在していて、ゴードン・プロトキンがそれらを発明したので、彼らが曖昧にだまされてきたようではありません。だから、誰かがそのような用途に使用されているのを見たことがあるのではないかと思いました。

2
基本機能を取り込む命令型プログラミング言語に対する簡単な制限はありますか?
whileプログラムの言語は、計算可能に列挙可能な関数を表現できます。(これは、変数に対する算術演算が、たとえば、インクリメントとデクリメントだけであっても当てはまります。) 場合whileによって交換されfor、常に囲まれたループを作り、言語は、唯一の原始再帰関数を表現することができます。 私は最近、基本関数のクラスに気づきました。これは、プリミティブな再帰関数の下に厳密にありますが、厳密には指数階層の上にあります。 明らかに、基本的な関数を正確にキャプチャする命令型プログラミング言語を定義することは可能です。しかし、私の質問は、 基本的な関数に限定しwhile、単純な(while-> for)プリミティブな再帰関数への制約として説明できるプログラムの言語に構文上の変更はありますか? forもちろん、プログラムの制限でも十分です。おそらく、私が絶対に単純に述べたもの、余分な演算子の追加などを必要としない同等の単純さを持つものを探しているのではないことを明確にする必要があります。 編集:代表的なfor言語の例は、Brainerd and Landweberの "Theory of Computation"(1974)のPL- {GOTO}です。この場合、各プログラムには有限数の無制限の変数があり、それぞれに自然数を含めることができます。これは基本的に次のコマンドで構成されています。 X <- 0 (変数に0を割り当てます) X <- Y(の値をYに割り当てますX) X <- Y + 1(の値の後続をYtoに割り当てますX) LOOP X; ... END;(含まれているコードブロックを繰り返しXます。変更しませんX) 著者は、これが原始的な再帰関数を正確に表現できるという証拠を示しています。PL はのGOTO代わりに使用するため、言語PLは質問と完全には一致しませんwhile。PL-{GOTO}はPLから削除GOTOすることによりPLから派生します。ただし、PLプログラムはプログラムと同じくらい強力whileであり、このGOTO除去変換は単にで置き換えるのwhileと同じくらい簡単に述べられていforます。(おそらく、おそらくさらに簡単です。) 編集2:http : //en.wikipedia.org/wiki/Total_Turing_machineは、この結果が「マイヤー、AR、リッチー、DM(1967)、ループプログラムの複雑さ、Proc。ACM全国会議の465、

2
オリジナルのHoare Logicターミネーションペーパー
Hoare(または私が推測する他の誰か)が終了(Total Correctness)について議論している元の論文を探しています。または、「バニラ」Hoareロジックの終了に関する他の初期の作業(私はCのようなおもちゃの言語のHLを意味していると思います)。 私はコンピュータープログラムの公理的根拠(PDF)(本質的に部分的正しさのフレーバーのHoareロジックのようです)と 、whileルールの証明に言及しているforルールに関するメモを見てきましたが、見えませんミッシングリンクを見つけるために; 終了/ whileルール/全体の正確性に関する論文。

1
カリー・ハワード通信に関連する証明技法
プログラムの正式な概念に関する情報源を探しています。これはCurry-Howardの対応と密接に関連しているようですが、これをUniversal Turing Machinesに追跡し、TMの説明と入力を読み取るその機能を利用することもできます。 カリーハワードのコレスポンデンスについて読むとき、UTM-sの原始性がプログラムの研究に害を及ぼす可能性があると感じます。高レベルの計算システムを定義して検討するという反対のアプローチはありますか?それについての良いリソースは何ですか?

2
チューリングマシン(またはより単純な形式言語)の差分計算の開発で行われた作業はありますか?
開発者が考案した概念的な理想的なチューリングマシン(たとえば、ソフトウェア開発者が意図するもの)とと呼ぶ、実際に設計されたソフトウェアを表すマシンとの差異計算の概念を開発しようとしています実装、言うMのαとMのβをそれぞれ、。M私M私M_IMαMαM_\alphaMβMβM_\beta 具体的には、理想的なマシンで処理される言語と、開発/実装されたマシンで処理される言語との間のソフトウェアプログラムのエラーの自動検出における制限(たとえば、ライスの定理による)を調べることに関心があります。 指定された2つのチューリングマシンの違いを探る、またはより低いレベルのフォーマル言語を除外するといういくつかの概念で機能する以前の作業への参照は、非常に役立ち、高く評価されます。書くより引用するほうがいいからです:-)。


3
厳格な整合性と順次整合性の違い
厳格で順次的な一貫性は独立してかなりよく理解しています。 厳密なCは、基本的に、命令がグローバルクロックで実行される実際の順序を強制します。 Sequential Consistencyは、基本的に1つのプロセッサでのみ順序を強制します。 でもいくつかの文献をまとめるのに苦労しています。 http://www.cs.nmsu.edu/~pfeiffer/classes/573/notes/consistency.htmlは、メモリの「ラグ」を可能にする順次一貫性について説明しています。書き込みがすべてのプロセッサに伝播するまでに時間がかかる場合があります。しかし、それが行われると、一度にすべてに届きます。したがって、以下はSequential Consistencyで有効です P1: W(x)1 ----------------------- P2: R(x)0 R(x)1 今私が気にしているのは、次のプロセスです。これはデッカーのアルゴリズムのようなものです。 P1: W(x)1 R(y)0 ----------------- P2: W(y)1 R(x)0 これは、シーケンシャル一貫性(http://portal.acm.org/citation.cfm?id=1787234.1787255 pg 2)の下では確かに可能ではないはずです。この結果が得られる合計順序はありません。 しかし、シーケンシャルな一貫性により書き込みの伝播が遅くなり、1つのスレッドが他のプロセッサの状態を把握していない可能性があるという考えからは理にかなっています。 ここで何が欠けていますか?

1
型なしコンビネーターの正規化(または永続的)削減戦略はありますか?
この質問に触発されて、正規化または永続的であることが知られている型指定されていないSKIコンビネーターの削減戦略があるかどうか知りました。 ここ(12 で説明)で説明されているように、コンビネーター微積分の非決定的な規則は次のとおりです。 Ix→xIx→xIx \rightarrow x Kxy→xKxy→xKxy \rightarrow x Sxyz→xz(yz)Sxyz→xz(yz)Sxyz \rightarrow xz(yz) x → x の場合xy→x′yxy→x′yxy \rightarrow x'yx→x′x→x′x \rightarrow x' y → y の場合xy→xy′xy→xy′xy \rightarrow xy'y→y′y→y′y \rightarrow y'


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