簡體   English   中英

apply waric無法找到變量的實例

[英]apply tactic cannot find an instance for a variable

我一直在嘗試各種場景中的apply策略,並且當前提是這樣的時候似乎陷入了以下情況:

  H1 : a
  H2 : a -> forall e : nat, b -> g e
  ============================
   ...

當我嘗試apply H2 in H1. ,它給了我錯誤:

Error: Unable to find an instance for the variable e.

任何方式讓我帶來forall e : nat, b -> ge作為前提的一部分。 這是具有上述場景的完整工作代碼:

Lemma test : forall {a b c : Prop} {g : nat} (f : nat -> Prop),
    a /\ (a -> forall {e : nat}, b -> f e) -> c.
Proof.
  intros a b c f g.
  intros [H1 H2].
  (* apply H2 in H1. *)
Abort.

Coq參考手冊, §8.2.5

該策略apply 長期 in IDENT嘗試匹配IDENT類型的結論,對術語類型的非依賴的前提下,由右至左審判他們。 如果成功,則假設標識的陳述將被術語類型的結論所取代。

現在,上述的描述,你的情況下,我們得到以下,勒柯克試圖取代H1 : a與結束H2 ,即ge 要做到這一點,它需要用一些值來實例化通用量化變量e ,Coq無法明確推斷 - 因此你看到的錯誤信息。

另一種看待它的方法是嘗試使用另一種變體apply ... in ...

eapply H2 in H1.

這會給你兩個子目標:

  ...
  H2 : a -> forall e : nat, b -> g e
  H1 : g ?e
  ============================
  c

  ...
  H1 : a
  H2 : a -> forall e : nat, b -> g e
  ============================
  b

第一個子目標的H1假設顯示了Coq在普通apply in策略中的eapply in ,但在eapply in ,變量e被一個存在變量( ?e )取代。 如果您還不熟悉存在變量,那么它們是您對Coq的承諾,您將在以后為它們構建術語。 您應該通過統一隱式地構建術語。

無論如何, specialize (H2 H1). 可能是你想做的事情,或類似的事情

pose proof (H2 H1) as H; clear H1; rename H into H1.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM