В модуле Poly есть 4 упражнения, связанные с церковными цифрами:
Definition cnat := forall X : Type, (X -> X) -> X -> X.
Насколько я понимаю, cnat - это функция, которая принимает функцию f (x), ее аргумент x и возвращает ее значение дляэтот аргумент: f (x).
Тогда есть 4 примера для 0, 1, 2 и 3, представленные в церковной записи.
Но как это решить?Я понимаю, что мы должны применить функцию еще раз.Значение, возвращаемое cnat, будет аргументом.Но как это закодировать?Использовать рекурсию?
Definition succ (n : cnat) : cnat
(* REPLACE THIS LINE WITH ":= _your_definition_ ." *). Admitted.
Обновление
Я пробовал это:
Definition succ (n : cnat) : cnat :=
match n with
| zero => one
| X f x => X f f(x) <- ?