如何在Coq中结束此证明
我已设法将我的目标降低到如何在Coq中结束此证明,coq,proof,Coq,Proof,我已设法将我的目标降低到 (fun x0 : PSR => me (x x0)) = x 我知道,自反性会起作用,但出于教学方面的原因,我更愿意继续减少自反性 me是一个标识函数,因此展开me将其简化为 (fun x0 : PSR => x x0) = x 这只是一个匿名函数,它将函数x应用于一个伪变量x0,因此可以说两边都是函数x。如果可能的话,我想在两边达到相同的表达。您可以: Require Import FunctionalExtensionality. 然后: rew
(fun x0 : PSR => me (x x0)) = x
我知道,自反性
会起作用,但出于教学方面的原因,我更愿意继续减少自反性
me
是一个标识函数,因此展开me
将其简化为
(fun x0 : PSR => x x0) = x
这只是一个匿名函数,它将函数x
应用于一个伪变量x0
,因此可以说两边都是函数x
。如果可能的话,我想在两边达到相同的表达。您可以:
Require Import FunctionalExtensionality.
然后:
rewrite -> eta_expansion.
但是,这使用了依赖函数扩展性的公理。Coq对不同的缩减策略有策略,例如,
lazy
,cbv
,hnf
。您还可以指定要使用其中一些策略执行的缩减类型,例如,lazy delta
仅执行δ缩减,lazy beta zeta
仅执行βζ缩减。但是,您不能使用这些策略执行η-(eta-)还原,可能是因为η-可兑换性只是最近才添加到Coq的逻辑中。但是,你可以使用change
策略将你的目标(或假设)的结论更改为任何可转换的结论(或假设),change(x=x)
。对Coq来说还是很陌生的,见鬼,我对Haskell来说甚至有点陌生,但这一切都很有趣!不幸的是,目前我对缩减不太了解。β缩减将lambdas((λx,y)z
简化为y[x:=z]
),zeta缩减简化let表达式,delta缩减展开定义,iota缩减简化匹配模式,eta缩减简化λx,(f x)
到f
(假设x
不是在f
中自由出现)lazy
惰性地求值,cbv
(值调用)急切地求值(我认为),hnf
(头部范式)只在左侧(头部)求值。实际上,没有eta降低的原因,只有eta转换,是因为。