我想避免复制和粘贴参数并返回我想要定义的相同类型的函数类型。因为在我看来,这将是糟糕的编程实践。
例如,我定义了以下函数:
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.
我希望能够在不重复输入冗余的情况下定义这两个函数:
{X : Type} (d : X -> X -> R)
我还想潜在地定义第三个函数,在这种情况下,解决方案应该推广到定义了两个以上相同类型的函数的情况。这有可能,怎么样?
答案 0 :(得分:3)
正如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.
请注意,我使用Context
使X
成为隐式参数;您也可以使用Set Implicit Arguments.
并将其设为Variable
,让Coq自动设置其隐含性。