在定义中使用函数

时间:2018-11-09 01:52:40

标签: coq

我正在建模一个程序,用户可以在其中选择不同的运算符和函数来为系统编写查询(即公式)。为了显示这些运算符,在这里我定义了addmul函数并使用了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.

1 个答案:

答案 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