Truth table
30362
223957450
2008-07-06T18:14:42Z
189.25.15.198
/* External links */
A '''truth table''' is a [[mathematical table]] used in [[logic]] — specifically in connection with [[Boolean algebra (logic)|Boolean algebra]], [[boolean function]]s, and [[propositional calculus]] — to compute the functional values of logical [[expression (mathematics)|expression]]s on each of their functional arguments, that is, on each combination of values taken by their logical variables. In particular, '''truth tables''' can be used to tell whether a propositional expression is true for all legitimate input values, that is, [[validity|logically valid]].
"The pattern of reasoning that the truth table tabulates was [[Gottlob Frege|Frege's]], [[Charles Peirce|Peirce's]], and [[Ernst Schröder|Schröder's]] by 1880. The tables have been prominent in literature since 1920 ([[Jan Lukasiewicz|Lukasiewicz]], [[Emil Post|Post]], [[Ludwig Wittgenstein|Wittgenstein]])" ([[W.V. Quine|Quine]], 39). [[Lewis Carroll]] had formulated truth tables as early as 1894 to solve certain problems, but his manuscripts containing his work on the subject were not discovered until 1977 [http://www-groups.dcs.st-andrews.ac.uk/~history/Biographies/Dodgson.html]. Wittgenstein's ''[[Tractatus Logico-Philosophicus]]'' uses them to place [[truth function]]s in a series. The wide influence of this work led to the spread of the use of truth tables.
Truth tables are used to compute the values of propositional expressions in an effective manner that is sometimes referred to as a ''[[decision procedure]]''. A propositional expression is either an [[atomic formula]] — a propositional constant, [[propositional variable]], or propositional function term (for example, ''Px'' or ''P''(''x'')) — or built up from atomic formulas by means of logical operators, for example, [[logical conjunction|AND]] (<math>\land</math>), [[logical disjunction|OR]] (<math>\lor</math>), [[negation|NOT]] (<math>\lnot</math>). For instance, <math>Fx \land Gx</math> is a propositional expression.
The column headings on a truth table show (i) the propositional functions and/or variables, and (ii) the truth-functional expression built up from those propositional functions or variables and operators. The rows show each possible valuation of '''T''' or '''F''' assignments to (i) and (ii). In other words, each row is a distinct interpretation of (i) and (ii).
Truth tables for [[classical logic]] are limited to [[Boolean logic]]al systems in which only two [[logical value]]s are possible, '''false''' and '''true''', usually written '''F''' and '''T''', or sometimes '''0''' or '''1''', respectively.
==Logical negation==
[[Logical negation]] is an [[logical operation|operation]] on one [[logical value]], typically the value of a [[proposition]], that produces a value of ''true'' if its operand is false and a value of ''false'' if its operand is true.
The truth table for '''NOT p''' (also written as '''~p''' or '''¬p''') is as follows:
{| align="center" border="1" cellpadding="8" cellspacing="0" style="background:lightcyan; font-weight:bold; text-align:center; width:40%"
|+ '''Logical Negation'''
|- style="background:paleturquoise"
! style="width:20%" | p
! style="width:20%" | ¬p
|-
| F || T
|-
| T || F
|}
==Logical conjunction==
[[Logical conjunction]] is an [[logical operation|operation]] on two [[logical value]]s, typically the values of two [[proposition]]s, that produces a value of ''true'' if and only if both of its operands are true.
The truth table for '''p AND q''' (also written as '''p ^ q''', '''p & q''', or '''p<math>\cdot</math>q''') is as follows:
{| align="center" border="1" cellpadding="8" cellspacing="0" style="background:lightcyan; font-weight:bold; text-align:center; width:45%"
|+ '''Logical Conjunction'''
|- style="background:paleturquoise"
! style="width:15%" | p
! style="width:15%" | q
! style="width:15%" | p · q
|-
| T || T || T
|-
| T || F || F
|-
| F || T || F
|-
| F || F || F
|-
|}
<br>
In ordinary language terms, if both ''p'' and ''q'' are true, then the conjunction ''p'' ∧ ''q'' is true. For all other assignments of logical values to ''p'' and to ''q'' the conjunction ''p'' ∧ ''q'' is false.
It can also be said that if ''p'', then ''p'' ∧ ''q'' is ''q'', otherwise ''p'' ∧ ''q'' is ''p''.
==Logical disjunction==
[[Logical disjunction]] is an [[logical operation|operation]] on two [[logical value]]s, typically the values of two [[proposition]]s, that produces a value of ''false'' [[if and only if]] both of its operands are false.
The truth table for '''p OR q''' (also written as '''p ∨ q''', '''p || q''', or '''p + q''') is as follows:
{| align="center" border="1" cellpadding="8" cellspacing="0" style="background:lightcyan; font-weight:bold; text-align:center; width:45%"
|+ '''Logical Disjunction'''
|- style="background:paleturquoise"
! style="width:15%" | p
! style="width:15%" | q
! style="width:15%" | p + q
|-
| T || T || T
|-
| T || F || T
|-
| F || T || T
|-
| F || F || F
|}
<br>
Stated in English, if ''p'', then ''p'' ∨ ''q'' is ''p'', otherwise ''p'' ∨ ''q'' is ''q''.
==Logical implication==
[[Logical implication]] and the material conditional are both associated with an [[logical operation|operation]] on two [[logical value]]s, typically the values of two [[proposition]]s, that produces a value of ''false'' just in the singular case the first operand is true and the second operand is false.
The truth table associated with the material conditional '''not p or q''' (symbolized as '''p → q''') and the logical implication '''p implies q''' (symbolized as '''p ⇒ q''') is as follows:
{| align="center" border="1" cellpadding="8" cellspacing="0" style="background:lightcyan; font-weight:bold; text-align:center; width:45%"
|+ '''Logical Implication'''
|- style="background:paleturquoise"
! style="width:15%" | p
! style="width:15%" | q
! style="width:15%" | p → q
|-
| T || T || T
|-
| T || F || F
|-
| F || T || T
|-
| F || F || T
|}
<br>
==Logical equality==
[[Logical equality]] (also known as biconditional) is an [[logical operation|operation]] on two [[logical value]]s, typically the values of two [[proposition]]s, that produces a value of ''true'' if and only if both operands are false or both operands are true.
The truth table for '''p EQ q''' (also written as '''p = q''', '''p ↔ q''', or '''p ≡ q''') is as follows:
{| align="center" border="1" cellpadding="8" cellspacing="0" style="background:lightcyan; font-weight:bold; text-align:center; width:45%"
|+ '''Logical Equality'''
|- style="background:paleturquoise"
! style="width:15%" | p
! style="width:15%" | q
! style="width:15%" | p ≡ q
|-
| T || T || T
|-
| T || F || F
|-
| F || T || F
|-
| F || F || T
|}
<br>
==Exclusive disjunction==
[[Exclusive disjunction]] is an [[logical operation|operation]] on two [[logical value]]s, typically the values of two [[proposition]]s, that produces a value of ''true'' if and only if one but not both of its operands is true.
The truth table for '''p XOR q''' (also written as '''p + q''', '''p ⊕ q''', or '''p ≠ q''') is as follows:
{| align="center" border="1" cellpadding="8" cellspacing="0" style="background:lightcyan; font-weight:bold; text-align:center; width:45%"
|+ '''Exclusive Disjunction'''
|- style="background:paleturquoise"
! style="width:15%" | p
! style="width:15%" | q
! style="width:15%" | p ⊕ q
|-
| T || T || F
|-
| T || F || T
|-
| F || T || T
|-
| F || F || F
|}
<br>
For two propositions, '''XOR''' can also be written as (p = 1 ∧ q = 0)∨ (p = 0 ∧ q = 1).
==Logical NAND==
The [[logical NAND]] is an [[logical operation|operation]] on two [[logical value]]s, typically the values of two [[proposition]]s, that produces a value of ''false'' if and only if both of its operands are true. In other words, it produces a value of ''true'' if and only if at least one of its operands is false.
The truth table for '''p NAND q''' (also written as '''p | q''' or '''p ↑ q''') is as follows:
{| align="center" border="1" cellpadding="8" cellspacing="0" style="background:lightcyan; font-weight:bold; text-align:center; width:45%"
|+ '''Logical NAND'''
|- style="background:paleturquoise"
! style="width:15%" | p
! style="width:15%" | q
! style="width:15%" | p ↑ q
|-
| T || T || F
|-
| T || F || T
|-
| F || T || T
|-
| F || F || T
|}
<br>
It is frequently useful to express a logical operation as a compound operation, that is, as an operation that is built up or composed from other operations. Many such compositions are possible, depending on the operations that are taken as basic or "primitive" and the operations that are taken as composite or "derivative".
In the case of logical NAND, it is clearly expressible as a compound of NOT and AND.
The negation of conjunction <math>\neg (p \and q) \equiv p \bar{\and} q</math>, and the disjunction of negations <math>\neg p \or \neg q</math> are depicted as follows:
{| class="wikitable" style="margin: 1em auto 1em auto; text-align:center;"
|-
! <math>p</math> || <math>q</math> || <math>p \and q</math> || <math>p \bar{\and} q</math> || <math>\neg p</math> || <math>\neg q</math> || <math>\neg p \or \neg q</math>
|-
| T || T || T || F || F || F || F
|-
| T || F || F || T || F || T || T
|-
| F || T || F || T || T || F || T
|-
| F || F || F || T || T || T || T
|}
<br>
==Logical NOR==
The [[logical NOR]] is an [[logical operation|operation]] on two [[logical value]]s, typically the values of two [[proposition]]s, that produces a value of ''true'' if and only if both of its operands are false. In other words, it produces a value of ''false'' if and only if at least one of its operands is true. ↓ is also known as the [[Peirce arrow]] after its inventor, [[Charles Peirce]], and is a [[Sole sufficient operator]].
The truth table for '''p NOR q''' (also written as '''p ⊥ q''' or '''p ↓ q''') is as follows:
{| align="center" border="1" cellpadding="8" cellspacing="0" style="background:lightcyan; font-weight:bold; text-align:center; width:45%"
|+ '''Logical NOR'''
|- style="background:paleturquoise"
! style="width:15%" | p
! style="width:15%" | q
! style="width:15%" | p ↓ q
|-
| T || T || F
|-
| T || F || F
|-
| F || T || F
|-
| F || F || T
|}
<br>
The negation of disjunction <math>\neg (p \or q) \equiv p \bar{\or} q</math> and the conjunction of negations <math>\neg p \and \neg q</math> are tabulated as follows:
{| class="wikitable" style="margin: 1em auto 1em auto; text-align:center;"
|-
! <math>p</math>
! <math>q</math>
! <math>p \or q</math>
! <math>p \bar{\or} q</math>
! <math>\neg p</math>
! <math>\neg q</math>
! <math>\neg p \and \neg q</math>
|-
| T || T || T || F || F || F || F
|-
| T || F || T || F || F || T || F
|-
| F || T || T || F || T || F || F
|-
| F || F || F || T || T || T || T
|}
Inspection of the tabular derivations for NAND and NOR, under each assignment of logical values to the functional arguments <math>p\!</math> and <math>q\!</math>, produces the identical patterns of functional values for <math>p \bar{\and} q</math> as for <math>\neg p \or \neg q</math>, and for <math>p \bar{\or} q</math> as for <math>\neg p \and \neg q</math>. Thus the first and second expressions in each pair are logically equivalent, and may be substituted for each other in all contexts that pertaing solely to their logical values.
This equivalence is one of [[De Morgan's laws]].
==Applications==
Truth tables can be used to prove many other [[logical equivalence]]s. For example, consider the following truth table:
{| align="center" border="1" cellpadding="8" cellspacing="0" style="background:lightcyan; font-weight:bold; text-align:center; width:60%"
|+ '''Logical Equivalence : (p → q) = (¬p ∨ q)'''
|- style="background:paleturquoise"
! style="width:12%" | p
! style="width:12%" | q
! style="width:12%" | ¬p
! style="width:12%" | ¬p ∨ q
! style="width:12%" | p → q
|-
| F || F || T || T || T
|-
| F || T || T || T || T
|-
| T || F || F || F || F
|-
| T || T || F || T || T
|}
<br>
This demonstrates the fact that ''p'' → ''q'' is [[logically equivalent]] to ¬''p'' ∨ ''q''.
==Truth table for most commonly used logical operators==
Here is a truth table giving definitions of the most commonly used 6 of [[Tractatus Logico-Philosophicus#Propositions 4.*-5.*|the 16 possible truth functions of 2 binary variables (P,Q are thus boolean variables)]]:
{| class="wikitable" style="margin: 1em auto 1em auto; text-align:center;"
|-
! <math>P </math> || <math>Q </math> || <math>P \and Q</math> || <math>P \or Q</math> || <math>P \underline{\or} Q</math> || <math>P \underline{\and} Q</math> || <math>P \rightarrow Q</math> || <math>P \leftarrow Q</math>
|-
| F || F || F || F || F || T || T || T
|-
| F || T || F || T || T || F || T || F
|-
| T || F || F || T || T || F || F || T
|-
| T || T || T || T || F || T || T || T
|}
<br>
Key:
:T = true, F = false
:<math>\and</math> = [[logical conjunction|AND]] (logical conjunction)
:<math>\or</math> = [[logical disjunction|OR]] (logical disjunction)
:<math>\underline{\or}</math> = [[Exclusive or|XOR]] (exclusive or) <!-- this could be "+" instead according to other articles -->
:<math>\underline{\and}</math> = [[Exclusive nor|XNOR]] (exclusive nor)
:<math>\rightarrow</math> = [[logical conditional|conditional "if-then"]]
:<math>\leftarrow</math> = [[logical conditional|conditional "(then)-if"]]
:<math>\iff</math> [[if and only if|biconditional or "if-and-only-if"]] is [[Logical equivalence|logically equivalent]] to <math>\underline{\and}</math>: [[Exclusive nor|XNOR]] (exclusive nor).
[[Johnston diagram]]s, similar to [[Venn diagram]]s and [[Venn diagram|Euler diagrams]], provide a way of visualizing truth tables. An interactive [[Johnston diagram]] illustrating truth tables is at [http://logictutorial.com LogicTutorial.com]
==Condensed truth tables for binary operators==
For binary operators, a condensed form of truth table is also used, where the row headings and the column headings specify the operands and the table cells specify the result. For example [[Boolean logic]] uses this condensed truth table notation:
{|
|-
| width="80" |
|
{| class="wikitable" style="margin: 1em auto 1em auto; text-align:center;"
|-
! ∧ || F || T
|-
! F
| F || F
|-
! T
| F || T
|}
| width="80" |
|
{| class="wikitable" style="margin: 1em auto 1em auto; text-align:center;"
|-
! ∨ || F || T
|-
! F
| F || T
|-
! T
| T || T
|}
|}
This notation is useful especially if the operations are commutative, although one can additionally specify that the rows are the first operand and the columns are the second operand. This condensed notation is particularly useful in discussing multi-valued extensions of logic, as it significantly cuts down on combinatoric explosion of the number of rows otherwise needed. It also provides for quickly recognizable characteristic "shape" of the distribution of the values in the table which can assist the reader in grasping the rules more quickly.
==Truth tables in digital logic==
Truth tables are also used to specify the functionality of [[Lookup_table#Hardware_LUTs|hardware look-up tables (LUTs)]] in [[Digital circuit|digital logic circuitry]]. For an n-input LUT, the truth table will have 2^''n'' values (or rows in the above tabular format), completely specifying a boolean function for the LUT. By representing each boolean value as a [[Bit|bit]] in a [[Binary numeral system|binary number]], truth table values can be efficiently encoded as [[integer]] values in [[Electronic design automation|electronic design automation (EDA)]] [[software]]. For example, a 32-bit integer can encode the truth table for a LUT with up to 5 inputs.
When using an integer representation of a truth table, the output value of the LUT can be obtained by calculating a bit index ''k'' based on the input values of the LUT, in which case the LUT's output value is the ''k''th bit of the integer. For example, to evaluate the output value of a LUT given an [[array]] of ''n'' boolean input values, the bit index of the truth table's output value can be computed as follows: if the ''i''th input is true, let V''i'' = 1, else let V''i'' = 0. Then the ''k''th bit of the binary representation of the truth table is the LUT's output value, where ''k'' = V0*2^0 + V1*2^1 + V2*2^2 + ... + V''n''*2^''n''.
Truth tables are a simple and straightforward way to encode boolean functions, however given the [[Exponential growth|exponential growth]] in size as the number of inputs increase, they are not suitable for functions with a large number of inputs. Other representations which are more memory efficient are text equations and [[Binary decision diagram|binary decision diagram]]s.
==Applications of truth tables in digital electronics==
In digital electronics (and computer science, fields of engineering derived from applied logic and math), truth tables can be used to reduce basic boolean operations to simple correlations of inputs to outputs, without the use of logic gates or code. For example, a binary addition can be represented with the truth table:
<pre>
A B | C R
1 1 | 1 0
1 0 | 0 1
0 1 | 0 1
0 0 | 0 0
where
A = First Operand
B = Second Operand
C = Carry
R = Result
</pre>
This truth table is read left to right:
* Value pair (A,B) equals value pair (C,R).
* Or for this example, A plus B equal result R, with the Carry C.
Note that this table does not describe the logic operations necessary to implement this operation, rather it simply specifies the function of inputs to output values.
In this case it can only be used for very simple inputs and outputs, such as 1's and 0's, however if the number of types of values one can have on the inputs increases, the size of the truth table will increase.
For instance, in an addition operation, one needs two operands, A and B. Each can have one of two values, zero or one. The number of combinations of these two values is 2x2, or four. So the result is four possible outputs of C and R. If one was to use base 3, the size would increase to 3x3, or nine possible outputs.
The first "addition" example above is called a half-adder. A full-adder is when the carry from the previous operation is provided as input to the next adder. Thus, a truth table of eight rows would be needed to describe a [[full adder]]'s logic:
<pre>
A B C* | C R
0 0 0 | 0 0
0 1 0 | 0 1
1 0 0 | 0 1
1 1 0 | 1 0
0 0 1 | 0 1
0 1 1 | 1 0
1 0 1 | 1 0
1 1 1 | 1 1
Same as previous, but..
C* = Carry from previous adder
</pre>
==References==
* [[W.V. Quine|Quine, W.V.]] (1982), ''Methods of Logic'', 4th edition, Harvard University Press, Cambridge, MA.
==See also==
===Basic logical operators===
{{col-begin}}
{{col-break}}
* [[Exclusive disjunction]]
* [[Logical conjunction]]
* [[Logical disjunction]]
* [[Logical equality]]
{{col-break}}
* [[Logical implication]]
* [[Logical NAND]]
* [[Logical NOR]]
* [[Negation]] (Inverter)
{{col-end}}
===Related topics===
{{col-begin}}
{{col-break}}
* [[Ampheck]]
* [[Boolean algebra (logic)]]
* [[Boolean algebra topics]]
* [[Boolean domain]]
* [[Boolean function]]
* [[Boolean-valued function]]
* [[Publicad|Espresso heuristic logic minimizer]]
{{col-break}}
* [[First-order logic]]
* [[Karnaugh maps]]
* [[Logical connective]]
* [[Logical graph]]
* [[Logical value]]
* [[Minimal negation operator]]
{{col-break}}
* [[Multigrade operator]]
* [[Operation (mathematics)|Operation]]
* [[Parametric operator]]
* [[Propositional calculus]]
* [[Sole sufficient operator]]
{{col-end}}
==External links==
*[http://educoteca.org/scripts/ttab/ Online Truth Table Generator]
* [http://www-cs-students.stanford.edu/~silver/truth/ Web-based truth table generator]
* [http://logik.phl.univie.ac.at/~chris/gateway/formular-uk-zentral.html Powerful logic engine]
* [http://www.stephan-brumme.com/programming/Joole/ Boolean expression evaluator, generates truth table (Java applet)]
* [http://pico1.e.ft.fontys.nl/publicad.html Free logic minimization program Minilog]
{{portalpar|Logic}}
{{Logical connectives}}
{{Logic}}
[[Category:Boolean algebra]]
[[Category:Mathematical tables]]
[[af:Waarheidstabel]]
[[cs:Pravdivostní tabulka]]
[[da:Sandhedstabel]]
[[de:Wahrheitstabelle]]
[[es:Tabla de valores de verdad]]
[[fa:جدول صدق و کذب]]
[[fr:Table de vérité]]
[[ko:진리표]]
[[it:Tabella della verità]]
[[he:טבלת אמת]]
[[la:Ratio propositionum]]
[[nl:Waarheidstabel]]
[[ja:真理値表]]
[[no:Sannhetstabell]]
[[pt:Tabela verdade]]
[[sv:Sanningsvärdetabell]]
[[zh:真值表]]