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

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

7
TCSのカテゴリー理論の堅実な応用?
私はいくつかのカテゴリー理論を学んでいます。それは確かに物事を見る別の方法です。(それを見たことがない人のための非常に大まかな要約:カテゴリー理論は、オブジェクト間の機能的関係の観点のみであらゆる種類の数学的行動を表現する方法を提供します。例えば、2セットのデカルト積のようなものは、セットのメンバーである要素の観点からではなく、他の関数がそれとともにどのように動作するか) カテゴリ理論はプログラミング言語/ロジック(「理論B」)側で有用であるという漠然とした理解があり、どの程度のアルゴリズムと複雑さ(「理論A」)が役立つか疑問に思っています。しかし、理論Bのカテゴリ理論の確かな応用を知っていれば、それは私が着手するのに役立つかもしれません(理論Aにはこれまで見つかった応用はないことをすでに暗黙のうちに仮定していますが、それらのいくつかがあれば、それは私にとっては良い!) 「確実なアプリケーション」とは、次のことを意味します。 (1)アプリケーションはカテゴリ理論に強く依存しているため、機械を使用せずに達成することは非常に困難です。 (2)アプリケーションは、カテゴリー理論の少なくとも1つの非自明な定理(たとえば、米田の補題)を呼び出します。 (1)は(2)を暗示している可能性がありますが、これらが「実際の」アプリケーションであることを確認したいと思います。 「理論B」の背景はありますが、しばらく経っていますので、専門用語の削除は大歓迎です。 (回答の種類によっては、後でこの質問をコミュニティWikiに変えることもあります。しかし、説明が十分にある優れたアプリケーションが本当に欲しいので、回答者に何かに報酬を与えないのは残念に思えます。)

7
TCSのどの興味深い定理がAxiom of Choiceに依存していますか?(あるいは、決定の公理?)
数学者は、選択の公理(AC)および決定の公理(AD)を心配することがあります。 選択の公理:任意の集合を考える空でない組は、関数があるセットが与えられると、そのにおける、メンバー返し。 f S C SCC{\cal C}fffSSSCC{\cal C}SSS 決定性の公理:を無限に長いビット文字列のセットとする。アリスとボブは、無限の文字列が構築されるまで、アリスが最初のビットを選び、ボブが2番目のビット選ぶというゲームをします。場合、アリスがゲームに勝ち、場合、ボブがゲームに勝ちます。仮定は、すべてのに対して、プレイヤーの1人に勝利戦略があるということです。(たとえば、がすべて1の文字列のみで構成されている場合、Bobは有限数の動きで勝つことができます。)B 1 、B 2、X = B 1 B 2 ⋯ X ∈ S X ∉ SSSSb1b1b_1b2b2b_2x = b1b2⋯x=b1b2⋯x = b_1 b_2 \cdots X ∈ Sx∈Sx \in SX ∉ Sx∉Sx \not \in S SSSSSSS これら2つの公理は互いに矛盾していることが知られています。(それについて考えるか、ここに行きます。) 他の数学者は、証明におけるこれらの公理の使用にほとんど注意を払っていません。私たちは主に有限のオブジェクトで作業していると考えているため、それらは理論的なコンピュータサイエンスとはほとんど無関係のようです。ただし、TCSは計算上の決定問題を無限ビット文字列と定義し、(たとえば)自然の漸近関数としてアルゴリズムの時間の複雑さを測定するため、これらの公理のいずれかの使用が忍び寄る可能性が常にありますいくつかの証拠に。 これらの公理の1つが必要な場所を知っているTCSで最も印象的な例は何ですか?(例を知っていますか?) 少しだけ予言するために、(すべてのチューリングマシンのセットに対する)対角化引数は、選択の公理の適用ではないことに注意してください。チューリングマシンが定義する言語は無限ビット文字列ですが、各チューリングマシンには有限の記述があるため、ここでは無限に多くの無限集合に対して選択関数を実際に必要としません。 (例がどこから来るのかわからないので、多くのタグを付けました。)

12
命令型プログラミングの理論的根拠は何ですか?
関数型プログラミングには、ラムダ計算と組み合わせロジックの理論的基礎があります。統計計算に携わる人として、これらの概念はモデリングに非常に役立つと思います。 命令型プログラミングと同等の数学的な基礎はありますか、それとも単に機械語での実用的なハードウェアアプリケーションとその後のFORTRANの開発から発展したのですか?

7
表示的セマンティクスを構成するものは何ですか?
で、別のスレッド、アンドレイ・バウアーは、表示的意味論を次のように定義されます。 プログラムの意味は、その部分の意味の関数です。 この定義について私を悩ませているのは、一般に非表示的セマンティクス、つまり構造的操作セマンティクスと一般に考えられているものから、表示的セマンティクスと一般に考えられているものを選び出さないように見えることです。 より正確には、ここでの重要な要素は、セマンティクスのモジュール性、または構成性、または別の言い方をすれば、プログラムの抽象的な構造に従って定義されているという事実です。 現在、ほとんどの(すべて?)正式なセマンティクスは構造的である傾向がありますが、これは必須の定義ですか? だから、私の質問は:表示的意味論とは何ですか?


