简单策略在COQ中起什么作用

简单策略在COQ中起什么作用,coq,Coq,我想知道simpl策略在COQ中是如何工作的。 假设以下引理: Parameter n:nat. Lemma test: S n + 0 = S (n+0). 现在,siml.策略产生 S (n + 0) = S (n + 0) 我的理解是,siml执行一系列 cbvβ、δ、物联网转换。 我试过了,但无法获得与siml相同的结果。基本问题是,在cbv增量扩展后,plus项继续扩展。如何将其反展开,即用扩展的定义重新替换plus名称? 或者,有人能告诉我如何通过手动执行更基本的策略来获得si

我想知道
simpl
策略在COQ中是如何工作的。
假设以下引理:

Parameter n:nat. 
Lemma test: S n + 0 = S (n+0).
现在,
siml.
策略产生

S (n + 0) = S (n + 0)
我的理解是,
siml
执行一系列
cbvβ、δ、物联网转换。
我试过了,但无法获得与
siml
相同的结果。基本问题是,在
cbv增量
扩展后,
plus
项继续扩展。如何将其反展开,即用扩展的定义重新替换
plus
名称?

或者,有人能告诉我如何通过手动执行更基本的策略来获得
siml
的效果吗

我认为仅使用
cbv
不可能模拟
siml
策略,因为确实
cbv delta
不允许您选择要替换的事件,而
siml
仅在导致物联网步骤时执行delta缩减。(参见)


因此,即使我们可以非正式地说,
siml
执行这样一系列的调用,它似乎可以使用比
cbv
策略公开的更低级别的方法来执行这些缩减。

好的,谢谢。你怎么能用一些基本的策略来模仿上面的说法呢?或者用另一种方式说,我从哪里获得更多信息,“siml”是如何工作的?siml是神奇的。如果您可以神奇地获得siml的结果,您可以通过
让x:=(神奇地获得siml的结果)在change x
中使用
change
对其进行“模拟”。事实上,siml是如此神奇,以至于开发人员在几年前实施了cbn,cbn应该是siml的一个更“表现良好”的版本,但仍然没有解决这两种策略之间的所有纠结和分歧。正如您所指出的,simpl的主要魔力在于定点重新折叠。它如何决定重新折叠哪个固定点是相当复杂的。我建议你爬进Coq的ML档案(Coq俱乐部)。这个问题不是琐碎的,而且是周期性出现的。你应该在那里找到你要找的东西。有人找到了这个链接吗?这里有一个部分解释: