Final 22/12/2023 (Paradigmas)
Ejercicio 1: Te daba dos fórmulas de primer orden y tenias que probar si eran válidas o no.
A) \forAll x \Exist y : x + y = x
B) (\Exist x (P(x))) v (\Exist x (P(~x)))
Ejercicio 2: Define la descomposición en 1 paso de una lista en Prolog. Ejemplo: [2,*3*,1] -> [2, * 2, 1,* 1]
Osea, cambia un elemento por dos elementos que sumen el elemento original. Tiene que cumplirse que ambos sean mayores o iguales a uno.
Define la descomposición en N pasos que es lo que uno espera. Ejemplo para N =2. [2,3,1] -> [ 2, 1,1,1,1].
El ejercicio pedía hacer una función que dada una lista te de todas las descomposiciónes.
Ejercicio 3: Haskell.
Define el tipo de dato Nat como Zero | Succ(Nat)
Dada una función F F :: [Nat] -> Nat .
Que te aseguran que es total y biyectiva.
Si es posible, implementar en Haskell F^-1. Sino es posible justificar porque.
Ejercicio 4:
En calculo sigma, implementar un objeto M que al mandarle el mensaje "memoizar" y un objeto "o" que sabe responder "f" tenés que cachear ese valor básicamente. O sea, si todavía no se calculo O.f tenés que guardarlo para devolverlo y si ya lo hiciste no hay que volver a computarlo.
Ejercicio 5: En calculo lambda, definir las reglas de tipado y de reducción para el Rec de listas