有没有一种方法可以命名和引用 Isabelle 应用脚本中的假设?
Is there a way to name and refer to a assumption in Isabelle apply-scripts?
Isabelle (2021) 中是否有任何方法可以参考旧应用样式证明中的假设?
特别是,我有兴趣在 OF
运算符中使用假设作为事实,这样我就可以(假设):
apply(rule R[OF assm1 assm4])
,其中assm1
和assm4
应该是指当前证明状态下的第一个和第四个假设。
通常,我可以安排当前目标的假设,使 R[OF assm1 assm4]
与子目标相同。但是,我无法完成证明,因为我不知道如何引用 assm1 assm4
等。似乎只允许使用全局定理名称 OF
.
我什至尝试在假设上使用 subgoal_tac
方法,但它似乎没有为事实命名的选项。
最后,我不得不使用自动脚本,例如simp
,对于如此明显的事情来说,这有点不透明。顺便说一句,这是出于学习目的。我尝试设置 simp_trace
,但仍然无法在不使用 simp
.
的情况下复制效果
此外,
如果没有办法引用假设,这是战术的局限还是自然演绎的根本局限?(即[=14的重写风格是=] 与自然演绎不兼容?)
Isar 的重点是你可以命名假设...
第一个低级解决方案是使用 drule
(或 frule
以保持假设)。
这是一个例子:
lemma
assumes ‹⋀x y. P x ⟹ Q y ⟹ R z› ‹P x› ‹Q y›
shows ‹R z›
using assms(2-) apply -
apply (drule assms(1))
apply assumption
apply assumption
done
查看 Chapter 5 了解有关 destruction/elimination/intro 规则的详细信息。
第二种解法是subgoal
:
lemma
assumes ‹⋀x y. P x ⟹ Q y ⟹ R z› ‹P x› ‹Q y›
shows ‹R z›
using assms(2-) apply -
subgoal premises p
by (rule assms(1)[OF p])
done
但是如果你有很深的嵌套,这会产生难以阅读的证据。
第三个也是最好的解决方案是使用 Isar 证明…
这是一个完全避免使用名称的版本:
lemma
assumes ‹⋀x y. P x ⟹ Q y ⟹ R z› ‹P x› ‹Q y›
shows ‹R z›
using assms apply -
apply (elim meta_allE[of _ x])
apply (elim meta_allE[of _ y])
apply (drule cut_rl)
apply assumption
apply (drule cut_rl)
apply assumption
apply assumption
done
你可以看到这有多丑陋以及为什么你应该避免它。
Isabelle (2021) 中是否有任何方法可以参考旧应用样式证明中的假设?
特别是,我有兴趣在 OF
运算符中使用假设作为事实,这样我就可以(假设):
apply(rule R[OF assm1 assm4])
,其中assm1
和assm4
应该是指当前证明状态下的第一个和第四个假设。
通常,我可以安排当前目标的假设,使 R[OF assm1 assm4]
与子目标相同。但是,我无法完成证明,因为我不知道如何引用 assm1 assm4
等。似乎只允许使用全局定理名称 OF
.
我什至尝试在假设上使用 subgoal_tac
方法,但它似乎没有为事实命名的选项。
最后,我不得不使用自动脚本,例如simp
,对于如此明显的事情来说,这有点不透明。顺便说一句,这是出于学习目的。我尝试设置 simp_trace
,但仍然无法在不使用 simp
.
此外,
如果没有办法引用假设,这是战术的局限还是自然演绎的根本局限?(即[=14的重写风格是=] 与自然演绎不兼容?)
Isar 的重点是你可以命名假设...
第一个低级解决方案是使用 drule
(或 frule
以保持假设)。
这是一个例子:
lemma
assumes ‹⋀x y. P x ⟹ Q y ⟹ R z› ‹P x› ‹Q y›
shows ‹R z›
using assms(2-) apply -
apply (drule assms(1))
apply assumption
apply assumption
done
查看 Chapter 5 了解有关 destruction/elimination/intro 规则的详细信息。
第二种解法是subgoal
:
lemma
assumes ‹⋀x y. P x ⟹ Q y ⟹ R z› ‹P x› ‹Q y›
shows ‹R z›
using assms(2-) apply -
subgoal premises p
by (rule assms(1)[OF p])
done
但是如果你有很深的嵌套,这会产生难以阅读的证据。
第三个也是最好的解决方案是使用 Isar 证明…
这是一个完全避免使用名称的版本:
lemma
assumes ‹⋀x y. P x ⟹ Q y ⟹ R z› ‹P x› ‹Q y›
shows ‹R z›
using assms apply -
apply (elim meta_allE[of _ x])
apply (elim meta_allE[of _ y])
apply (drule cut_rl)
apply assumption
apply (drule cut_rl)
apply assumption
apply assumption
done
你可以看到这有多丑陋以及为什么你应该避免它。