当我运行以下脚本时:

Definition inv (a: Prop): Prop :=
match a with
| False => True
| True => False
end.

我收到“错误:此条款是多余的。”知道为什么会这样吗?

谢谢,
马库斯。

最佳答案

这有很多错误的地方。
False 不是数据构造函数,并且由于 Coq 中的数据构造函数和变量名称之间没有语法差异,因此它将您的 | False => 理解为匹配任何内容的模式,并将其命名为 False ,就像您可以编写的那样:

Definition inv (a: Prop): Prop :=
  match a with
  | x => True
  | y => False
  end.

这就是为什么它告诉您第二个子句是多余的(因为第一个模式匹配所有内容)。

现在你应该知道的另一件事是 Prop 类型不是归纳定义的,因此 Prop 类型的值不能与任何东西匹配:实际上它没有意义,因为它是一个开放类型,你每次定义时都会不断扩展一种新的归纳性质。

所以没有办法像你写的那样写一个函数 inv

关于coq - 匹配中的冗余子句,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27028360/

10-12 22:54