Фон
Вы только что узнали, что такое комбинаторная логика . Заинтригованные различными комбинаторами, вы тратите немало времени на изучение их. Вы наконец наткнулись на это конкретное выражение:
(S I I (S I I))
Вы замечаете, что, пытаясь привести его к нормальной форме, он превращается в себя после трех шагов:
(S I I (S I I))
= (I (S I I) (I (S I I))) (1)
= (S I I (I (S I I))) (2)
= (S I I (S I I)) (3)
Вы полны решимости найти другие выражения, которые разделяют эту черту и начать работать над этим немедленно.
правила
Вы можете использовать любую комбинацию из следующих комбинаторов:
B f g x = f (g x) C f x y = f y x I x = x K x y = x S f g x = f x (g x) W f x = f x x
Приложение остается ассоциативным, что означает, что
(S K K)
на самом деле((S K) K)
.Сокращение минимально, нет другого порядка шагов сокращения, который использует меньше шагов. Пример: если
x
есть уменьшениеy
, то правильное минимальное уменьшение(W f x)
:(W f x) = (W f y) (1) = f y y (2)
и не
(W f x) = f x x (1) = f y x (2) = f y y (3)
Применяются стандартные лазейки.
задача
Мы определяем цикл выражения как минимальное количество сокращений между двумя одинаковыми выражениями.
Ваша задача - найти выражение с числом используемых комбинаторов <100, которое дает самый длинный цикл.
счет
Ваша оценка будет определяться продолжительностью цикла вашего выражения. Если выражения двух людей имеют одинаковый цикл, выигрывает ответ, который использует меньше комбинаторов. Если они оба используют одинаковое количество комбинаторов, победит более ранний ответ.
Удачи и приятного времяпровождения!
x
есть сведение к y
то W f x -> W f y -> f y y
или W f x -> f x x -> f x y -> f y y
имеют разную длину.