我正在建模一个程序,用户可以在其中选择不同的运算符和函数来为系统编写查询(即公式)。为了显示这些运算符,在这里我定义了add
和mul
函数并使用了nat数据类型,而不是程序的函数和数据类型。如何定义formula
,使我能够在定义compute_formula
中使用它。我有点无法解决这个问题。谢谢。
Fixpoint add n m :=
match n with
| 0 => m
| S p => S (p + m)
end
where "n + m" := (add n m) : nat_scope.
Fixpoint mul n m :=
match n with
| 0 => 0
| S p => m + p * m
end
where "n * m" := (mul n m) : nat_scope.
Definition formula : Set :=
nat-> nat -> ?operators_add_mull ->formula.
Definition compute_formula (f: formula) : nat :=
match f with
|firstnumber,secondnumber, ?operators_add_mull =>
?operators_add_mull firstnumber secondnumber
end.
答案 0 :(得分:1)
首先,您用于定义数据类型的语法不太正确:您需要使用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的加法。要检查公式数据类型,您需要使用{{ 1}}构造函数:
match