如何使用Coq GenericMinMax来证明有关实数的事实

时间:2016-12-16 20:53:48

标签: coq

我正在努力证明

Theorem T20d :forall (x y:R), (0<x /\ 0<y) -> 0 < Rmin x y.

Lemma min_glb_lt n m p : p < n -> p < m -> p < min n m.

位于Coq.Structures.GenericMinMax

我使用Require Import Coq.Structures.GenericMinMax

导入

然而,当我尝试使用它时,仍然没有找到“参考min_glb_lt”?我怀疑我需要打开一个范围,但我不知道哪个范围。

1 个答案:

答案 0 :(得分:3)

首先,GenericMinMax库定义了泛型结构,因此您无法直接使用它们来解决具体的问题。该库主要包含仿函数。换句话说,它提供了您需要实现的接口才能使用它们。

在我们的例子中,我们需要实现MinMaxLogicalProperties仿函数(或包含此仿函数的其他仿函数),因为它包含了所需的引理。

几个Coq标准库提供了这样的实现。对我们来说幸运的是,已经为模块Rminmax.v内的文件R中的实数完成了这一行,具体来说这一行:

object[]

所以,我们可以像这样使用它:

Include UsualMinMaxProperties R_as_OT RHasMinMax.

或者,我们可以通过其限定名称Require Import Reals. Require Import Rminmax. Import R. Local Open Scope R_scope. Theorem T20d (x y : R) : (0 < x /\ 0 < y) -> 0 < Rmin x y. Proof. intros [? ?]. now apply min_glb_lt. Qed. 引用引理 - 这将让我们摆脱R.min_glb_lt