Logical disjunction

From Wikipedia, the free encyclopedia
  (Redirected from Or (logic))
Jump to: navigation, search
"Disjunction" redirects here. For the logic gate, see OR gate. For separation of chromosomes, see Meiosis. For disjunctions in distribution, see Disjunct distribution.
Venn diagram of \scriptstyle A \or B \or C

In logic and mathematics, or is a truth-functional operator also known as (inclusive) disjunction and alternation. The logical connective that represents this operator is also known as "or", and typically written as \lor or  +. The "or" operator produces a result of true whenever one or more of its operands are true. For example, in this context, "A or B" is true if A is true, or if B is true, or if both A and B are true. In grammar, or is a coordinating conjunction. An operand of a disjunction is called a disjunct.

The "or" operator differs from the exclusive or in that the latter returns false when both of its inputs are true, while "or" returns true. In ordinary language, outside of contexts such as formal logic, mathematics and programming, "or" sometimes has the meaning of "exclusive or". For example, "Please ring me or send an email" likely means "do one or the other, but not both" because each action is discrete. On the other hand, "Her grades are so good that she's either very bright or studies hard" allows for the possibility that the person is both bright and works hard because working hard can result in increased brightness. In other words, in ordinary language "or" can mean the inclusive or exclusive or. Usually, the intended meaning is clear from the context.


Or is usually expressed with the prefix operator A, or with an infix operator. In mathematics and logic, the infix operator is usually ; in electronics, +; and in programming languages, | or or. Some programming languages have a related control structure, the short-circuit or, written ||, or else, etc.


Logical disjunction is an operation on two logical values, typically the values of two propositions, that produces a value of false if and only if both of its operands are false. More generally a disjunction is a logical formula that can have one or more literals separated only by ORs. A single literal is often considered to be a degenerate disjunction.

The disjunctive identity is 0, which is to say that OR-ing an expression with 0 will never change the value of the expression. In keeping with the concept of vacuous truth, when disjunction is defined as an operator or function of arbitrary arity, the empty disjunction (OR-ing over an empty set of operands) is often defined as having the result 0.

Truth table[edit]

Disjunctions of the arguments on the left
The false bits form a Sierpinski triangle

The truth table of ~A \or B:

 A B  A \or B


A \or B     \Leftrightarrow     B \or A
Venn0111.svg     \Leftrightarrow     Venn0111.svg
~A ~~~\or~~~ (B \or C)     \Leftrightarrow     (A \or B) ~~~\or~~~ ~C
Venn 0101 0101.svg ~~~\or~~~ Venn 0011 1111.svg     \Leftrightarrow     Venn 0111 1111.svg     \Leftrightarrow     Venn 0111 0111.svg ~~~\or~~~ Venn 0000 1111.svg
~A \or (B \and C)     \Leftrightarrow     (A \or B) \and (A \or C)
Venn 0101 0101.svg \or Venn 0000 0011.svg     \Leftrightarrow     Venn 0101 0111.svg     \Leftrightarrow     Venn 0111 0111.svg \and Venn 0101 1111.svg
~A~ ~\or~ ~A~     \Leftrightarrow     A~
Venn01.svg ~\or~ Venn01.svg     \Leftrightarrow     Venn01.svg
A \rightarrow B     \Rightarrow     (A \or C) \rightarrow (B \or C)
Venn 1011 1011.svg     \Rightarrow     Venn 1011 1111.svg     \Leftrightarrow     Venn 0101 1111.svg \rightarrow Venn 0011 1111.svg

When all inputs are true, the output is true.

A \and B     \Rightarrow     A \or B
Venn0001.svg     \Rightarrow     Venn0111.svg
(to be tested)

When all inputs are false, the output is false.

A \or B     \Rightarrow     A \or B
Venn0111.svg     \Rightarrow     Venn0111.svg
(to be tested)

If using binary values for true (1) and false (0), then logical disjunction works almost like binary addition. The only difference is that 1\or 1=1, while 1+1=10.


The mathematical symbol for logical disjunction varies in the literature. In addition to the word "or", and the formula "Apq", the symbol "\or", deriving from the Latin word vel (“either”, “or”) is commonly used for disjunction. For example: "A \or B " is read as "A or B ". Such a disjunction is false if both A and B are false. In all other cases it is true.

All of the following are disjunctions:

A \or B
\neg A \or B
A \or \neg B \or \neg C \or D \or \neg E.

The corresponding operation in set theory is the set-theoretic union.

Applications in computer science[edit]

Operators corresponding to logical disjunction exist in most programming languages.

Bitwise operation[edit]

Disjunction is often used for bitwise operations. Examples:

  • 0 or 0 = 0
  • 0 or 1 = 1
  • 1 or 0 = 1
  • 1 or 1 = 1
  • 1010 or 1100 = 1110

The or operator can be used to set bits in a bit field to 1, by or-ing the field with a constant field with the relevant bits set to 1. For example, x = x | 0b00000001 will force the final bit to 1 while leaving other bits unchanged.

Logical operation[edit]

Many languages distinguish between bitwise and logical disjunction by providing two distinct operators; in languages following C, bitwise disjunction is performed with the single pipe (|) and logical disjunction with the double pipe (||) operators.

Logical disjunction is usually short-circuited; that is, if the first (left) operand evaluates to true then the second (right) operand is not evaluated. The logical disjunction operator thus usually constitutes a sequence point.

In a parallel (concurrent) language, it is possible to short-circuit both sides: they are evaluated in parallel, and if one terminates with value true, the other is interrupted. This operator is thus called the parallel or.

Although in most languages the type of a logical disjunction expression is boolean and thus can only have the value true or false, in some (such as Python and JavaScript) the logical disjunction operator returns one of its operands: the first operand if it evaluates to a true value, and the second operand otherwise.

Constructive disjunction[edit]

The Curry–Howard correspondence relates a constructivist form of disjunction to tagged union types.


The membership of an element of an union set in set theory is defined in terms of a logical disjunction: xAB if and only if (xA) ∨ (xB). Because of this, logical disjunction satisfies many of the same identities as set-theoretic union, such as associativity, commutativity, distributivity, and de Morgan's laws.

See also[edit]


  • George Boole, closely following analogy with ordinary mathematics, premised, as a necessary condition to the definition of "x + y", that x and y were mutually exclusive. Jevons, and practically all mathematical logicians after him, advocated, on various grounds, the definition of "logical addition" in a form which does not necessitate mutual exclusiveness.

External links[edit]