# BooleanTransformations.frink

``` // These transformation rules are found in Fundamentals of Logic Design, // Third Edition, by Charles H. Roth, Jr.  p. 37 // The comments refer to the equation number in this book. transformations Boolean {    // Operations with false and true    _x OR false <-> _x            // 1    _x OR true  <-> true          // 2    _x AND true  <-> _x           // 1D    _x AND false <-> false        // 2D    // Idempotent laws    _x OR  _x        <-> _x       // 3    _x OR  _x  OR _y <-> _x OR _y // 3 with other parts        _x AND _x        <-> _x        // 3D    _x AND _x AND _y <-> _x AND _y // 3D with other parts.    // Involution law    !(!_x) <-> _x                 // 4    // Laws of complementarity    _x OR  !_x        <-> true    // 5    _x OR  !_x  OR _y <-> true    // 5 with other parts        _x AND !_x        <-> false   // 5D    _x AND !_x AND _y <-> false   // 5D with other parts    // Commutative and associative laws are built in to Frink's handling    // of AND and OR operators, so they don't need to be implemented here.    // Distributive laws (reversed for simplification.)    (_x AND _y) OR (_x AND _z)        <->  _x AND (_y OR _z)      // 8, reversed    (_x AND _y) OR (_x AND _z) OR _o  <-> (_x AND (_y OR _z)) OR _o // 8 reversed        (_x OR _y) AND (_x OR _z)          <->  _x OR (_y AND _z)  // 8D, reversed    (_x OR _y) AND (_x OR _z) AND _o   <-> (_x OR (_y AND _z)) AND _o  // 8D, reversed plus other parts    // Simplification theorems    (_x AND _y) OR (_x AND !_y)       <-> _x         // 9    (_x AND _y) OR (_x AND !_y) OR _z <-> _x  OR _z  // 9 plus other parts        (_x OR _y) AND (_x OR !_y)        <-> _x         // 9D    (_x OR _y) AND (_x OR !_y) AND _z <-> _x AND _z  // 9D plus other parts        _x OR (_x AND _y)           <-> _x           // 10    _x OR (_x AND _y) OR _z     <-> _x OR _z     // 10 plus other parts        _x AND (_x OR _y)           <-> _x           // 10D    _x AND (_x OR _y) AND _z    <-> _x AND _z    // 10D plus other parts        (_x OR !_y) AND  _y          <-> _x AND  _y         // 11    (_x OR !_y) AND  _y AND _z   <-> _x AND  _y AND _z  // 11, plus parts    (_x OR  _y) AND !_y          <-> _x AND !_y         // 11, converse    (_x OR  _y) AND !_y AND _z   <-> _x AND !_y AND _z  // 11, converse, plus        (_x AND !_y) OR  _y          <-> _x OR  _y          // 11D    (_x AND !_y) OR  _y OR _z    <-> _x OR  _y OR _z    // 11D plus extras    (_x AND  _y) OR !_y          <-> _x OR !_y          // 11D, converse    (_x AND  _y) OR !_y OR _z    <-> _x OR !_y OR _z    // 11D, converse, plus    // Consensus theorem    (_x AND_y) OR (_y AND_z) OR (!_x AND _z)        <-> (_x AND _y) OR (!_x AND _z)   // 17    (_x AND_y) OR (_y AND_z) OR (!_x AND _z) OR _o  <-> (_x AND _y) OR (!_x AND _z) OR _o  // 17 plus others        (_x OR _y) AND (_y OR _z) AND (!_x OR _z)        <-> (_x OR _y) AND (!_x OR _z) // 17D    (_x OR _y) AND (_y OR _z) AND (!_x OR _z) AND _o <-> (_x OR _y) AND (!_x OR _z) AND _o // 17D    } ```

This is a program written in the programming language Frink.
For more information, view the Frink Documentation or see More Sample Frink Programs.

Alan Eliasen was born 18232 days, 9 hours, 36 minutes ago.