当我运行以下脚本时:
Definition inv (a: Prop): Prop :=
match a with
| False => True
| True => False
end.
我得到"错误:这个条款是多余的。"知道为什么会这样吗?
谢谢, 马库斯。
答案 0 :(得分:6)
这有很多错误。
False
不是数据构造函数,并且由于Coq中的数据构造函数和变量名之间没有语法差异,因此它将| False =>
理解为匹配任何内容的模式,并将其命名为{{ 1}},就像你写的一样:
False
这就是为什么它告诉你第二个子句是多余的(因为第一个模式匹配所有东西)。
现在你要知道的另一件事是Definition inv (a: Prop): Prop :=
match a with
| x => True
| y => False
end.
类型没有归纳定义,因此类型Prop
的值不能与任何东西匹配:事实上它没有意义,因为它是一种开放式类型,每次定义新的归纳属性时都会不断扩展。
因此无法按照编写函数的方式编写函数Prop
。