最近学习了how to drop an unwanted premise in an apply-style proof,我现在想知道如何删除不需要的变量。也就是说,假设我有目标
1. !!x y z. A ⟹ B ⟹ C
其中y
未显示在A
,B
或C
中。如何将其转换为以下内容?
1. !!x z. A ⟹ B ⟹ C
答案 0 :(得分:3)
triv_forall_equality
确实是剥离冗余参数的纯规则。作为ML战术,还有prune_params_tac
这样做,它适用于所有子目标。请注意,后者未作为Isar证明方法公开,因为在实践中几乎不需要它:simp
和auto
等工具默认已包含它。
请注意,通过(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)
将删除不必要的元量词,但不会修改目标状态。