有時,當我在寫申請風格的證明,我就想辦法修改論證方法foo
到應用的方法當且僅當它解決了當前的目標
在第一次嘗試
foo
目標。如果它解決了這個目標,好的;如果 沒有解決問題,則恢復到原始狀態並失敗。
這在下面的代碼上來:
qed (subst fibs.simps, (subst fib.simps)?, simp add: nth_zipWith nth_tail)+
一些變化後進一步上漲,調用simp
就不能完全解決一個目標多提了,那麼這將循環。如果我可以指定類似
qed (solve_goal(subst fibs.simps, (subst fib.simps)?, simp add: nth_zipWith nth_tail))+
或(替代建議synatx)
qed ((subst fibs.simps, (subst fib.simps)?, simp add: nth_zipWith nth_tail)!)+
或(甚至更好的語法)
qed ((subst fibs.simps, (subst fib.simps)?, simp add: nth_zipWith nth_tail)[1!])+
它會停在第一個目標是這個劇本無法解決。
我想你'fibs.simps'或'fib.simps'觸發循環行爲(可能是由於一般的左側和如果在右側)?通常可以用條件規則來替換它們。 – 2013-03-08 09:42:57
我提交了一個[補丁實現這個](https://mailmanbroy.informatik.tu-muenchen.de/pipermail/isabelle-dev/2013-March/003911.html),讓我們看看會發生什麼。 – 2013-03-08 12:48:58
@Joachim Breitner:就我個人而言,我並不認爲在一個結構化證明(如你的例子)中這樣的怪物屬於「qed」;)。我總是希望在相應的「證明」/「qed」中明確地設置另一個子證明。但是,你正在談論'應用'腳本,對他們我完全同意。 (也許你可以把你的例子中的qed變成'apply'?) – chris 2013-03-15 05:58:22