Skip to content

Latest commit

 

History

History
54 lines (30 loc) · 1.65 KB

ej01.md

File metadata and controls

54 lines (30 loc) · 1.65 KB

Práctica 4 / Ejercicio 1

a) x
b) x x

✅ Expresiones sintácticamente válidas, son términos.

c) M
d) M M

❌ No son expresiones sintácticamente válidas. M representa un término cualquiera en la gramática pero no es un término en si mismo.

e) true false
f) true succ(false true)

✅ Expresiones sintácticamente válidas, son términos (pero no tipan).

g) λx.isZero(x)

❌ No es una expresión sintácticamente válida, falta el tipo de la variable x.

h) λx: σ. succ(x)

❌ No es una expresión sintácticamente válida. σ denota un tipo cualquiera, pero no es una expresión de tipo en sí mismo.

i) λx: Bool. succ(x)

✅ Expresión sintácticamente válida, es un término (pero no tipa).

j) λx: if true then Bool else Nat. x

❌ No es una expresión sintácticamente válida, en las ramas del if deben aparecer términos, y ni Bool ni Nat son términos (son tipos).

k) σ

❌ No es una expresión sintácticamente válida por la misma razón que el inciso h).

l) Bool
m) Bool → Bool
n) Bool → Bool → Nat

✅ Expresiones sintácticamente válidas, son expresiones de tipo.

ñ) (Bool → Bool) → Nat

✅ Expresión sintácticamente válida, es una expresión de tipo. Los paréntesis modifican la asociatividad por defecto de (es igual al tipado de funciones de Haskell, asocia a derecha).

o) succ true

❌ No es una expresión sintácticamente válida, faltan los paréntesis del constructor succ.

p) λx: Bool. if 0 then true else 0 succ(true)

✅ Expresión sintácticamente válida, es un término (pero no tipa).