A boolean algebra toolkit to evaluate expressions, truth tables, and produce logic diagrams
Project description
Boolean Algebra Toolkit
- Truth Table to Boolean Expression and Logic Diagram Generator
- Boolean Expression Evaluator and Truth Table Generator
Installation
pip install balg
Usage
Token | Equivalent |
---|---|
& | AND |
^ | XOR |
+ | OR |
~ | NOT |
[A-z] | Variable |
from balg.boolean import Boolean
booleanObject = Boolean()
- To generate an expression's truth table:
input_expression: str = "~(A & B & C)+(A & B)+(B & C)"
tt: str = booleanObject.expr_to_tt(input_expression)
- To generate an expression given the minterms and variables:
variables: List[str] = ['A', 'B', 'C']
minterms: List[int] = [0, 1, 3, 7]
expression: str = booleanObject.tt_to_expr(variables, minterms)
- To generate a logic diagram given an expression:
input_expression: str = "~(A & B & C)+(A & B)+(B & C)"
file_name: str = "logic_diagram12"
format: str = "png"
directory: str = "examples" # stores in the current directory by default
booleanObject.expr_to_dg(input_expression, file_name, directory, format)
- To generate a logic diagram given variables and minterms
variables: List[str] = ['A', 'B', 'C']
minterms: List[int] = [0, 1, 3, 7]
file_name: str = "logic_diagram12"
directory: str = "examples"
format: str = "png"
booleanObject.tt_to_dg(variables, minterms, file_name, directory, format)
- To assert equality for expressions
expressions_list = ["(A & ~B) + (~A & B)", "(A ^ B)", "(A + B) & ~(A & B)"]
ret = booleanObject.expr_cmp(expression_list) # returns True
- To simplify expressions (ambiguous):
simplified_expr: str = booleanObject.expr_simplify("~(A) + ~(B)")
Example Diagrams
((A & B) & C) + (~C)
(A & B) + (~(A & B) & ~C) + (C & B)
Other diagrams can be found in the diagrams/
directory
Explanation of the Quine-McCluskey Algorithm
This section deals with converting a given truth table to a minimized boolean expression using the Quine-McCluskey algorithm and producing a logic diagram.
Overview
- Initialize variables & Minterms
- Identify essential Prime implicants
- Minimize & Synthesize the boolean function
Initialization
- The synthesizer is initialized with a list of character variables and minterms:
- Minterms refer to values for which the output is 1.
- Prime implicants are found by repeatedly combining minterms that differ by only one variable:
The Quine-McCluskey Algorithm
The Quine-McCluskey Algorithm
+-----------------------------------+
| initialize variables and minterms |
| variables := [A, B, C] |
| minterms := [0, 3, 6, 7] |
| minters := [000, 011, 110, 111] |
+-----------------------------------+
|
/
/
|
V
+-----------------------+
| find prime_implicants |
| | A | B | C | out | |
| |---|---|---|------| |
| | 0 | 0 | 0 | 1 | |
| | 0 | 0 | 1 | 0 | |
| | 0 | 1 | 0 | 0 | |
| | 0 | 1 | 1 | 1 | |
| | 1 | 0 | 0 | 0 | |
| | 1 | 0 | 1 | 0 | |
| | 1 | 1 | 0 | 1 | |
| | 1 | 1 | 1 | 1 | |
+-----------------------+
|
|
\
|
V
+----------------------------------+
| | group | minterm | A | B | C | |
| |-------|---------|---|---|---| |
| | 0 | m[0] | 0 | 0 | 0 | |
| | 2 | m[1] | 0 | 1 | 1 | |
| | | m[2] | 1 | 1 | 0 | |
| | 3 | m[3] | 1 | 1 | 1 | |
| |-------|---------|---|---|---| |
+----------------------------------+
\
\
|
V
+-------------------------------------------+
| find pair where only one variable differs |
| | group | minterm | A | B | C | expr |
| |-------|------------|---|---|---|--------|
| | 0 | m[0] | 0 | 0 | 0 | ~(ABC) |
| | 2 | m[1]-m[3] | _ | 1 | 1 | BC |
| | | m[2]-m[3] | 1 | 1 | _ | AB |
+-------------------------------------------+
|
/
|
V
+-------------------------------------------+
| since the bit-diff between pairs in each |
| class is > 1, we move onto the next step |
| |
| | expr | m0 | m1 | m2 | m3 | |
| |--------|-----|-----|-----|------| |
| | ~(ABC) | X | | | | |
| | BC | | X | | | |
| | AB | | | X | | |
| |--------|-----|-----|-----|------| |
+-------------------------------------------+
|
|
/
|
V
+-----------------------------------------+
| If each column contains one element |
| the expression can't be eliminated. |
| Therefore, the resulting expression is: |
| ~(ABC) + BC + AB |
+-----------------------------------------+
Tips
- Use parentheses when the order of operations is ambiguous.
- The precedence is as follows, starting from the highest: NOT -> OR -> (AND, XOR)
Documentation (for developers)
class TruthTableSynthesizer(variables: List[str], minterms: List[int])
class BooleanExpression(expression: str)
class Boolean()
TruthTableSynthesizer.decimal_to_binary(num: int) -> str
TruthTableSynthesizer.combine_implicants(implicants: List[Set[str]]) -> Set[str]
TruthTableSynthesizer.get_prime_implicants() -> Set[str]
TruthTableSynthesizer.covers_minterm(implicant: str, minterm: str) -> bool
TruthTableSynthesizer.get_essential_prime_implicants(prime_implicants: Set[str]) -> Set[str]
TruthTableSynthesizer.minimize_function(prime_implicants: Set[str], essential_implicants: Set[str]) -> List[str]
TruthTableSynthesizer.implicant_to_expression(implicant: str) -> str
TruthTableSynthesizer.synthesize() -> str
BooleanExpression.to_postfix(inifx: str) -> List[str]
BooleanExpression.evaluate(values: Dict[str, bool]) -> bool
BooleanExpression.tt() -> List[Tuple[Dict[str, bool], bool]]
BooleanExpression.fmt_tt() -> str
BooleanExpression.generate_logic_diagram() -> graphviz.Digraph
Boolean.expr_to_tt(input_expression: str) -> str
Boolean.tt_to_expr(variables: List[str], minterms: List[int]) -> str
Boolean.tt_to_dg(variables: List[str], minterms: List[int], file: str | None = None, directory: str | None = None, format: str = "png") -> str
Boolean.expr_to_dg(input_expression: str, file: str | None = None, directory: str | None = None, format: str = "png") -> str
Boolean.expr_simplify(input_expression: str) -> str
Boolean.expr_cmp(expressions: List[str]) -> bool
TODO
- Optimize functions 0.5. LaTeX interface
- NAND, NOR, XNOR
- Implication (X -> Y) and bi-implication (X <-> Y)
- Add support for constants (1, 0)
- Implement functional completeness testing
Expression comparison by comparing minterms (grammar agnostic)- (improbable) implement Quantum Gates
- (improbable) potential integration with Verilog systems
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
balg-0.0.5.tar.gz
(192.6 kB
view details)
Built Distribution
balg-0.0.5-py3-none-any.whl
(9.6 kB
view details)
File details
Details for the file balg-0.0.5.tar.gz
.
File metadata
- Download URL: balg-0.0.5.tar.gz
- Upload date:
- Size: 192.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.12.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 763212dd2e57c766ada2df7307b46407d176b136f21f37bc6bd5d8743c6e01d0 |
|
MD5 | a97c1e7caadd4aba8fe25b5e25682912 |
|
BLAKE2b-256 | d7741be918d0e7468de3030cc3866402f431e9b5c9935d5f1017785a8391ab72 |
File details
Details for the file balg-0.0.5-py3-none-any.whl
.
File metadata
- Download URL: balg-0.0.5-py3-none-any.whl
- Upload date:
- Size: 9.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.12.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 83eaf27203fc05fe3f7e10c2e32707e914e14cfd524a0b842c69240bd86129fc |
|
MD5 | 7b2dd993fca0656695f3a9dab1f124f6 |
|
BLAKE2b-256 | d722066630f9d3a0b07a1af009db9a558d32262e203be6c71105ae3d42d7f86c |