aboutsummaryrefslogtreecommitdiffhomepage
path: root/std/Logic/Ternary.bruijn
blob: 71fb5ac9e1988d7b1c346df5ee96dc20b217ff3c (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# MIT License, Copyright (c) 2023 Marvin Borner

# true
true [[[0]]]

# maybe (true-ish)
maybe [[[1]]]

# false
false [[[2]]]

# inverts trit value
¬‣ [0 true maybe false] ⧗ Trit → Trit

:test (¬true) (false)
:test (¬maybe) (maybe)
:test (¬false) (true)

# true if both args are true-ish
and? [[1 (0 1 1 1) (0 0 0 1) (0 0 0 0)]] ⧗ Trit → Trit → Trit

…⋀?… and?

:test (true ⋀? true) (true)
:test (true ⋀? maybe) (maybe)
:test (true ⋀? false) (false)
:test (maybe ⋀? true) (maybe)
:test (maybe ⋀? maybe) (maybe)
:test (maybe ⋀? false) (false)
:test (false ⋀? true) (false)
:test (false ⋀? maybe) (false)
:test (false ⋀? false) (false)

# true if one of the args is true-ish
or? [[1 (0 0 0 0) (0 1 0 0) (0 1 1 1)]] ⧗ Trit → Trit → Trit

…⋁?… or?

:test (true ⋁? true) (true)
:test (true ⋁? maybe) (true)
:test (true ⋁? false) (true)
:test (maybe ⋁? true) (true)
:test (maybe ⋁? maybe) (maybe)
:test (maybe ⋁? false) (maybe)
:test (false ⋁? true) (true)
:test (false ⋁? maybe) (maybe)
:test (false ⋁? false) (false)

# mathematical iff (if and only if) definition
iff [[1 (0 true 0 1) (0 1 1 1) (0 0 0 0)]] ⧗ Trit → Trit → Trit

…⇔?… iff

:test (true ⇔? true) (true)
:test (true ⇔? maybe) (maybe)
:test (true ⇔? false) (false)
:test (maybe ⇔? true) (maybe)
:test (maybe ⇔? maybe) (maybe)
:test (maybe ⇔? false) (maybe)
:test (false ⇔? true) (false)
:test (false ⇔? maybe) (maybe)
:test (false ⇔? false) (true)