2013-03-25 53 views
3

在伊莎貝爾,偶爾會有一個場景存在重複的子目標。例如,假設以下證明腳本:如何在Isabelle中刪除重複的子目標?

lemma "a ∧ a" 
    apply (rule conjI) 

與目標:

proof (prove): step 1 

goal (2 subgoals): 
1. a 
2. a  

有什麼辦法消除就地重複的子目標,所以證明無需重複?

回答

5

的ML級戰術distinct_subgoals_tacPure/tactic.ML刪除重複的子目標,並且可以按如下使用:

lemma "a ∧ a" 
    apply (rule conjI) 
    apply (tactic {* distinct_subgoals_tac *}) 

離開:

proof (prove): step 2 

goal (1 subgoal): 
1. a 

似乎沒有成爲一個方式,而不落入不幸的是,ML世界。

+2

有什麼不幸的呢?它看起來相當簡潔。還要注意,在結構化證明(與apply-scripts相反)中,您可以使用'by fact'來實現之前已經證明的目標(當然,您必須再次明確說明,但可以通過使用縮寫或術語模式'(是「p1 ... pN」)')。 – chris 2013-03-25 06:40:45

+0

向新人解釋「戰術」的語法是我「不幸」的意思。更一般地說,我知道爲重複的事實創建引理是可取的。但是,像Schirmer的['vcg'](http://afp.sourceforge.net/entries/Simpl.shtml)這樣的工具經常會讓一個人陷入一團糟的子目標中,人們寧願不要回避證明腳本。 – davidg 2013-03-26 00:05:43

0

我遇到了類似的行爲,應用於任何定理的subst方法的副作用,例如refl。然後apply (subst refl)確實刪除重複的子目標。

這不是一個錯誤,它是一個功能;-)。