在应用样式中将目标放在目标中

cor*_*rny 6 isabelle

让我们假设我想要显示以下引理

lemma "? A; B; C ? ? D"
Run Code Online (Sandbox Code Playgroud)

我得到了目标

1. A ? B ? C ? D
Run Code Online (Sandbox Code Playgroud)

但是,我不需要B.我怎样才能将目标转移到类似的东西上

1. A ? C ? D
Run Code Online (Sandbox Code Playgroud)

我不想改变原始lemma陈述,只是改变申请风格的当前目标.

Man*_*erl 6

你想要的是什么apply (thin_tac B).然而,上次我这样做时,彼得拉姆米奇喊道:"天啊,你为什么要这样做!" 厌恶并重写我的证据,以摆脱thin_tac.因此,使用这种策略似乎不再受到鼓励.

  • 注意你也可以在`thin_tac`中使用一个模式:例如,`apply(thin_tac"?x∧?y")`会丢弃前提`(1 + 1 = 2)∧(2 + 2 = 4)` .这有助于减少校对脚本中的输入/复制数量. (3认同)

Mak*_*ius 5

通常最好避免在目标状态下不需要的东西,而不是以后删除它.您制定证明问题的方式会影响您解决问题的方式.

这对于结构化证明尤其重要:您对那些应该参与证明的下一步的事实给予积极的反对,而不是消极地压制其中的一些.

像这样:

from `A` and `C` have D ...
Run Code Online (Sandbox Code Playgroud)

告知哪些事实与证据相关已经是可读性的开始.

遵循该样式,您的初始问题将如下所示:

lemma
  assumes A and B and C 
  shows D
proof -
  from `A` and `C` show D sorry
qed
Run Code Online (Sandbox Code Playgroud)

如果ABCD是大的命题,或者像这样减少详细程度:

lemma
  assumes a: A and b: B and c: C 
  shows D
proof -
  from a c show ?thesis sorry
qed
Run Code Online (Sandbox Code Playgroud)

  • 如果你坚持使用一个大的应用程序来制作证据,那就很难了.但为什么这样呢?您可以轻松地在适当的Isar中创建外部结构,并且仅在叶位置应用脚本时降级(如果有的话). (3认同)