У меня проблемы с пониманием принципов того, что такое конструктор и как он работает.
Например, в Coq нас учили определять натуральные числа следующим образом:
Inductive nat : Type :=
| O : nat
| S : nat -> nat.
И мне сказали, что S
это конструктор, но что именно это означает?
Если я тогда сделаю:
Check (S (S (S (S O)))).
Я понял, что это 4
и типа nat
.
Как это работает, и как Coq узнает, что (S (S (S (S O))))
представляет 4
?
Полагаю, ответом на это является какая-то очень умная фоновая магия в Coq.