コンピュータサイエンス

コンピュータサイエンスの学生、研究者、実務家のためのQ&A

1
Dependent type、refinement typeおよびHoare Logicの違い
私はほとんど依存型理論を知っていません。ウィキペディアから: 依存型とは、定義が値に依存する型です。 そして、私のタイプ理論のコースから、依存型は次のとおりであることを思い出します: タイプによってインデックス付けされたタイプのファミリー。 しかし、私は依存型と絞り込み型とhoareロジックに関して混乱しています。 Depenedentとリファインメントタイプから、リファインメントタイプはHoareロジックのように見えるためです。満たさなければならない述語を述べることを許可する以外に、さらに多くの電力調整タイプが提供します(Hoare Logicとほぼ同じように見えます)。 依存型は、絞り込み型と比較してどのような追加物を提供しますか?依存型は、洗練型+飽和/制約ソルバーよりも強力です。 誰でも例で空気をきれいにすることができます。

2
「最小限の」直観主義型理論?
型理論に人々が新しい型を追加し続けていることに驚いていますが、最小理論について言及している人はいないようです(または、私はそれを見つけられません)。数学者は最小限のものが大好きだと思いませんか? 私が正しく理解すれば、命令型のPropλ-abstractionとΠ-typesの型理論で十分です。十分だと言うことで、直観主義的な論理として使用できるということです。他のタイプは次のように定義できます。 ⊥=defΠα:Prop.α¬A=defA→⊥A∧B=defΠC:Prop.(A→B→C)→CA∨B=defΠC:Prop.(A→C)→(B→C)→C∃x:S(P(x))=defΠα:Prop.(Πx:S.Px→α)→α⊥=defΠα:Prop.α¬A=defA→⊥A∧B=defΠC:Prop.(A→B→C)→CA∨B=defΠC:Prop.(A→C)→(B→C)→C∃x:S(P(x))=defΠα:Prop.(Πx:S.Px→α)→α \bot \stackrel{def}{=} \Pi \alpha: Prop. \alpha \\ \neg A \stackrel{def}{=} A \to \bot \\ A \land B \stackrel{def}{=} \Pi C: Prop. (A \to B \to C) \to C \\ A \lor B \stackrel{def}{=} \Pi C: Prop. (A \to C) \to (B \to C) \to C \\ \exists_{x: …

7
ラムダ計算は抽象的に見えませんでした。そして、私はそれのポイントを見ることができません
根本的な質問: ラムダ計算は、中学校の代数で一般に学んだ基本的な関数のプロパティと表記法ではできないことを私たちに何をしますか? まず、ラムダ計算の文脈で抽象とはどういう意味ですか?抽象という言葉の私の理解は、概念の概念的な要約である機械から離婚したものです。 ただし、ラムダ関数は、関数名を廃止することにより、特定のレベルの抽象化を防ぎます。例えば: f(x) = x + 2 h(x, y) = x + 5 y しかし、これらの機能の仕組みを定義しなくても、その構成について簡単に話すことができます。例えば: 1. h(x, y) . f(x) . f(x) . h(x, y) or 2. h . f . f . h 必要に応じて引数を含めることも、完全に抽象化して何が起きているのかを概観することもできます。そして、それらをすぐに単一の機能に減らすことができます。構成2を見てみましょう。強調に応じて、学生の詳細なレイヤーを書くことができます。 g = h . f . f . h g(x, y) = h(x, …


7
RAMを搭載していないが、ディスクを搭載したコンピューターはRAMを搭載したコンピューターと同等ですか?
私が理解するように、メモリは多くのことに使用されます。ディスクキャッシュとして機能し、プログラムの命令とそのスタックとヒープが含まれています。これが思考実験です。コンピューターがクランチを実行するのにかかる速度や時間を気にしない場合、非常に大きなディスクがあると仮定して、最低限必要なメモリー量はどれくらいですか?メモリを廃止し、ディスクを用意することは可能ですか? ディスクキャッシュは明らかに不要です。ディスクにスワップスペースを設定すると、プログラムスタックとヒープもメモリを必要としません。メモリの存在を必要とするものはありますか?

2
マンデルブロ集合はどのような意味で「計算可能」ですか?
マンデルブロ集合は数学の美しい生き物です。 このセットには多くの美しい画像が高精度で作成されているため、明らかにこのセットはある意味で「計算可能」です。 しかし、私が懸念するのは、それが再帰的に列挙可能でさえないという事実です-単にセットが数えられないからです。これは、ある種の点の有限表現を要求することで解決できます。 さらに、多くのポイントがセットに属し、他のポイントはセットに属さないことは確かですが、セットのメンバーシップがわからない多くのポイントもあります。これまでに見てきたすべての画像には、「最大n回の反復がバインドされている」多くのポイントが含まれている場合がありますが、それらのポイントは実際にはセットに属しません。 そのため、プレゼンテーションが有限である特定のポイントに対して、「このポイントはセットに属しますか?」という問題が発生します。私が正しいなら、まだ決定可能であると証明されていません。 さて、どのような意味で(どの定義によって)マンデルブロ集合が「計算可能」であると言えますか?

4
非決定的オートマトンの停止問題の定義
少なくとも私自身の参考教科書(Hopcroft + Ullman 1979)にあるチューリングマシン(TM)の主要な定義は決定論的です。 したがって、停止問題についての私自身の理解は主に決定論的TMについてですが、他の種類のオートマトンについても考慮される可能性があることは承知しています。 また、決定論は、人々がしばしばTMまたは停止する問題に言及する方法において、多かれ少なかれ暗黙的であることにも気づきました。停止する問題に関するウィキペディアのページはその良い例です。 しかし、そのような制限の理由はないようです。家族を考える 、のための停止問題非決定することができオートマトンのとして定義することができます。FF\mathcal FFF\mathcal F 均一な決定手順は、そこにある、その与えられたオートマトンと入力、それはの停止計算があるかどうかを決定することができます入力上の。 X A XA∈FA∈FA\in\mathcal FxxxAAAxxx (これは、入力を使用したの計算が終了と言うこととはまったく異なります。)xAAAxxx 確かに、それは主に非決定的オートマトンである線形境界オートマトン(LBA)の停止問題についての議論に何らかの意味を与える唯一の方法のようです。 だから私の質問は、私が正しいかどうか、そして非決定的オートマトンの停止問題のこの見かけ上2番目のクラスの扱いに理由(およびその理由)があるかどうかです。

4
「ユージングーストマン」は本当にチューリングテストに合格しましたか?
13歳の少年をシミュレートするために開発されたコンピュータープログラムである「Eugene Goostman」は、裁判官の33%が人間であることを納得させ、チューリングテストに合格したと言われています。 チャットボットとも呼ばれるコンピュータープログラムは、英語が第二言語である13歳のウクライナ人のふりをしていました。 私にとって、Eugeneは平凡なチャットボットとまったく同じように聞こえます。反復的で、無意味で、非セキットルが散らばっています。私はそれが裁判官をどのように納得させたのかわかりません(これは専門家ではないようです)。 多くの人々は、「それはナンセンスだ」と「チューリングテストに合格していない。近づいてさえいない」と言ったステバン・ハーナッド教授のようにユージンを批判している。 意見は異なりますが、正式にテストに合格したかどうかを知りたいですか? それはまた言われています: 一度も受賞したことのない2回限りの賞。25Kは、ジャッジが本物の人間と区別できず、人間がコンピュータープログラムであるとジャッジに納得させることができる最初のチャットボットに提供されます。100,000ドルは、テキスト、視覚、聴覚入力の解読と理解を含むチューリングテストで、裁判官が本物の人間と区別できない最初のチャットボットに対する報酬です。これが達成されると、年次大会は終了します。 Eugeneが25,000ドルを獲得したということですか?

2
垂直方向の可視性問題のための効率的なアルゴリズム
1つの問題を考えると、次のタスクを解決する効率的なアルゴリズムを作成する必要があることに気付きました。 問題:辺が軸に平行な辺 2次元の正方形の箱が与えられます。頂上から見ることができます。ただし、水平セグメントもあります。各セグメントには整数座標()および()があり、ポイントおよび(下の写真)。m個のY 0 ≤ Y ≤ N X 0 ≤ X 1 &lt; X 2 ≤ N (X 1、Y )、 (X 2、Y )nnnmmmyyy0≤y≤n0≤y≤n0 \le y \le nxxx0≤x1&lt;x2≤n0≤x1&lt;x2≤n0 \le x_1 < x_2 \le n(x1,y)(x1,y)(x_1,y)(x2,y)(x2,y)(x_2,y) ボックスの上部にある各ユニットセグメントについて、このセグメントを覗いた場合にボックス内をどのくらい深く見ることができるかを知りたいと思います。 正式には、場合、。x∈{0,…,n−1}x∈{0,…,n−1}x \in \{0,\dots,n-1\}maxi: [x,x+1]⊆[x1,i,x2,i]yimaxi: [x,x+1]⊆[x1,i,x2,i]yi\max_{i:\ [x,x+1]\subseteq[x_{1,i},x_{2,i}]} y_i 例:次の図のようにn=9n=9n=9およびm=7m=7m=7セグメントがある場合、結果は(5,5,5,3,8,3,7,8,7)(5,5,5,3,8,3,7,8,7)(5, 5, 5, 3, 8, 3, 7, 8, …

4
偏りのあるダイで公平なダイをシミュレートする
バイアスされたNNNダイを考えると、範囲乱数をどのよう[1,N][1,N][1,N]に均一に生成できますか?ダイス面の確率分布は不明です。既知のことは、各面がゼロ以外の確率を持ち、すべてのスローで確率分布が同じであることだけです(特に、スローは独立しています)。これは、不公平なダイによる公正な結果の明白な一般化です。 これをコンピューターサイエンスの用語で言えば、p i = P (D (k )= i )が非ゼロでkに依存しないようなダイスロールを表すオラクルがあります。私たちは、決定論的アルゴリズムを探しているAによってパラメータ化されたD(すなわちAがへの呼び出しを行うことがDを)そのようなものがあることP (Aは、()= Iを)= 1 /D:N→[1,N]D:N→[1,N]D : \mathbb{N} \to [1,N]pi=P(D(k)=i)pi=P(D(k)=i)p_i = P(D(k)=i)kkkAAADDDAAADDDP(A()=i)=1/NP(A()=i)=1/NP(A()=i) = 1/N。アルゴリズムは確率1で終了する必要があります。つまり、AAAが Dを回以上nnn呼び出す確率は、 n → ∞として 0に収束する必要があります。DDD000n→∞n→∞n\to\infty 以下のためにN=2N=2N=2(硬貨から公正なコインがコインバイアスと反転シミュレート)、周知のアルゴリズムが存在します。 2回のスローが異なる結果((頭、尾)または(尾、頭))になるまで、「2回反転」を繰り返します。すなわち、ループのためにk=0..∞k=0..∞k = 0..\inftyまで、D(2k+1)≠D(2k)D(2k+1)≠D(2k)D(2k+1) \ne D(2k) フリップの最後のペアが(heads、tails)の場合は0を返し、それが(tails、heads)の場合は1を返します。つまり、返します。D(2k)D(2k)D(2k)ここで、kkkはループが終了したインデックスです。 偏りのあるダイから偏りのないダイを作成する簡単な方法は、コインフリップの偏りのない方法を使用して公平なコインを作成し、シーケンスの偏りのないように、リジェクションサンプリングで公平なダイを作成します。しかし、これは最適です(確率分布の一般的な値に対して)? 具体的には、私の質問は次のとおりです。オラクルへの呼び出しの最小予想数を必要とするアルゴリズムは何ですか?到達可能な期待値のセットが開いている場合、下限とは何か、この下限に向かって収束するアルゴリズムのクラスは何ですか? 場合にはアルゴリズムの異なるファミリーは、異なる確率分布に最適な、ほとんど-公正サイコロ上のletの焦点である:私は、アルゴリズムやアルゴリズムの家族のようディストリビューションのための最適なものを探しています∀i,∣∣pi−1/N∣∣&lt;ϵ∀i,|pi−1/N|&lt;ϵ\forall i, \bigl|p_i - 1/N\bigr| \lt \epsilonいくつかのためのϵ&gt;0ϵ&gt;0\epsilon \gt 0。

3
ランダム読み取りの並列化はうまくいくようです-なぜですか?
次の非常に単純なコンピュータープログラムを検討してください。 for i = 1 to n: y[i] = x[p[i]] ここで、とは要素のバイト配列であり、は要素の単語配列です。ここで、は大きく、たとえば(したがって、データのごく一部のみがあらゆる種類のキャッシュメモリに収まります)。y n p n n n = 2 31xxxyyynnnpppnnnnnnn=231n=231n = 2^{31} がから間に一様に分布した乱数で構成されていると仮定します。1 nppp111nnn 最新のハードウェアの観点から見ると、これは次のことを意味するはずです。 読書安い(シーケンシャルリード)でありますp[i]p[i]p[i] 読ん非常に高価である(ランダム読み取り、ほぼすべてのあるキャッシュミスを読み込みます。私たちは、メインメモリから個々のバイトを取得する必要があります)x[p[i]]x[p[i]]x[p[i]] 書き込み安い(シーケンシャル書き込み)です。y[i]y[i]y[i] そして、これはまさに私が観察していることです。このプログラムは、シーケンシャルな読み取りと書き込みのみを行うプログラムと比較して非常に遅いです。すごい。 ここで疑問が生じます。このプログラムは、最新のマルチコアプラットフォームでどの程度並列化されますか? 私の仮説では、このプログラムはうまく並列化されません。結局のところ、ボトルネックはメインメモリです。単一のコアは、メインメモリからのデータを待機するだけで、すでにほとんどの時間を無駄にしています。 ただし、これは、この種の操作がボトルネックとなっているいくつかのアルゴリズムを試し始めたときに観察したものではありませんでした! 単純なforループをOpenMP並列forループに置き換えました(本質的に、範囲を小さな部分に分割し、これらの部分を異なるCPUコアで並列に実行します)。[1,n][1,n][1,n] ローエンドのコンピューターでは、スピードアップは確かに軽微でした。しかし、ハイエンドプラットフォームでは、優れた線形に近い高速化が得られたことに驚きました。いくつかの具体的な例(正確なタイミングは少しずれている可能性があり、多くのランダムな変動があります;これらは単なる簡単な実験でした): 2 x 4コアXeon(合計8コア):シングルスレッドバージョンと比較して、5〜8倍高速化。 2 x 6コアXeon(合計12コア):シングルスレッドバージョンと比較して8〜14倍高速化。 今、これは全く予想外でした。質問: 正確になぜプログラムの並列化のこの種のは、とてもよくありませんか?ハードウェアで何が起こりますか?(私の現在の推測は、これらの線に沿ったものです:異なるスレッドからのランダムな読み取りは「パイプライン化」されており、これらに対する回答を取得する平均レートは、単一のスレッドの場合よりもはるかに高くなります。) 速度を上げるには、複数のスレッドと複数のコアを使用する必要がありますか?メインメモリとCPUの間のインターフェイスで何らかのパイプライン処理が実際に行われる場合、シングルスレッドアプリケーションでは、メインメモリに、、...、コンピュータはメインメモリから関連するキャッシュラインのフェッチを開始できますか?これが原則的に可能である場合、実際にどのように達成しますか?x [ p [ i + 1 ] ]x[p[i]]x[p[i]]x[p[i]]x[p[i+1]]x[p[i+1]]x[p[i+1]] …

1
ギロチンカットと一般的なカット
WWWLLLiiililil_iwiwiw_i 切断問題の一般的な制限の1つは、切断がギロチン切断でなければならないことです。つまり、既存の各長方形は2つの小さな長方形にしか切断できません。L字型などを作成することは不可能です。明らかに、ギロチンカットの最大使用領域は、制限なしの最大使用領域よりも小さい場合があります。 私の質問は次のとおりです。最適なギロチンカットと最適な一般カットの比率に上限と下限はありますか? 6767\frac{6}{7}

3
言語がコンテキストフリーかどうかをテストするアルゴリズム
言語がコンテキストフリーかどうかをテストするためのアルゴリズム/体系的な手順はありますか? つまり、代数形式で指定された言語(ようなものを考えてください)で、その言語がコンテキストフリーかどうかをテストします。学生が宿題をすべて手伝うためのWebサービスを作成していると想像してください。言語を指定すると、Webサービスは「コンテキストなし」または「コンテキストなし」を出力します。これを自動化する良い方法はありますか?L={anbnan:n∈N}L={anbnan:n∈N}L=\{a^n b^n a^n : n \in \mathbb{N}\} もちろん、ポンピング補題、オグデンの補題、パリフの補題、インターチェンジ補題など、手動校正のテクニックがあります。ただし、それらはいずれかの時点で手動の洞察を必要とするため、それらをアルゴリズムに変換する方法は明確ではありません。 私は見Kavehが他の場所で書かれた、すべての可能な言語で作業に任意のアルゴリズムには希望がないようですので、非文脈自由言語のセットが帰納的可算でないこと。したがって、Webサービスは「コンテキストフリー」、「コンテキストフリーではない」、または「わからない」を出力できる必要があると思います。教科書で見られる可能性のある多くの言語で、「私にはわからない」以外の答えを提供できることが多いアルゴリズムはありますか?このようなWebサービスをどのように構築しますか? この質問を適切にするには、ユーザーが言語を指定する方法を決定する必要があります。私は提案を受け入れますが、私はこのようなことを考えています: L={E:S}L={E:S}L = \{E : S\} ここで、はワード式で、は長さ変数の線形不等式のシステムで、次の定義があります。EEESSS 各ワード表現です。(これらは任意の単語を保持できる変数を表します。)x,y,z,…x,y,z,…x,y,z,\dotsΣ∗Σ∗\Sigma^* それぞれワード表現です。(暗黙的に、であるためは基礎となるアルファベットの単一のシンボルを表します。)a,b,c,…a,b,c,…a,b,c,\dotsΣ={a,b,c,…}Σ={a,b,c,…}\Sigma=\{a,b,c,\dots\}a,b,c,…a,b,c,…a,b,c,\dots 各あれば、単語表現で可変長のです。aη,bη,cη,…aη,bη,cη,…a^\eta,b^\eta,c^\eta,\dotsηη\eta 単語表現の連結は単語表現です。 各長さ可変です。(これらは、任意の自然数を保持できる変数を表します。)m,n,p,q,…m,n,p,q,…m,n,p,q,\dots それぞれ長さ変数です。(これらは対応する単語の長さを表します。)|x|,|y|,|z|,…|x|,|y|,|z|,…|x|,|y|,|z|,\dots これは、教科書の演習で見られる多くのケースを処理するのに十分なようです。もちろん、必要に応じて、代数形式で言語を指定する他のテキストによる方法に置き換えることができます。

3
例外階層の理論はありますか?
私は、何らかの方法で例外を持っている多数のプログラミング言語に精通していますが、2つの「病的な」傾向を目の当たりにしました。 例外の一般的なパターンや階層はないようです。基本的にすべての言語は独自のバージョンをロールし、例外が標準になった場合、標準で見つかる例外の種類はかなりarbitrary意的です(ほとんどの場合、ソースコードの読み取りなど、言語ツールの作成中に実装された例外デバッガーを起動するための文字列または例外、またはファイルが見つからない場合に発生する例外など) 言語で定義された例外がユーザープログラムで再利用されることはほとんどありません。通常、1つまたは2つの一般的な例外があります(たとえば、「実装しない」)。ほとんどの場合、プログラマは独自の例外を作成します。(たとえば、これを新しい数値型または新しいコレクション型の作成と比較してください)。 これは私にとってひどい省略のようです。ユーザープログラムでどのような種類のエラーが必要になるのか、誰も知りません。私は、数値型、コレクション、オブジェクトシステムなどに似た一種の素晴らしい階層が存在することを望んでいました。 さらに悪いことに、GoolgeとWikipediaはこの問題に関してほとんど助けを提供していません。これまでのところ、機能の例外に関する論文を見つけただけです。 このペーパーでは、遅延関数型プログラミングは組み込みの例外処理メカニズムを不要にするだけでなく、例外を使用するプログラムを開発および変換するための強力なツールを提供すると主張します。 (例外の機能理論、Mike Spivey、1988) しかし、例外は良いと思います。例外を使用するプログラムを変換したくはありません。逆に、例外の使用を無秩序にしたいのです。 質問: 例外の理論はありますか?もしそうなら、それは何と呼ばれていますか?基礎となるものは、もしあれば、その基礎となるものは何ですか?

1
「ゼロワン」ジグソーパズルはNP完全ですか?
タイルのわずかなバリエーションである「ジグソーパズル」に興味があります。(正方形)タイルの各エッジには、シンボルがラベル付けされてい、一方のタイルの対面エッジのシンボルがで、もう一方のタイルの対面エッジのシンボルがで、一部の。次に、タイルのセットが与えられた場合、正方形に配置できます(回転しますが、タイルを反転しません)。すべてのエッジが正しく一致しますか?(この問題には4つの「フレーミング」エッジが提供され、ピースがそのフレームに正しく収まる必要があるという変形もあります)。{1…n,1¯…n¯}{1…n,1¯…n¯}\{1\ldots n, \bar{1}\ldots\bar{n}\}kkkk¯k¯\bar{k}k∈{1…n}k∈{1…n}k\in\{1\ldots n\}m2m2m^2m×mm×mm\times m1×m1×m1\times m 私は、この問題が十分に大きいためにNP完全である知っている、私が上で見てきたことを境界かなり大きいと思われます。Iは、の値が小さいため問題に興味特にため、すべてのエッジがどちらかの標識されている「ゼロ・ワン」の場合(またはとし、エッジをとエッジに一致しなければならない)。ここには、(回転対称で)たった6つのタイルタイプ(すべてゼロのタイル、すべて1のタイル、3つのゼロと1のタイル、3つの1と0のタイル、2つのゼロの2つの異なるタイルがあります)そして、2つ、「0011」と「0101」)、したがって、問題のインスタンスは単なる仕様ですnnnnnnnnnn=1n=1n=1000111000111mmm5つの数字のセット、、、、とと(タイルの各タイプの数を表す)。問題は明らかにNPにあります(は単項与えられます)解は単純に示され、多項式(T0000T0000T_{0000}T0001T0001T_{0001}T0011T0011T_{0011}T0101T0101T_{0101}T0111T0111T_{0111}T1111T1111T_{1111}T0000+T0001+T0011+T0101+T0111+T1111=m2T0000+T0001+T0011+T0101+T0111+T1111=m2T_{0000}+T_{0001}+T_{0011}+T_{0101}+T_{0111}+T_{1111}=m^2mmmmmm)時間ですが、NP完全であることが知られていますか、またはここで適用できる動的プログラミングアルゴリズムがありますか?問題の仕様に、一致する正方形の4つのエッジも含まれる「フレーム化された」ケースについてはどうですか?(明らかに、フレーム化されていないケースがNP完全である場合、フレーム化されたケースもほぼ確実に完全です)

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