truth-table/README.md

104 lines
4.8 KiB
Markdown
Raw Normal View History

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
```