命題論理と述語論理を学ぶ理由


14

コンピューター科学者またはソフトウェア開発関連のエンジニアが基礎としての基本的なロジックの研究を理解する必要があることの重要性を理解できます。

しかし、あらゆる種類の知識表現を必要とするタスク以外に、これらに関する知識を明示的に必要とするタスク/ジョブはありますKnowledge Baseか?概念的な応答ではなく、タスクの種類を聞きたいです。

私がこれを尋ねる理由は、私の好奇心からです。CSの学生はこのテーマに一定の時間を費やす必要がありますが、一部の実用的な集中コース(AIクラスなど)はこのトピックを完全にスキップしました。そして、例えば、知っていることpredicate logicは絵を描くのに役立つER diagramかもしれないが、要件ではないかもしれないと思う。


アップデート5/27/2012)回答ありがとうございます。今、私logicはCSの膨大なアプリケーションの重要性を完全に理解し、同意していると思います。Windowsブルースクリーンの問題の解決策によって得られた印象から、本当に最高の答えを選んだだけです。


4
私が答えを書いていたとき、あなたの質問の範囲が不明確であることがわかりました。あなたは自分自身をCS、または産業、あるいはその両方に制限していますか、それとも一般的に解雇しますか?
デイブクラーク

@Dave Clarkeええ、私もそれが十分に明確ではないことがわかりました。私が知りたい最初のことは、特定のロジックのリテラシーが必要な業界でした(ただし、ソフトウェア関連のエンジニアはこの主題をスキップしてはいけないと確信するためにあなたの反応に感謝します)。
アイザック

あなたが本当に探しているものをキャプチャするために質問を変更できるといいでしょう。
デイブクラーク

if命題論理なしで条件をどのくらい正確に書くでしょうか?
edA-qa mort-ora-y

回答:


22

私は統一とそれに関連するものが好きです。命題論理と述語論理がわからない場合は、論理の基本をスキップしています。リストされているものに興味がある場合は、数学に興味があり、加算と乗算をスキップするようなものです。ロジックはAIだけのものではありません。

実用的な答えとして、Intelの浮動小数点の問題を思い出してください。定理証明の使用により、それらは過去のものになりました。マイクロソフトの死のブルースクリーンを思い出してください。SATソルバー、モデルチェック、およびその他のロジックベースのソリューションのおかげで、これらは絶滅危species種です。


3
絶滅危species種[引用旧姓- セグメンテーション障害。コアダンプ。
JeffE

@JeffE引用を探している場合、代わりに実際の証拠を提示します。最後に見たのはいつですか?:)
ガイCoderの

3
私は見たことがありません。私はMacを使用しています。
-JeffE

1
@JeffE Macは密接に結合されたシステムであり、マシンアーキテクチャからアプリケーションプログラムまで、すべてが1つのチーム/組織によって決定されます。Windowsシステムはオープンであり、さまざまなメーカーやチームが、指定された標準とインターフェイスのみに依存する(多くの場合、大雑把に)ソリューションを提供します。それらは、コンピュータサイエンスにとってはるかに難しい課題です。これを安全に行う定理証明/静的解析技術を開発したマイクロソフトのチームは、私たちの分野に根本的な進歩を遂げました。
Uday Reddy

1
@UdayReddy:Microsoftの研究者が根本的な進歩を遂げたのか、BSODが以前よりはるかに一般的ではなくなったのかは疑わない。しかし、「絶滅危species種」はサポートされていない誇張です。障害のあるコードだけがクラッシュの原因ではありません。
-JeffE

22

非常にあります深い普及ロジックとコンピュータ科学の間の接続が。それらが何であるかを理解する際、コンピューターサイエンスは「情報技術」または「情報学」とも呼ばれ、コンピューターシステムが情報をキャプチャ、処理、および配信することを意味することに留意してください。まあ、ロジックも似たようなものです。情報が文にどのように取り込まれ、あるステートメントが別のステートメントの結果になる可能性、つまりその情報内容が別のステートメント(またはステートメントのコレクション)にどのように存在するかを研究します。その意味では、ロジックとコンピューターサイエンスは本質的に同じですさまざまな側面に焦点を当てた規律。論理学者(チャーチ、クリーネ、チューリング、ポスト、およびその学生と同僚)がコンピューターサイエンスの分野を作り上げ、多くの論理学者がコンピューターサイエンス、特にジャンイブジラードとその学生に貢献し続けています。

