Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/eliascarv/truthtables.jl
Create truth tables in Julia!
https://github.com/eliascarv/truthtables.jl
Last synced: about 1 month ago
JSON representation
Create truth tables in Julia!
- Host: GitHub
- URL: https://github.com/eliascarv/truthtables.jl
- Owner: eliascarv
- License: mit
- Created: 2022-05-02T18:24:10.000Z (over 2 years ago)
- Default Branch: main
- Last Pushed: 2024-09-14T22:49:01.000Z (2 months ago)
- Last Synced: 2024-09-15T06:30:04.527Z (2 months ago)
- Language: Julia
- Size: 69.3 KB
- Stars: 74
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# TruthTables.jl
[![Build Status](https://github.com/eliascarv/TruthTables.jl/actions/workflows/CI.yml/badge.svg?branch=main)](https://github.com/eliascarv/TruthTables.jl/actions/workflows/CI.yml?query=branch%3Amain)
[![Coverage](https://codecov.io/gh/eliascarv/TruthTables.jl/branch/main/graph/badge.svg)](https://codecov.io/gh/eliascarv/TruthTables.jl)TruthTables.jl is an educational package that generates truth tables from Julia expressions using the `@truthtable` macro.
## Installation
To install TruthTables.jl, use the Julia's package manager, Pkg.jl:
```julia
julia>] add TruthTables
```## Usage
To create a truth table use the `@truthtable` macro passing a proposition (logical expression) as an argument:
```julia
julia> using TruthTablesjulia> @truthtable p || q
TruthTable
┌───────┬───────┬───────┐
│ p │ q │ p ∨ q │
├───────┼───────┼───────┤
│ true │ true │ true │
│ true │ false │ true │
│ false │ true │ true │
│ false │ false │ false │
└───────┴───────┴───────┘
```The `@truthtable` macro has an optional keyword argument: `full`. If `full` is `true`, the truth table will be created in expanded form.
```julia
julia> @truthtable p && (!q || r) full=true
TruthTable
┌───────┬───────┬───────┬───────┬────────┬──────────────┐
│ p │ q │ r │ ¬q │ ¬q ∨ r │ p ∧ (¬q ∨ r) │
├───────┼───────┼───────┼───────┼────────┼──────────────┤
│ true │ true │ true │ false │ true │ true │
│ true │ true │ false │ false │ false │ false │
│ true │ false │ true │ true │ true │ true │
│ true │ false │ false │ true │ true │ true │
│ false │ true │ true │ false │ true │ false │
│ false │ true │ false │ false │ false │ false │
│ false │ false │ true │ true │ true │ false │
│ false │ false │ false │ true │ true │ false │
└───────┴───────┴───────┴───────┴────────┴──────────────┘
```It is possible to change the way `TruthTable`s are displayed using `TruthTables.showmode!(mode)` function.
The mode argument can be one of these symbols: `:bool` (default), `:bit` or `:letter`.
Boolean values (`true` and `false`) will be displayed without formatting in `:bool` mode,
as `1` and `0` in `:bit` mode and as T and F in `:letter` mode.```julia
julia> TruthTables.showmode!(:bit)
:bitjulia> @truthtable p || q <--> r
TruthTable
┌───┬───┬───┬──────────────┐
│ p │ q │ r │ p ∨ q <--> r │
├───┼───┼───┼──────────────┤
│ 1 │ 1 │ 1 │ 1 │
│ 1 │ 1 │ 0 │ 0 │
│ 1 │ 0 │ 1 │ 1 │
│ 1 │ 0 │ 0 │ 0 │
│ 0 │ 1 │ 1 │ 1 │
│ 0 │ 1 │ 0 │ 0 │
│ 0 │ 0 │ 1 │ 0 │
│ 0 │ 0 │ 0 │ 1 │
└───┴───┴───┴──────────────┘julia> @truthtable p || q <--> r full=true
TruthTable
┌───┬───┬───┬───────┬──────────────┐
│ p │ q │ r │ p ∨ q │ p ∨ q <--> r │
├───┼───┼───┼───────┼──────────────┤
│ 1 │ 1 │ 1 │ 1 │ 1 │
│ 1 │ 1 │ 0 │ 1 │ 0 │
│ 1 │ 0 │ 1 │ 1 │ 1 │
│ 1 │ 0 │ 0 │ 1 │ 0 │
│ 0 │ 1 │ 1 │ 1 │ 1 │
│ 0 │ 1 │ 0 │ 1 │ 0 │
│ 0 │ 0 │ 1 │ 0 │ 0 │
│ 0 │ 0 │ 0 │ 0 │ 1 │
└───┴───┴───┴───────┴──────────────┘julia> TruthTables.showmode!(:letter)
:letterjulia> @truthtable !(p || q) <--> (!p && !q)
TruthTable
┌───┬───┬───────────────────────┐
│ p │ q │ ¬(p ∨ q) <--> ¬p ∧ ¬q │
├───┼───┼───────────────────────┤
│ T │ T │ T │
│ T │ F │ T │
│ F │ T │ T │
│ F │ F │ T │
└───┴───┴───────────────────────┘julia> @truthtable !(p || q) <--> (!p && !q) full=true
TruthTable
┌───┬───┬───────┬──────────┬────┬────┬─────────┬───────────────────────┐
│ p │ q │ p ∨ q │ ¬(p ∨ q) │ ¬p │ ¬q │ ¬p ∧ ¬q │ ¬(p ∨ q) <--> ¬p ∧ ¬q │
├───┼───┼───────┼──────────┼────┼────┼─────────┼───────────────────────┤
│ T │ T │ T │ F │ F │ F │ F │ T │
│ T │ F │ T │ F │ F │ T │ F │ T │
│ F │ T │ T │ F │ T │ F │ F │ T │
│ F │ F │ F │ T │ T │ T │ T │ T │
└───┴───┴───────┴──────────┴────┴────┴─────────┴───────────────────────┘
```Some logical operators can be expressed using different symbols.
This is the list of available symbols:| Operator | Symbols |
|-----------|-------------|
| AND | `&&`, `&`, `∧` (`\wedge`) |
| OR | `\|\|`, `\|`, `∨` (`\vee`) |
| NOT | `!`, `~`, `¬` (`\neg`) |
| XOR | `⊻` (`\xor`) |
| NAND | `⊼` (`\nand`) |
| NOR | `⊽` (`\nor`) |
| IMPLICATION | `-->`, `→` (`\to` or `\rightarrow`), `⇒` ( `\Rightarrow`) |
| EQUIVALENCE | `<-->`, `===`, `≡` (`\equiv`), `↔` (`\leftrightarrow`), `⇔` (`\Leftrightarrow`) |Examples:
```julia
julia> TruthTables.showmode!() # default show mode
:booljulia> @truthtable ~p & (q | r)
TruthTable
┌───────┬───────┬───────┬──────────────┐
│ p │ q │ r │ ¬p ∧ (q ∨ r) │
├───────┼───────┼───────┼──────────────┤
│ true │ true │ true │ false │
│ true │ true │ false │ false │
│ true │ false │ true │ false │
│ true │ false │ false │ false │
│ false │ true │ true │ true │
│ false │ true │ false │ true │
│ false │ false │ true │ true │
│ false │ false │ false │ false │
└───────┴───────┴───────┴──────────────┘julia> @truthtable ~p & (q | r) full=true
TruthTable
┌───────┬───────┬───────┬───────┬───────┬──────────────┐
│ p │ q │ r │ ¬p │ q ∨ r │ ¬p ∧ (q ∨ r) │
├───────┼───────┼───────┼───────┼───────┼──────────────┤
│ true │ true │ true │ false │ true │ false │
│ true │ true │ false │ false │ true │ false │
│ true │ false │ true │ false │ true │ false │
│ true │ false │ false │ false │ false │ false │
│ false │ true │ true │ true │ true │ true │
│ false │ true │ false │ true │ true │ true │
│ false │ false │ true │ true │ true │ true │
│ false │ false │ false │ true │ false │ false │
└───────┴───────┴───────┴───────┴───────┴──────────────┘julia> TruthTables.showmode!(:bit)
:bitjulia> @truthtable (p --> q) ≡ (¬p ∨ q)
TruthTable
┌───┬───┬────────────────────┐
│ p │ q │ (p --> q) ≡ ¬p ∨ q │
├───┼───┼────────────────────┤
│ 1 │ 1 │ 1 │
│ 1 │ 0 │ 1 │
│ 0 │ 1 │ 1 │
│ 0 │ 0 │ 1 │
└───┴───┴────────────────────┘julia> @truthtable (p --> q) ≡ (¬p ∨ q) full=true
TruthTable
┌───┬───┬─────────┬────┬────────┬────────────────────┐
│ p │ q │ p --> q │ ¬p │ ¬p ∨ q │ (p --> q) ≡ ¬p ∨ q │
├───┼───┼─────────┼────┼────────┼────────────────────┤
│ 1 │ 1 │ 1 │ 0 │ 1 │ 1 │
│ 1 │ 0 │ 0 │ 0 │ 0 │ 1 │
│ 0 │ 1 │ 1 │ 1 │ 1 │ 1 │
│ 0 │ 0 │ 1 │ 1 │ 1 │ 1 │
└───┴───┴─────────┴────┴────────┴────────────────────┘
```