将归纳值转换为另一种类型的归纳值

时间:2015-03-31 16:03:24

标签: coq

在数据库理论中,假设存在两个包含变量和常量的不相交集。

我想在我的值的类型级别区分变量和常量,使用以下两种归纳类型:

Inductive variable :=
| var : string -> variable.
Inductive constant :=
| con : string -> constant.

然后,我想在内部使用相同的字符串定义一个将变量映射到常量的函数。

我可以使用以下定义达到这个目标:

Definition variable_to_constant : variable -> constant.
  intros.
  destruct H.
  apply (con s).
Defined.

Check test.
test
    : variable -> constant
Eval compute in (variable_to_constant (var "hello")).
    = con "hello"
    : constant

我的问题是:是否有更优雅的解决方案来定义此功能? (我的意思是,不使用“已定义。”关键字,也许......)

这是我使用Coq的第一个开发,所以如果您认为我的实现方法是错误的,请告诉我: - )

度过美好的一天!

Fabian Pijcke

1 个答案:

答案 0 :(得分:3)

您可以直接编写函数的代码,而不是使用策略以交互方式构建它:

Definition variable_to_constant : variable -> constant :=
  fun v => match v with var str => con str end.

甚至打火机:

Definition variable_to_constant (v : variable) : constant :=
  match v with var str => con str end.