コンピューターサイエンスのロジックの標準的なアプリケーションを次に示します。

  • デジタル回路の設計は完全に提案ロジックに基づいているため、エンジニアは「回路設計」ではなく「論理設計」と呼んでいます。コンピュータプログラムを書くことでさえ、その「論理」を考案することを伴うとしばしば考えられます。(後者の意味での「論理」は、プログラムを通る情報の流れと、それが正しく処理されているかどうかを参照するために使用される正式な論理ではなく、非公式のアイデアであることに注意してください。)

  • 述語論理とその数学的いとこである集合論は、さまざまな計算言語、たとえばリレーショナルデータベースクエリの言語SQLで使用されます。「ロジックプログラミング言語」と呼ばれるロジックに基づくプログラミング言語もあります。

  • 既に述べた知識表現には、論理に基づいた多くの形式があります。非論理形式を使用している場合でも、それらの多くは依然として論理的な意味を持っているため、論理に基づいています。

  • ステートメントが真/偽の値だけでなく、確実性/不確実性のレベルを持つ確率論的ロジックは、ますます機械学習システムの基盤となります

  • プログラムが何をするのかを正式に述べたい場合、つまりプログラム仕様を指定したい場合は、何らかの形の論理言語を使用することになります。実際、ZやBのような、述語論理と集合論に基づいた多くのプログラム仕様言語があります。カラマツなどの等式論理に基づく仕様言語もあります。コンピューターサイエンティストは、コンピューターサイエンスのニーズを表すために、Hoare LogicやSeparation Logicなどの新しいロジックを発明することがよくあります。

  • プログラムが意図したとおりに動作するかどうかを検証する場合は、論理の言語だけでなく、論理の機械全体(証明理論、モデル理論、決定手順)を使用することになります。検証技術は飛躍的に成長しており、今後10年程度で、ほぼすべてのソフトウェア開発に日常的に使用されるようになると期待しています。

実際、ロジックとコンピューターサイエンスの関係は非常に深く浸透しているため、ロジックを完全に理解しないと優れたコンピューターサイエンティストになるのは難しいと思います。

現時点で一部のAI科学者がロジックを過小評価している理由は、AIの初期の開発者の一部が市販のロジックをツールとして提案していたためです。基盤ではなく。AIは、その性質上、魔法を届けることを約束します。結果を出すために、プログラミングシステムの苦労をする必要はありません。彼らは「インテリジェント」であるため、ソリューションの作成方法を自分で理解することができます。コンピュータシステムがロジックを理解し、ロジックのルールを使用して情報を処理する方法を知っていれば、魔法を届けることができるため、ロジックは道を指し示しているように見えました。そのような論理への信仰は、振り返ってみると見当違いだった。そもそも、既製のロジックは強すぎますし弱すぎます。論理のルールが一般的すぎて効果的な手順を考案できないという意味で強すぎます。また、数学者が数学のニーズに合わせて考案した論理であり、そうではないため、弱すぎます。AIシステムが処理しなければならない他の多くの種類の実世界の情報(不確実性、時間、変化、知識、代理店などのコンテキスト情報など)を処理するために必要な語彙があります。そのため、AIは現在、ロジックに対する反発を受けています。しかし、私は、彼らがその反発を乗り越えるとき、AI科学者はすべての新しい方法がまだに基づいていることに気付くと思います広く解釈されるロジック


リレーショナルデータベースを追加してください!
reinierpost

非常に素晴らしく完全な答えです。ジャン・イヴ・ジラールに言及してください。確率論的論理はファジー論理と同じ研究分野であると考えていますか?文献では2つの用語を満たしているので、それらが同じ研究領域を示しているかどうかを知りたい。
ズールグル

@zurgl。私の理解では、「確率論的論理」としっかりと呼ばれている単一の形式はありません。ファジィ論理は確かにそのような形式の1つですが、他にもあります。今日の人工知能で最も成功している確率論的推論の形式は、ベイジアン推論です。ただし、その論理的基盤はまだしっかりと確立されていません。
ウダイレディ

