是否有关于应用ssreflect策略/标准的顺序的约定?

时间:2015-12-30 00:20:36

标签: coq coq-tactic ssreflect

我试图了解如何结合ssreflect策略"分解" (或者它们如何组成首先)。我遇到的一个问题是要理解这些问题的顺序和相关性。

有时,我觉得订单是从右到左。例如

apply : AiB.

似乎相当于

move : AiB; apply. 

忽略无操作move,就像我们按顺序将功能应用于AiB一样,apply : AiB.可以被视为apply (: AiB).。也就是说,我们首先将AiB移动到目标中,然后使用apply在目标上调用AiB

然而,我在其他场合感到困惑:

case: (EM (P y)) => // notPy.

根据tutorial,此问题对(EM (P y))进行了案例分析,然后//尝试解决琐碎的子目标。然后?? move =>将其余的内容介绍到上下文中?这里的运营顺序是什么?

EM_(EM (P y)),是(move=> notPy (// ( case (:EM_) ) ) ) ?? 我是否正确地阅读了这个"正确的顺序"策略应用?

订单在notPy附近有点扭曲,一般不一致。有没有办法在合法的ssreflect中从右到左编写

1 个答案:

答案 0 :(得分:2)

我建议您阅读手册以获取更多详细信息。 https://hal.inria.fr/inria-00258384

在你的例子中,回想一下移动总是一个无操作,所以它“融合”。因此,对于冒号,它会在左侧融合。

move: H; case <=> case: H

=>融合在右边:

case: H; move => U <=> case: H => U.

因此,对于您的特定示例,

case: (EM (P y)) => // notPy.

可以被视为

move: (EM (P y)); case; move=> // notPy.

问候!