Isabelle 中 apply 和 Isar 样式之间的等价性

Equivalence between apply and Isar styles in Isabelle

apply style 和 Isar-proofs 是等价物吗?这是我思考了一段时间的问题。当然,Isar 证明更具可读性、可维护性和易于编写(?),但我的问题是你是否可以用两种风格证明完全相同的东西。

举个例子,我目前正在做一个我需要离开的证明:

apply(simp split: prod.splits) 
using some_lemma by fastforce

这些命令在 apply 和 Isar 风格中的等效形式是什么?其实我对伊萨尔风格更感兴趣,因为我听说混合风格是不好的风格。

等效的 Isar 样式为:

have "P"
  using some_lemma by fastforce
then have "Q"
  by (simp split: prod.splits)

其中"P"表示第一个apply之后的中间目标状态。

一般来说,任何可证明的东西都可以在 Isar 和 apply 风格中证明;两者各有优缺点。

我个人使用的风格是尝试从外到内构建我的证明:在 Isar 外部(如归纳),如有必要,在内部(如简化、低级的东西)apply

总的来说,我建议您尽可能留在伊萨尔。