An algorithm for Boolean logic minimization. Shrinquem finds a minimum sum-of-products representation for a given a truth table.
Consider the following truth table with three Boolean inputs:
| n | A | B | C | f(A, B, C) |
|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 1 |
| 1 | 0 | 0 | 1 | 1 |
| 2 | 0 | 1 | 0 | 0 |
| 3 | 0 | 1 | 1 | 1 |
| 4 | 1 | 0 | 0 | 1 |
| 5 | 1 | 0 | 1 | 0 |
| 6 | 1 | 1 | 0 | 0 |
| 7 | 1 | 1 | 1 | 0 |
Shrinquem can be used to find a minimum sum-of-products representation for this Boolean function as follows:
#include <stdlib.h>
#include <stdio.h>
#include "shrinquem.h"
int main(int argc, char* argv[])
{
const numVars = 3;
const triLogic truthTable[8] = { 1,1,0,1,1,0,0,0 };
SumOfProducts sumOfProducts = { numVars };
ReduceLogic(truthTable, &sumOfProducts);
GenerateEquationString(&sumOfProducts, NULL);
printf("f(A, B, C) = %s", sumOfProducts.equation);
FinalizeSumOfProducts(&sumOfProducts);
return 0;
}This code prints the following to standard out.
f(A, B, C) = A'C + B'C'
Consider the following truth table with two Boolean inputs, where X indicates that we don't care what a particular output is:
| n | A | B | f(A, B) |
|---|---|---|---|
| 0 | 0 | 0 | 0 |
| 1 | 0 | 1 | 1 |
| 2 | 1 | 0 | 0 |
| 3 | 1 | 1 | X |
Shrinquem can be used to generate the equation as follows:
#include <stdlib.h>
#include <stdio.h>
#include "shrinquem.h"
int main(int argc, char* argv[])
{
const numVars = 2;
const triLogic truthTable[4] =
{
LOGIC_FALSE,
LOGIC_TRUE,
LOGIC_FALSE,
LOGIC_DONT_CARE
};
SumOfProducts sumOfProducts = { numVars };
ReduceLogic(truthTable, &sumOfProducts);
GenerateEquationString(&sumOfProducts, NULL);
printf("f(A, B) = %s", sumOfProducts.equation);
FinalizeSumOfProducts(&sumOfProducts);
return 0;
}This code outputs the following equation:
f(A, B) = B