## LogicTools: logic expression processing tools

LogicTools is a ruby library and a set of command-line tools for processing logic expressions.
Currently, the tools can produce the standard conjunctive and disjunctive forms of a logic expression, generate its truth table or simplify it.

#### Documentation:

LogicTools is a set of command-line tools for processing logic expressions.
The tools include:

• ```simplify_qm ``` simplifies a logic expression using the Quine-Mc Cluskey algorithm.
• ```simplify_es ``` simplifies a logic expression using the ESPRESSO algorithm.
• ```std_conj ```computes the conjunctive normal form of a logic expression.
• ```std_dij ```computes the disjunctive normal form a of logic expression.
• ```truth_tbl ```generates the truth table of a logic expression.
• ```complement ``` computes the complement of a logic expression.
• ```is_tautology ```tells if a logic expression is a tautology or not.

Each tool is used as follows:
tool_name "logical expression"

The “logical expression” is an expression where:

• a logical variable is represented by a single alphabetical character (hence there is in total 56 possible variables), or a string of alphabetical characters enclosed by curly brackets;
• a logical OR is represented by a `'+'` character;
• a logical AND is represented by a `'.'` character (but it can be omitted);
• a logical NOT is represented by a `'~'` or a `'!'` character;
• opening and closing parenthesis are represented by, respectively, `'('` and `')'` characters.

Important notices:

• The priority among logical operators is as follows: NOT > AND > OR.
• Logical expressions must be put between quotes (the `'"'` character).

For instance the followings are valid logical expression using the `a`,`b` and `c` variables:

#### Examples:

• Simplifying the expression a+ab:
simplify_qm "a+ab"

Result:  a

• Compute the conjunctive normal form of the expression a+ab:
std_conj "a+ab"

Result: ab+a~b

• Compute the disjunctive normal form of the expression a+ab:
std_dij "a+ab"

Result: (a+b)(a+~b)

• Compute the truth table of the expression a+ab:
truth_tbl "a+ab"

Result:

#### To do

##### Low priority
• Update the code of `simplify_qm` so that it uses the optimized `LogicTool::Cover class`.