如何删除Isabelle中的重复子目标?

dav*_*idg 4 isabelle

在Isabelle中,偶尔会出现一些重复的子目标.例如,假设以下证明脚本:

lemma "a ? a"
  apply (rule conjI)
Run Code Online (Sandbox Code Playgroud)

目标:

proof (prove): step 1

goal (2 subgoals):
 1. a
 2. a    
Run Code Online (Sandbox Code Playgroud)

有没有办法在原地消除重复的子目标,所以不需要重复证明?

dav*_*idg 7

的ML-级别策略distinct_subgoals_tacPure/tactic.ML删除重复的子目标,并且可以被使用如下:

lemma "a ? a"
  apply (rule conjI)
  apply (tactic {* distinct_subgoals_tac *})
Run Code Online (Sandbox Code Playgroud)

离开:

proof (prove): step 2

goal (1 subgoal):
 1. a
Run Code Online (Sandbox Code Playgroud)

不幸的是,似乎没有一种方法没有进入ML世界.

  • 有什么不幸的呢?它看起来相当简洁.另请注意,在结构化校对中(与apply-scripts相反),您可以使用`by fact`来释放之前已经证明的目标(当然,您必须再次明确说明,但可以通过使用来缩短缩写或术语模式`(是"p1 ... pN")`). (3认同)