2017-08-11 182 views
0

我想在P-> Q中使用P的名称。合理的是陈述一个类型P> Q的定理,其中Q取决于P.Coq - 如何命名内联的假设

在以下示例中,我需要替换'???'。

我知道我可以打开一个部分,并将(x <> 0)作为带名称的参数。然后,在关闭该部分之后,我得到了一些东西,但我想只在一行中说明thm2。

(Ofcourse,下面的例子是有点傻了。这只是证明我的问题的例子。)

Require Import QArith. 

Definition my_inv(x:Q)(x<>0):Q. 
intros. 
exact (1/x). 
Defined. 

Thm thm1: forall x:Q, x>0 -> x<>0. 
Proof. 
... 
Qed. 

Theorem thm2: forall x:Q, x>0-> (my_inv x (thm1 x ???)) > 0. 

现在,???应将Coq指向x> 0的假设。我无法找到一个方法来提到这个假设,它与它所陈述的相同。

+0

是'my_inv'有效代码吗?对我来说产生语法错误... – gallais

+0

@gallais应该是“定义my_inv(x:Q)(nz:x <> 0):Q”。否则,这在我的机器上运行,没有错误。 – tomjerry7

回答

3

您可以使用forall来介绍命名粘合剂:forall (x:Q) (p : x>0), (...)。这给了我们:

Require Import QArith. 

Definition my_inv(x:Q) (p : x <> 0):Q. 
intros. 
exact (1/x). 
Defined. 

Theorem thm1 : forall x:Q, x>0 -> x<>0. 
Proof. 
Admitted. 

Theorem thm2: forall (x:Q) (p : x>0), (my_inv x (thm1 x p)) > 0. 
+0

解决了我的问题。谢谢。 – tomjerry7