簡體   English   中英

為什么 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.

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