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.