J'ai du mal à comprendre les principes de ce qu'est un constructeur et comment il fonctionne.Qu'est-ce qu'un constructeur dans Coq?
Par exemple, en Coq, nous avons appris à définir les nombres naturels comme celui-ci:
Inductive nat : Type :=
| O : nat
| S : nat -> nat.
Et ont été dit que S
est un constructeur, mais qu'est-ce que cela signifie exactement?
Si je fais alors:
Check (S (S (S (S O)))).
Je reçois qu'il est 4
et de type nat
.
Comment cela fonctionne-t-il, et comment Coq sait-il que (S (S (S (S O))))
représente 4
?
Je suppose que la réponse à ceci est une magie d'arrière-plan extrêmement intelligente dans Coq.
La jolie impression de '(S (S (S (SO))))' comme '4' est juste la commodité que vous ne devriez pas laisser vous distraire. Si vous êtes au point où vous voulez avoir une idée de ce qu'est un constructeur, définissez votre propre type 'naturals' avec les constructeurs' Z' (pour zéro) et 'N' (pour next). Alors rien de magique n'arrivera. –