7
証明可能な正しいプログラムについて私たちは何を知っていますか?
コンピュータープログラムの複雑さの増大と、コンピューターの社会における重要性の高まりにより、コードが正しく機能することを正式に証明しなければならないプログラミング言語をまだまとめて使用しないのはなぜなのか疑問に思います。 私はこの用語が「証明コンパイラ」であると信じています(ここで見つけました):プログラミング言語をコンパイルするコンパイラで、コードを書くだけでなく、コードの仕様を述べ、コードが準拠していることを証明する必要があります仕様(または自動化された証明者を使用してそうする)。 インターネットを検索しているときに、非常に単純なプログラミング言語を使用しているプロジェクト、または現代のプログラミング言語に適応しようとする失敗したプロジェクトのみを見つけました。これは私の質問につながります: 本格的なプログラミング言語を実装する認定コンパイラはありますか、またはこれは非常に難しい/理論的に不可能ですか? また、私は、任意の複雑性クラスのような証明可能なプログラム、関与見ていました「証拠が存在するチューリングマシンですべての言語のクラスを決定可能なこと、このチューリングマシンの停止」私が呼ぶ、するアナログとして、、再帰言語のセット。ProvableRProvableRProvableRRRR このような複雑なクラスを勉強することの利点を見ることができます:たとえば、の場合、Halting問題は決定可能です(明白な方法で定義されたは、それが決定可能な言語の最大クラスになると推測し)。さらに、実際に役立つプログラムを除外することはできないと思います。終了を証明できない場合に誰がプログラムを使用するでしょうか?ProvableRProvableRProvableRProvableREProvableREProvableRE 私の2番目の質問は: 含まれる言語に特定のプロパティがあることを証明することを要求する複雑性クラスについて何を知っていますか?

6
正規表現は
コンピュータサイエンスのバックグラウンドを持つ人でさえ、正規表現とは何かを尋ねると、その答えは、有限状態オートマトンの範囲内にあるという制約を超える可能性があります。 たとえば、「正規表現」 /^1?$|^(11+?)\1+$/ 著名なPerlパーソナリティAbigail(および2002年以降のPerlのテストスイートの一部)によって作成された複合単項数のみを受け入れるマシンについて説明していますが、Peter Linzの第3版の正式な言語とオートマトンの演習4.5(b)では読者が使用しますそれを証明するポンピング補題 L = { an:n i s n o t a p r i m e n u m b e r } L={an:n is not a prime number}\mathcal{L} = \left\{ a^n : n\ \mathrm{is\ not\ a\ prime\ number} \right\} 通常の言語ではありません。 区別が重要なコンテキストでは、厳密に強力な表現を何と呼ぶべきでしょうか?

8
高次アルゴリズム
よく知られているアルゴリズムのほとんどは、入力と出力が「プレーン」データであるという意味で、1次です。いくつかは、ソート、ハッシュテーブル、またはマップとフォールド関数など、些細な方法で二次的なものです:それらは関数によってパラメーター化されますが、他の入力データの一部でそれを呼び出すことを除いて、それで実際に面白いことは何もしません。 一部は2次ですが、やや興味深いものもあります。 モノイドによってパラメーター化されたフィンガーツリー 単調な述語でフィンガーツリーを分割する 通常はモノイドや述語などによってパラメータ化されたプレフィックス和アルゴリズム。 最後に、私にとって最も興味深い意味で「真に」高次のものもあります。 Yコンビネーター 差分リスト 他の重要な高次アルゴリズムは存在しますか? 私の質問を明確にするために、「非自明な高次」の下で、「アルゴリズムのインターフェースおよび/または実装で重要な方法で計算形式の高次機能を使用する」ことを意味します

3
型クラスとオブジェクトインターフェイス
型クラスを理解しているとは思わない。私はどこかで、型が実装する「インターフェース」(OOから)として型クラスを考えることは間違っており、誤解を招くものだと読みました。問題は、それらを異なるものとみなし、それがどのように間違っているかを見るのに問題があることです。 たとえば、(Haskell構文の)型クラスがある場合 class Functor f where fmap :: (a -> b) -> f a -> f b これはインターフェース[1](Java構文)とどのように違いますか interface Functor<A> { <B> Functor<B> fmap(Function<B, A> fn) } interface Function<Return, Argument> { Return apply(Argument arg); } 考えられる違いの1つは、特定の呼び出しで使用される型クラスの実装が指定されず、環境から決定されることです。たとえば、この型の実装で使用可能なモジュールを調べます。これは、OO言語で対処できる実装アーティファクトのようです。コンパイラー(またはランタイム)が、タイプに必要なインターフェースを公開するラッパー/エクステンダー/モンキーパッチャーをスキャンできるように。 私は何が欠けていますか? [1] オブジェクト指向言語であるため、f a引数が削除されていることに注意してくださいfmap。オブジェクトでこのメソッドを呼び出すことになります。このインターフェイスは、f a引数が修正されていることを前提としています。

