证明构造函数是Coq

时间:2017-07-21 14:29:30

标签: coq

具有归纳定义,如:

Inductive A :=
 mkA : nat -> A.

证明构造函数是部分函数,​​可以编码为:

Lemma constructor_functional :
 forall i1 i2, mkA i1 <> mkA i2 -> i1 <> i2.

尽管证明这一点很简单,但对于每个定义的类型都这样做听起来很奇怪。

是否有编码此属性的策略?或者库中的一些等价物?我通过搜索(_ <> _)找不到ssreflect中的任何内容。

1 个答案:

答案 0 :(得分:2)

您可以声明一个包含每个Coq函数的结果的通用引理。由于像READ_EXTERNAL这样的构造函数只是函数,因此结果也适用于它们。

mkA

这个陈述实际上是标准库中以下内容的对立面。

Lemma function_functional :
  forall (X Y : Type) (f : X -> Y) (x1 x2 : X),
    f x1 <> f x2 -> x1 <> x2.
Proof.
  intros X Y f x1 x2 H1 H2.
  apply H1.
  now rewrite H2.
Qed.