[英]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不能猜測m
和n
使用什么值,而是您的目標沒有合適的形狀來實例化該定理。 當您編寫apply eq_add_S
,Coq嘗試將S n = S m -> n = m
與S (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.