在Coq中推广存在变量

时间:2012-08-30 14:31:39

标签: coq

我正在尝试证明P ?x,其中P : A -> Prop?x : A是一个存在变量。我可以证明forall a:A, P a,因此我需要将P ?x概括为forall a:A, P a

如果?x是一个实例化的变量x,我可以简单地使用generalize x来生成forall x:A, P x。但是,当我尝试generalize ?x时,Coq会返回语法错误。

这可能吗?我已经检查过,Coq似乎没有提供一种直观的方式来概括关于存在变量的陈述。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:3)

P ?x不等同于forall x, P x,甚至也不暗示P ?x。要证明a,您需要找到一些P aa : A成立。根据您的假设,找到一些a : A就足够了。换句话说,您需要证明域不是空的(或者更确切地说,您需要证明域中元素的存在)。

此处,如果您有一些instantiate (1 := A),则可以使用Parameter A : Set. Parameter P : A -> Prop. Goal (forall a, P a) -> A -> exists x, P x. Proof. intros H a. eexists. instantiate (1 := a). apply H. Qed. 。愚蠢的例子:

{{1}}