タグ付けされた質問 「proof-techniques」

複数の定理を証明するための一般的な方法と手法に関する質問。単一のステートメントの証明について尋ねるときは、代わりに証明の内容に関連するタグを使用してください。

2
バイナリツリーの証明には、最大で葉があります
ノードを持つ二分木が最大で葉を持っていることを証明しようとしています。誘導でこれを行うにはどうすればよいですか?nnn⌈ n個2⌉⌈n2⌉\left\lceil \frac{n}{2} \right\rceil ヒープに関する最初の質問でフォローしていた人々のために、それはここに移動されました。

1
絞り込みタイプの推測
職場では、動的言語に関する型情報を推論する必要があります。次のように、ステートメントのシーケンスをネストされたlet式に書き換えます。 return x; Z => x var x; Z => let x = undefined in Z x = y; Z => let x = y in Z if x then T else F; Z => if x then { T; Z } else { F; Z } 一般的なタイプ情報から始めて、より具体的なタイプを推測しようとしているので、自然な選択は絞り込みタイプです。たとえば、条件演算子は、trueブランチとfalseブランチの型の和集合を返します。単純なケースでは、非常にうまく機能します。 ただし、次のタイプを推測しようとしたときに、思わぬ障害に遭遇しました。 function …
11 programming-languages  logic  type-theory  type-inference  machine-learning  data-mining  clustering  order-theory  reference-request  information-theory  entropy  algorithms  algorithm-analysis  space-complexity  lower-bounds  formal-languages  computability  formal-grammars  context-free  parsing  complexity-theory  time-complexity  terminology  turing-machines  nondeterminism  programming-languages  semantics  operational-semantics  complexity-theory  time-complexity  complexity-theory  reference-request  turing-machines  machine-models  simulation  graphs  probability-theory  data-structures  terminology  distributed-systems  hash-tables  history  terminology  programming-languages  meta-programming  terminology  formal-grammars  compilers  algorithms  search-algorithms  formal-languages  regular-languages  complexity-theory  satisfiability  sat-solvers  factoring  algorithms  randomized-algorithms  streaming-algorithm  in-place  algorithms  numerical-analysis  regular-languages  automata  finite-automata  regular-expressions  algorithms  data-structures  efficiency  coding-theory  algorithms  graph-theory  reference-request  education  books  formal-languages  context-free  proof-techniques  algorithms  graph-theory  greedy-algorithms  matroids  complexity-theory  graph-theory  np-complete  intuition  complexity-theory  np-complete  traveling-salesman  algorithms  graphs  probabilistic-algorithms  weighted-graphs  data-structures  time-complexity  priority-queues  computability  turing-machines  automata  pushdown-automata  algorithms  graphs  binary-trees  algorithms  algorithm-analysis  spanning-trees  terminology  asymptotics  landau-notation  algorithms  graph-theory  network-flow  terminology  computability  undecidability  rice-theorem  algorithms  data-structures  computational-geometry 

2
マスター定理は適用できませんか?
次の再帰方程式を考える T(n)=2T(n2)+nlognT(n)=2T(n2)+nlog⁡n T(n) = 2T\left(\frac{n}{2}\right)+n\log nマスター定理を適用して、 nlog2(2)=n.nlog2⁡(2)=n. n^{\log_2(2)} = n. 次に、最初の2つのケースである\ varepsilon> 0をチェックしますε>0ε>0\varepsilon > 0。つまり、 nlogn∈O(n1−ε)nlog⁡n∈O(n1−ε)n\log n \in O(n^{1-\varepsilon})または nlogn∈Θ(n)nlog⁡n∈Θ(n)n\log n \in \Theta(n)。 2つのケースは満足されていません。したがって、3番目のケースをチェックする必要があります。つまり、 nlogn∈Ω(n1+ε)nlog⁡n∈Ω(n1+ε)n\log n \in \Omega(n^{1+\varepsilon})。 3つ目の条件も満たされていないと思います。しかし、なぜ?そして、なぜこの場合にマスター定理が適用できないのかについての良い説明は何でしょうか?

