Tengo problemas para entender los principios de qué es un constructor y cómo funciona.¿Qué es un constructor en Coq?
Por ejemplo, en Coq, se nos ha enseñado a definir los números naturales como este:
Inductive nat : Type :=
| O : nat
| S : nat -> nat.
y me han dicho que S
es un constructor, pero ¿qué significa eso exactamente?
Y si lo:
Check (S (S (S (S O)))).
consigo que es 4
y de tipo nat
.
¿Cómo funciona esto, y cómo Coq sabe que (S (S (S (S O))))
representa 4
?
Supongo que la respuesta a esto es una magia de fondo extremadamente inteligente en Coq.
El bastante-impresión de '(S (S (S (SO))))' 'como 4' es sólo una conveniencia de que no debes dejar que te distraiga Si está en el punto en el que desea hacerse una idea de lo que es un constructor, defina su propio tipo 'naturals' con los constructores' Z' (para cero) y 'N' (para el próximo). Entonces nada de magia sucederá. –