Coq 有关于有理数不等式的问题吗

Coq 有关于有理数不等式的问题吗,coq,Coq,我试图证明,如果y,一个有理数,大于零,那么y不等于零。我已经确定了两个我认为很有用的定理,特别是,Qlt\u not\u eq和QOrder.neq\u sym,但是我很难弄清楚如何使用QOrder.neq\u sym定理。似乎我不能用“检查”策略来传递它。例如,当我尝试执行以下操作时: Check (QOrder.neq_sym y 0) 这给了我一个错误,我不知道为什么 Require Import QArith. Require Import QOrderedType. Theore

我试图证明,如果y,一个有理数,大于零,那么y不等于零。我已经确定了两个我认为很有用的定理,特别是,
Qlt\u not\u eq
QOrder.neq\u sym
,但是我很难弄清楚如何使用
QOrder.neq\u sym
定理。似乎我不能用“检查”策略来传递它。例如,当我尝试执行以下操作时:

Check (QOrder.neq_sym y 0)
这给了我一个错误,我不知道为什么

Require Import QArith.
Require Import QOrderedType.

Theorem test : forall (x y : Q),
    y > 0 -> ~ y == 0.
Proof.
    intros.
    (* This works OK *)
    Check QOrder.neq_sym.  
    (* But this gives me an error *)
    Check (QOrder.neq_sym y 0).

如果您能给我一些关于如何使用QOrder.neq_sym定理的指导,或者其他关于如何在这个证明上取得进展的建议,我将不胜感激。

这对您来说不是很有用,但另一个选择是使用数学组件库;在这种情况下,定理是为抽象代数结构而提出的,其中有理数确实是一个例子

有许多定理说明了在这种情况下需要什么,包括直接定理:

lt0r_neq0 (R : numDomainType) (x : R), 0 < x -> x != 0

检查(@QOrder.neq_sym y 0)。
工作正常吗?(假设:隐式参数)确实需要证据。我验证了我能够进行
检查(@QOrder.neq_sym y 0)
,但我仍然无法在重写策略中使用它。你能解释一下你说它需要证据是什么意思吗?你可以使用
关于QOrder.neq_-sym
了解更多关于QOrder.neq_-sym的信息。使用该命令,您可以看到
x
y
是隐式参数,也就是说,它们应该不是由用户给出的,而是从剩余参数推断出来的,
~0==y
。要使用这个引理,
应用它,而不是试图重写它(参见@ejgallego的答案);在Hy中应用Qlt_not_eq;应用Hy,Qeq_sym,C。
Theorem test (y : Q) : y > 0 -> ~ y == 0.
Proof. now intros y_gt0; apply QOrder.neq_sym, Qlt_not_eq. Qed.