Coq 定义相同类型的多个函数的有效方法

Coq 定义相同类型的多个函数的有效方法,coq,Coq,我希望避免复制和粘贴与我试图定义的函数类型相同的参数和返回类型。因为,在我看来,那将是糟糕的编程实践 例如,我正在定义以下函数: Definition metric_non_negative {X : Type} (d : X -> X -> R) := forall x y : X, (d x y) >= 0. Definition metric_identical_arguments {X : Type} (d : X -> X -> R) := fo

我希望避免复制和粘贴与我试图定义的函数类型相同的参数和返回类型。因为,在我看来,那将是糟糕的编程实践

例如,我正在定义以下函数:

Definition metric_non_negative {X : Type} (d : X -> X -> R) :=
  forall x y : X, (d x y) >= 0.

Definition metric_identical_arguments {X : Type} (d : X -> X -> R) :=
  forall x y : X, (d x y) = 0 <-> x = y.

我还想潜在地定义第三个函数,在这种情况下,解决方案应该推广到定义两个以上相同类型的函数的情况。这有可能吗?怎么可能?

正如安东·特鲁诺夫(Anton Trunov)在评论中提到的,听起来就像你想使用一个部分:

Section Metric.

  Context {X: Type}.
  Variable (d: X -> X -> nat).

  Definition metric_non_negative :=
    forall x y : X, (d x y) >= 0.

  Definition metric_identical_arguments :=
    forall x y : X, (d x y) = 0 <-> x = y.

End Metric.
节度量。
上下文{X:Type}。
变量(d:X->X->nat)。
定义度量非负:=
对于所有xy:x,(dxy)>=0。
定义度量_相同_参数:=
对于所有的xy:x,(dxy)=0xy=y。
结束度量。

请注意,我使用了
Context
使
X
成为一个隐式参数;您还可以使用
设置隐式参数。
并将其设置为
变量
,让Coq自动设置其隐式。

部分机制是否不能解决您的问题?
Section Metric.

  Context {X: Type}.
  Variable (d: X -> X -> nat).

  Definition metric_non_negative :=
    forall x y : X, (d x y) >= 0.

  Definition metric_identical_arguments :=
    forall x y : X, (d x y) = 0 <-> x = y.

End Metric.