有没有可能;“免费”;在Isabelle中使用策略的顶级通用量化变量?

有没有可能;“免费”;在Isabelle中使用策略的顶级通用量化变量?,isabelle,Isabelle,简言之,我想从这一点出发: proof (prove) goal (1 subgoal): 1. ⋀ myVar . somePredicate myVar 为此: proof (prove) goal (1 subgoal): 1. somePredicate myVar 通过使用战术。我能找到的唯一解决方案是编写一个新的引理,例如: lemma myPredicateHolds_aux : "somePredicate myVar" sorry 然后是原始的⋀

简言之,我想从这一点出发:

 proof (prove)
 goal (1 subgoal):
  1. ⋀ myVar . somePredicate myVar
为此:

 proof (prove)
 goal (1 subgoal):
  1. somePredicate myVar
通过使用战术。我能找到的唯一解决方案是编写一个新的
引理
,例如:

 lemma myPredicateHolds_aux : "somePredicate myVar"
   sorry
然后是原始的
⋀ 迈瓦尔。某些谓词myVar
通常可以通过以下方式解决:

 using myPredicateHolds_aux by blast
但是为了方便起见,我想知道是否有更好的方法(使用战术),因为如果属性非常复杂,
blast
可能会失败。

证明(prove)表明您正在编写证明脚本,在这种情况下,您可以为myVar使用
子目标。我认为,“isar参考”手册对此做了更多说明(尽管可能有点密集)

你也可以,而且我相信这通常是做这件事的“首选”方式,进入结构化Isar验证模式并使用
fix

proof -
  fix myVar
  show "somePredicate myVar"
  proof ...

类似于
(appliy meta_allI)
?模糊的回忆。
meta\u allI
的唯一定义是:
lemma meta\u allI:∀ x、 PX⟹ (⋀x、 P x)
然后应用它会给我:
⋀迈瓦尔。∀迈瑟瓦。有些谓词myOtherVar
几乎如此,但仍然使用其他类型的forall
,所以它也不是一个自由变量。谢谢,myVar的子目标正是我想要的。