将归纳项的值添加到上下文的 Coq 策略

Coq tactic that adds the value of an inductive term to the context

只是举一个关于这个问题的简单例子,我将 运行 放入其中,假设我想证明 forall f : nat -> bool, exists i j, i<>j /\ f i = f j. 显而易见的事情是检查 f 0, f 1, f 2, 的值并继续因此。但是,如果我简单地说 destruct (f 0),Coq 不会修改目标,因为 f 0 不会作为子项出现。因此,我没有关于 f 0 当前所取值的信息。理想情况下,我希望 Coq 在上下文中添加一个 witness H : f 0 = false,这样我就可以跟踪它。

为了解决这些问题,我一直在做的是证明一个辅助引理bool_destruct : forall b : bool, b = false \/ b = true。现在,如果我说 destruct (bool_destruct (f 0)) Coq 会将所需的 H 添加到上下文中。自然地,当您必须为每种归纳类型证明这种引理时,这很乏味。因此,我想知道是否有处理这类情况的好策略。

destruct 策略已经支持你想要的:

destruct (f 0) eqn:f_is0.

你使用 bool_destruct 的想法并不像你想象的那么糟糕,例如,类似的想法加上 case 策略的模式泛化特征用于 math-comp提供自定义破坏视图。