How to solve the very simple Syntax error: 'end' expected after [branches] (in [term_match]). in Coq? (in Gallina and not ltac)
How to solve the very simple Syntax error: 'end' expected after [branches] (in [term_match]). in Coq? (in Gallina and not ltac)
我试图编写一个非常简单的程序来对列表中的 nats 求和 (copy pasted from here):
Fixpoint sum (l : list nat) : nat :=
match l with
| [] => 0
| x :: xs => x + sum xs
end.
但是我本地的 Coq 和 jsCoq 抱怨:
Syntax error: 'end' expected after [branches] (in [term_match]).
这是为什么? (注意我什至没有实现这个,但我的实现看起来几乎一样)
我之前实现过递归函数:
Inductive my_nat : Type :=
| O : my_nat
| S : my_nat -> my_nat.
Fixpoint add_left (n m : my_nat) : my_nat :=
match n with
| O => m
| S n' => S (add_left n' m)
end.
没有抱怨...
我确实看到了这个问题,但它似乎解决了 ltac 中的一些特殊问题,而我没有使用 ltac。
错误位置在 []
上,这表明 Coq 不理解该符号。找到未定义的符号后,解析器不知道该做什么,并产生一条本质上毫无意义的错误消息。
要定义标准列表符号,您需要通过以下方式从标准库中导入它:
Require Import List.
Import ListNotations.
stdlib 模块 List
包含模块 ListNotations
,它定义了 []
(更普遍的是 [ x ; y ; .. ; z ]
)。 List
还定义了符号 x :: xs
.
从开发中提取摘录时,您还必须找到对这些摘录有影响的语法更改命令是什么:模块导入、作用域打开、参数声明(用于隐式)、符号和强制转换” . 在目前的情况下,该文件实际上是由练习的作者通过 this pointer.
提供的
我试图编写一个非常简单的程序来对列表中的 nats 求和 (copy pasted from here):
Fixpoint sum (l : list nat) : nat :=
match l with
| [] => 0
| x :: xs => x + sum xs
end.
但是我本地的 Coq 和 jsCoq 抱怨:
Syntax error: 'end' expected after [branches] (in [term_match]).
这是为什么? (注意我什至没有实现这个,但我的实现看起来几乎一样)
我之前实现过递归函数:
Inductive my_nat : Type :=
| O : my_nat
| S : my_nat -> my_nat.
Fixpoint add_left (n m : my_nat) : my_nat :=
match n with
| O => m
| S n' => S (add_left n' m)
end.
没有抱怨...
我确实看到了这个问题
错误位置在 []
上,这表明 Coq 不理解该符号。找到未定义的符号后,解析器不知道该做什么,并产生一条本质上毫无意义的错误消息。
要定义标准列表符号,您需要通过以下方式从标准库中导入它:
Require Import List.
Import ListNotations.
stdlib 模块 List
包含模块 ListNotations
,它定义了 []
(更普遍的是 [ x ; y ; .. ; z ]
)。 List
还定义了符号 x :: xs
.
从开发中提取摘录时,您还必须找到对这些摘录有影响的语法更改命令是什么:模块导入、作用域打开、参数声明(用于隐式)、符号和强制转换” . 在目前的情况下,该文件实际上是由练习的作者通过 this pointer.
提供的