Coq 为什么可以';统一目标和假设?
经过一些练习,我达到了以下证明状态: (tail1是nat列表模式生成器,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
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