Иногда, когда я пишу доказательства применить стиле, я хотел способ модифицировать метод доказательства 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' вызвать зацикливание поведения (возможно, из-за общую левую сторону, и если на Правая сторона)? Часто их можно заменить условными правилами. –
Я отправил [исправление, реализующее это] (https://mailmanbroy.informatik.tu-muenchen.de/pipermail/isabelle-dev/2013-March/003911.html), давайте посмотрим, что произойдет. –
@Joachim Breitner: Только для записи лично я не думаю, что в структурированном доказательстве (как ваш пример) такое чудовище принадлежит 'qed' ;;). Я всегда предпочел бы явно установить еще один под-доказательство в соответствующем 'proof' /' qed'. Однако вы говорите о скриптах «apply», и для них я полностью согласен. (Может быть, вы могли бы превратить 'qed' в ваш пример в' apply'?) – chris