Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何为coq销毁现有目标_Coq - Fatal编程技术网

如何为coq销毁现有目标

如何为coq销毁现有目标,coq,Coq,这是一个有点通用,所以请随意询问细节,我简化了,使问题更容易沟通 说我的目标是 let (r,_) := f x in Q r 其中fx具有类型{u|pu} 我想“破坏”这个,这样我就有了qr 以pr作为假设作为目标。实现这一目标的最佳方式是什么? 在过去,我已经实现了我想要的 pose (f x). 然后简化 这里的每个请求都有一些简化的代码 Parameter T:Type. Parameter P:T -> Prop. Axiom A : {t:T|P t}. Definit

这是一个有点通用,所以请随意询问细节,我简化了,使问题更容易沟通

说我的目标是

let (r,_) := f x in Q r
其中
fx
具有类型
{u|pu}

我想“破坏”这个,这样我就有了
qr
pr
作为假设作为目标。实现这一目标的最佳方式是什么? 在过去,我已经实现了我想要的

pose (f x).
然后简化

这里的每个请求都有一些简化的代码

Parameter T:Type.
Parameter P:T -> Prop.

Axiom A : {t:T|P t}.

Definition myvar:T.
  destruct A.
  exact x.
Defined.
Theorem B : P myvar.
在这种特殊情况下,将解决您的目标

一般来说,
destruct
策略可以与任何术语一起使用,它会尝试将术语抽象出来并将其销毁。但是,请注意,这有时可能会失败,特别是在使用依赖类型时


原因是
destruct
在下面使用了gallina
match
,在Coq中,模式匹配可能会丢失一些键入信息,如果不小心,请搜索“护航模式”以获取更多信息。

如果需要,您可以命名
destruct
策略的“输出”:

(* Stupid definitions to create a minimal example *)
Parameter A: Set.
Parameter P Q: A -> Prop.
Definition f (x: A) : {r | P r }.
Admitted.

Goal (forall x, let (r, _) := f x in Q r).
intro x.
destruct f as [r hr]. (* you goal has now r: A and hr : P r as premises *)
Abort.
编辑:评论后的更多信息。
如果您不命名它们,Coq将使用基于
xi
变量(
x0,x1,…
)的方案自动为您命名。只有在不关心第二部分名称的情况下,才能使用
析构函数f as[r]强制命名第一个变量。

这有什么帮助?如果你不明确地给他们命名,Coq会自动给他们命名。OP问他如何在目标中有
qr
,在上下文中有
pr
。如果您不给它们命名,Coq确实会给它们命名,但是使用
x0
(取决于上下文…)而不是
r
。我只是在回答这个问题。如果你真的需要,你只能说出第一个,但我通常会说出所有或没有
destruct
的输出。我不认为OP的问题是“如何命名由
destruct
生成的前提?”然后我不理解这个问题,似乎我根本不理解你的问题。如果我的回答不是针对真正的问题,你能更详细地解释你的问题吗?这个评论看起来很傻,但我能让coq推断出一个答案吗?在我的用例中,A不是一个公理,而是相当复杂的,但类型仍然像我的示例;或者,您可以使用
set t:=pat
使用匹配来别名复杂模式。
(* Stupid definitions to create a minimal example *)
Parameter A: Set.
Parameter P Q: A -> Prop.
Definition f (x: A) : {r | P r }.
Admitted.

Goal (forall x, let (r, _) := f x in Q r).
intro x.
destruct f as [r hr]. (* you goal has now r: A and hr : P r as premises *)
Abort.