没有涉及依赖"匹配" ssreflect的模式

时间:2017-03-16 20:31:05

标签: coq ssreflect

在我看来,对于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.

我导入ssreflect时停止工作,因为它需要consappend模式的额外字段:

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.

原因是什么,有没有办法在模式匹配中产生影响?

1 个答案:

答案 0 :(得分:5)

Coq 8.5和Coq 8.6之间的模式行为发生了变化,基本上打破了现有的每个Coq脚本,因为8.6会考虑模式中的隐式参数。

而不是为8.6特定功能重写所有库,这会阻止与8.5的兼容性,ssreflect选择在加载插件时通过设置Asymmetric Patterns选项恢复到8.5行为。

您可以返回默认的8.6行为

Global Unset Asymmetric Patterns.
导入ssreflect后,在脚本中