在我看来,ssreflect
当我们进行依赖模式匹配时,隐式构造函数字段会变成显式字段,并且设置各种隐式选项不会影响这种行为。
以下代码适用于 Coq 8.6:
Require Import Coq.Unicode.Utf8.
Set Implicit Arguments.
Set Contextual Implicit.
Inductive Vec (A : Type) : nat → Type :=
nil : Vec A 0
| cons : ∀ {n}, A → Vec A n → Vec A (S n).
Fixpoint append {A n m}(xs : Vec A n)(ys : Vec A m) : Vec A (n + m) :=
match xs with
nil => ys
| cons x xs => cons x (append xs ys)
end.
当我 import 时它停止工作ssreflect
,因为它需要一个额外的字段用于cons
模式append
:
From mathcomp Require ssreflect.
Fixpoint append {A n m}(xs : Vec A n)(ys : Vec A m) : Vec A (n + m) :=
match xs with
nil => ys
| cons _ x xs => cons x (append xs ys)
end.
这是什么原因,有没有办法在模式匹配中仍然隐含?