Coq 如何延迟lambda评估,以便替换lambda

Coq 如何延迟lambda评估,以便替换lambda,coq,Coq,我声明两个lambda是相同的: G : (fun s' : S => x = s') = (fun s' : S => y = s') 我想用这个来证明x=y。我的想法很简单,用(fun s):s=>x=s')y替换该语句,用G替换一个lambda,减少到y=y,利润。我的问题是在第一步中,我找不到任何方法来设置一个包含一个lambda应用程序的语句,Coq不会立即减少到x=y。我希望未应用的lambda“停留”片刻,以便有机会应用G 这看起来应该很容易,只是无法理解。事实上,将

我声明两个lambda是相同的:

G : (fun s' : S => x = s') = (fun s' : S => y = s')
我想用这个来证明
x=y
。我的想法很简单,用
(fun s):s=>x=s')y
替换该语句,用
G
替换一个lambda,减少到
y=y
,利润。我的问题是在第一步中,我找不到任何方法来设置一个包含一个lambda应用程序的语句,Coq不会立即减少到
x=y
。我希望未应用的lambda“停留”片刻,以便有机会应用
G

这看起来应该很容易,只是无法理解。

事实上,
将(x=y)替换为(fun s):s=>x=s')y
并没有给出任何有用的结论,因为结论被简化了。但这不是
change(x=y)和(fun s':s=>x=s')y的情况,您可以在这里使用它们来做您想做的事情

然而,最简单的方法可能是模式y
,它直接将结论转换成适当的形式。

事实上,
将(x=y)替换为(fun s):s=>x=s')y
不会给出任何有用的结论,因为结论是简化的。但这不是
change(x=y)和(fun s':s=>x=s')y的情况,您可以在这里使用它们来做您想做的事情

然而,最简单的方法可能是
模式y
,它直接将结论转换为适当的形式