我是Coq的新手。当我尝试定义两个具有相同名称的类型字段的记录类型时,我收到错误。例如:
Record squag := {
U : Type;
op : U -> U -> U where "x * y" := (op x y);
idempotent_op : forall x : U, (x * x) = (x);
commutative_op : forall x y : U, (x * y) = (y * x);
antiAbsorbent_op : forall x y: U, (x * (x * y)) = (y)
}.
Record dummy := {
U : Type;
zero : U
}.
我得到的错误是:
错误:U已经存在。
感谢任何帮助。
答案 0 :(得分:3)
您无法在Coq命名空间中重用记录名称。但是,您可以做的是将两个记录声明为单独的文件或模块:
Module Squag.
Record squag := {
U : Type;
op : U -> U -> U where "x * y" := (op x y);
idempotent_op : forall x : U, (x * x) = (x);
commutative_op : forall x y : U, (x * y) = (y * x);
antiAbsorbent_op : forall x y: U, (x * (x * y)) = (y)
}.
End Squag.
Module Dummy.
Record dummy := {
U : Type;
zero : U
}.
End Dummy.
然后,您可以将这两个字段分别称为Squag.U
和Dummy.U
。