# Truth Table This is a simple truth table generator. For more information about truth tables, please see the [relevant Wikipedia article][1]. [1]: https://en.wikipedia.org/wiki/Truth_table There is an instance of the web version of this program hosted here: [tt.zander.im][2] [2]: https://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: ```text usage: truth-table [options] -h, --help print this message, then exit --syntax-help print a syntax help message, then exit -f, --format= 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: ```text $ 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: ```text usage: truth-table-web-wrapper [options] -h, --help print this message, then exit -d, --debug enable debug output -p, --port= specify port to use (default: 8000) -a, --address= 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): ```text $ 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 ```