Подтвердить что ты не робот

27 различных значений Bool to Bool в Haskell

Может ли кто-нибудь объяснить, почему существуют 27 разные значения Bool->Bool, из которых 11 может быть определено в Haskell?

4b9b3361

Ответ 1

Существует три значения типа Bool: True, False и bottom (выражения, для которых оценка не заканчивается, или выражения, для которых оценка превращается в ошибки).

Тогда существует экспоненциальное число функций от A до B. Более точно |B| ^ |A|.

Таким образом, существуют 3^3 = 27 функции типа Bool -> Bool.

Теперь, для второй части вопроса: функция, начинающаяся снизу, может быть только 2: постоянная, возвращающая True и постоянная возвращающая False. Затем вам нужно добавить число функций от {True, False} до {True, False, bottom}, которое равно 3^2. Итак, у вас будут функции 9+2=11.

Изменить. Вот 11 возможных функций:

11 functions

B - нижний, T - True, F - False. Последняя строка представляет функции const True и const False, тогда как первые три строки представляют функции, проверяющие значение аргумента. Вот почему первые три строки отображают от B до B: проверка значения дна не может привести к чему-то еще, кроме нижнего.

Надеюсь, теперь это станет понятным.