2
Hoareスタイルの正当性の証明中に配列を処理する方法
この質問に関する議論の中で、Gillesは、配列を使用するアルゴリズムの正当性の証明には範囲外の配列アクセスがないことを証明する必要があることを正しく述べています。ランタイムモデルによっては、ランタイムエラーが発生したり、配列以外の要素にアクセスしたりします。 このような正当性の証明を実行する一般的な手法の1つは(少なくとも学部の研究では、おそらく自動検証で)、Hoareロジックを使用することです。標準のルールのセットに配列に関連するものが含まれていることは知りません。それらはモナド変数に制限されているようです。 形の公理を追加することを想像できます {0≤i<A.length∧P[A[i]/E]} A[i]:=E; {P}{0≤i<A.length∧P[A[i]/E]} A[i]:=E; {P}\qquad \displaystyle \frac{}{\{0 \leq i \lt A.\mathrm{length} \land {P[A[i]/E]} \}\ A[i] := E;\ \{P\}} ただし、右側の配列アクセスをどのように処理するか、つまり、あるステートメントx := Eの複雑な式一部である場合は、はっきりしません。EEEx:=Ex:=Ex := E 配列アクセスをHoareロジックでモデル化して、無効なアクセスがないことをプログラムの正確性を証明できるようにするにはどうすればよいですか? 答えが我々以外の文で使用される配列要素を許可しないと仮定することができるまたはいくつかの一環としてEにおけるX := Eこの表現を制限しないように。一時的な変数にいつでも必要な値を割り当てることができます。つまり、t := A [ i ]と書きます。i f(t > 0 )… i f(A [ i ] > 0 )の代わりに…A [ i ] …

1
決定論的な文脈自由言語のためのポンプの補題?
通常の言語のポンピングレンマは、特定の言語が通常ではないことを証明するために使用できます。また、文脈自由言語のポンピングレンマ(オグデンの補題とともに)を使用して、特定の言語がコンテキストフリーでないことを証明できます。 決定論的な文脈自由言語のためのポンプレンマはありますか?つまり、言語がDCFLではないことを示すために使用できるポンピングレンマに類似したレンマはありますか?言語がDCFLではないことを示すために私が知っているほとんどすべての証明手法は本当に複雑であり、もっと簡単な手法があることを望んでいたので、私は興味があります。

2
言語にベリファイアがないことを示すことにより、言語が計算可能に列挙可能でないことを示すことができますか?
計算可能に列挙可能(ce、再帰的に列挙可能に相当、半決定可能に相当)セットの定義の1つは次のとおりです。 決定可能言語がある場合に限っCEである V ⊆ Σ *(検証と呼ばれる)stはすべてのためのx ∈ Σ *、A⊆Σ∗A⊆Σ∗A \subseteq \Sigma^*V⊆Σ∗V⊆Σ∗V\subseteq \Sigma^*x∈Σ∗x∈Σ∗x\in \Sigma^* が存在するときに限り、Y ∈ Σ * ST ⟨ X 、Y ⟩ ∈ Vが。x∈Ax∈Ax\in Ay∈Σ∗y∈Σ∗y\in\Sigma^*⟨x,y⟩∈V⟨x,y⟩∈V\langle x, y \rangle \in V したがって、言語がceではないことを示す1つの方法は、その言語に対して決定可能な検証者がないことを示すことです。この方法は、言語が実際にはCEではないことを示すのに役立ちますか?VVV

4
関数コードが正しいことを証明するための一般的な正式なテクニックは何ですか?
論文の一部として作成しているHaskellプログラムの一部の証明を提供したいと思います。しかし、これまでのところ、良い参考資料を見つけることができませんでした。 グラハムハットンの入門書 『Haskellでのプログラミング(Googleブックス)』は、Haskellの学習中に読んだものですが、次のようなプログラムについて推論するためのいくつかのテクニックに触れています。 等式推論 重複しないパターンを使用する リストの誘導 第13章で説明しますが、あまり詳細ではありません。 Haskell、またはその他の機能的なコードの正式な証明手法の詳細を提供する推奨できる本や記事はありますか?


