Isabelle 使用所有传入事实的初始证明方法
假设我有一个目标Isabelle 使用所有传入事实的初始证明方法,isabelle,Isabelle,假设我有一个目标a⟹ B⟹ C⟹ G目标很难实现(由一些证明义务产生),并且在我的开发过程中多次出现(形状类似) 因此,我创建了一个引理foo,以简化形状a的目标⟹ C⟹ (P⟹ Q)⟹ G 我想能够写作 case goal42 thus ?case proof (rule foo) assume P show Q sorry qed 但是这失败了,因为foo不使用B。有效的是 case goal42 thus ?case apply - app
a⟹ B⟹ C⟹ G
目标很难实现(由一些证明义务产生),并且在我的开发过程中多次出现(形状类似)
因此,我创建了一个引理foo
,以简化形状a的目标⟹ C⟹ (P⟹ Q)⟹ G
我想能够写作
case goal42
thus ?case
proof (rule foo)
assume P
show Q sorry
qed
但是这失败了,因为foo
不使用B
。有效的是
case goal42
thus ?case
apply -
apply (erule (1) eqvt_lam_case)
proof-
assume P
show Q sorry
qed
但在应用脚本的中间打开代码<代码>证明/代码>被认为是不好的实践。< /P>
是否有一种类似于
规则
的方法更聪明地将传入的事实与规则的假设相匹配?理想情况下,它读取一个消耗foo
上的2个参数,以计算有多少个假设应该匹配。方法规则
对链接哪些事实非常挑剔。其前身intro
和elim
如果与事实不符,则不会抱怨<代码>简介
与它们完全不匹配elim…
大致对应于apply-apply(erule…+
),因此这可能与您要查找的大致相同。但我不知道有什么方法可以告诉elim匹配多个假设,而elim试图尽可能长时间地应用给定的规则,这可能不是您想要的
但是,由于您仍然为剩余目标打开了Isar证明,因此您可以重新排列证明并避免该问题
case goal42
{ assume P
show Q sorry }
with goal42 show ?case by-(erule (2) eqvt_lam_case)
我想补充一点,rule\u tac
的工作原理与rule
非常相似,但不要求假设以正确的顺序链接(但据我所知,也不使用它们)。我很少使用它,但有时它会派上用场。