在应用样式中将变量放入目标中

时间:2013-03-11 06:14:43

标签: isabelle

最近学习了how to drop an unwanted premise in an apply-style proof,我现在想知道如何删除不需要的变量。也就是说,假设我有目标

1. !!x y z. A ⟹ B ⟹ C

其中y未显示在ABC中。如何将其转换为以下内容?

1. !!x z. A ⟹ B ⟹ C

2 个答案:

答案 0 :(得分:3)

triv_forall_equality确实是剥离冗余参数的纯规则。作为ML战术,还有prune_params_tac这样做,它适用于所有子目标。请注意,后者未作为Isar证明方法公开,因为在实践中几乎不需要它:simpauto等工具默认已包含它。

请注意,通过(simp only: triv_forall_equality)的方法在许多情况下都有效,但也有一个障碍:Isabelle / HOL中的only修饰符使用给定的simp规则比“仅”更多。它包括算术求解器之类的东西,它可能会在某些情况下引起惊讶或混淆。

要在Isar方法语言中精确模仿prune_params_tac,您可以使用(unfold triv_forall_equality),尽管存在一个微小的概念障碍:使用任意重写而不是仅仅插入方程c = t只是历史事故。

答案 1 :(得分:2)

简单:

apply simp

会做到这一点。如果您不想对目标状态执行任何其他转换,您可以尝试:

apply (simp only: triv_forall_equality)

将删除不必要的元量词,但不会修改目标状态。