4
プログラミング言語理論の研究と未解決の課題
このようないくつかの一般的な議論の精神で、私はプログラミング言語の研究における未解決の課題とホットなトピックについて意見を集めるつもりでこのスレッドを開いています。議論がプログラミング言語の研究の将来に関する意見を表面化させることさえ期待されます。 この種の議論は、PLに興味のある私のような新入生の研究者だけでなく、すでにある程度関与している研究者にも役立つと考えています。

5
効率的な計算のためのプログラミング言語
すべての入力で停止し、他の入力で停止するすべてのマシンを許可するプログラミング言語を記述することは不可能です。ただし、このようなプログラミング言語を標準の複雑度クラスに簡単に定義できるようです。特に、すべての効率的な計算と効率的な計算のみを表現できる言語を定義できます。 たとえば、ようなものの場合、お気に入りのプログラミング言語を使用し、プログラムを記述した後(Turing Machine対応)、ヘッダーに3つの値を追加します:整数、整数、およびデフォルト出力。プログラムがコンパイルされると、出力チューリングマシン入力与えられたのサイズの実行上のためのステップ。ステップが開始する前にが停止しない場合、デフォルトの出力出力しますM ′ c k d M x n M ′ x c n k M ′ c n k d PPPPM′M′M'ccckkkdddMMMバツxxnnnM′M′M'バツxxc nkcnkc n^kM′M′M'c nkcnkc n^kddd。誤解がない限り、このプログラミング言語を使用すると、すべての計算を表現できます。ただし、この提案された言語は本質的に興味のないものです。PPP 私の質問:計算可能な関数(すべての効率的に計算可能な関数など)のサブセットを非自明な方法でキャプチャするプログラミング言語はありますか?ない場合、これには理由がありますか?

4
契約と依存型付けとの関係
私は依存型とプログラミング契約に関するいくつかの記事を読んでいます。私が読んだことの大部分から、契約は動的にチェックされる制約であり、依存型は静的にチェックされるようです。 部分的に静的にチェックされる契約を持つことは可能だと私に思わせたいくつかの論文がありました: ハイブリッド型チェック(C.フラナガン-2006) ハイブリッドタイプと契約の統合(J.グロンスキー、C。フラナガン-2007) これにより、かなりの量の重複があるようで、契約と従属タイプの分類が消え始めます。 どちらの概念にも、私が見逃しているものがありますか?それとも、これらは、同じ基本概念を表すファジーカテゴリに過ぎませんか?

7
プログラミング言語のセマンティクスに関する書籍
Nielson&Nielsonの「アプリケーションのセマンティクス」を読んでいますが、このテーマはとても気に入っています。プログラミング言語のセマンティクスに関する本がもう1つありますが、実際には1冊しか入手できません。 Turbak / Giffordの本を見てみましたが、長すぎます。Winskelは大丈夫だと思っていましたが、私はそれにアクセスできません(大学の図書館にはなく、お金も不足しています)。Slonnegerは大丈夫のように見えますが、実用的な部分が長すぎるため、彼のスタイルにはあま​​り慣れていません。 私の質問は、Winskelは良い本ですか?そしてそれは時代遅れですか? また、このテーマに関する他の簡潔な本はありますか?

1
正規関数を使用したプログラミング言語
すべての関数が標準的な形式を持つ(関数型の)プログラミング言語はありますか?つまり、すべての入力セットに対して同じ値を返す2つの関数はすべて同じ方法で表されます。たとえば、f(x)がx + 1を返し、g(x)がx + 2を返した場合、f(f(x ))およびg(x)は、プログラムのコンパイル時に区別できない実行可能ファイルを生成します。 おそらくもっと重要なのは、プログラムの正規表現に関する詳細情報をどこで/どのように見つけることができるかということです(グーグルの「正規表現プログラム」は実りが少ないです)質問するのは自然な質問のように思えますが、探しているものの適切な用語がわからないのではないかと心配しています。そのような言語をチューリング完全にすることが可能かどうか、そうでなければ、そのような特性を保持しながらプログラミング言語をどれだけ表現できるかについて興味があります。 私の背景はかなり限られているため、前提条件の少ないソースを好むでしょうが、より高度なソースへの参照もクールかもしれません。

3
カレーハワードと非建設的な証明からのプログラム
これは次の質問です 証明とプログラムの違い(または命題と型の違い)は何ですか? の形式の非構成的(古典的)証明に対応するプログラムは何ですか?(は興味深い決定可能な関係であると仮定します。たとえば、 -th TMはステップで停止しません。)∀k T(e,k)∨¬∀k T(e,k)∀k T(e,k)∨¬∀k T(e,k)\forall k \ T(e,k) \lor \lnot \forall k \ T(e,k)TTTeeekkk (ps:この質問を投稿している理由の1つは、彼のコメントで「Godel-Gentzenの翻訳は継続渡しの変換です」というNeelの意味をもっと知りたいからです。)

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