繁体   English   中英

如何破坏目标的存在性

[英]How to destruct a exist in goal for coq

这有点通用,所以随时询问细节,我简化了问题的沟通范围。

说我的目标是

let (r,_) := f x in Q r

其中fx类型为{u | P u} {u | P u}

我想“破坏”这一点,以便以Q r为目标,以P r为假设。 实现此目标的最佳方法是什么? 过去,我实现了我想要的

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.
unfold myvar; destruct A.

将在这种情况下解决您的目标。

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

原因是destruct使用下面的Gallina match ,并且在Coq中,如果不仔细进行模式匹配,可能会丢失一些键入信息,请搜索“ Convoy Pattern”以获取更多信息。

您可以根据需要命名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, ... )的方案为您自动完成。 如果您不关心使用destruct f as [r].的第二部分的名称,则只能强制第一个变量的命名destruct f as [r].

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM