2024-09-03 18:25:54 -07:00
|
|
|
|
# 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
|
|
|
|
|
|
2024-09-14 01:18:20 -07:00
|
|
|
|
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.
|
|
|
|
|
|
2024-09-16 12:50:05 -07:00
|
|
|
|
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.
|
2024-09-14 01:18:20 -07:00
|
|
|
|
|
2024-09-16 12:50:05 -07:00
|
|
|
|
### CLI
|
|
|
|
|
|
|
|
|
|
To build the CLI version, just run `make`.
|
|
|
|
|
|
|
|
|
|
Here is the help output from the CLI program:
|
2024-09-03 18:25:54 -07:00
|
|
|
|
```text
|
|
|
|
|
usage: truth-table [options] <propositions...>
|
|
|
|
|
|
|
|
|
|
-h, --help print this message, then exit
|
2024-09-16 12:50:05 -07:00
|
|
|
|
--syntax-help print a syntax help message, then exit
|
2024-09-14 01:18:20 -07:00
|
|
|
|
-f, --format=<arg> specify the output format (*unicode*, ascii, latex, or html)
|
2024-09-03 18:25:54 -07:00
|
|
|
|
-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
|
2024-09-14 01:18:20 -07:00
|
|
|
|
-p, --pretty pretty print latex, html, etc. output
|
|
|
|
|
-l, --latin use the Latin T and F characters for truth values
|
2024-09-03 18:25:54 -07:00
|
|
|
|
|
|
|
|
|
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 │
|
|
|
|
|
├───┼───┼────────────┤
|
|
|
|
|
│ ⊤ │ ⊤ │ ⊥ │
|
|
|
|
|
│ ⊤ │ ⊥ │ ⊤ │
|
|
|
|
|
│ ⊥ │ ⊤ │ ⊤ │
|
|
|
|
|
│ ⊥ │ ⊥ │ ⊤ │
|
|
|
|
|
└───┴───┴────────────┘
|
|
|
|
|
```
|
2024-09-16 12:50:05 -07:00
|
|
|
|
|
|
|
|
|
### 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=<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):
|
|
|
|
|
```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
|
|
|
|
|
```
|