[英]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.