Coq incluye expresiones let en su lenguaje principal. Podemos traducir expresiones let a aplicaciones como esta:
let x : t = v in b ~> (\(x:t). b) v
entiendo que esto no siempre funciona porque el valor v
no estaría disponible cuando se verifica la escritura b
. Sin embargo, esto se puede solucionar fácilmente mediante una carcasa especial para la verificación de tipos de aplicaciones del formulario (\(x:t). b) v
. Esto nos permite eliminar expresiones let a costa de un caso especial mientras se realiza la verificación de tipos. ¿Por qué Coq include todavía incluye expresiones let? ¿Tienen otras ventajas (además de no necesitar el caso especial)?
let
expresiones, pero a) no hay razón para evitarlet
expresiones y también son convenientes, yb) agregar trucos a su lenguaje principal no es una gran idea.