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

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

2
ゼロ型の方程式の法則は何ですか?
免責事項:私は型理論を気にしているが、自分自身を型理論の専門家とは考えていない。 単純に型付けされたラムダ計算では、ゼロ型にはコンストラクターと一意のエリミネーターがありません。 Γ⊢M:0Γ⊢initial(M):AΓ⊢M:0Γ⊢initial(M):A\frac{\Gamma \vdash M \colon 0}{\Gamma \vdash initial (M) \colon A} 表示の観点から、式 は明らかです(型が意味をなす場合)。initial(M1)=initial(M2)initial(M1)=initial(M2)initial (M_1) = initial(M_2) ただし、その観点から、場合、推定することもできます。この演ductionはより強いように見えますが、それを示す特定のモデルは私を避けます。M,M′:0M,M′:0M,M' \colon 0M=M′M=M′M = M' (しかし、いくつかの証明理論的な直観があります:住民を獲得するためにどの矛盾を使用しても構いませんが、異なる矛盾証明があるかもしれません。) だから私の質問は: ゼロ型の標準方程式は何ですか? それらのいずれかが法または法に分類されていますか?ηη\etaββ\beta

2
関数型プログラミングの違いリスト
質問岡崎以来の純粋に機能的なデータ構造の新機能 (論理プログラミングではなく)、およびjbappleの叙事詩の答えは、私は最近、これが見つけるために私を導いた。に興味を持ってきたものですこれは、関数型プログラミングでは、差分リストを使用して言及した差分リストの Haskellのための実装を。2つの質問があります(StackExchangeで2つの異なる質問をする必要がある場合は、ご容赦ください。)。 簡単な質問は、Haskellライブラリにあるもの以外に、関数型プログラミングや実装の違いリストの学術的検討を知っている人はいますか?jbappleの答えは、差分リストの引用を提供しませんでした(ロジックプログラミングの差分リストは、伝承と、Around Here Somewhere(TM)にあるいくつかのソースにあります)。Haskellの実装を見つける前に、そのアイデアが論理から関数型プログラミングに飛躍したことを知りませんでした。確かに、Haskellの差分リストは高階関数の自然な使用であり、ロジックプログラミングのものとはまったく異なる動作をしますが、インターフェイスは確かに似ています。 私が聞きたかったのは、もっと興味深い(そしてずっと曖昧な)ものは、前述のHaskell差分リストライブラリの主張された漸近的上限かどうかです。正しい/妥当と思われるです。私の混乱は、怠inessな複雑さの推論について明らかなものを見逃しているためかもしれませんが、大きなデータ構造上の置換(またはクロージャー形成、変数ルックアップ、または何か)が常に一定の時間がかかる場合にのみ、主張された境界が意味をなします。または、「キャッチ」とは、単に「ヘッド」と「テール」の実行時間に制限がないということです。これらの操作は、遅延計算/置換の任意の山を耕さなければならないからです。

3
手動メモリ管理またはランタイムガベージコレクションなしのタイプベースのメモリの安全性?
HaskellやIdrisのような、ガベージコレクションなしのシステムプログラミングを目的とし、ランタイム(または少なくともCとRustの「ランタイム」)を持たないタイプフルで純粋な関数型プログラミング言語が必要だったとします。多少なりとも、ベアメタル上で実行できるもの。 手動メモリ管理やランタイムガベージコレクションを必要としない静的メモリの安全性のオプションにはどのようなものがありますか?また、HaskellやIdrisに類似した純粋な関数の型システムを使用して問題を解決するにはどうすればよいですか?

2
Alternative、MonadPlus(LeftCatch)とMonadPlus(LeftDistributive)の関係は何ですか?
フォローアップモナドプラスではなく、代替であるモナドの例は何ですか?: がモナドであると仮定します。関係はbetweem何ですかmがあることオルタナティブ、MonadPlusCatchとMonadPlusDistr?mmmmmm6つの可能性のあるペアのそれぞれについて、一方が他方を暗示しているという証拠、またはそれが暗示していない反例のいずれかを持ちたいと思います。 (私は使用しています 左キャッチ規則を満たすMonadPlusを区別するMonadPlusCatch: mplus (return a) b = return a 左分配規則を満足させるMonadPlusを区別するMonadPlusDistr: mplus a b >>= k = mplus (a >>= k) (b >>= k) HaskellWikiのMonadPlusを参照してください。) 私の現在の知識と直感は次のとおりです。 MonadPlusDist オルタナティブ - おそらく真 - それは簡単なようで、私は私が証明のスケッチ持っていると信じて、私はそれをチェックしますし、それが正しいなら、私はそれを投稿します AndrewCはこの部分を答えました。→→\rightarrow →→\rightarrow Maybe →→\rightarrow MaybeT (Either e)MaybeT m' ((pure x) <|> g) <*> a = -- LeftCatch …

