COQ:修复递归符号



下面是半工程简单递归符号:

Universe ARG. Definition ARG := Type@{ARG}.
Parameter X: ARG.
Notation A := (fun x:ARG->ARG => fun y:x X => y).
Parameter P: ARG -> ARG.
Parameter s: P X.
Notation "[ x .. z u ]" := (x P .. (z P u) .. ) (at level 5, z, u at next level).
Check (A P (A P (A P s))). (* [A A A s]: P X *)
Print Grammar constr.
(*| "5" RIGHTA
  [ "["; NEXT; LIST1 NEXT; NEXT; "]"
  | "["; NEXT; NEXT; "]" ]*)
Check [A A A s]. (* Syntax error: [constr:operconstr] or [constr:operconstr] expected (in [constr:operconstr]). *)

如您所见,COQ将A P (A P (A P s))识别为[A A A s]: P X,但无法解析[A A A s]。问题在哪里,解决方案是什么?

编辑:COQ似乎需要一些"解析辅助工具"。例如,以下工作:

Notation "( x .. z [ u ] )" := (x P .. (z P u) .. ) (at level 5, z at next level).
Check (A A A [s]): P X.

当我想摆脱内部符号时,问题仍然开放

问题是coq< = 8.7不太支持 x .. y z表单的递归符号,修复程序是下载coq master或等待coq 8.8。Hugo Herbelin的修复程序,标题为Adding support for recursive notations of the form "x , .. , y , z",于2017年8月1日合并。

相关内容

  • 没有找到相关文章

最新更新