diff options
Diffstat (limited to 'std/Logic.bruijn')
-rw-r--r-- | std/Logic.bruijn | 104 |
1 files changed, 3 insertions, 101 deletions
diff --git a/std/Logic.bruijn b/std/Logic.bruijn index b16595c..171b52b 100644 --- a/std/Logic.bruijn +++ b/std/Logic.bruijn @@ -1,102 +1,4 @@ -# MIT License, Copyright (c) 2022 Marvin Borner +# MIT License, Copyright (c) 2024 Marvin Borner +# this is just a reference to the boolean implementation -:import std/Combinator . - -# true -true k ⧗ Boolean - -# false -false ki ⧗ Boolean - -# inverts boolean value -# equivalent of [0 ⇒ false] -not! c ⧗ Boolean → Boolean - -¬‣ not! - -:test (¬true) (false) -:test (¬false) (true) - -# true if both args are true -and? [[0 1 0]] ⧗ Boolean → Boolean → Boolean - -…⋀?… and? - -:test (true ⋀? true) (true) -:test (true ⋀? false) (false) -:test (false ⋀? true) (false) -:test (false ⋀? false) (false) - -# true if not both args are true -nand? [[1 0 1 false true]] ⧗ Boolean → Boolean → Boolean - -:test (nand? true true) (false) -:test (nand? true false) (true) -:test (nand? false true) (true) -:test (nand? false false) (true) - -# true if one of the args is true -or? m ⧗ Boolean → Boolean → Boolean - -…⋁?… or? - -:test (true ⋁? true) (true) -:test (true ⋁? false) (true) -:test (false ⋁? true) (true) -:test (false ⋁? false) (false) - -# true if both args are false -nor? [[1 1 0 false true]] ⧗ Boolean → Boolean → Boolean - -:test (nor? true true) (false) -:test (nor? true false) (false) -:test (nor? false true) (false) -:test (nor? false false) (true) - -# true if args are not same bools -xor? [[0 (1 false 0) 1]] ⧗ Boolean → Boolean → Boolean - -:test (xor? true true) (false) -:test (xor? true false) (true) -:test (xor? false true) (true) -:test (xor? false false) (false) - -# true if both args are same bools -xnor? [[0 1 (1 0 true)]] ⧗ Boolean → Boolean → Boolean - -:test (xnor? true true) (true) -:test (xnor? true false) (false) -:test (xnor? false true) (false) -:test (xnor? false false) (true) - -# if first arg is true, exec first exp; else second exp -# this function is generally redundant -# I personally just write (exp? case-T case-F) directly -if [[[2 1 0]]] ⧗ Boolean → a → b → c - -…?…:… if - -:test (if true true false) (true) -:test (true ? true : false) (true) -:test (if false true false) (false) -:test (false ? true : false) (false) - -# mathematical implies definition -implies [[1 0 true]] ⧗ Boolean → Boolean → Boolean - -…⇒?… implies - -:test (true ⇒? true) (true) -:test (true ⇒? false) (false) -:test (false ⇒? true) (true) -:test (false ⇒? false) (true) - -# mathematical iff (if and only if) definition -iff xnor? ⧗ Boolean → Boolean → Boolean - -…⇔?… iff - -:test (true ⇔? true) (true) -:test (true ⇔? false) (false) -:test (false ⇔? true) (false) -:test (false ⇔? false) (true) +:input std/Logic/Binary . |