De Morgan's laws

In logic, De Morgan's laws (or De Morgan's theorem) are rules in formal logic relating pairs of dual logical operators in a systematic manner expressed in terms of negation. The relationship so induced is called De Morgan duality.

Augustus De Morgan originally observed that in classical propositional logic the following relationships hold:

not (P and Q) = (not P) or (not Q)

not (P or Q) = (not P) and (not Q)

De Morgan's observation influenced the algebraisation of logic undertaken by George Boole, which cemented De Morgan's claim to the find, although a similar observation was made by Aristotle and was known to Greek and Medieval logicians (cf. Bocheński's History of Formal Logic).

Mathematical formulation
In strict mathematical terms, the rule states that each of the following claims is logically equivalent to the one next to it and may be legally transformed from one to the other in either direction:


 * $$\neg(p\wedge q)\iff(\neg p)\vee(\neg q)$$


 * $$\neg(p\vee q)\iff(\neg p)\wedge(\neg q)$$

where:
 * $$\neg$$ is the negation operator
 * $$\wedge$$ is the conjunction operator (AND)
 * $$\vee$$ is the disjunction operator (OR)

Logical applications
DeMorgan's theorem may be applied to the negation of a disjunction or the negation of a conjunction in all or part of a formula.

Negation of a disjunction
In the case of its application to a disjunction, consider the following claim: it is false that either A or B is true, which is written as:
 * $$\neg(A\vee B)$$

In that it has been established that neither A nor B is true, then it must follow that A is not true and B is not true; If either A or B were true, then the disjunction of A and B would be true, making its negation false.

Working in the opposite direction with the same type of problem, consider this claim:
 * $$(\neg A)\wedge(\neg B)$$

This claim asserts that A is false and B is false (or "not A" and "not B" are true). Knowing this, a disjunction of A and B would be false, also. However the negation of said disjunction would yield a true result that is logically equivalent to the original claim. Presented in English, this would follow the logic that "Since two things are false, it's also false that either of them are true."

Negation of a conjunction
The application of DeMorgan's theorem to a conjunction is very similar to its application to a disjunction both in form and rationale. Consider the following claim: It is false that A and B are both true, which is written as:
 * $$\neg(A\wedge B)$$

In order for this claim to be true, either or both of A or B must be false, in that if they both were true, then the conjunction of A and B would be true, making its negation false. So, the original claim may be translated as "Either A is false or B is false", or "Either not A is true or not B is true".
 * $$(\neg A)\vee(\neg B)$$

Presented in English, this would follow the logic that "Since it is false that two things together are true, at least one of them must be false."

Further explanation
In formal logic the laws are usually written


 * $$\neg(P\wedge Q)\iff(\neg P)\vee(\neg Q)$$


 * $$\neg(P\vee Q)\iff(\neg P)\wedge(\neg Q)$$

and in set theory.


 * $$\overline{A \cap B}=\overline{A} \cup \overline{B}$$


 * $$\overline{A \cup B}=\overline{A} \cap \overline{B}.$$

In extensions of classical propositional logic, the duality still holds (that is, to any logical operator we can always find its dual), since in the presence of the identities governing negation, one may always introduce an operator that is the De Morgan dual of another. This leads to an important property of logics based on classical logic, namely the existence of negation normal forms: any formula is equivalent to another formula where negations only occur applied to the non-logical atoms of the formula. The existence of negation normal forms drives many applications, for example in digital circuit design, where it is used to manipulate the types of logic gates, and in formal logic, where it is a prerequisite for finding the conjunctive normal form and disjunctive normal form of a formula. Computer programmers use them to change a complicated statement like IF ... AND (... OR ...) THEN ... into its opposite. They are also often useful in computations in elementary probability theory.

Let us define the dual of any propositional operator P(p, q, ...) depending on elementary propositions p, q, ... to be the operator $$\mbox{P}^d$$ defined by


 * $$\mbox{P}^d(p, q, ...) = \neg P(\neg p, \neg q, \dots).$$

This idea can be generalised to quantifiers, so for example the universal quantifier and existential quantifier are duals:


 * $$ \forall x \, P(x) \equiv \neg \exists x \, \neg P(x), $$


 * $$ \exists x \, P(x) \equiv \neg \forall x \, \neg P(x). $$

To relate these quantifier dualities to the De Morgan laws, set up a model with some small number of elements in its domain D, such as


 * D = {a, b, c}.

Then


 * $$ \forall x \, P(x) \equiv P(a) \wedge P(b) \wedge P(c) $$

and


 * $$ \exists x \, P(x) \equiv P(a) \vee P(b) \vee P(c).\, $$

But, using De Morgan's laws,


 * $$ P(a) \wedge P(b) \wedge P(c) \equiv \neg (\neg P(a) \vee \neg P(b) \vee \neg P(c)) $$

and


 * $$ P(a) \vee P(b) \vee P(c) \equiv \neg (\neg P(a) \wedge \neg P(b) \wedge \neg P(c)), $$

verifying the quantifier dualities in the model.

Then, the quantifier dualities can be extended further to modal logic, relating the box ("necessarily") and diamond ("possibly") operators:


 * $$ \Box p \equiv \neg \Diamond \neg p, $$
 * $$ \Diamond p \equiv \neg \Box \neg p.\, $$

In its application to the alethic modalities of possibility and necessity, Aristotle observed this case, and in the case of normal modal logic, the relationship of these modal operators to the quantification can be understood by setting up models using Kripke semantics.

In code
In C, Java, and other related programming languages, De Morgan's laws can be written as: !(p && q) == !p || !q !(p || q) == !p && !q

Similarly, in Python: not (p and q) == not p or not q not (p or q) == not p and not q

In EE
In electrical engineering contexts, the negation operator can be written as an overline above the terms to be negated. Thus, electrical engineering students are often taught to remember DeMorgan's laws using the mnemonic "break the line, change the sign".