将归纳值转换为另一种类型的归纳值
Transforming a inductive value into an inductive value of another type
在数据库理论中,假设存在两个包含变量和常量的不相交集合。
我想在我的值的类型级别区分变量和常量,使用以下两种归纳类型:
Inductive variable :=
| var : string -> variable.
Inductive constant :=
| con : string -> constant.
然后我想定义一个函数,在内部使用相同的字符串将变量映射到常量。
我可以使用以下定义达到此 objective:
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
我的问题是:有没有更优雅的解决方案来定义这个函数? (我的意思是,不使用 "Defined." 关键字,也许...)
这是我第一次使用 Coq 进行开发,所以如果您认为我的实现方式有误,请告诉我:-)
祝你有愉快的一天!
法比安·派克
您可以直接编写函数的代码,而不是使用策略以交互方式构建它:
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.
在数据库理论中,假设存在两个包含变量和常量的不相交集合。
我想在我的值的类型级别区分变量和常量,使用以下两种归纳类型:
Inductive variable :=
| var : string -> variable.
Inductive constant :=
| con : string -> constant.
然后我想定义一个函数,在内部使用相同的字符串将变量映射到常量。
我可以使用以下定义达到此 objective:
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
我的问题是:有没有更优雅的解决方案来定义这个函数? (我的意思是,不使用 "Defined." 关键字,也许...)
这是我第一次使用 Coq 进行开发,所以如果您认为我的实现方式有误,请告诉我:-)
祝你有愉快的一天!
法比安·派克
您可以直接编写函数的代码,而不是使用策略以交互方式构建它:
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.