4.8 KiB
Truth Table
This is a simple truth table generator. For more information about truth tables, please see the relevant Wikipedia article.
There is an instance of the web version of this program hosted here: tt.zander.im
This repository contains three things: a Common Lisp library to parse and manipulate propositional logic expressions, a command line truth table generator, and a web-based truth table generator.
Building the CLI executable requires SBCL. Both the CLI and web server need Quicklisp. If you have Quicklisp installed, it should just get the rest of the dependencies for you.
CLI
To build the CLI version, just run make
.
Here is the help output from the CLI program:
usage: truth-table [options] <propositions...>
-h, --help print this message, then exit
--syntax-help print a syntax help message, then exit
-f, --format=<arg> specify the output format (*unicode*, ascii, latex, or html)
-s, --subexps include sub-expressions in the output table
-n, --no-vars do not include variables in the output table
-m, --multi-char allow multi-character variable names
-i, --no-implicit do not use implicit 'and' operations
-p, --pretty pretty print latex, html, etc. output
-l, --latin use the Latin T and F characters for truth values
The choice surrounded by '*' is the default. Arguments to long
options are also required for their short variant.
Here is an example truth table:
$ truth-table '(a /\ b) -> ~b'
┌───┬───┬────────────┐
│ a │ b │ a ∧ b → ¬b │
├───┼───┼────────────┤
│ ⊤ │ ⊤ │ ⊥ │
│ ⊤ │ ⊥ │ ⊤ │
│ ⊥ │ ⊤ │ ⊤ │
│ ⊥ │ ⊥ │ ⊤ │
└───┴───┴────────────┘
Web
To run the web server, execute ./truth-table-web-wrapper
. If you want to run
it in the background, I recommend using something like GNU Screen. It should be
noted, however, that it does not support HTTPS. If you want to use HTTPS, run
the web server behind something like Nginx or HAProxy.
Here is the help output for the web wrapper program:
usage: truth-table-web-wrapper [options]
-h, --help print this message, then exit
-d, --debug enable debug output
-p, --port=<arg> specify port to use (default: 8000)
-a, --address=<arg> specify address to bind to (default: 127.0.0.1)
Arguments to long options are also required for their short variant.
Syntax
Here is the syntax for propositions (this is the same for both the web server and the CLI):
$ truth-table --syntax-help
┌───────────────────┬────────────────────────────────────────────┐
│ Operator │ Syntax │
├───────────────────┼────────────────────────────────────────────┤
│ open parenthesis │ ( │
│ close parenthesis │ ) │
│ and │ &, &&, ., /\, and, ∧ │
│ nand │ !&, !&&, nand, ~&, ~&&, ↑, ⊼ │
│ or │ +, \/, or, |, ||, ∥, ∨ │
│ nor │ !|, !||, nor, ~|, ~||, ↓, ⊽ │
│ exclusive or │ !=, ^, xor, ↮, ≢, ⊕, ⊻ │
│ not │ !, not, ~, ¬ │
│ implies │ ->, =>, >, implies, →, ⇒, ⊃, ⟹ │
│ converse │ <, <-, <=, converse, ←, ⇐, ⊂, ⟸ │
│ biconditional │ <->, <=>, <>, =, ==, iff, xnor, ↔, ⇔, ≡, ⊙ │
└───────────────────┴────────────────────────────────────────────┘
┌─────────┬────────────────┐
│ Operand │ Syntax │
├─────────┼────────────────┤
│ true │ 1, t, true, ⊤ │
│ false │ 0, f, false, ⊥ │
└─────────┴────────────────┘
Two operands next to each other is treated as an 'implicit and' (unless this
feature is disabled).
Example:
abc|d = a ∧ b ∧ c ∨ d