证明构造函数是Coq中的部分函数

证明构造函数是Coq中的部分函数,coq,Coq,具有归纳定义,如: Inductive A := mkA : nat -> A. 证明构造函数是部分函数可以编码为: Lemma constructor_functional : forall i1 i2, mkA i1 <> mkA i2 -> i1 <> i2. 引理构造函数函数: 对于所有i1i2,mkai1mkai2->i1i2。 尽管要证明这一点并不重要,但对每一个定义的类型这样做听起来都很奇怪 是否有一种策略来对该属性进行编码?或者图书馆

具有归纳定义,如:

Inductive A :=
 mkA : nat -> A.
证明构造函数是部分函数可以编码为:

Lemma constructor_functional :
 forall i1 i2, mkA i1 <> mkA i2 -> i1 <> i2.
引理构造函数函数: 对于所有i1i2,mkai1mkai2->i1i2。 尽管要证明这一点并不重要,但对每一个定义的类型这样做听起来都很奇怪


是否有一种策略来对该属性进行编码?或者图书馆里的一些类似的东西?我在ssreflect中没有找到任何东西,但是通过搜索
(uuu)

您可以声明一个通用引理,该引理包含每个Coq函数的此结果。由于像
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.
Lemma f_equal :
  forall (X Y : Type) (f : X -> Y) (x1 x2 : X),
    x1 = x2 -> f x1 = f x2.