我想用符号来表示谓词 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中无法接受这种表示法?
答案 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在上面有点武断),所以我能给出的最佳建议是实验,如果在某处解析不正确,那么请尝试调整水平。