17

論理は、すべての理論的なコンピューターサイエンスの基本です。これらを学習しないと、プログラミング言語のセマンティクス、チューリングマシン、ロジックプログラミング、計算可能性などを適切に把握できません。あなたのプログラムについての推論でさえ、それなしではより困難になります。確かに、CSコンセプトの数学的証明を試みることは事実上不可能です。

あるいは、あなたは産業での使用について尋ねているのかもしれません。学習ロジックは、明確に推論し、他の人の議論の穴を見る方法を学習するための基礎を形成します。正式なシンボルを使用するかどうかにかかわらず、ロジックは基本です。


アルゴリズムが欠落しています。
ユヴァルフィルマス

4
それは「など」に含まれています。
デイブクラーク

9

CSプラクティショナーと理論家が直面する繰り返しのタスクの1つは、コードの正確さに対する信頼を得ることです。

主に2つのアプローチがあります。

  1. 証明:システムの一部が特定のプロパティを持っているという論理的証拠を考案します。前提条件、契約ごとの設計、コードチェッカーなどが役立ちます。
  2. テスト:特定のプロパティがさまざまな入力に対して保持されることをテストし、そのプロパティが他の入力に対して保持されることを誘導します。

論理的な方法に基づく最初の方法は、多くの場合、唯一のオプションです

  1. 典型的な入力はありません。たとえば、セキュリティプロパティをテストする場合、非定型入力であるため、どの入力が非定型であるかを論理的に推論できない限り、適切なカバレッジが得られない可能性があります。
  2. 構成スペースは非常に大きいため、ローカルでテストする前に、どのパーツが他のどのパーツに影響するかを論理的に推論することにより、構成スペースをパーツに分解する必要があります。
  3. 制御できないシステムのエッジケースの動作を説明するドキュメントのみがあります。あなたはそれらをシミュレートできるかもしれませんが、法的または倫理的な理由で失敗させることはできないので、外部依存関係が失敗したときに何が起こるかをテストすることはできません。

証明がない場合の実証的テストは、基本的に証明の代替です。システムをテスト可能に設計する場合、「ここでテストX、Y、およびZ」を使用してプルーフの一部を埋めるプルーフスケッチを作成します。論理的に推論する能力は、テスト可能なシステムを設計できるようにするために不可欠です。システムがテスト可能または証明可能でない場合、その設計者/アーキテクトは、その意図された使用に適しているというビジネスを持ちません。


6

ロジックが重要な役割を果たす2つの最も重要なフィールドは次のとおりです。

  1. 正式な言語仕様と検証
  2. パラメータの扱いやすいクラスを修正しました

Z

つまり、1。言語の定義にはロジックが必要、2:その手順の正義にはロジックが必要、3。検証手順にはロジックが必要です。

これはコンパイラの設計とは異なるか、...、これは言語の「正式な」定義です。これを行う主な理由は、言語またはモデルの正確性を証明し、正式な証拠を持っていることです。これは、ソフトウェアモデルの検証、実装前のエラーの検出、実装前のデッドロックの再検出などに使用できます。これをシミュレートするソフトウェアについては、NModelをご覧ください

なぜ固定パラメーターの扱いやすい問題でロジックを操作する必要があるのか​​、固定パラメーターの扱いやすさのクラスをさまざまなレベルのロジックで分割し、それらを相互に変換できる:ロジックをオートマトンに、オートマトンをグラフに、そしてその逆あなたは論理の専門家であり、単純にそれらを分割して決定することができます。最も重要な定理(ロバートソンとシーモアの定理の後)、この分野ではクールセルの定理です。詳細については、Meta Algorithmic Theorem Surveyを参照してください。


ロジックを使用して言語を定義できますが、それは私の経験では「重要な役割」ではありません。ロジックがFPTにどのように関連しているかはまったくわかりません。
ラファエル

@Raphael、あなたのコメントへの回答は一行以上かかると思うので、回答を更新しました。私はあなたに答えたと思いますが、それでも大丈夫ではないと思うなら、私の「公式」部分について教えてください、私の最初のwikiリンクは十分ではないと思います、私はより多くの情報を追加しましたあなたがそれについてもっと知りたいなら、あなたはそれを読むことができます。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.