Coq 为什么可以';统一目标和假设?

Coq 为什么可以';统一目标和假设?,coq,Coq,经过一些练习,我达到了以下证明状态: (tail1是nat列表模式生成器,lng是通用的) 使用apply IH\u n'失败,出现以下错误: 无法将“n n”(更新(tail1?M1305)0 1)9=1与统一 “第n(sn')(更新(tail1(sng))01)9=1” 是不是不能统一的?M1305-(S lng)对 确切地说,M1305是什么 有可能从这里继续前进吗 这里的问题是,您试图对sn'应用n'的假设,而n'在IH_n'中没有量化 只有当你的假设是: IH_n' : forall

经过一些练习,我达到了以下证明状态:

(tail1是nat列表模式生成器,
lng
是通用的)

使用
apply IH\u n'
失败,出现以下错误:

无法将“n n”(更新(tail1?M1305)0 1)9=1与统一 “第n(sn')(更新(tail1(sng))01)9=1”

  • 是不是不能统一的
    ?M1305-(S lng)
  • 确切地说,M1305是什么
  • 有可能从这里继续前进吗

这里的问题是,您试图对
sn'
应用
n'
的假设,而n'在IH_n'中没有量化

只有当你的假设是:

IH_n' : forall n' lng : nat, lng > n' -> nth n' (update (tail1 lng) 0 1) 9 = 1
为了回答您的另一个问题,
?\u
是存在变量,如果您的假设适用,该变量将被替换,因为变量lng在假设中被量化

如果你想要一些关于如何证明这个目标的帮助,你能分享代码吗?
(尽管我认为你应该做
展开n,更新;simple
,看看你是否可以在某个地方应用你的假设。

假设
IH\n'
lng:nat
普遍量化。要将其应用于目标,Coq需要实例化它。
M1305
是它给
lng
的值起的名字我找不到

错误消息并不一定意味着不能统一
?M1305
(S lng)
。问题可能来自其他地方。例如,您的目标从
n(S n')
开始,而假设从
n'
开始。显然,
(S n')
n'
不能统一


假设目标是可证明的,您的第一步是确保它以
nth n'
开头。为此,您需要
nth
的第二个参数的形式为
(cons foo bar)

卢西恩,谢谢你的回复。这是我到目前为止所拥有的:x80.org/collacoq/bimaxobehu.coq tail1生成011…序列,我的初衷是证明每个项目都是1跟随领先的0。经过一些努力,我决定更新序列,使其全部为1,但是,我仍然无法解决它,这可能不是一件容易的事情是的,如果能得到进一步的帮助,我将不胜感激。
IH_n' : forall n' lng : nat, lng > n' -> nth n' (update (tail1 lng) 0 1) 9 = 1