Boolean operation (source code)

= Boolean operation
{c}
{title2=$f:\{0,1\}^n\to\{0,1\}$}

A <Boolean operation> is a <Boolean function> taking <truth values> encoded as <bits>: $0$ means false and $1$ means true. These operations supply the concrete two-valued interpretation of a <Boolean algebra>. A <Boolean valuation> fixes the inputs; a <truth table> lists every possible input. With two input <bits> there are four rows.

The basic <logical connectives> are <logical conjunction> (AND, $P\wedge Q$, both true), <logical disjunction> (OR, $P\vee Q$, at least one true), <exclusive or> (XOR, $P\oplus Q$, exactly one true), and <logical negation> (NOT, $\neg P$, the opposite value). OR is inclusive: it accepts the case where both inputs are true.<Discrete Mathematics: An Open Introduction (3rd edition) by Oscar Levin/3.1 Propositional Logic>[Discrete Mathematics: An Open Introduction (3rd edition) by Oscar Levin; Discrete Mathematics: An Open Introduction, 3rd edition by Oscar Levin, §3.1, Truth Tables: conjunction, disjunction and negation tables]{ref}

\Image[/boolean-operation-truth-grid.png]
{title=Four input pairs distinguish <logical conjunction>, inclusive <logical disjunction>, <exclusive or>, and <logical negation>}

For an original program-condition example, let $P$ mean “the backup is recent” and $Q$ mean “the backup is verified”. A rule requiring a recent, verified backup uses <logical conjunction>; one accepting either qualification uses <logical disjunction>. A rule flagging a mismatch between the two qualifications uses <exclusive or>. A recent, verified backup gives $(P,Q)=(1,1)$: AND and OR accept it, while XOR does not flag it. The last row of the <truth table> makes this difference explicit.

The same small <Boolean operations> build larger tests and <Boolean circuits>. In a <programming language>, the value of a condition and the procedure for evaluating it both matter. For Boolean operands, <Python>'s `and`, `or`, and `not` implement these <logical connectives>. Evaluation proceeds from the left; `and` skips its right operand if the left is false, and `or` skips it if the left is true. More generally, `and` and `or` return an operand, whereas `not` returns a Boolean.<Python 3.14 documentation/Expressions, Python 3.14 language reference>[Python 3.14 documentation; Python Language Reference, version 3.14, §6.11 Boolean operations: evaluation order and returned operands]{ref}

For example, the <Python> condition `denominator != 0 and numerator / denominator > 2` avoids <division> by zero because the <logical conjunction>'s second test is evaluated only when the first succeeds. Reversing the tests preserves the abstract <truth table> for defined operands but can raise a division-by-zero error handled through <exception handling>. A rewrite involving a <side effect> must also preserve the needed evaluation behavior.