有没有可能;“免费”;在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的子目标正是我想要的。