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.

Resources:

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.