Двоичная комбинаторная логика ( BCL ) — это язык программирования , который использует двоичные термины 0 и 1 для создания полной формулировки комбинаторной логики, используя только символы 0 и 1. [1] Используя комбинаторы S и K, можно создавать сложные функции булевой алгебры. BCL имеет приложения в теории сложности размера программы ( сложности Колмогорова ). [1] [2]
Используя комбинаторы K и S комбинаторной логики , логические функции можно представить в виде функций комбинаторов:
< термин > ::= 00 | 01 | 1 < термин > < термин >
Денотационную семантику BCL можно определить следующим образом:
[ 00 ] == K
[ 01 ] == S
[ 1 <term1> <term2> ] == ( [<term1>] [<term2>] )
где " [...]
" сокращает "значение ...
". Здесь K
и S
являются комбинаторами KS -базиса , а ( )
является операцией применения комбинаторной логики . (Префикс 1
соответствует левой скобке, правые скобки не нужны для устранения неоднозначности.)
Таким образом, существует четыре эквивалентные формулировки BCL, в зависимости от способа кодирования триплета (K, S, левая скобка). Это (00, 01, 1)
(как в настоящей версии), (01, 00, 1)
, (10, 11, 0)
, и (11, 10, 0)
.
Операционная семантика BCL, за исключением эта-редукции (которая не требуется для полноты по Тьюрингу ), может быть очень компактно задана следующими правилами переписывания для подтермов данного термина, разбирая их слева:
1100xy → x
11101xyz → 11xz1yz
где x
, y
и z
— произвольные подтермы. (Заметим, например, что поскольку синтаксический анализ выполняется слева, 10000
не является подтермом 11010000
.)
BCL можно использовать для копирования алгоритмов, таких как машины Тьюринга и клеточные автоматы . [3] BCL является полным по Тьюрингу .