在伊莎貝爾,偶爾會有一個場景存在重複的子目標。例如,假設以下證明腳本:如何在Isabelle中刪除重複的子目標?
lemma "a ∧ a"
apply (rule conjI)
與目標:
proof (prove): step 1
goal (2 subgoals):
1. a
2. a
有什麼辦法消除就地重複的子目標,所以證明無需重複?
在伊莎貝爾,偶爾會有一個場景存在重複的子目標。例如,假設以下證明腳本:如何在Isabelle中刪除重複的子目標?
lemma "a ∧ a"
apply (rule conjI)
與目標:
proof (prove): step 1
goal (2 subgoals):
1. a
2. a
有什麼辦法消除就地重複的子目標,所以證明無需重複?
的ML級戰術distinct_subgoals_tac
在Pure/tactic.ML
刪除重複的子目標,並且可以按如下使用:
lemma "a ∧ a"
apply (rule conjI)
apply (tactic {* distinct_subgoals_tac *})
離開:
proof (prove): step 2
goal (1 subgoal):
1. a
似乎沒有成爲一個方式,而不落入不幸的是,ML世界。
我遇到了類似的行爲,應用於任何定理的subst
方法的副作用,例如refl
。然後apply (subst refl)
確實刪除重複的子目標。
這不是一個錯誤,它是一個功能;-)。
有什麼不幸的呢?它看起來相當簡潔。還要注意,在結構化證明(與apply-scripts相反)中,您可以使用'by fact'來實現之前已經證明的目標(當然,您必須再次明確說明,但可以通過使用縮寫或術語模式'(是「p1 ... pN」)')。 – chris 2013-03-25 06:40:45
向新人解釋「戰術」的語法是我「不幸」的意思。更一般地說,我知道爲重複的事實創建引理是可取的。但是,像Schirmer的['vcg'](http://afp.sourceforge.net/entries/Simpl.shtml)這樣的工具經常會讓一個人陷入一團糟的子目標中,人們寧願不要回避證明腳本。 – davidg 2013-03-26 00:05:43