6
ラムダ計算を入力した関数は計算できません
型付きラムダ計算ではなく型なしラムダ計算で計算できる関数の例をいくつか知りたいだけです。 私は初心者なので、背景情報を何度か繰り返していただければ幸いです。 ありがとう。 編集:型付きラムダ計算により、System Fと単純型付きラムダ計算について知るつもりでした。関数とは、チューリング計算可能な関数を意味します。

2
さまざまなプログラミング言語機能のセマンティクスの調査はありますか?
さまざまなプログラミング言語機能のセマンティクスに関する調査(論文、書籍の章、チュートリアル、リンクなど)がありますか?私はもともとここhttp://www.digitalmars.com/d/2.0/comparison.htmlのDの機能に圧倒されました stackoverflowで同様の質問をし、これら2つのサイトの視点が異なることを理解していますが、ここから何が得られるかを確認したいと思います。 返信ありがとうございます!メタに関する提案をしてくれたDave Clarkeに感謝します!


1
最小の通常のラムダ項が最速ではない例
してみましょうsizesizesizeのλλ\lambda次のように定義され-terms: size(x)=1size(x)=1size(x) = 1、 size(λx.t)=size(t)+1size(λx.t)=size(t)+1size(λx.t) = size(t) + 1、 size(ts)=size(t)+size(s)+1size(ts)=size(t)+size(s)+1size(t s) = size(t) + size(s) + 1。 λλ\lambda -term tの複雑さを、txからその正規形へのttt並列ベータ削減の数として定義する(Levyの意味で最適な評価を使用)。txtxt x 私は同じ関数に対して2つの通常の λλ\lambda -termsの例を探しています。ここで、より大きな用語はより複雑ではありません。 ... 明確にするために編集する 私が尋ねていることは明らかではないように思えるので、堅実な例を挙げようとします。多くの場合、関数の「単純な」/「最も単純な」定義は遅く、最適ではないという考えがあります。データ構造や数式などを追加する必要があるため、パフォーマンスが向上すると用語の複雑さが増します。優れた例はfibonacci、「単純」に次のように定義できます。 -- The fixed fibonacci definition fib_rec fib n = if (is_zero x) then 1 else fib (n - 1) + f (n - …

2
ユニバース階層による遺伝的代替
Simple Lambda CalculusおよびLogical Frameworkの明確な用語とタイプを使用した遺伝的代替について読みました。 私は疑問に思っています、宇宙階層を持つ従属的に型付けされたシステムに遺伝的代替の例はありますか?すなわち、など。Tr u e :SEのトン0:SEのトン1:SEのトン2True:Set0:Set1:Set2 True : Set_0 : Set_1:Set_2 私は特に、そのようなシステムで誘導対策を確立する方法を疑問に思っています。単純に型付けされたバージョンでは、置換される変数の型が構造的に減少しています。これは依存型では機能しません。LFでは、私がリンクした論文は単純に型付けされた用語の消去を使用して、型の形状の帰納を行います。 ただし、次のようなものがある場合、ユニバース階層では単純型への消去は機能しません。 f:(x :SEのトン1)→ x → TR U Ef:(x:Set1)→x→True f : (x : Set_1)\to x \to True、 f ((y:Tr u e )→ TR U E → Tr u e ): Tr u e →Tr u e →TR …

5
使用からバインダーまでの関数でバインドされた変数を表現する
バインドされた変数を構文で表す問題、特にキャプチャ回避置換の問題はよく知られており、いくつかの解決策があります。 しかし、別のかなり明白なアプローチがあるようです。それにもかかわらず、私はどこでも使用されていません。つまり、基本構文では、「」と書かれた「変数」という用語が1つだけあり、その後、各変数をスコープ内のバインダーにマッピングする関数を個別に指定します。だから、λのような-termは、∙∙\bulletλλ\lambda λx.(λy.xy)λx.(λy.xy) \lambda x. (\lambda y. x y) と書かれます。(λ 。∙ ∙ )、および機能は、最初のマップになる∙を最初にλ及び第∙第二のλ。したがって、de Bruijnインデックスのようなもので、対応するバインダーを見つけるために用語を終了するときに「λsをカウントする」だけでなく、関数を評価するだけです。(これを実装のデータ構造として表す場合、各変数用語オブジェクトに、対応するバインダー用語オブジェクトへの単純なポインター/参照を装備することを考えます。)λ.(λ.∙∙)λ.(λ.∙∙)\lambda. (\lambda. \bullet\bullet)∙∙\bulletλλ\lambda∙∙\bulletλλ\lambdaλλ\lambda 明らかに、これは人間が読むためのページに構文を書くのには賢明ではありませんが、どちらもde Bruijnインデックスではありません。数学的には完全に理にかなっているように思えます。特に、キャプチャ回避の置換は非常に簡単になります。置換する用語をドロップするだけで、バインディング関数を結合できます。それは「自由変数」の概念を持っていないのは事実ですが、それから(再び)de Bruijnインデックスも実際にはありません。どちらの場合でも、自由変数を含む用語は、「コンテキスト」バインダーのリストが前にある用語で表されます。 私は何かを見逃していますか、この表現が機能しない理由はありますか?他の問題よりもさらに悪化させ、検討する価値がない問題はありますか?(私が今考えることができる唯一の問題は、用語のセットが(それらの結合機能と一緒に)帰納的に定義されていないということですが、それは乗り越えられないようではありません。)または実際に使用されている場所はありますか?


2
条件付きロジックに基づくプログラミング言語への参照
条件付きロジックは、他の条件の概念に対応するモーダル演算子で従来の論理的含意を強化するロジックです(たとえば、因果条件付き「 cause "B」を読み取ります。または確率的条件付け「」、「 given」を読み取ります)。A A | B A BA□→BA◻→BA\; \square\!\!\!\!\to BAAAA|BA|BA|BAAABBB 通常、これらのロジックはモデル理論的に研究されますが、プログラミング言語の設計(命令型アクションの入力など)への応用について疑問に思いました。 証明理論(シーケント計算/自然演de)、またはこれらの種類のモーダル演算子に基づいた型を持つプログラミング言語への参照に感謝します。 ありがとう! 編集:スタンフォード哲学百科事典には、このテーマに関する素晴らしい紹介があります。

1
EscardóのPCF +タイムアウトのメトリックセマンティクスは完全に抽象的ですか?
1999年のワークショップ論文「A Metric Model of PCF」で、MartínEscardóは、完全なウルトラメトリック空間と非拡張マップのカテゴリでPCFの簡単な解釈を行うことができることを示しました。 彼は、このモデルが適切であり、タイムアウト構成の追加をモデル化できることを示しました(つまり、一定の数のステップに対して引数を実行し、内部で終了できなかった場合に応答を返すかエラーを通知する演算子)制限時間)。その後、メトリックモデルがPCF +タイムアウトに関して完全に抽象的であるかどうかを調査するのが自然であると提案しました。 誰かがこれを調査しましたか?もしそうなら、答えは何ですか? PCF +タイムアウトは、チューリングマシンと同じ機能を実現しますか? (余談ですが、テキストにアクセントを付けるにはどうすればいいですか?彼の姓と名の両方からアクセントを落としました。編集:名前を修正しました。センス。)

1
コヒーレンス空間にプルバックとプッシュアウトがあるのはいつですか?
\newcommand{\symp}{\Bumpeq} ≎X≎X\symp_XXXX(X,≎X)(X,≎X)(X, \symp_X)f:X→Yf:X→Yf : X \to Yf⊆X×Yf⊆X×Yf \subseteq X \times Y(x,y)∈f(x,y)∈f(x,y) \in f(x′,y′)∈f(x′,y′)∈f(x',y') \in f もしその後、、およびx≎Xx′x≎Xx′x \symp_X x'y≎Yy′y≎Yy′y \symp_Y y' もし及び次いで。x≎Xx′x≎Xx′x \symp_X x'y=y′y=y′y = y'x=x′x=x′x = x' コヒーレンス空間のカテゴリは、デカルトおよびモノイドの両方が閉じています。このカテゴリにプルバックまたはプッシュアウトが存在する場合、およびプルバックまたはプッシュアウトのモノイダル類似物が存在する場合(およびこの概念が理にかなっている場合の定義方法)を知りたいです。

2
「内部」言語の実装
"Curry-Howard-Lambek"対応の最も実用的な結果の1つは、十分に構造化されたカテゴリで構築を実行するために、多くのラムダ-カルクリ/ロジックの構文を使用できることです。 たとえば、Synthetic Differential Geometryのtopoiには、滑らかな多様体のカテゴリを含み、埋め込んだモデルがあるため、高次論理を使用して滑らかな関数を構築し、微分方程式を解くことができます。 別の例として、このホワイトペーパーでは、「ステップインデックス」が実際にはプリナチュラル(別のトポス)に対してプリシーブを処理しているだけなので、高次ロジックの構文を使用して、面倒なステップインデックス付き論理関係を定義できます。ステップの操作。 最後に、Andrej BauerがこのMOの質問で、グラフのトポスの「内部言語」で多くのことができることを示しています。 私の質問は、誰もがこのビジョンを定理の証明者の中で文字通り実現しましたか?たとえば、気になるカテゴリがデカルト閉であることがわかった場合は、「内部モード」に移動して、ラムダ計算構文(モデル固有の公理を使用)を記述してから、「外部モード」に戻ることができます。モデルのオブジェクトとして操作しますか? 極端な場合は、topos理論と高次の論理を使用することさえしたいので、ステップなしでステップインデックス付きの論理関係を記述したり、SDGを使用して定理証明で古典力学を教えることができます。誰かが拡張依存型理論を一度実装して素晴らしいツールを提供し、それを上記のように非常に異なるアプリケーションで使用することができるので、これは私にとって非常に強力なアイデアのようです。

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