3
スレッドの安全性を証明することは可能ですか?
変数とこれらの変数を変更する命令で構成されるプログラム、および同期プリミティブ(モニター、ミューテックス、Javaの同期またはC#のロック)が与えられた場合、そのようなプログラムがスレッドセーフであることを証明できますか? スレッドセーフティやレース条件などを記述するための正式なモデルさえありますか?

3
私たちが計算することができるよりもはるかに多くの問題があることを示します
計算の複雑さに関するMITのこの読みを見ていて、15:00にエリックデメインはデモに乗り出し、この質問のタイトルに何が述べられているかを示しました。しかし、私は彼の推論をたどることはできません、実際には彼が言うことはこれです:実際には関数の真理値表である0と1の 文字列として決定問題を述べることができます。 彼はさらに、決定問題はビットの無限ストリングであるのに対し、プログラムはビットの有限ストリングであり、ここまで問題はないと述べています。私が理解していないのは、この時点からの証明の継続です:決定問題はRにあります000111RR\mathbb{R} 問題を表す文字列の前に小数点を置くことができるため、実数の小数部を取得できます for example if you have 0111011010101010101... it could become x.0111011010101010101... プログラムはNN\mathbb{N}整数であり、ビットの有限文字列であるためです。私が理解できない点は、決定問題が整数ではなく実数に匹敵する可能性があるということです...つまり、「数値の前にドットを置く」という引数を使用すると、同じ理由が、これまでに生成できる可能性のあるアルゴリズムの数にも適用されますか?

2
コルモゴロフの複雑さに基づく非規則性の証明
クラスで私たちの教授は私たちに非規則性を証明するための3つの方法を示しました: Myhill–Nerodeの定理 通常言語用の補題のポンピング コルモゴロフの複雑さに基づく非規則性の証明 さて、最初の2つであるMyhill-Nerodeの定理とPumping補題はよく理解でき、最初の2つの方法の演習も行うことができました。しかし、私は3番目のものを理解しませんでした。3番目の方法の定義は次のとおりです。 してみましょうL ⊆ (ΣのB O O L)*は正規言語であること。ましょL X = { yは∈ (ΣのB O O L)* | X 、Y ∈ L }すべてのためのx ∈ (ΣのB O O L)*。定存在Cのすべてのためのように、X 、Y ∈ (ΣのBのoは L ⊆ (Σb o o l)∗ L⊆(Σbool)∗\ L \subseteq (\Sigma_{bool})^* Lバツ= { y∈ (Σb o o l)∗| …

3
一部の言語のすべての文字列で構成される言語が、別の言語の一部の文字列が通常のものと同じ長さであることを証明する
だから私はこの問題を頭の中で数日間掻き続けてきました。通常の言語とBがある場合、Aのすべての文字列で構成され、その長さがBの一部の文字列と等しい言語Lが通常の言語であることを示します。AAABBBLLLAAABBB 方程式の形で: L={x∈A∣∃y∈B s.t. |x|=|y|}L={x∈A∣∃y∈B s.t. |x|=|y|}L = \{x \in A \mid \exists y \in B \text{ s.t. } |x| = |y| \} 私の最初の考えは、言語とBの両方のDFAを試してみて、2つの状態を相互にマッピングし、うまくいけば、Lが正規であることを証明する新しいDFAを生成できるように1:1の比率を取得することでした。しかし、私はAとBが同じシンボルセット上にある必要はないことに気付きました。 AAABBBLLLAAABBB これを解決する正しい方法は通常の言語のクロージャープロパティを使用することだと思いますが、文字列自体ではなく文字列の「長さ」のプロパティを開始/使用する方法がわかりません。 誰かが私を正しい方向に向けることができますか?


1
選択と挿入の並べ替えに敵対的な引数を使用するにはどうすればよいですか?
選択と挿入の並べ替えの下限を見つけるために必要な敵対的な引数を見つけるように求められました。それへの参照がどこにも見つかりませんでした。 これについてはいくつか疑問があります。私は通常、「アルゴリズム」ではなく特定の「問題」の下限を見つけるために敵対的な議論が使用されることを理解しています。 マージの問題を理解しました。しかし、どのようにして選択および挿入ソート用に作成できますか?

1
ポンピングレンマ証明の何が問題になっていますか?
言語は明らかに規則的です。たとえば、正規表現と一致します。しかし、次のポンプ補題の議論は、それが規則的でないことを示しているようです。何が問題になっていますか?L={02n | n≥0}L={02n | n≥0}L = \{0^{2n} \space |\space n \ge 0 \}(00)∗(00)∗(00)^* 入力をポンピングレンマの要件を満たすとして分割する方法を見つけましたが、すべてのに対しては限り ません。それは言語が規則的ではないことを意味しませんか?sssxyzxyzxyzxyiz∈Lxyiz∈Lxy^iz\in Liii より詳細には、定期的な言語のためのポンピング補題は、言語の場合には、言う 規則的である、長さ、ポンプが存在する任意の文字列を指定するようなしてのように書くことができなどをそれ:LLLp≥1p≥1p \ge 1s∈Ls∈Ls\in L|s|>p|s|>p|s|> ps=xyzs=xyzs = xyz |y|≥1|y|≥1\lvert y \rvert \ge 1 |xy|≤p|xy|≤p\lvert xy \rvert \le p xyiz∈Lxyiz∈Lxy^iz\in Lのすべてのための。i≥0i≥0i \ge 0 それで、を取り、それを(つまり、、、)。これは1と2を満たしますが、場合、が得られますが、これは含まれていません。 は長さが奇妙なので。結局のところ、その言語は規則的ではないようです。s=02ps=02ps = 0^{2p}s=ϵ002p−1s=ϵ002p−1s=\epsilon\, 0 \, 0^{2p-1}x=ϵx=ϵx = \epsilony=0y=0y = 0z=02p−1z=02p−1z = …

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