[英]Why can't inversion be used on a universally qualified hypothesis in Coq?
[英]Why can't Coq unify goal and hypothesis?
經過一些練習,我得到了以下證明 state:
(tail1 是一個 nat 列表模式生成器, lng
是泛化的)
1 subgoal
n' : nat
IH_n' : forall lng : nat, lng > n' -> nth n' (update (tail1 lng) 0 1) 9 = 1
lng : nat
H : S lng > S n'
______________________________________(1/1)
nth (S n') (update (tail1 (S lng)) 0 1) 9 = 1
使用apply IH_n'
失敗並出現以下錯誤:
無法將“nth n' (update (tail1?M1305) 0 1) 9 = 1”與“nth (S n') (update (tail1 (S lng)) 0 1) 9 = 1”統一起來。
?M1305 - (S lng)
不能統一的對嗎??M1305
? 這里的問題是您試圖在n'
上對S n'
應用假設,而 n' 在 IH_n' 中沒有量化。
只有當你的假設是:
IH_n' : forall n' lng : nat, lng > n' -> nth n' (update (tail1 lng) 0 1) 9 = 1
要回答您的另一個問題, ?_
是存在變量,如果您的假設適用,它將被替換,因為變量 lng 在假設中被量化。
如果您需要有關如何證明此目標的幫助,請分享代碼嗎? (即使我認為你應該unfold nth, update; simpl
看看你是否可以在某個地方應用你的假設。
假設IH_n'
被lng:nat
普遍量化。 要將其應用於目標,Coq 需要實例化它。 ?M1305
是它為尚未找到的lng
值賦予的名稱。
錯誤信息不一定表示?M1305
和(S lng)
不能統一。 這個問題可能來自其他地方。 例如,您的目標以nth (S n')
開始,而假設以nth n'
開始。 顯然, (S n')
和n'
不能統一。
假設目標是可證明的,您的第一步是確保它以nth n'
開頭。 為此,您需要nth
的第二個參數為(cons foo bar)
形式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.