Coq记录类型

时间:2018-06-07 15:46:24

标签: record coq

我是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已经存在。

感谢任何帮助。

1 个答案:

答案 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.UDummy.U