Coq

时间:2018-02-02 12:17:12

标签: coq

我想用符号来表示谓词 test ,如下所示:

Variable A B : Type.

Inductive test : A -> B -> A -> B -> Prop :=
| test1 : forall a1 a2 b1 b2,
    a1 \ b1 || a2 \ b2
where "c1 '\' st '||' c2 '\' st'" := (test c1 st c2 st')
.

然而,Coq有一个错误:    enter image description here

为什么在Coq中无法接受这种表示法?

1 个答案:

答案 0 :(得分:4)

符号被接受,实际上Coq在test1的定义中错误地解析了对符号的使用。要正确解析此表示法,您需要调整其术语的解析级别。您可以使用保留的表示法执行此操作,因为归纳中的符号表示where条款不支持配置表示法的语法:

Variable A B : Type.

Reserved Notation "c1 '\' st '||' c2 '\' st'" (at level 40, st at next level, c2 at next level, no associativity).

Inductive test : A -> B -> A -> B -> Prop :=
| test1 : forall a1 a2 b1 b2,
    a1 \ b1 || a2 \ b2
where "c1 '\' st '||' c2 '\' st'" := (test c1 st c2 st')
.

我对解析级别的工作原理没有很好的直觉(40在上面有点武断),所以我能给出的最佳建议是实验,如果在某处解析不正确,那么请尝试调整水平。