具有归纳定义,如:
Inductive A :=
mkA : nat -> A.
证明构造函数是部分函数,可以编码为:
Lemma constructor_functional :
forall i1 i2, mkA i1 <> mkA i2 -> i1 <> i2.
尽管证明这一点很简单,但对于每个定义的类型都这样做听起来很奇怪。
是否有编码此属性的策略?或者库中的一些等价物?我通过搜索(_ <> _)
找不到ssreflect中的任何内容。
答案 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.