簡體   English   中英

Coq未能通過申請策略

[英]Coq fails an apply tactic

我試圖證明以下關於自然數的簡單定理:

((i + j) = (i + k)) -> (j = k)

這是我在Coq擁有的東西:

Theorem cancel : forall (i j k : nat),
  ((add i j) = (add i k)) -> (j = k).
Proof.
intros i j k.
induction i.
simpl.
apply A_IMPLIES_A.
simpl.

之后,我有了子目標:

S (add i j) = S (add i k) -> j = k

所以我想我應該使用eq_add_S ,它聲明S m = S n -> m = n 但是,當我嘗試使用apply eq_add_S這樣做時,出現以下錯誤:

Error:
In environment
i, j, k : nat
IHi : add i j = add i k -> j = k
Unable to unify "k" with "add i k".

所以我想它無法理解我想要的是m = (add ij)n = (add ik) Coq怎么看不懂我的想法? 或更嚴重的是,我該如何幫助他呢? 謝謝!

問題不是Coq不能猜測mn使用什么值,而是您的目標沒有合適的形狀來實例化該定理。 當您編寫apply eq_add_S ,Coq嘗試將S n = S m -> n = mS (add ij) = S (add ik) -> j = k統一起來。

您需要的是通過將eq_add_S引入上下文來將其應用於目標前提

Proof.
intros i j k H. (* H : add i j = add i k *)
induction i as [|i IH].
- apply H.
- apply eq_add_S in H.
  (* ...  *)

我將解決方案作為一個單獨的答案發布,希望其他用戶可以從中受益。 這里是:

Theorem cancel : forall (i j k : nat),
  ((add i j) = (add i k)) -> (j = k).
Proof.
intros i j k H.
induction i.
apply H.
simpl in H.
apply eq_add_S in H.
apply IHi in H.
assumption.
Qed.

暫無
暫無

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

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