Edición de «Práctica 2 (Paradigmas)»

De Cuba-Wiki
Advertencia: no has iniciado sesión. Tu dirección IP se hará pública si haces cualquier edición. Si inicias sesión o creas una cuenta, tus ediciones se atribuirán a tu nombre de usuario, además de otros beneficios.

Puedes deshacer la edición. Antes de deshacer la edición, comprueba la siguiente comparación para verificar que realmente es lo que quieres hacer, y entonces publica los cambios para así efectuar la reversión.

Revisión actual Tu texto
Línea 82: Línea 82:
i Insertar todos los paréntesis de acuerdo a la convención usual.
i Insertar todos los paréntesis de acuerdo a la convención usual.


[[Archivo:PLPej4a.jpg|left]]
[[Archivo:PLPej4a.jpg|miniaturadeimagen]]
 
[[Archivo:Ej4b.jpg|none]]
 
 
 


[[Archivo:Ej4b.jpg|miniaturadeimagen]]


c. Muy parecido al b pero queda una abstracción a la derecha.
c. Muy parecido al b pero queda una abstracción a la derecha.
Línea 104: Línea 100:
   En el b
   En el b


TIPADO
TIPADO  
 
== Ejercicio 5 (Derivaciones) ==
== Ejercicio 5 (Derivaciones) ==
Demostrar o explicar por qué no puede demostrarse cada uno de los siguientes juicios de tipado.
Demostrar o explicar por qué no puede demostrarse cada uno de los siguientes juicios de tipado.
a) ∅ . if true then 0 else succ(0) : Nat


a) ∅ . if true then 0 else succ(0) : Nat
[[Archivo:5.a.jpg|none]]
b) {x : Nat, y : Bool} . if true then false else (λz : Bool. z) true : Bool
b) {x : Nat, y : Bool} . if true then false else (λz : Bool. z) true : Bool
[[Archivo:5b.jpg|none]]
 
c) ∅ . if λx: Bool. x then 0 else succ(0) : Nat
c) ∅ . if λx: Bool. x then 0 else succ(0) : Nat
     Falta el resto del cuerpo del if ya que se agrupa de izq pero el lambda se come toda la expresión si no se le ponen parentesis.
     Falta el resto del cuerpo del if ya que se agrupa de izq pero el lambda se come toda la expresión si no se le ponen parentesis.


d) {x : Bool → Nat, y : Bool} . x y : Nat
d) {x : Bool → Nat, y : Bool} . x y : Nat
[[Archivo:5d.jpg|none]]
 
 


== Ejercicio 6 ==
== Ejercicio 6 ==
Línea 128: Línea 123:


c) ∅ . if (if true then false else false) then 0 else succ(0) : σ  NAT
c) ∅ . if (if true then false else false) then 0 else succ(0) : σ  NAT
== Ejercicio 7 ==
Determinar qué tipos representan σ y τ en cada uno de los siguientes juicios de tipado. Si hay más de una
solución, o si no hay ninguna, indicarlo.
a) {x: σ} . isZero(succ(x)) : τ ----- σ = Nat y τ = Bool
b) ∅ . (λx: σ. x)(λy : Bool. 0) : σ ----- σ = Bool -> Nat
c) {y : τ} . if (λx: σ. x) then y else succ(0) : σ ----- No tiene solución
d) {x: σ} . x y : τ ----- σ = No tiene solución
e) {x: σ, y : τ} . x y : τ -----  σ = CualquierCosa -> τ y τ=CualquierCosa
f) {x: σ} . x true : τ ------σ = Bool -> τ y τ=CualquierCosa
g) {x: σ} . x true : σ ----- σ = Bool -> CualquierCosa
h) {x: σ} . x x : τ ------ No tiene solución
== Ejercicio 8 ==
Mostrar un término que no sea tipable y que no tenga variables libres ni abstracciones.
    isZero(True)
== Ejercicio 9 ==
Mostrar un juicio de tipado que sea demostrable en el sistema actual pero que no lo sea al cambiar (T-ABS)
por la siguiente regla. Mostrar la demostración del juicio original.
  Γ . M : τ
  T-ABS2
  Γ . λx: σ. M : σ → τ
  Para esta nueva regla no tipa    ∅ . (λx: Bool. x):Bool -> Bool porque no se agrega x: Bool al contexto.
SEMÁNTICA
== Ejercicio 10 ==
Sean σ, τ, ρ tipos. Según la de�nición de sustitución, calcular:
a) (λy : σ. x (λx: τ. x)){x ← (λy : ρ. x y)}
b) (y (λv : σ. x v)){x ← (λy : τ. v y)}
Renombrar variables en ambos términos para no cambiar el signi�cado del término.
[[Archivo:PLP-PRACTICA2.10.jpg|none]]
== Ejercicio 11 (Valores) ==
Dado el conjunto de valores visto en clase:
V := λx: σ. M | true | false | 0 | succ(V )
Determinar si cada una de las siguientes expresiones es o no un valor:
a) (λx: Bool. x) true  -------- Es un valor
b) λx: Bool. 2 -------- Es un valor
c) λx: Bool. pred(2) -------- Es un valor
d) λy : Nat. (λx: Bool. pred(2)) true -------- Es un valor
e) x -------- No es un valor
f) succ(succ(0)) -------- Es un valor
== Ejercicio 12 (Programa, Forma Normal) ==
Para el siguiente ejercicio, considerar el cálculo sin la regla pred(0) → 0
Un programa es un término que tipa en el contexto vacío (es decir, no puede contener variables libres).
Para cada una de las siguientes expresiones
a) Determinar si puede ser considerada un programa.
b) Si vale (a), ¾Cuál es el resultado de su evaluación? Determinar si se trata de una forma normal, y en caso
de serlo, si es un valor o un error.
    i (λx: Bool. x) true -- Es un programa, da  true
    ii λx: Nat. pred(succ(x)) -- Es un programa, da la identidad
    iii λx: Nat. pred(succ(y)) -- No es un programa, tiene variables libres
    iv (λx: Bool. pred(isZero(x))) true -- Es un programa, da error
    v (λf : Nat → Bool. f 0) (λx: Nat. isZero(x)) -- Es un programa, da true
    vi (λf : Nat → Bool. x) (λx: Nat. isZero(x)) -- No es un programa, tiene variables libres
    vii (λf : Nat → Bool. f pred(0)) (λx: Nat. isZero(x)) -- Es un programa, da error porque se saco pred(0)
    viii fix (λy : Nat. succ(y)) -- Es un programa, da error porque no termina
== Ejercicio 13 (Determinismo) ==
a) Es cierto que la relación definida → es determinística (o una función parcial)? Más precisamente, pasa que si M → N y M → N`
entonces N = N` ? -- SI
b) Vale lo mismo con muchos pasos? Es decir, ¾es cierto que si M →→ M` y M →→ M`` entonces M` = M``? -- SI
c) Acaso es cierto que si M → M` y M →→ M`` entonces M` = M``? -- NO
== Ejercicio 14 ==
a) Da lo mismo evaluar succ(pred(M)) que pred(succ(M))? ¾Por qué? -- No, porque pred(succ(0)) = 0 pero succ(pred(0)) = 1
b) Es verdad que para todo M vale que isZero(succ(M)) →→ false? Si no lo es, ¾para qué términos vale? -- Vale para todo M nat
c) Para qué términos M vale que isZero(pred(M)) →→ true? (Hay infinitos). -- Pueden ser combinaciones de pred^n(succ^n(0)) para un n entero.
Ten en cuenta que todas las contribuciones a Cuba-Wiki pueden ser editadas, modificadas o eliminadas por otros colaboradores. Si no deseas que las modifiquen sin limitaciones, no las publiques aquí.
Al mismo tiempo, asumimos que eres el autor de lo que escribiste, o lo copiaste de una fuente en el dominio público o con licencia libre (véase Cuba-Wiki:Derechos de autor para más detalles). ¡No uses textos con copyright sin permiso!

Para editar esta página, responde la pregunta que aparece abajo (más información):

Cancelar Ayuda de edición (se abre en una ventana nueva)