

(97 intermediate revisions by 5 users not shown) 
Line 1: 
Line 1: 
 ''Boolean algebra''' is the branch of algebra in which the values of the variable have exactly two values: "true" and "false", usually denoted 1 and 0 respectively. This overview is taken from the Wikipedia article.   ''Boolean algebra'' is the branch of algebra in which the values of the variables and constants have exactly two values: ''true'' and ''false'', usually denoted 1 and 0 respectively. 

 

 The main operations of Boolean algebra are "and" (conjunction), "or" (disjunction), and "not" (negation). The "and" operator says that two variable are true ONLY IF both variables are true. The "or" operator says that two variable are true if either or both variables are true. And finally, the "not" operator has a value that is the opposite of the variable.
  == Operators == 

 

 Boolean algebra is important to programmers, computer scientists, and the general population.   The basic operators in Boolean algebra are '''AND''', '''OR''', and '''NOT'''. The secondary operators are ''eXclusive OR'' (often called '''XOR''') and ''eXclusive NOR'' ('''XNOR''', sometimes called '''equivalence'''). They are secondary in the sense that they 
   can be composed from the basic operators. 
  
 u
 

 

   *The '''AND''' of two values is true only whenever both values are true. It is written as $xy$ or $x \cdot y$. The values of ''and'' for all possible inputs is shown in the following truth table: 
   ::{ class="wikitable" style="textalign: center" 
  
 ary algebra expressions denote mainly [[number]]s, in Boolean algebra they denote the [[truth values]] ''false'' and ''true''. These values are represented with the [[bit]]s (or binary digits), namely 0 and 1. They do not behave like the [[integer]]s 0 and 1, for which 1 + 1 = 2, but may be identified with the elements of the [[GF(2)twoelement field GF(2)]], that is, [[modular arithmeticinteger arithmetic modulo 2]], for which 1 + 1 = 0. Addition and multiplication then play the Boolean roles of XOR (exclusiveor) and AND (conjunction) respectively, with disjunction ''x''∨''y'' (inclusiveor) definable as ''x'' + ''y'' + ''xy''.
 
  
 Boolean algebra also deals with [[function (mathematics)functions]] which have their values in the set {0, 1}.
 
 A [[bit vectorsequence of bits]] is a commonly used such function. Another common example is the subsets of a set ''E'': to a subset ''F'' of ''E'' is associated the [[indicator function]] that takes the value 1 on ''F'' and 0 outside ''F''. The most general example is the elements of a [[Boolean algebra (structure)Boolean algebra]], with all of the foregoing being instances thereof.
 
  
 As with elementary algebra, the purely equational part of the theory may be developed without considering explicit values for the variables.<ref>Halmos, Paul (1963). Lectures on Boolean Algebras. van Nostrand.</ref>
 
  
 ==Operations==
 
  
 ===Basic operations===
 
  
 The basic operations of Boolean algebra are as follows:
 
 * AND ([[Logical conjunctionconjunction]]), denoted ''x''∧''y'' (sometimes ''x'' AND ''y'' or K''xy''), satisfies ''x''∧''y'' = 1 if ''x'' = ''y'' = 1 and ''x''∧''y'' = 0 otherwise.
 
 * OR ([[Logical disjunctiondisjunction]]), denoted ''x''∨''y'' (sometimes ''x'' OR ''y'' or A''xy''), satisfies ''x''∨''y'' = 0 if ''x'' = ''y'' = 0 and ''x''∨''y'' = 1 otherwise.
 
 * NOT ([[negation]]), denoted ¬''x'' (sometimes NOT ''x'', N''x'' or !''x''), satisfies ¬''x'' = 0 if ''x'' = 1 and ¬''x'' = 1 if ''x'' = 0.
 
  
 Alternatively the values of ''x''∧''y'', ''x''∨''y'', and ¬''x'' can be expressed by tabulating their values with [[truth tables]] as follows.
 
  
 <dl>
 
 <dd>
 
 {{colbegin}}
 
 {{colbreakwidth=9%}}
 
 { class="wikitable" style="textalign: center"  
     
 !<math>x</math>   !<math>\ \ \ \ x\ \ \ \ </math> 
 !<math>y</math>   !<math>\ \ \ \ y\ \ \ \ </math> 
 !<math>x \wedge y</math>   !<math>\ x y\ </math> 
 !<math>x \vee y</math>
 
     
 !0   !0 
 !0   !0 
  0  0    0 
 
 
 !1
 
 !0
 
  0  1
 
     
 !0   !0 
 !1   !1 
  0  1    0 
     
 !1   !1 
 !1
 
  1  1
 
 }
 
 {{colbreak}}
 
 { class="wikitable" style="textalign: center"
 
 
 
 !<math>x</math>
 
 !<math>\neg x</math>
 
 
 
 !0   !0 
 1    0 
     
 !1   !1 
 0
  !1 
 }    1 
 {{colend}}
  } 
 </dd>
 
 </dl>
 
  
 If the truth values 0 and 1 are interpreted as integers, these operations may be expressed with the ordinary operations of arithmetic (where ''x'' + ''y'' uses addition and ''xy'' uses multiplication), or by the minimum/maximum functions:
 
 :<math>
 
 \begin{align}
 
 x \wedge y & = xy = \min(x,y)\\
 
 x \vee y & = x + y  xy = \max(x,y)\\
 
 \neg x & = 1  x
 
 \end{align}
 
 </math>
 
  
 One may consider that only the negation and one of the two other operations are basic, because of the following identities that allow to define the conjunction in terms of the negation and the disjunction, and vice versa:
 
  
 :<math>
 
 \begin{align}
 
 x \wedge y & = \neg(\neg x \vee \neg y) \\
 
 x \vee y & = \neg(\neg x \wedge \neg y)
 
 \end{align}
 
 </math>
 
  
 ===Secondary operations===
 
 The three Boolean operations described above are referred to as basic, meaning that they can be taken as a basis for other Boolean operations that can be built up from them by '''composition,''' the manner in which operations are combined or compounded. Operations composed from the basic operations include the following examples:
 
  
 :<math>x \rightarrow y = \neg{x} \vee y</math>
 
 :<math>x \oplus y = (x \vee y) \wedge \neg{(x \wedge y)}</math>
 
 :<math>x \equiv y = \neg{(x \oplus y)}</math>
 
  
 These definitions give rise to the following truth tables giving the values of these operations for all four possible inputs.
 

 

 :{ class="wikitable" style="textalign: center"   * The '''OR''' of two values is true whenever either or both values are true. It is written as $x+y$. The values of ''or'' for all possible inputs is shown in the following truth table: 
  ::{ class="wikitable" style="textalign: center" 
     
 !<math>x</math>   !<math>\ \ \ \ x\ \ \ \ </math> 
 !<math>y</math>   !<math>\ \ \ \ y\ \ \ \ </math> 
 !<math>x \rightarrow y</math>   !<math>\ x + y\ </math> 
 !<math>x \oplus y</math>
 
 !<math>x \equiv y</math>
 
     
 !0   !0 
 !0   !0 
  1  0  1
   0 
     
  !0 
 !1   !1 
 !0
   1 
 0  1  0
 
     
  !1 
 !0   !0 
 !1
   1 
 1  1  0
 
     
 !1   !1 
 !1   !1 
  1  0  1
   1 
 }   } 
  
 The first operation, ''x'' → ''y'', or C''xy'', is called '''material implication'''. If ''x'' is true then the value of ''x'' → ''y'' is taken to be that of ''y''. But if ''x'' is false then the value of ''y'' can be ignored; however the operation must return ''some'' boolean value and there are only two choices. So by definition, ''x'' → ''y'' is ''true'' when x is false. ([[Relevance logic]] suggests this definition by viewing an implication with a [[false premise]] as something other than either true or false.)
 

 

 The second operation, ''x'' ⊕ ''y'', or J''xy'', is called '''[[exclusive or]]''' (often abbreviated as XOR) to distinguish it from disjunction as the inclusive kind. It excludes the possibility of both ''x'' and ''y''. Defined in terms of arithmetic it is addition mod 2 where 1 + 1 = 0.   * The '''NOT''' of a value is its opposite; that is, the ''not'' of a true value is false whereas the ''not'' of a false value is true. It is written as $\overline{x}$ or $\neg{x}$. The values of ''not'' for all possible inputs is shown in the following truth table: 
   ::{ class="wikitable" style="textalign: center" 
 The third operation, the complement of exclusive or, is '''equivalence''' or Boolean equality: ''x'' ≡ ''y'', or E''xy'', is true just when ''x'' and ''y'' have the same value. Hence ''x'' ⊕ ''y'' as its complement can be understood as ''x'' ≠ ''y'', being true just when ''x'' and ''y'' are different. Equivalence's counterpart in arithmetic mod 2 is ''x'' + ''y'' + 1.
 
  
 Given two operands, each with two possible values, there are 2<sup>2</sup> = 4 possible combinations of inputs. Because each output can have two possible values, there are a total of 2<sup>4</sup> = [[Boolean algebras canonically defined#Truth tables16 possible binary Boolean operations]].
 
  
 ==Laws==
 
 A '''law''' of Boolean algebra is an [[identity (mathematics)identity]] such as ''x''∨(''y''∨''z'') = (''x''∨''y'')∨''z'' between two Boolean terms, where a '''Boolean term''' is defined as an expression built up from variables and the constants 0 and 1 using the operations ∧, ∨, and ¬. The concept can be extended to terms involving other Boolean operations such as ⊕, →, and ≡, but such extensions are unnecessary for the purposes to which the laws are put. Such purposes include the definition of a [[Boolean algebra#Boolean algebrasBoolean algebra]] as any [[model (logic)model]] of the Boolean laws, and as a means for deriving new laws from old as in the derivation of ''x''∨(''y''∧''z'') = ''x''∨(''z''∧''y'') from ''y''∧''z'' = ''z''∧''y'' as treated in the section on [[Boolean algebra#Axiomatizing Boolean algebraaxiomatization]].
 
  
 ===Monotone laws===
 
 Boolean algebra satisfies many of the same laws as ordinary algebra when one matches up ∨ with addition and ∧ with multiplication. In particular the following laws are common to both kinds of algebra:<ref name="O'Regan_p33">{{cite bookauthor=O'Regan, Gerardtitle=A brief history of computingpublisher=Springeryear=2008isbn=9781848000834page=33url=https://books.google.com/books?id=081H96F1enMC&pg=PA33}}</ref>
 
  
 :{
 
     
  Associativity of <math>\vee</math>: style="width:2em" style="textalign: right" <math>x \vee (y \vee z)</math>  <math>= (x \vee y) \vee z</math>
  !<math>\ \ \ \ x\ \ \ \ </math> 
  !<math>\ \ \ \ \overline{x}\ \ \ \ </math> 
     
  Associativity of <math>\wedge</math>:  style="textalign: right" <math>x \wedge (y \wedge z)</math>  <math>= (x \wedge y) \wedge z</math>   !0 
   1 
     
  Commutativity of <math>\vee</math>:  style="textalign: right" <math>x \vee y</math>  <math>= y \vee x</math>   !1 
   0 
  } 
  
  * The '''XOR''' of two values is true whenever the values are different. It uses the $\oplus$ operator, and can be built from the basic operators: $x \oplus y = x \overline{y} + \overline{x} y$ The values of ''xor'' for all possible inputs is shown in the following truth table: 
  ::{ class="wikitable" style="textalign: center" 
     
  Commutativity of <math>\wedge</math>:  style="textalign: right" <math>x \wedge y</math>  <math>= y \wedge x</math>
  !<math>\ \ \ \ x\ \ \ \ </math> 
  !<math>\ \ \ \ y\ \ \ \ </math> 
  !<math>\ x \oplus y\ </math> 
     
  Distributivity of <math>\wedge</math> over <math>\vee</math>:  style="textalign: right" <math>x \wedge (y \vee z)</math>  <math>= (x \wedge y) \vee (x \wedge z)</math>   !0 
  !0 
   0 
     
  Identity for <math>\vee</math>:  style="textalign: right" <math>x \vee 0</math>  <math>= x</math>
  !0 
  !1 
   1 
     
  Identity for <math>\wedge</math>:  style="textalign: right" <math>x \wedge 1</math>  <math>= x</math>   !1 
  !0 
   1 
     
  Annihilator for <math>\wedge</math>:  style="textalign: right" <math>x \wedge 0</math>  <math>= 0</math>   !1 
 
  !1 
 }    0 
  } 

 

 The following laws hold in Boolean Algebra, but not in ordinary algebra:   *The '''XNOR''' of two values is true whenever the values are the same. It is the '''NOT''' of the '''XOR''' function. It uses the $\odot$ operator: $x \odot y = \overline{x \oplus y}$. The ''xnor'' can be built from basic operators: $x \odot y = x y + \overline{x} \overline{y}$ The values of ''xnor'' for all possible inputs is shown in the following truth table: 
 :{   ::{ class="wikitable" style="textalign: center" 
  Annihilator for <math>\vee</math>:  style="textalign: right" <math>x \vee 1</math>  <math>= 1</math>
 
     
 Annihilator for <math>\vee</math>:  style="textalign: right" <math>x \vee 1</math>
  !<math>\ \ \ \ x\ \ \ \ </math> 
 <math>= 1</math>
  !<math>\ \ \ \ y\ \ \ \ </math> 
  !<math>\ x \odot y\ </math> 
     
  Idempotence of <math>\vee</math>:  style="textalign: right" <math>x \vee x</math>  <math>= x</math>   !0 
  !0 
   1 
     
  Idempotence of <math>\wedge</math>:  style="textalign: right" <math>x \wedge x</math>  <math>= x</math>   !0 
  !1 
   0 
     
  Absorption 1:  style="textalign: right" <math>x \wedge (x \vee y)</math>  <math>= x</math>
  !1 
  !0 
   0 
     
  Absorption 2:  style="textalign: right" <math>x \vee (x \wedge y)</math>  <math>= x</math>
  !1 
 
  !1 
 Distributivity of <math>\vee</math> over <math>\wedge</math>:    1 
    } 
 <math>x \vee (y \wedge z)</math>
  
 <math>=(x \vee y) \wedge (x \vee z)</math>
  Just as algebra has basic rules for simplifying and evaluating expressions, so does Boolean algebra. 
 
 
  Distributivity of <math>\vee</math> over <math>\wedge</math>: 
 
 }
 

 

 Taking x = 2 in the third law above shows that it is not an ordinary algebra law, since 2×2 = 4. The remaining five laws can be falsified in ordinary algebra by taking all variables to be 1, for example in Absorption Law 1 the left hand side would be 1(1+1) = 2 while the right hand side would be 1, and so on.
  == Why is Boolean Algebra Important for ACSL Students? == 

 

 All of the laws treated so far have been for conjunction and disjunction. These operations have the property that changing either argument either leaves the output unchanged or the output changes in the same way as the input. Equivalently, changing any variable from 0 to 1 never results in the output changing from 1 to 0. Operations with this property are said to be '''monotone'''. Thus the axioms so far have all been for monotonic Boolean logic. Nonmonotonicity enters via complement ¬ as follows.<ref name="givhal"/>
  Boolean algebra is important to programmers, computer scientists, and the general population. 

 

 ===Nonmonotone laws===
  *For programmers, Boolean expressions are used for conditionals and loops. For example, the following snippet of code sums the even numbers that are not also multiples of 3, stopping when the sum hits 100: 
 The complement operation is defined by the following two laws.
 

 

 :<math>
  <dl> 
 \begin{align}
  <dd> 
 &\text{Complementation 1} & x \wedge \neg x & = 0 \\
  <syntaxhighlight lang="python"> 
 &\text{Complementation 2} & x \vee \neg x & = 1
  s = 0 
 \end{align}
  x = 1 
 </math>   while (s < 100): 
  if (x % 2 == 0) and (x % 3 != 0) 
  then s = s + x 
  x = x + 1 
  </syntaxhighlight> 
  Both the conditional statement 
  <syntaxhighlight lang="python" inline>s < 100</syntaxhighlight> 
  and the Boolean expression with 2 conditional statements 
  <syntaxhighlight lang="python" inline>(x % 2 == 0) and (x % 3 != 0)</syntaxhighlight> 
  evaluate to ''true'' or ''false''. 
  </dd> 
  </dl> 

 

 All properties of negation including the laws below follow from the above two laws alone.<ref name="givhal"/>
  *For computer scientists, Boolean algebra is the basis for digital circuits that make up a computer's hardware. The [[Digital Electronics]] category concerns a graphical representation of a circuit. That circuit is typically easiest to understand and evaluate by converting it to its Boolean algebra representation. 
  
  * The general population uses Boolean algebra, probably without knowing that they are doing so, when they enter search terms in Internet search engines. For example, the search expression ''jaguar speed car'' is parsed by the search engine as the Boolean expression <syntaxhighlight lang="python" inline>"jaguar" and "car" and not "speed"</syntaxhighlight>; it returns pages about the speed of the jaguar animal, not the Jaguar car. 

 

 In both ordinary and Boolean algebra, negation works by exchanging pairs of elements, whence in both algebras it satisfies the double negation law (also called involution law)
  ==Laws== 
  A '''law''' of Boolean algebra is an identity such as <math>x + (y + z) = (x + y) + z</math> 
  between two Boolean terms, where a '''Boolean term''' is defined as an expression built up from variables, the constants 0 and 1, and operations ''and'', ''or'', ''not'', ''xor'', and ''xnor''. 

 

 :<math>
  Like ordinary algebra, parentheses are used to group terms. When a ''not'' is represented with an overhead horizontal line, there is an implicit grouping of the terms under the line. That is, $x \cdot \overline{y + z}$ is evaluated as if it were written $x \cdot \overline{(y + z)}.$ 
 \begin{align}  
 &\text{Double negation} & \neg{(\neg{x})} & = x
 
 \end{align}
 
 </math>
 

 

 But whereas ''ordinary algebra'' satisfies the two laws
  === Order of Precedence === 

 

 :<math>
  The order of operator precedence is ''not''; then ''and''; then ''xor'' and ''xnor''; and finally ''or''. Operators with the same level of precedence are evaluated from lefttoright. 
 \begin{align}
  
 (x)(y) & = xy \\
  === Fundamental Identities === 
 (x) + (y) & = (x + y)
 
 \end{align}
 
 </math>
 

 

 Boolean algebra satisfies [[De Morgan's laws]]:
  { class="wikitable" style="textalign: center" 
   
   style="textalign: left"  Commutative Law – The order of application of two separate terms is not important.  $x+y = y+x$  $x \cdot y = y \cdot x$ 
   
   style="textalign: left"  Associative Law – Regrouping of the terms in an expression doesn't change the value of the expression. $(x + y) + z$ = $x + (y + z)$  $x \cdot (y \cdot z) = (x \cdot y) \cdot z$ 
   
   style="textalign: left"  Idempotent Law – A term that is ''or'''´ed or ''and''´ed with itself is equal to that term.  $ x +x = x $  $x \cdot x = x$ 
   
   style="textalign: left"  Annihilator Law – A term that is ''or'''´ed with 1 is 1; a term ''and''´ed with 0 is 0.  $x + 1 = 1$  $ x \cdot 0 = 0 $ 
   
   style="textalign: left"  Identity Law – A term ''or''´ed 0 or ''and''´ed with a 1 will always equal that term.  $x + 0 = x$  $x \cdot 1 = x$ 
   
   style="textalign: left"  Complement Law – A term ''or''´ed with its complement equals 1 and a term ''and''´ed with its complement equals 0.  $x + \overline{x} = 1 $  $x \cdot \overline{x} = 0$ 
   
   style="textalign: left"  Absorptive Law – Complex expressions can be reduced to a simpler ones by absorbing like terms. colspan=2 
  $x+x y = x$ 

 

 :<math>
  $ x +\overline{x}y = x + y $ 
 \begin{align}
 
 &\text{De Morgan 1} & \neg x \wedge \neg y & = \neg{(x \vee y)} \\
 
 &\text{De Morgan 2} & \neg x \vee \neg y & = \neg{(x \wedge y)}
 
 \end{align}
 
 </math>
 

 

 ===Completeness===
  $x (x+y) = x$ 
 The laws listed above define Boolean algebra, in the sense that they entail the rest of the subject. The laws ''Complementation'' 1 and 2, together with the monotone laws, suffice for this purpose and can therefore be taken as one possible ''complete'' set of laws or [[axiomatization]] of Boolean algebra. Every law of Boolean algebra follows logically from these axioms. Furthermore, Boolean algebras can then be defined as the [[model (logic)models]] of these axioms as treated in the [[Boolean algebra#Boolean algebrassection thereon]].
 

 

 To clarify, writing down further laws of Boolean algebra cannot give rise to any new consequences of these axioms, nor can it rule out any model of them. In contrast, in a list of some but not all of the same laws, there could have been Boolean laws that did not follow from those on the list, and moreover there would have been models of the listed laws that were not Boolean algebras.
   
   style="textalign: left"  Distributive Law – It's OK to multiply or factorout an expression.colspan=2 

 

 This axiomatization is by no means the only one, or even necessarily the most natural given that we did not pay attention to whether some of the axioms followed from others but simply chose to stop when we noticed we had enough laws, treated further in the section on [[Boolean algebra#Axiomatizing Boolean algebraaxiomatizations]]. Or the intermediate notion of axiom can be sidestepped altogether by defining a Boolean law directly as any '''tautology''', understood as an equation that holds for all values of its variables over 0 and 1. All these definitions of Boolean algebra can be shown to be equivalent.
  $x \cdot (y + z) = xy + xz$ 

 

 ===Duality principle===
  $(x+y) \cdot (p + q) = xp + xq +yp + yq$ 
 <! linked from redirect [[Duality principle (Boolean algebra)]] >
 
 Principle: If {X, R} is a [[partially ordered setposet]], then {X, R(inverse)} is also a poset.
 

 

 There is nothing magical about the choice of symbols for the values of Boolean algebra. We could rename 0 and 1 to say α and β, and as long as we did so consistently throughout it would still be Boolean algebra, albeit with some obvious cosmetic differences.
  $(x+y)(x+z)=x + yz $ 

 

 But suppose we rename 0 and 1 to 1 and 0 respectively. Then it would still be Boolean algebra, and moreover operating on the same values. However it would not be identical to our original Boolean algebra because now we find ∨ behaving the way ∧ used to do and vice versa. So there are still some cosmetic differences to show that we've been fiddling with the notation, despite the fact that we're still using 0s and 1s.
   
   style="textalign: left"  DeMorgan's Law – An ''or'' (''and'') expression that is negated is equal to the ''and'' (''or'') of the negation of each term. $\overline{x+y} = \overline{x} \cdot \overline{y}$$\overline{x \cdot y} = \overline{x} + \overline{y}$ 
   
   style="textalign: left"  Double Negation – A term that is inverted twice is equal to the original term.colspan=2 $\overline{\overline{x}} = x $ 
   
   style="textalign: left"  Relationship between XOR and XNOR colspan=2  $ x\odot y = \overline{x\oplus y} = x \oplus \overline{y} =\overline{x} \oplus {y}$ 
  } 

 

 But if in addition to interchanging the names of the values we also interchange the names of the two binary operations, ''now'' there is no trace of what we have done. The end product is completely indistinguishable from what we started with. We might notice that the columns for ''x''∧''y'' and ''x''∨''y'' in the truth tables had changed places, but that switch is immaterial.
  == Sample Problems == 

 

 When values and operations can be paired up in a way that leaves everything important unchanged when all pairs are switched simultaneously, we call the members of each pair '''dual''' to each other. Thus 0 and 1 are dual, and ∧ and ∨ are dual. The '''Duality Principle''', also called [[De Morgan's lawsDe Morgan duality]], asserts that Boolean algebra is unchanged when all dual pairs are interchanged.
  Problems in this category are typically of the form "Given a Boolean expression, simplify it as much as possible" or "Given a Boolean expression, 
  find the values of all possible inputs that make the expression ''true''." Simplify means writing an equivalent expression using the fewest number of operators. 

 

 One change we did not need to make as part of this interchange was to complement. We say that complement is a '''selfdual''' operation. The identity or donothing operation ''x'' (copy the input to the output) is also selfdual. A more complicated example of a selfdual operation is (''x''∧''y'') ∨ (''y''∧''z'') ∨ (''z''∧''x''). There is no selfdual binary operation that depends on both its arguments. A composition of selfdual operations is a selfdual operation. For example, if ''f''(''x'', ''y'', ''z'') = (''x''∧''y'') ∨ (''y''∧''z'') ∨ (''z''∧''x''), then ''f''(''f''(''x'', ''y'', ''z''), ''x'', ''t'') is a selfdual operation of four arguments ''x,y,z,t''.
  === Problem 1: Simplify the Expression === 

 

 The principle of duality can be explained from a [[group theory]] perspective by the fact that there are exactly four functions that are onetoone mappings ([[automorphism]]s) of the set of Boolean [[polynomial]]s back to itself: the identity function, the complement function, the dual function and the contradual function (complemented dual). These four functions form a [[group (mathematics)group]] under [[function composition]], isomorphic to the [[Klein fourgroup]], [[group actionacting]] on the set of Boolean polynomials. [[Walter Gottschalk]] remarked that consequently a more appropriate name for the phenomenon would be the ''principle'' (or ''square'') ''of quaternality''.<ref name="GivantHalmos2009">{{cite bookauthor1=Steven R. Givantauthor2=Paul Richard Halmostitle=Introduction to Boolean algebrasurl=https://books.google.com/books?id=ORILyf8sF2sC&pg=PA22year=2009publisher=Springerisbn=9780387402932pages=21–22}}</ref>
  '''Problem:''' Simplify the following expression as much as possible: 
  $ \overline{ \overline{A(A+B)} + B\overline{A}}$ 

 

 ==Diagrammatic representations==
  '''Solution:''' 

 

 ===Venn diagrams===
  The simplification proceeds as follows: 
 A [[Venn diagram]]<ref>{{cite journal authorlast=Venn authorfirst=John authorlink=John Venn title=I. On the Diagrammatic and Mechanical Representation of Propositions and Reasonings journal=[[The London, Edinburgh, and Dublin Philosophical Magazine and Journal of Science]] publisher=[[Taylor & Francis]] volume=10 issue=59 date=July 1880 series=5 doi=10.1080/14786448008626877 pages=1–18 url=https://www.cis.upenn.edu/~bhusnur4/cit592_fall2014/venn%20diagrams.pdf deadurl=no archiveurl=https://web.archive.org/web/20170516204620/https://www.cis.upenn.edu/~bhusnur4/cit592_fall2014/venn%20diagrams.pdf archivedate=20170516}} [http://www.tandfonline.com/doi/abs/10.1080/14786448008626877] [https://books.google.com/books?id=k68vAQAAIAAJ&pg=PA1]</ref> is a representation of a Boolean operation using shaded overlapping regions. There is one region for each variable, all circular in the examples here. The interior and exterior of region ''x'' corresponds respectively to the values 1 (true) and 0 (false) for variable ''x''. The shading indicates the value of the operation for each combination of regions, with dark denoting 1 and light 0 (some authors use the opposite convention).
 

 

 The three Venn diagrams in the figure below represent respectively conjunction ''x''∧''y'', disjunction ''x''∨''y'', and complement ¬''x''.
  :$\overline{ \overline{A(A+B)} + B\overline{A}}$ 
 [[File:Vennandornot.svgcenter500pxthumbFigure 2. Venn diagrams for conjunction, disjunction, and complement]]
  ::{ 
 For conjunction, the region inside both circles is shaded to indicate that ''x''∧''y'' is 1 when both variables are 1. The other regions are left unshaded to indicate that ''x''∧''y'' is 0 for the other three combinations.
 

 

 The second diagram represents disjunction ''x''∨''y'' by shading those regions that lie inside either or both circles. The third diagram represents complement ¬''x'' by shading the region ''not'' inside the circle.
   
   <math>= \left(\overline{ \overline{A(A+B)}}\right) \cdot \left(\overline{ B\overline{A}}\right)</math>  
   (DeMorgan's Law) 

 

 While we have not shown the Venn diagrams for the constants 0 and 1, they are trivial, being respectively a white box and a dark box, neither one containing a circle. However we could put a circle for ''x'' in those boxes, in which case each would denote a function of one argument, ''x'', which returns the same value independently of ''x'', called a constant function. As far as their outputs are concerned, constants and constant functions are indistinguishable; the difference is that a constant takes no arguments, called a ''zeroary'' or ''nullary'' operation, while a constant function takes one argument, which it ignores, and is a ''unary'' operation.
   
   <math>= \left(A(A+B)\right) \cdot \left( \overline{B}+\overline{\overline{A}}\right)</math>  
   (Double Negation; DeMorgan's Law) 

 

 Venn diagrams are helpful in visualizing laws. The commutativity laws for ∧ and ∨ can be seen from the symmetry of the diagrams: a binary operation that was not commutative would not have a symmetric diagram because interchanging ''x'' and ''y'' would have the effect of reflecting the diagram horizontally and any failure of commutativity would then appear as a failure of symmetry.
   
   <math>= A \cdot \left( \overline{B}+A\right)</math>  
   (Absorption; Double Negation) 

 

 [[Idempotence]] of ∧ and ∨ can be visualized by sliding the two circles together and noting that the shaded area then becomes the whole circle, for both ∧ and ∨.
   
   <math>=A</math>  
   (Absorption) 
   

 

 To see the first absorption law, ''x''∧(''x''∨''y'') = ''x'', start with the diagram in the middle for ''x''∨''y'' and note that the portion of the shaded area in common with the ''x'' circle is the whole of the ''x'' circle. For the second absorption law, ''x''∨(''x''∧''y'') = ''x'', start with the left diagram for ''x''∧''y'' and note that shading the whole of the ''x'' circle results in just the ''x'' circle being shaded, since the previous shading was inside the ''x'' circle.
  } 

 

 The double negation law can be seen by complementing the shading in the third diagram for ¬''x'', which shades the ''x'' circle.
  === Problem 2: Find Solutions === 

 

 To visualize the first De Morgan's law, (¬''x'')∧(¬''y'') = ¬(''x''∨''y''), start with the middle diagram for ''x''∨''y'' and complement its shading so that only the region outside both circles is shaded, which is what the right hand side of the law describes. The result is the same as if we shaded that region which is both outside the ''x'' circle ''and'' outside the ''y'' circle, i.e. the conjunction of their exteriors, which is what the left hand side of the law describes.
  '''Problem:''' Find all orderd pairs $(A,B)$ that make the following expression ''true'': 
  $ \overline{ \overline{(A+B)} + \overline{A}B }$ 

 

 The second De Morgan's law, (¬''x'')∨(¬''y'') = ¬(''x''∧''y''), works the same way with the two diagrams interchanged.
  '''Solution:''' 

 

 The first complement law, ''x''∧¬''x'' = 0, says that the interior and exterior of the ''x'' circle have no overlap. The second complement law, ''x''∨¬''x'' = 1, says that everything is either inside or outside the ''x'' circle.
  There are typically two approaches to solving this type of problem. One approach is to simplify the expression as much as possible, until 
  it's obvious what the solutions are. The other approach is to create a truth table of all possible inputs, with columns for each subexpression. 

 

 ===Digital logic gates===
  The simplification approach is as following: 
 Digital logic is the application of the Boolean algebra of 0 and 1 to electronic hardware consisting of [[logic gates]] connected to form a [[circuit diagram]]. Each gate implements a Boolean operation, and is depicted schematically by a shape indicating the operation. The shapes associated with the gates for conjunction (ANDgates), disjunction (ORgates), and complement (inverters) are as follows.<ref>{{Cite journal
  :$ \overline{\overline{(A+B)} + \overline{A}B}$ 
  last = Shannon
  ::$= \overline{\overline{A+B}} \cdot \overline{\overline{A}B}$ 
  first = Claude
  ::$= (A+B) \cdot (\overline{\overline{A}}+\overline{B} ) $ 
  authorlink = Claude Shannon
  ::$= (A+B) \cdot (A+\overline{B}) $ 
  title = The Synthesis of TwoTerminal Switching Circuits
  ::$= AA + A\overline{B} + BA + B\overline{B} $ 
  journal = Bell System Technical Journal
  ::$= A + A(\overline{B} + B) + 0 $ 
  volume = 28
  ::$= A + A(1)$ 
  pages = 59–98
  ::$= A + A$ 
  year = 1949
  ::$=A$ 
  id =
  This means that all inputs are valid whenever $A$ is ''true'': $(1,0)$ and $(1,1)$ 
  doi=10.1002/j.15387305.1949.tb03624.x}}</ref>
 

 

 [[File:LogicGates.GIFcenter400pxthumb]]
  The truth table approach is as following. Each column is the result of a basic operation on two other columns. 
 The lines on the left of each gate represent input wires or ''ports''. The value of the input is represented by a voltage on the lead. For socalled "activehigh" logic, 0 is represented by a voltage close to zero or "ground", while 1 is represented by a voltage close to the supply voltage; activelow reverses this. The line on the right of each gate represents the output port, which normally follows the same voltage conventions as the input ports.
  :{ class="wikitable" style="textalign: center" 
   
  !style="backgroundcolor: #cceeff; fontsize: xsmall" #1 
  !style="backgroundcolor: #cceeff; fontsize: xsmall" #2 
  !style="backgroundcolor: #cceeff; fontsize: xsmall" #3 
  !style="backgroundcolor: #cceeff; fontsize: xsmall" #4 
  !style="backgroundcolor: #cceeff; fontsize: xsmall" #5 
  !style="backgroundcolor: #cceeff; fontsize: xsmall" #6 
  !style="backgroundcolor: #cceeff; fontsize: xsmall" #7 
  !style="backgroundcolor: #cceeff; fontsize: xsmall" #8 

 

 Complement is implemented with an inverter gate. The triangle denotes the operation that simply copies the input to the output; the small circle on the output denotes the actual inversion complementing the input. The convention of putting such a circle on any port means that the signal passing through this port is complemented on the way through, whether it is an input or output port.
   
  style="backgroundcolor: #cceeff" 
  style="backgroundcolor: #cceeff" 
  !style="backgroundcolor: #cceeff; fontsize: xsmall" OR of Col#1, Col#2 
  !style="backgroundcolor: #cceeff; fontsize: xsmall" NOT of Col#3 
  !style="backgroundcolor: #cceeff; fontsize: xsmall" NOT of Col#1 
  !style="backgroundcolor: #cceeff; fontsize: xsmall" ADD of Col#1, Col#2 
  !style="backgroundcolor: #cceeff; fontsize: xsmall" OR of Col#4, Col#6 
  !style="backgroundcolor: #cceeff; fontsize: xsmall" NOT of Col#7 

 

 The [[Boolean Algebra#Duality principleDuality Principle]], or [[De Morgan's laws]], can be understood as asserting that complementing all three ports of an AND gate converts it to an OR gate and vice versa, as shown in Figure 4 below. Complementing both ports of an inverter however leaves the operation unchanged.
   
 [[File:DeMorganGates.GIFcenter400pxthumb]]
  !<math>A</math> 
  !<math>B</math> 
  !<math>A+B</math> 
  !<math>\overline{A+B}</math> 
  !<math>\overline{A}</math> 
  !<math>\overline{A}B</math> 
  !<math>\overline{A+B} + \overline{A}B</math> 
  !<math>\overline{\overline{A+B} + \overline{A}B}</math> 

 

 More generally one may complement any of the eight subsets of the three ports of either an AND or OR gate. The resulting sixteen possibilities give rise to only eight Boolean operations, namely those with an odd number of 1's in their truth table. There are eight such because the "oddbitout" can be either 0 or 1 and can go in any of four positions in the truth table. There being sixteen binary Boolean operations, this must leave eight operations with an even number of 1's in their truth tables. Two of these are the constants 0 and 1 (as binary operations that ignore both their inputs); four are the operations that depend nontrivially on exactly one of their two inputs, namely ''x'', ''y'', ¬''x'', and ¬''y''; and the remaining two are ''x''⊕''y'' (XOR) and its complement ''x''≡''y''.
   
  !0 
  !0 
  0 
  1 
  1 
  0 
  1 
  !0 

 

 ==Boolean algebras==
   
 {{Main articleBoolean algebra (structure)}}
  !0 
 The term "algebra" denotes both a subject, namely the subject of [[algebra]], and an object, namely an [[algebraic structure]]. Whereas the foregoing has addressed the subject of Boolean algebra, this section deals with mathematical objects called Boolean algebras, defined in full generality as any model of the Boolean laws. We begin with a special case of the notion definable without reference to the laws, namely concrete Boolean algebras, and then give [[#Boolean algebras: the definitionthe formal definition]] of the general notion.
  !1 

 

 ===Concrete Boolean algebras===
  1 
 A '''concrete Boolean algebra''' or [[field of sets]] is any nonempty set of subsets of a given set ''X'' closed under the set operations of [[union (set theory)union]], [[intersection (set theory)intersection]], and [[complement (set theory)#Relative complementcomplement]] relative to ''X''.<ref name="givhal"/>
  0 
  1 
  1 
  1 
  !0 

 

 (As an aside, historically ''X'' itself was required to be nonempty as well to exclude the degenerate or oneelement Boolean algebra, which is the one exception to the rule that all Boolean algebras satisfy the same equations since the degenerate algebra satisfies every equation. However this exclusion conflicts with the preferred purely equational definition of "Boolean algebra," there being no way to rule out the oneelement algebra using only equations— 0 ≠ 1 does not count, being a negated equation. Hence modern authors allow the degenerate Boolean algebra and let ''X'' be empty.)
   
  !1 
  !0 

 

 '''Example 1.''' The [[power set]] 2<sup>''X''</sup> of ''X'', consisting of all subsets of ''X''. Here ''X'' may be any set: empty, finite, infinite, or even [[uncountable]].
  1 
  0 
  0 
  0 
  0 
  !1 

 

 '''Example 2.''' The empty set and ''X''. This twoelement algebra shows that a concrete Boolean algebra can be finite even when it consists of subsets of an infinite set. It can be seen that every field of subsets of ''X'' must contain the empty set and ''X''. Hence no smaller example is possible, other than the degenerate algebra obtained by taking ''X'' to be empty so as to make the empty set and ''X'' coincide.
   
  !1 
  !1 

 

 '''Example 3.''' The set of finite and [[cofinite]] sets of integers, where a cofinite set is one omitting only finitely many integers. This is clearly closed under complement, and is closed under union because the union of a cofinite set with any set is cofinite, while the union of two finite sets is finite. Intersection behaves like union with "finite" and "cofinite" interchanged.
  1 
  0 
  0 
  0 
  0 
  !1 
  } 

 

 '''Example 4.''' For a less trivial example of the point made by Example 2, consider a [[Venn diagram]] formed by ''n'' closed curves [[Partition of a setpartitioning]] the diagram into 2<sup>''n''</sup> regions, and let ''X'' be the (infinite) set of all points in the plane not on any curve but somewhere within the diagram. The interior of each region is thus an infinite subset of ''X'', and every point in ''X'' is in exactly one region. Then the set of all 2<sup><span>2<sup>''n''</sup></span></sup> possible unions of regions (including the empty set obtained as the union of the empty set of regions and ''X'' obtained as the union of all 2<sup>''n''</sup> regions) is closed under union, intersection, and complement relative to ''X'' and therefore forms a concrete Boolean algebra. Again we have finitely many subsets of an infinite set forming a concrete Boolean algebra, with Example 2 arising as the case ''n'' = 0 of no curves.
  The rightmost column is the expression we are solving; it is ''true'' for the 3rd and 4th rows, where the inputs are $(1,0)$ and $(1,1)$. 

 

 ===Subsets as bit vectors===   == Online Resources == 
 A subset ''Y'' of ''X'' can be identified with an [[indexed family]] of bits with [[index set]] ''X'', with the bit indexed by ''x'' ∈ ''X'' being 1 or 0 according to whether or not ''x'' ∈ ''Y''. (This is the socalled [[Indicator functioncharacteristic function]] notion of a subset.) For example, a 32bit computer word consists of 32 bits indexed by the set {0,1,2,…,31}, with 0 and 31 indexing the low and high order bits respectively. For a smaller example, if ''X'' = {''a,b,c''} where ''a, b, c'' are viewed as bit positions in that order from left to right, the eight subsets {}, {''c''}, {''b''}, {''b'',''c''}, {''a''}, {''a'',''c''}, {''a'',''b''}, and {''a'',''b'',''c''} of ''X'' can be identified with the respective bit vectors 000, 001, 010, 011, 100, 101, 110, and 111. Bit vectors indexed by the set of natural numbers are infinite [[sequence]]s of bits, while those indexed by the [[real numberreals]] in the [[unit interval]] [0,1] are packed too densely to be able to write conventionally but nonetheless form welldefined indexed families (imagine coloring every point of the interval [0,1] either black or white independently; the black points then form an arbitrary subset of [0,1]).
 

 

 From this bit vector viewpoint, a concrete Boolean algebra can be defined equivalently as a nonempty set of bit vectors all of the same length (more generally, indexed by the same set) and closed under the bit vector operations of [[Bitwise operationsbitwise]] ∧, ∨, and ¬, as in 1010∧0110 = 0010, 1010∨0110 = 1110, and ¬1010 = 0101, the bit vector realizations of intersection, union, and complement respectively.
  ===Websites=== 
  A great online tutorial on Boolean Algebra is part of [https://ryanstutorials.net/booleanalgebratutorial/ Ryan's Tutorials]. There are many online Boolean Calculators. This one gives Truth Tables [https://sheabunge.github.io/boolcalc/ calculator ]. This link that has ads also simplifies and uses ! for NOT [https://www.booleanalgebra.com/ calculator]. 

 

 ===The prototypical Boolean algebra===   ===Videos=== 
 {{main articletwoelement Boolean algebra}}
  The following YouTube videos show ACSL students and advisors working out some previous problems. To access the YouTube page with the video, click on the title of the video in the icon. (You can also play the video directly by clicking on the arrow in the center of the image; however, you'll 
 The set {0,1} and its Boolean operations as treated above can be understood as the special case of bit vectors of length one, which by the identification of bit vectors with subsets can also be understood as the two subsets of a oneelement set. We call this the '''prototypical''' Boolean algebra, justified by the following observation.   probably want to have a larger viewing of the video since it contains writing on a whiteboard.) Some of the videos contain ads; ACSL is not responsible for the ads and does not receive compensation in any form for those ads. 
 :The laws satisfied by all nondegenerate concrete Boolean algebras coincide with those satisfied by the prototypical Boolean algebra.
 
 This observation is easily proved as follows. Certainly any law satisfied by all concrete Boolean algebras is satisfied by the prototypical one since it is concrete. Conversely any law that fails for some concrete Boolean algebra must have failed at a particular bit position, in which case that position by itself furnishes a onebit counterexample to that law. Nondegeneracy ensures the existence of at least one bit position because there is only one empty bit vector.
 

 

 The final goal of the next section can be understood as eliminating "concrete" from the above observation. We shall however reach that goal via the surprisingly stronger observation that, up to isomorphism, all Boolean algebras are concrete.
  { 
   
   <youtube width="300" height="180">https://youtu.be/HJdhEjpVYsY</youtube> 
   [https://youtu.be/HJdhEjpVYsY ''ACSL Boolean Algebra Contest 2 Worksheet 1'' ('''misterminich''')] 

 

 ===Boolean algebras: the definition===
  Mr. Minich is an ACSL advisor. This video was one of two he created to help prepare his students for the ACSL Boolean algebra category. It shows solutions to 5 different problems that have 
 The Boolean algebras we have seen so far have all been concrete, consisting of bit vectors or equivalently of subsets of some set. Such a Boolean algebra consists of a set and operations on that set which can be ''shown'' to satisfy the laws of Boolean algebra.
  appeared in recent years. 

 

 Instead of showing that the Boolean laws are satisfied, we can instead postulate a set ''X'', two binary operations on ''X'', and one unary operation, and ''require'' that those operations satisfy the laws of Boolean algebra. The elements of ''X'' need not be bit vectors or subsets but can be anything at all. This leads to the more general ''abstract'' definition.
   
 :A '''Boolean algebra''' is any set with binary operations ∧ and ∨ and a unary operation ¬ thereon satisfying the Boolean laws.<ref>{{Cite book
   <youtube width="300" height="180">https://youtu.be/4io6xgz8Zwk</youtube> 
  last = Koppelberg
   [https://youtu.be/4io6xgz8Zwk ''ACSL Boolean Algebra Contest 2 Worksheet 2'' ('''misterminich''') ] 
  first = Sabine
 
  chapter = General Theory of Boolean Algebras
 
  title = Handbook of Boolean Algebras, Vol. 1 (ed. J. Donald Monk with Robert Bonnet)
 
  publisher = North Holland
 
  year = 1989
 
  location = Amsterdam
 
  isbn = 9780444702616 <!044470261X> }}</ref>
 

 

 For the purposes of this definition it is irrelevant how the operations came to satisfy the laws, whether by fiat or proof. All concrete Boolean algebras satisfy the laws (by proof rather than fiat), whence every concrete Boolean algebra is a Boolean algebra according to our definitions. This axiomatic definition of a Boolean algebra as a set and certain operations satisfying certain laws or axioms ''by fiat'' is entirely analogous to the abstract definitions of [[Group (mathematics)group]], [[Ring (mathematics)ring]], [[Field (mathematics)field]] etc. characteristic of modern or [[abstract algebra]].
  Mr. Minich is an ACSL advisor. This video was one of two he created to help prepare his students for the ACSL Boolean algebra category. It shows solutions to 5 different problems that have 
  appeared in recent years. 

 

 Given any complete axiomatization of Boolean algebra, such as the axioms for a [[Complemented latticecomplemented]] [[distributive lattice]], a sufficient condition for an [[algebraic structure]] of this kind to satisfy all the Boolean laws is that it satisfy just those axioms. The following is therefore an equivalent definition.
   
 :A '''Boolean algebra''' is a complemented distributive lattice.    <youtube width="300" height="180">https://youtu.be/6vI1mO1XOjQ</youtube> 
   [https://youtu.be/6vI1mO1XOjQ ''ACSL 3 1314 #1  AM'' ('''Gordon Campbell''')] 

 

 The section on [[#Axiomatizing Boolean algebraaxiomatization]] lists other axiomatizations, any of which can be made the basis of an equivalent definition.
  This video walks through the solution to finding all ordered triples that make the following 
  Boolean expression ''true'': 
  :<math> 
  (AB+\overline{C})(\overline{A}+BC)(A+\overline{B}+C) 
  </math> 
  This problem appeared in 20132014 in the Senior Division, Contest #3. 

 

 ===Representable Boolean algebras===    
 Although every concrete Boolean algebra is a Boolean algebra, not every Boolean algebra need be concrete. Let ''n'' be a [[Squarefree integersquarefree]] positive integer, one not divisible by the square of an integer, for example 30 but not 12. The operations of [[greatest common divisor]], [[least common multiple]], and division into ''n'' (that is, ¬''x'' = ''n''/''x''), can be shown to satisfy all the Boolean laws when their arguments range over the positive divisors of ''n''. Hence those divisors form a Boolean algebra. These divisors are not subsets of a set, making the divisors of ''n'' a Boolean algebra that is not concrete according to our definitions.
   <youtube width="300" height="180">https://youtu.be/KRKTbAZYlLM</youtube> 
   [https://youtu.be/KRKTbAZYlLM ''ACSL 3 #1 1415  AM'' ('''Gordon Campbell''')] 

 

 However, if we ''represent'' each divisor of ''n'' by the set of its prime factors, we find that this nonconcrete Boolean algebra is [[isomorphic]] to the concrete Boolean algebra consisting of all sets of prime factors of ''n'', with union corresponding to least common multiple, intersection to greatest common divisor, and complement to division into ''n''. So this example while not technically concrete is at least "morally" concrete via this representation, called an [[isomorphism]]. This example is an instance of the following notion.
  This video walks through the simplification of the expression: 
 :A Boolean algebra is called '''representable''' when it is isomorphic to a concrete Boolean algebra.   :<math> 
  \overline{(\overline{A}+B)}(B+C)\overline{(A+\overline{C})}(A\overline{B}+BC) 
  </math> 
  This problem appeared in 20142015 in the Senior Division, Contest #3. 

 

 The obvious next question is answered positively as follows.
   
 :Every Boolean algebra is representable.    <youtube width="300" height="180">https://youtu.be/jDnnizm2g8</youtube> 
   [https://youtu.be/jDnnizm2g8 ''A general tutorial on boolean algebra that can be used for American Computer Science League.'' ('''Tangerine Code''')] 

 

 That is, up to isomorphism, abstract and concrete Boolean algebras are the same thing. This quite nontrivial result depends on the [[Boolean prime ideal theorem]], a choice principle slightly weaker than the [[axiom of choice]], and is treated in more detail in the article [[Stone's representation theorem for Boolean algebras]]. This strong relationship implies a weaker result strengthening the observation in the previous subsection to the following easy consequence of representability.
  Walks through the simplification of the following Boolean expression: 
 :The laws satisfied by all Boolean algebras coincide with those satisfied by the prototypical Boolean algebra.   :<math> 
  \overline{ (\overline{A + \overline{B}})(AB)} + 
  \overline{ (A+B)(\overline{\overline{A}B})} 
  </math> 

 

 It is weaker in the sense that it does not of itself imply representability. Boolean algebras are special here, for example a [[relation algebra]] is a Boolean algebra with additional structure but it is not the case that every relation algebra is representable in the sense appropriate to relation algebras.
  } 
  
 ==Axiomatizing Boolean algebra==
 
 {{Main articleAxiomatization of Boolean algebrasBoolean algebras canonically defined}}
 
 The above definition of an abstract Boolean algebra as a set and operations satisfying "the" Boolean laws raises the question, what are those laws? A simpleminded answer is "all Boolean laws," which can be defined as all equations that hold for the Boolean algebra of 0 and 1. Since there are infinitely many such laws this is not a terribly satisfactory answer in practice, leading to the next question: does it suffice to require only finitely many laws to hold?
 
  
 In the case of Boolean algebras the answer is yes. In particular the finitely many equations we have listed above suffice. We say that Boolean algebra is '''finitely axiomatizable''' or '''finitely based.'''
 
  
 Can this list be made shorter yet? Again the answer is yes. To begin with, some of the above laws are implied by some of the others. A sufficient subset of the above laws consists of the pairs of associativity, commutativity, and absorption laws, distributivity of ∧ over ∨ (or the other distributivity law—one suffices), and the two complement laws. In fact this is the traditional axiomatization of Boolean algebra as a [[Complemented latticecomplemented]] [[distributive lattice]].
 
  
 By introducing additional laws not listed above it becomes possible to shorten the list yet further. In 1933 [[Edward Huntington]] showed that if the basic operations are taken to be ''x''∨''y'' and ¬''x'', with ''x''∧''y'' considered a derived operation (e.g. via De Morgan's law in the form ''x''∧''y'' = ¬(¬''x''∨¬''y'')), then the equation
 
 ¬(¬''x''∨¬''y'')∨¬(¬''x''∨''y'') = ''x'' along with the two equations expressing associativity and commutativity of ∨ completely axiomatized Boolean algebra. When the only basic operation is the binary [[Sheffer strokeNAND operation]] ¬(''x''∧''y''), [[Stephen Wolfram]] has proposed in his book ''[[A New Kind of Science]]'' the single axiom (((''xy'')''z'')(''x''((''xz'')''x''))) = ''z'' as a oneequation axiomatization of Boolean algebra, where for convenience here ''xy'' denotes the NAND rather than the AND of ''x'' and ''y''.
 
  
 ==Propositional logic==
 
 {{Main articlePropositional calculus}}
 
 '''[[Propositional logic]]''' is a [[logical system]] that is intimately connected to Boolean algebra.<ref name="givhal"/> Many syntactic concepts of Boolean algebra carry over to propositional logic with only minor changes in notation and terminology, while the semantics of propositional logic are defined via Boolean algebras in a way that the tautologies (theorems) of propositional logic correspond to equational theorems of Boolean algebra.
 
  
 Syntactically, every Boolean term corresponds to a '''[[propositional formula]]''' of propositional logic. In this translation between Boolean algebra and propositional logic, Boolean variables ''x,y''… become '''[[propositional variable]]s''' (or '''atoms''') ''P,Q'',…, Boolean terms such as ''x''∨''y'' become propositional formulas ''P''∨''Q'', 0 becomes ''false'' or '''⊥''', and 1 becomes ''true'' or '''T'''. It is convenient when referring to generic propositions to use Greek letters Φ, Ψ,… as metavariables (variables outside the language of propositional calculus, used when talking ''about'' propositional calculus) to denote propositions.
 
  
 The semantics of propositional logic rely on '''[[truth assignment]]'''s. The essential idea of a truth assignment is that the propositional variables are mapped to elements of a fixed Boolean algebra, and then the '''[[truth value]]''' of a propositional formula using these letters is the element of the Boolean algebra that is obtained by computing the value of the Boolean term corresponding to the formula. In classical semantics, only the twoelement Boolean algebra is used, while in [[Booleanvalued semantics]] arbitrary Boolean algebras are considered. A '''[[tautology (logic)tautology]]''' is a propositional formula that is assigned truth value ''1'' by every truth assignment of its propositional variables to an arbitrary Boolean algebra (or, equivalently, every truth assignment to the two element Boolean algebra).
 
  
 These semantics permit a translation between tautologies of propositional logic and equational theorems of Boolean algebra. Every tautology Φ of propositional logic can be expressed as the Boolean equation Φ = 1, which will be a theorem of Boolean algebra. Conversely every theorem Φ = Ψ of Boolean algebra corresponds to the tautologies (Φ∨¬Ψ) ∧ (¬Φ∨Ψ) and (Φ∧Ψ) ∨ (¬Φ∧¬Ψ). If → is in the language these last tautologies can also be written as (Φ→Ψ) ∧ (Ψ→Φ), or as two separate theorems Φ→Ψ and Ψ→Φ; if ≡ is available then the single tautology Φ ≡ Ψ can be used.
 
  
 ===Applications===
 
 One motivating application of propositional calculus is the analysis of propositions and deductive arguments in natural language. Whereas the proposition "if ''x'' = 3 then ''x''+1 = 4" depends on the meanings of such symbols as + and 1, the proposition "if ''x'' = 3 then ''x'' = 3" does not; it is true merely by virtue of its structure, and remains true whether "''x'' = 3" is replaced by "''x'' = 4" or "the moon is made of green cheese." The generic or abstract form of this tautology is "if ''P'' then ''P''", or in the language of Boolean algebra, "''P'' → ''P''".
 
  
 Replacing ''P'' by ''x'' = 3 or any other proposition is called '''instantiation''' of ''P'' by that proposition. The result of instantiating ''P'' in an abstract proposition is called an '''instance''' of the proposition. Thus "''x'' = 3 → ''x'' = 3" is a tautology by virtue of being an instance of the abstract tautology "''P'' → ''P''". All occurrences of the instantiated variable must be instantiated with the same proposition, to avoid such nonsense as ''P'' → ''x'' = 3 or ''x'' = 3 → ''x'' = 4.
 
  
 Propositional calculus restricts attention to abstract propositions, those built up from propositional variables using Boolean operations. Instantiation is still possible within propositional calculus, but only by instantiating propositional variables by abstract propositions, such as instantiating ''Q'' by ''Q''→''P'' in ''P''→(''Q''→''P'') to yield the instance ''P''→((''Q''→''P'')→''P'').
 
  
 (The availability of instantiation as part of the machinery of propositional calculus avoids the need for metavariables within the language of propositional calculus, since ordinary propositional variables can be considered within the language to denote arbitrary propositions. The metavariables themselves are outside the reach of instantiation, not being part of the language of propositional calculus but rather part of the same language for talking about it that this sentence is written in, where we need to be able to distinguish propositional variables and their instantiations as being distinct syntactic entities.)
 
  
 ===Deductive systems for propositional logic===
 
 An axiomatization of propositional calculus is a set of tautologies called [[axioms]] and one or more inference rules for producing new tautologies from old. A ''proof'' in an axiom system ''A'' is a finite nonempty sequence of propositions each of which is either an instance of an axiom of ''A'' or follows by some rule of ''A'' from propositions appearing earlier in the proof (thereby disallowing circular reasoning). The last proposition is the '''theorem''' proved by the proof. Every nonempty initial segment of a proof is itself a proof, whence every proposition in a proof is itself a theorem. An axiomatization is '''sound''' when every theorem is a tautology, and '''complete''' when every tautology is a theorem.<ref>{{cite book  first=Alan  last=Hausman author2=Howard Kahaneauthor3=Paul Tidman  title=Logic and Philosophy: A Modern Introduction  publisher=Wadsworth Cengage Learning  year=2010  origyear=2007  isbn=0495601586}}</ref>
 
  
 ====Sequent calculus====
 
 {{Main articleSequent calculus}}
 
 Propositional calculus is commonly organized as a [[Hilbert system]], whose operations are just those of Boolean algebra and whose theorems are Boolean tautologies, those Boolean terms equal to the Boolean constant 1. Another form is [[sequent calculus]], which has two sorts, propositions as in ordinary propositional calculus, and pairs of lists of propositions called [[sequent]]s, such as ''A''∨''B'', ''A''∧''C'',… <math>\vdash</math> ''A'', ''B''→''C'',…. The two halves of a sequent are called the antecedent and the succedent respectively. The customary metavariable denoting an antecedent or part thereof is Γ, and for a succedent Δ; thus Γ,''A'' <math>\vdash</math> Δ would denote a sequent whose succedent is a list Δ and whose antecedent is a list Γ with an additional proposition ''A'' appended after it. The antecedent is interpreted as the conjunction of its propositions, the succedent as the disjunction of its propositions, and the sequent itself as the [[entailment]] of the succedent by the antecedent.
 
  
 Entailment differs from implication in that whereas the latter is a binary ''operation'' that returns a value in a Boolean algebra, the former is a binary ''relation'' which either holds or does not hold. In this sense entailment is an ''external'' form of implication, meaning external to the Boolean algebra, thinking of the reader of the sequent as also being external and interpreting and comparing antecedents and succedents in some Boolean algebra. The natural interpretation of <math>\vdash</math> is as ≤ in the partial order of the Boolean algebra defined by ''x'' ≤ ''y'' just when ''x''∨''y'' = ''y''. This ability to mix external implication <math>\vdash</math> and internal implication → in the one logic is among the essential differences between sequent calculus and propositional calculus.<ref>{{cite book  first=JeanYves  last=Girard  authorlink=JeanYves Girard author2=Paul Taylorauthor3=Yves Lafont  title=Proofs and Types  publisher=Cambridge University Press (Cambridge Tracts in Theoretical Computer Science, 7)  year=1990  origyear=1989  isbn=0521371813  url= http://www.paultaylor.eu/stable/Proofs%2BTypes.html}}</ref>
 
  
 ==Applications==
 
 Boolean algebra as the calculus of two values is fundamental to computer circuits, computer programming, and mathematical logic, and is also used in other areas of mathematics such as set theory and statistics.<ref name="givhal"/>
 
  
 ===Computers===
 
 In the early 20th century, several electrical engineers intuitively recognized that Boolean algebra was analogous to the behavior of certain types of electrical circuits. [[Claude Shannon]] formally proved such behavior was logically equivalent to Boolean algebra in his 1937 master's thesis, ''[[A Symbolic Analysis of Relay and Switching Circuits]]''.
 
  
 Today, all modern general purpose [[computer]]s perform their functions using twovalue Boolean logic; that is, their electrical circuits are a physical manifestation of twovalue Boolean logic. They achieve this in various ways: as voltages on wires in highspeed circuits and capacitive storage devices, as orientations of a magnetic domain in ferromagnetic storage devices, as holes in punched cards or paper tape, and so on. (Some early computers used decimal circuits or mechanisms instead of twovalued logic circuits.)
 
  
 Of course, it is possible to code more than two symbols in any given medium. For example, one might use respectively 0, 1, 2, and 3 volts to code a foursymbol alphabet on a wire, or holes of different sizes in a punched card. In practice, the tight constraints of high speed, small size, and low power combine to make noise a major factor. This makes it hard to distinguish between symbols when there are several possible symbols that could occur at a single site. Rather than attempting to distinguish between four voltages on one wire, digital designers have settled on two voltages per wire, high and low.
 
  
 Computers use twovalue Boolean circuits for the above reasons. The most common computer architectures use ordered sequences of Boolean values, called bits, of 32 or 64 values, e.g. 01101000110101100101010101001011. When programming in [[machine code]], [[assembly language]], and certain other [[programming languages]], programmers work with the lowlevel digital structure of the [[Word (data type)data registers]]. These registers operate on voltages, where zero volts represents Boolean 0, and a reference voltage (often +5V, +3.3V, +1.8V) represents Boolean 1. Such languages support both numeric operations and logical operations. In this context, "numeric" means that the computer treats sequences of bits as [[binary number]]s (base two numbers) and executes arithmetic operations like add, subtract, multiply, or divide. "Logical" refers to the Boolean logical operations of disjunction, conjunction, and negation between two sequences of bits, in which each bit in one sequence is simply compared to its counterpart in the other sequence. Programmers therefore have the option of working in and applying the rules of either numeric algebra or Boolean algebra as needed. A core differentiating feature between these families of operations is the existence of the [[Carry (arithmetic)carry]] operation in the first but not the second.
 
  
 ===Twovalued logic===
 
 Other areas where two values is a good choice are the law and mathematics. In everyday relaxed conversation, nuanced or complex answers such as "maybe" or "only on the weekend" are acceptable. In more focused situations such as a court of law or theorembased mathematics however it is deemed advantageous to frame questions so as to admit a simple yesorno answer—is the defendant guilty or not guilty, is the proposition true or false—and to disallow any other answer. However much of a straitjacket this might prove in practice for the respondent, the principle of the simple yesno question has become a central feature of both judicial and mathematical logic, making twovalued logic deserving of organization and study in its own right.
 
  
 A central concept of set theory is membership. Now an organization may permit multiple degrees of membership, such as novice, associate, and full. With sets however an element is either in or out. The candidates for membership in a set work just like the wires in a digital computer: each candidate is either a member or a nonmember, just as each wire is either high or low.
 
  
 Algebra being a fundamental tool in any area amenable to mathematical treatment, these considerations combine to make the algebra of two values of fundamental importance to computer hardware, mathematical logic, and set theory.
 
  
 [[Twovalued logic]] can be extended to [[multivalued logic]], notably by replacing the Boolean domain {0, 1} with the unit interval [0,1], in which case rather than only taking values 0 or 1, any value between and including 0 and 1 can be assumed. Algebraically, negation (NOT) is replaced with 1 − ''x'', conjunction (AND) is replaced with multiplication (<math>xy</math>), and disjunction (OR) is defined via [[De Morgan's law]]. Interpreting these values as logical [[truth value]]s yields a multivalued logic, which forms the basis for [[fuzzy logic]] and [[probabilistic logic]]. In these interpretations, a value is interpreted as the "degree" of truth – to what extent a proposition is true, or the probability that the proposition is true.
 
  
 ===Boolean operations===
 
 The original application for Boolean operations was [[mathematical logic]], where it combines the truth values, true or false, of individual formulas.
 
  
 Natural languages such as English have words for several Boolean operations, in particular conjunction (''and''), disjunction (''or''), negation (''not''), and implication (''implies''). ''But not'' is synonymous with ''and not''. When used to combine situational assertions such as "the block is on the table" and "cats drink milk," which naively are either true or false, the meanings of these [[logical connective]]s often have the meaning of their logical counterparts. However, with descriptions of behavior such as "Jim walked through the door", one starts to notice differences such as failure of commutativity, for example the conjunction of "Jim opened the door" with "Jim walked through the door" in that order is not equivalent to their conjunction in the other order, since ''and'' usually means ''and then'' in such cases. Questions can be similar: the order "Is the sky blue, and why is the sky blue?" makes more sense than the reverse order. Conjunctive commands about behavior are like behavioral assertions, as in ''get dressed and go to school''. Disjunctive commands such ''love me or leave me'' or ''fish or cut bait'' tend to be asymmetric via the implication that one alternative is less preferable. Conjoined nouns such as ''tea and milk'' generally describe aggregation as with set union while ''tea or milk'' is a choice. However context can reverse these senses, as in ''your choices are coffee and tea'' which usually means the same as ''your choices are coffee or tea'' (alternatives). Double negation as in "I don't not like milk" rarely means literally "I do like milk" but rather conveys some sort of hedging, as though to imply that there is a third possibility. "Not not P" can be loosely interpreted as "surely P", and although ''P'' necessarily implies "not not ''P''" the converse is suspect in English, much as with [[intuitionistic logic]]. In view of the highly idiosyncratic usage of conjunctions in natural languages, Boolean algebra cannot be considered a reliable framework for interpreting them.
 
  
 Boolean operations are used in [[digital logic]] to combine the bits carried on individual wires, thereby interpreting them over {0,1}. When a vector of ''n'' identical binary gates are used to combine two bit vectors each of ''n'' bits, the individual bit operations can be understood collectively as a single operation on values from a [[Boolean algebra (structure)Boolean algebra]] with 2<sup>''n''</sup> elements.
 
  
 [[Naive set theory]] interprets Boolean operations as acting on subsets of a given set ''X''. As we saw earlier this behavior exactly parallels the coordinatewise combinations of bit vectors, with the union of two sets corresponding to the disjunction of two bit vectors and so on.
 
  
 The 256element free Boolean algebra on three generators is deployed in [[computer displays]] based on [[raster graphics]], which use [[bit blit]] to manipulate whole regions consisting of [[pixels]], relying on Boolean operations to specify how the source region should be combined with the destination, typically with the help of a third region called the [[Mask (computing)mask]]. Modern [[video cards]] offer all 2<sup>2<span><sup>3</sup></span></sup> = 256 ternary operations for this purpose, with the choice of operation being a onebyte (8bit) parameter. The constants SRC = 0xaa or 10101010, DST = 0xcc or 11001100, and MSK = 0xf0 or 11110000 allow Boolean operations such as (SRC^DST)&MSK (meaning XOR the source and destination and then AND the result with the mask) to be written directly as a constant denoting a byte calculated at compile time, 0x60 in the (SRC^DST)&MSK example, 0x66 if just SRC^DST, etc. At run time the video card interprets the byte as the raster operation indicated by the original expression in a uniform way that requires remarkably little hardware and which takes time completely independent of the complexity of the expression.
 
  
 [[Solid modeling]] systems for [[computer aided design]] offer a variety of methods for building objects from other objects, combination by Boolean operations being one of them. In this method the space in which objects exist is understood as a set ''S'' of [[voxel]]s (the threedimensional analogue of pixels in twodimensional graphics) and shapes are defined as subsets of ''S'', allowing objects to be combined as sets via union, intersection, etc. One obvious use is in building a complex shape from simple shapes simply as the union of the latter. Another use is in sculpting understood as removal of material: any grinding, milling, routing, or drilling operation that can be performed with physical machinery on physical materials can be simulated on the computer with the Boolean operation ''x'' ∧ ¬''y'' or ''x'' − ''y'', which in set theory is set difference, remove the elements of ''y'' from those of ''x''. Thus given two shapes one to be machined and the other the material to be removed, the result of machining the former to remove the latter is described simply as their set difference.
 
  
 ====Boolean searches====
 
 <! "Boolean search" redirects here. >
 
 Search engine queries also employ Boolean logic. For this application, each web page on the Internet may be considered to be an "element" of a "set". The following examples use a syntax supported by [[Google]].<ref>Not all search engines support the same query syntax. Additionally, some organizations (such as Google) provide "specialized" search engines that support alternate or extended syntax. (See e.g.,[https://www.google.com/help/cheatsheet.html Syntax cheatsheet], [https://www.google.com/intl/en/help/faq_codesearch.html#regexp Google codesearch supports regular expressions]).</ref>
 
 * Doublequotes are used to combine whitespaceseparated words into a single search term.<ref>Doublequotedelimited search terms are called "exact phrase" searches in the Google documentation.</ref>
 
 * Whitespace is used to specify logical AND, as it is the default operator for joining search terms:
 
  
 "Search term 1" "Search term 2"
 
 * The OR keyword is used for logical OR:
 
  
 "Search term 1" OR "Search term 2"
 
 * A prefixed minus sign is used for logical NOT:
 
  
 "Search term 1" −"Search term 2"
 
 <! (let's get this speculation resolved before including it in the article)
 
 * Parentheses do not appear to be supported for explicitly specifying the order of operations.
 
  
 [[Google Scholar]] appears to perform the XOR operation when the OR keyword is used.
 
 >
 