strong-kleene
strong-kleene provides Trit, a three-valued logic value with strong
Kleene semantics.
Compatibility: this crate is no_std.
Quickstart
use Trit;
let a = True;
let b = Unknown;
assert_eq!;
assert_eq!;
assert_eq!;
assert_eq!;
How-To
Convert from bool
use Trit;
let trit_true: Trit = true.into;
let trit_false: Trit = false.into;
assert_eq!;
assert_eq!;
Convert into bool safely
use ;
let known = True;
let unknown = Unknown;
assert_eq!;
assert_eq!;
Branch on Unknown
use Trit;
let value = Unknown;
match value
assert!;
Semantics
Strong Kleene logic
extends classical two-valued logic with Unknown for values that are not
currently known.
Legend: F = false, U = unknown, T = true.
NOT(A)
| A | !A |
|---|---|
| F | T |
| U | U |
| T | F |
AND(A, B)
| A \ B | F | U | T |
|---|---|---|---|
| F | F | F | F |
| U | F | U | U |
| T | F | U | T |
OR(A, B)
| A \ B | F | U | T |
|---|---|---|---|
| F | F | U | T |
| U | U | U | T |
| T | T | T | T |
XOR(A, B)
| A \ B | F | U | T |
|---|---|---|---|
| F | F | U | T |
| U | U | U | U |
| T | T | U | F |
Reference
Tritis the primary type and supports!,&,|, and^.UnknownToBoolErroris returned bybool::try_from(Trit::Unknown).