如何在 coqide 中逐步执行分号分隔的策略序列?

How to step through semicolons separated tactics sequence in coqide?

在coqide中构建证明时,我没有找到步进的方法

T1; T2; T3; ...; Tn.

一招一招。所以像上面的代码那样 构造 正确的证明变得非常困难。所以我的问题是

转发一个命令或转到光标不起作用。

t1 ; t2 与先 t1 然后 t2 不同。 如果你想这样做,你可以做 t1. t2.,这是逐步完成它们的方法。

分号有三个用途,表示 t1 ; t2:

  • 它在 t1;
  • 生成的所有子目标中应用 t2
  • 并且它允许回溯,如果 t2 失败,它会为 t1 尝试不同的 成功 并再次应用 t2关于生成的子目标;
  • 第三,这是写下代表一系列战术的战术的最简单方法。

如果你很幸运,这是第一种或第三种情况,那么你可以通过替换来修改脚本

t1 ; t2

来自

t1. all: t2.

使用目标选择器。 这样,第一步将允许您查看 t1 生成的目标,第二步将向您展示 t2 如何影响它们。如果您需要更高的精度,您还可以关注其中一个子目标以查看 t2 的实际效果。

当涉及回溯时,很难理解发生了什么,但我相信一开始是可以避免的,或者仅限于简单的情况。 例如,您可以说可以通过应用引入规则 (constructor) 来关闭目标,然后应该很容易。 如果多个intro-rules/constructors申请做

constructor. easy.

可能导致失败,而

constructor ; easy.

可能会成功。实际上,如果 easy 在第一个构造函数上失败,coq 将尝试第二个,依此类推。

为了回答您关于如何编写它们的问题,我想这可能是反复试验的结果,并且主要源于证明脚本的因式分解或自动化。 假设您有以下证明脚本:

split.
- constructor.
  + assumption.
  + eassumption.
- constructor. eassumption.

您可能想总结如下:

split ; constructor ; eassumption.

我个人不一定推荐它,因为它变得更难维护,也更难被其他用户阅读,因为无法单步执行的问题。 我会将其限制在证明是有原则的情况下(例如应用构造函数并完成它),并诉诸目标选择器进行因式分解。