Во-первых, ваш синтаксис для определения типа данных не совсем верен: вам нужно использовать ключевое слово Inductive
:
Inductive formula : Set :=
| Formula : nat -> nat -> ?operators_add_mul -> formula.
Осталось выяснить, какими должны быть аргументы для конструктора Formula
. Тип функции Coq ->
является типом, подобным любому другому, и мы можем использовать его в качестве третьего аргумента:
Inductive formula : Set :=
| Formula : nat -> nat -> (nat -> nat -> nat) -> formula.
После определения этого типа данных вы можете написать выражение типа Formula 3 5 add
, которое обозначает добавление 3 и 5. Чтобы проверить тип данных формулы, вам нужно написать match
с помощью конструктора Formula
:
Definition compute_formula (f : formula) : nat :=
match f with
| Formula n m f => f n m
end.