論理学において、否定(論理否定または論理補数とも呼ばれる)は命題を対象とする演算である。別の命題「~ではない」へ「、書かれた、、[ 1 ]または[ 2 ]直感的に真であると解釈されるのは、偽であり、偽である場合が正しい。[ 3 ] [ 4 ]例えば、「犬が走る」ならば「ではない」「は「犬は走らない」です。否定のオペランドはネガンドまたはネガタムと呼ばれます。[ 5 ]
否定は単項論理結合子である。さらに、命題だけでなく、概念、真理値、あるいはより一般的には意味値にも適用できる。古典論理では、否定は通常、真理を偽に(そしてその逆も)変換する真理関数と同一視される。直観主義論理では、 Brouwer–Heyting–Kolmogorovの解釈によれば、命題の否定はは、その証明が反駁である命題である。。
古典的否定は、通常は命題の値である論理値に対する演算であり、オペランドが偽の場合には真、オペランドが真の場合には 偽の値を生成します。したがって、if文そうだとすれば(「ピーではない」と発音)は偽となり、逆に、そうだとすればそれは誤りである。
真理値表内容は以下のとおりです。
否定は他の論理演算によって定義できます。たとえば、定義できる(どこ論理的な帰結であり、は絶対的な虚偽である)。逆に、として任意の命題Qに対して(は論理積です。ここでの考え方は、矛盾はすべて偽であるというものですが、これらの考え方は古典論理と直観主義論理の両方で機能しますが、矛盾が必ずしも偽ではないパラコンシステント論理では機能しません。さらに例として、否定は NAND で定義することも、NOR で定義することもできます。
代数的に言えば、古典的な否定はブール代数における補数に対応し、直観主義的な否定はハイティング代数における擬似補数に対応する。これらの代数は、古典論理と直観主義論理の意味論を提供する。
命題pの否定は、議論の文脈や応用分野によって、さまざまな方法で表記されます。以下の表は、これらの表記方法の一部を示しています。
表記法はポーランド記法です。
集合論では、また、「~の集合に含まれない」ことを示すためにも使用されます。は、 Aの要素ではないUのすべての要素の集合です。
どのように表記または記号化されていても、否定「 Pではない」、「Pではない」、または通常はより単純に「Pではない」と読むことができます。
必要な括弧の数を減らす方法として、優先順位ルールを導入することができます。¬は∧より優先順位が高く、∧ は∨より優先順位が高く、∨ は→ より優先順位が高いです。たとえば、は
以下に、論理演算子の一般的な優先順位を示す表を示します。[ 7 ]
古典論理体系において、二重否定、すなわち命題の否定の否定はは、論理的に同等である。象徴的に表現すると、直観主義論理では、命題はその二重否定を含意するが、その逆は含意しない。これは古典的否定と直観主義的否定の重要な違いの一つである。代数的に言えば、古典的否定は周期2の対合と呼ばれる。
しかし、直観主義論理では、より弱い同値性成り立つ。これは直観主義論理では、これは単に略語です 、また、最後の含意を三重否定で構成する意味するところは。
その結果、命題論理の場合、文の二重否定が直観主義的に証明可能であれば、その文は古典的に証明可能である。この結果はグリベンコの定理として知られている。
ド・モルガンの法則は、否定を選言と連言に分配する方法を提供する。
させては論理排他的論理和演算を表す。ブール代数において、線形関数とは次のような関数である。
存在する場合、 すべての。
別の言い方をすれば、各変数は常に演算の真偽値に影響を与えるか、あるいは全く影響を与えないかのどちらかである。否定は線形論理演算子である。
ブール代数において、自己双対関数とは、次のような関数である。
すべての人々のために 否定は自己双対論理演算子である。
一階述語論理には2つの量化子があり、そのうちの1つは全称量化子である。(「すべて」を意味する)と、もう一方の存在量化子(「存在する」という意味です)。一方の量化子の否定はもう一方の量化子です(そして例えば、述語Pを「xは死ぬ」とし、x のドメインをすべての人間の集合とすると、これは「すべての人間のうちの一人、xは死ぬ」または「すべての人間は死ぬ」という意味です。その否定はつまり、「すべての人間の中に、不死身の人物xが存在する」、あるいは「永遠に生きる者が存在する」という意味です。
否定の規則を定式化する方法はいくつかあります。自然演繹の設定で古典的な否定を定式化する一般的な方法の 1 つは、推論の原始規則として否定の導入(導出から)を採用することです。両方へそして推論する(この規則は背理法とも呼ばれる)否定除去(そして推測する(この規則はex falso quodlibetとも呼ばれる)および二重否定の除去(推測する直観主義的否定の規則も同様の方法で得られますが、二重否定の除去は除外します。
否定導入では、不条理が結論として導き出せる場合、それからそうであってはならない(つまり否定除去は、不条理から何かが導かれるというものである。否定除去は、原始的な不条理記号を用いて定式化されることもある。この場合、ルールでは次のように述べられています。そして矛盾から導かれる。二重否定の除去と合わせて、最初に定式化した規則、すなわち矛盾から何かが導かれるという規則を推論することができる。
一般的に直観主義的否定のは次のように定義される。すると、否定の導入と排除は、含意の導入(条件付き証明)と排除(モーダス・ポネンス)の特殊なケースになります。この場合、基本ルールとしてex falso quodlibetも追加する必要があります。
数学と同様に、コンピュータサイエンスにおいても、否定は論理式を構築するために用いられる。
if ( ! ( r == t )) { /*...rがtと等しくない場合に実行されるステートメント...*/ }感嘆符" " は、 B、C 、およびC++、Java、JavaScript、Perl、PHPなどの C に影響を受けた構文を持つ言語!で論理 NOT を表します。 " " は、 ALGOL 60、BASIC、およびPascal、Ada、Eiffelなどの ALGOL または BASIC に影響を受けた構文を持つ言語で使用される演算子です。一部の言語 (C++、Perl など) では、否定のための演算子が複数用意されています。PL /IやRatforなどの一部の言語では、否定に を使用します。ほとんどの最新の言語では、上記のステートメントを からに短縮できるため、コンパイラ/インタプリタが最適化できない場合でも、より高速なプログラムが実現できます。NOT¬if (!(r == t))if (r != t)
コンピュータサイエンスには、ビット単位の否定という概念もあります。これは、与えられた値からバイナリの1を0に、0を1に反転させるものです。これは、1の補数(~C言語やC++では「 」)や2の補数(単に「-」または負の符号と簡略化され、これは数値の算術的な否定と同等です)を作成するためによく使用されます。
与えられた整数の絶対値(正の値)を取得するには、次の方法が有効です。「-」は値を負から正に変更します(「x < 0」が真になるため、負の値になります)。
unsigned int abs ( int x ) { if ( x < 0 ) return - x ; else return x ; }論理的否定を実証するために:
unsigned int abs ( int x ) { if ( ! ( x < 0 )) return x ; else return - x ; }条件を反転させ、結果を逆にすると、論理的に元のコードと同等のコードが生成されます。つまり、どのような入力に対しても同じ結果が得られます(使用するコンパイラによっては、コンピュータが実際に実行する命令が異なる場合があります)。
C言語(およびC言語から派生した他の言語)では、二重否定(!!x)は、正規ブール値、つまり0または1の値のみを持つ整数に変換するための慣用表現xとして使用されます。C言語では0以外の整数はすべて論理的に真であり、1はこの点で特別なものではありませんが、例えば印刷時や、その数値が後で算術演算に使用される場合など、正規値が使用されるようにすることが重要な場合があります。[ 8 ]
!否定を表すためにを使用する慣習は、コンピュータ関連のスラングでnotの代わりとして、口語で時折現れる。たとえば、このフレーズは「no-clue」または「clueless」の同義語として使用される。[ 9 ] [ 10 ]!clue
!voteもう1つの例は、 「投票ではない」という意味の表現です。 [ 11 ]この文脈では、ウィキペディアでは「多数決」を否定しながら意見を調査するために感嘆符が使用され、「それぞれの議論の強さによって適切な方針が決定される合意形成の議論を行う」ために使用されています。[ 11 ]
クリプキ意味論では、論理式の意味値は可能世界の集合であり、否定は集合論的な補元を意味するものと解釈できます(詳細については、可能世界意味論も参照してください)。
{{cite web}}: CS1メンテナンス: アーカイブサービスは非推奨になりました (リンク)