haskell logic

27 valores diferentes de Bool a Bool en Haskell



logic (1)

¿Podría alguien explicar por qué hay 27 Bool->Bool diferentes de Bool->Bool , de los cuales 11 pueden definirse en Haskell?


Hay tres valores de tipo Bool : True , False y final (expresiones para las que la evaluación no finaliza o expresiones para las que la evaluación se convierte en errores).

Entonces, hay un número exponencial de funciones de A a B Más exactamente |B| ^ |A| |B| ^ |A| .

Por lo tanto, hay 3^3 = 27 funciones de tipo Bool -> Bool .

Ahora, para la segunda parte de la pregunta: la función que comienza desde abajo puede ser solo 2: la que devuelve True constantemente y la que devuelve False constantemente. Luego debe agregar el número de funciones de {True, False} a {True, False, bottom} que es 3^2 . Entonces, en total tendrás 9+2=11 funciones.

Edición : Aquí están las 11 funciones posibles:

B es inferior, T es True , F es False . La última fila representa las funciones const True y const False , mientras que las tres primeras filas representan funciones que prueban el valor del argumento. Es por eso que las primeras tres filas asignan B a B : probar el valor de bottom no puede resultar en nada más que en bottom.

Espero que esté más claro ahora.