Negation | |
Other Titles: | NOT |
Venn Diagram: | Venn10.svg |
Definition: | lnot{x} |
Truth Table: | (01) |
Logic Gate: | NOT_ANSI.svg |
Dnf: | lnot{x} |
Cnf: | lnot{x} |
Zhegalkin: | 1 ⊕ x |
0-Preserving: | no |
1-Preserving: | no |
Monotone: | no |
Affine: | yes |
Self-Dual: | yes |
P
P
P
\negP
d{\sim}P
\overline{P}
P
P
P
P
An operand of a negation is a negand,[3] or negatum.
Classical negation is an operation on one logical value, typically the value of a proposition, that produces a value of true when its operand is false, and a value of false when its operand is true. Thus if statement
P
\negP
\negP
P
The truth table of
\negP
Negation can be defined in terms of other logical operations. For example,
\negP
P → \bot
→
\bot
\bot
Q\land\negQ
\land
P → Q
\negP\lorQ
\lor
Algebraically, classical negation corresponds to complementation in a Boolean algebra, and intuitionistic negation to pseudocomplementation in a Heyting algebra. These algebras provide a semantics for classical and intuitionistic logic.
The negation of a proposition is notated in different ways, in various contexts of discussion and fields of application. The following table documents some of these variants:
Notation | Plain text | Vocalization | |
---|---|---|---|
\negp | , [4] | Not p | |
d{\sim}p | Not p | ||
-p | Not p | ||
Np | En p | ||
p' | |||
\overline{p} | |||
p | |||
The notation
Np
In set theory,
\setminus
U\setminusA
Regardless how it is notated or symbolized, the negation
\negP
As a way of reducing the number of necessary parentheses, one may introduce precedence rules: ¬ has higher precedence than ∧, ∧ higher than ∨, and ∨ higher than →. So for example,
P\veeQ\wedge{\negR} → S
(P\vee(Q\wedge(\negR))) → S.
Here is a table that shows a commonly used precedence of logical operators.[5]
Operator | Precedence | |
---|---|---|
\neg | 1 | |
\land | 2 | |
\lor | 3 | |
\to | 4 | |
\leftrightarrow | 5 |
Within a system of classical logic, double negation, that is, the negation of the negation of a proposition
P
P
\neg\negP\equivP
However, in intuitionistic logic, the weaker equivalence
\neg\neg\negP\equiv\negP
\negP
P → \bot
P → \neg\negP
\neg\negP → \bot
P → \bot
As a result, in the propositional case, a sentence is classically provable if its double negation is intuitionistically provable. This result is known as Glivenko's theorem.
De Morgan's laws provide a way of distributing negation over disjunction and conjunction:
\neg(P\lorQ)\equiv(\negP\land\negQ)
\neg(P\landQ)\equiv(\negP\lor\negQ)
Let
⊕
If there exists
a0,a1,...,an\in\{0,1\}
f(b1,b2,...,bn)=a0 ⊕ (a1\landb1) ⊕ ... ⊕ (an\landbn)
b1,b2,...,bn\in\{0,1\}
Another way to express this is that each variable always makes a difference in the truth-value of the operation, or it never makes a difference. Negation is a linear logical operator.
In Boolean algebra, a self dual function is a function such that:
f(a1,...,an)=\negf(\nega1,...,\negan)
a1,...,an\in\{0,1\}
In first-order logic, there are two quantifiers, one is the universal quantifier
\forall
\exists
\neg\forallxP(x)\equiv\existsx\negP(x)
\neg\existsxP(x)\equiv\forallx\negP(x)
\forallxP(x)
\neg\forallxP(x)\equiv\existsx\negP(x)
See also: Double negation. There are a number of equivalent ways to formulate rules for negation. One usual way to formulate classical negation in a natural deduction setting is to take as primitive rules of inference negation introduction (from a derivation of
P
Q
\negQ
\negP
P
\negP
Q
\neg\negP
P
Negation introduction states that if an absurdity can be drawn as conclusion from
P
P
P
\bot
P
\negP
Typically the intuitionistic negation
\negP
P
P → \bot
As in mathematics, negation is used in computer science to construct logical statements.
The exclamation mark "!
" signifies logical NOT in B, C, and languages with a C-inspired syntax such as C++, Java, JavaScript, Perl, and PHP. "NOT
" is the operator used in ALGOL 60, BASIC, and languages with an ALGOL- or BASIC-inspired syntax such as Pascal, Ada, Eiffel and Seed7. Some languages (C++, Perl, etc.) provide more than one operator for negation. A few languages like PL/I and Ratfor use ¬
for negation. Most modern languages allow the above statement to be shortened from if (!(r == t))
to if (r != t)
, which allows sometimes, when the compiler/interpreter is not able to optimize it, faster programs.
In computer science there is also bitwise negation. This takes the value given and switches all the binary 1s to 0s and 0s to 1s. See bitwise operation. This is often used to create ones' complement or "~
" in C or C++ and two's complement (just simplified to "-
" or the negative sign since this is equivalent to taking the arithmetic negative value of the number) as it basically creates the opposite (negative value equivalent) or mathematical complement of the value (where both values are added together they create a whole).
To get the absolute (positive equivalent) value of a given integer the following would work as the "-
" changes it from negative to positive (it is negative because "x < 0
" yields true)
To demonstrate logical negation:
Inverting the condition and reversing the outcomes produces code that is logically equivalent to the original code, i.e. will have identical results for any input (depending on the compiler used, the actual instructions performed by the computer may differ).
In C (and some other languages descended from C), double negation (!!x
) is used as an idiom to convert x
to a canonical boolean, ie. an integer with a value of either 0 or 1 and no other. Although any integer other than 0 is logically true in C and 1 is not special in this regard, it is sometimes important to ensure that a canonical value is used, for example for printing or if the number is subsequently used for arithmetic operations.[6] The convention of using !
to signify negation occasionally surfaces in ordinary written speech, as computer-related slang for not. For example, the phrase !voting
means "not voting". Another example is the phrase !clue
which is used as a synonym for "no-clue" or "clueless".[7] [8]
In Kripke semantics where the semantic values of formulae are sets of possible worlds, negation can be taken to mean set-theoretic complementation (see also possible world semantics for more).