任何人都可以帮助我如何在 coq 中证明这个定理
Can any one help me how to prove this therom in coq
~ (exists x:D, ~ R x)->(forall y:D, R y)
我研究了很久,但是好像不能很好地使用蕴涵的左边部分。
这是我的代码的第一部分:
Parameter D: Set.
Parameter x: D.
Parameter y: D.
Parameter R: D->Prop.
Lemma b: ~(exists x:D, ~ (R x))->(forall y:D, (R y)).
谁能帮我弄清楚如何编写其余代码?
你的问题有点含糊,因为你没有具体说明 D
和 R
是什么,也没有说明你的证明在哪里。尝试提供一个最小的工作示例,并使用明确的 fail
策略来解决您在证明中遇到的问题。
在经典逻辑(你在数学中使用的那个)中,因为你有排除中间规则,你可以总是对某事的真假进行案例分析。在为 直觉逻辑 构建的香草 Coq 中,情况并非如此。如果谓词 R
不可判定(如果每个输入都不是真或假:forall (x:D), R x \/ ~R x
),你的结果实际上是 不可证明的,如果类型 D不为空。
尝试将 R 的可判定性添加为假设并对其进行反驳。它或多或少应该遵循这个结构(关键是(R y)
是对还是错的案例分析):
Parameter D: Set.
Parameter R: D -> Prop.
Lemma yourGoal :
(forall x, R x \/ ~ R x) -> (* Decidability of R *)
~ ( exists x, ~ (R x) )->
forall y, (R y).
Proof.
intros Hdec Hex y. (* naming the hypothesis for convenience *)
specialize (Hdec y).
destruct Hdec as [H_Ry_is_true | H_Ry_is_false]. (* case analysis, creates two goals *)
+ (* (R y) is true, which is our goal. *)
assumption.
+ (* (R y) is false, which contradicts Hex *)
exfalso. (* transform your goal into False *)
apply Hex.
(* should be easy from here, using the [exists] tactic *)
Qed.
Ps:软件基础中提到了这个确切的结果(及其 link 和排除中间值),这是学习 Coq 和逻辑的重要资源:https://softwarefoundations.cis.upenn.edu/lf-current/Logic.html#not_exists_dist
~ (exists x:D, ~ R x)->(forall y:D, R y)
我研究了很久,但是好像不能很好地使用蕴涵的左边部分。
这是我的代码的第一部分:
Parameter D: Set.
Parameter x: D.
Parameter y: D.
Parameter R: D->Prop.
Lemma b: ~(exists x:D, ~ (R x))->(forall y:D, (R y)).
谁能帮我弄清楚如何编写其余代码?
你的问题有点含糊,因为你没有具体说明 D
和 R
是什么,也没有说明你的证明在哪里。尝试提供一个最小的工作示例,并使用明确的 fail
策略来解决您在证明中遇到的问题。
在经典逻辑(你在数学中使用的那个)中,因为你有排除中间规则,你可以总是对某事的真假进行案例分析。在为 直觉逻辑 构建的香草 Coq 中,情况并非如此。如果谓词 R
不可判定(如果每个输入都不是真或假:forall (x:D), R x \/ ~R x
),你的结果实际上是 不可证明的,如果类型 D不为空。
尝试将 R 的可判定性添加为假设并对其进行反驳。它或多或少应该遵循这个结构(关键是(R y)
是对还是错的案例分析):
Parameter D: Set.
Parameter R: D -> Prop.
Lemma yourGoal :
(forall x, R x \/ ~ R x) -> (* Decidability of R *)
~ ( exists x, ~ (R x) )->
forall y, (R y).
Proof.
intros Hdec Hex y. (* naming the hypothesis for convenience *)
specialize (Hdec y).
destruct Hdec as [H_Ry_is_true | H_Ry_is_false]. (* case analysis, creates two goals *)
+ (* (R y) is true, which is our goal. *)
assumption.
+ (* (R y) is false, which contradicts Hex *)
exfalso. (* transform your goal into False *)
apply Hex.
(* should be easy from here, using the [exists] tactic *)
Qed.
Ps:软件基础中提到了这个确切的结果(及其 link 和排除中间值),这是学习 Coq 和逻辑的重要资源:https://softwarefoundations.cis.upenn.edu/lf-current/Logic.html#not_exists_dist