如何在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转换,是因为。