簡體   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