Я пытаюсь изучить Изабель, используя некоторые простые проблемы с реальным анализом. Ниже приведена моя попытка доказательства. Он проверяет до последнего.Идиоматические исчисления в Isabelle
theory l2
imports
"~~/src/HOL/Multivariate_Analysis/Multivariate_Analysis"
"~~/src/HOL/Multivariate_Analysis/Derivative"
"~~/src/HOL/Multivariate_Analysis/Integration"
"~~/src/HOL/Complex_Main"
"~~/src/HOL/Library/Inner_Product"
"~~/src/HOL/Real_Vector_Spaces"
begin
thm linear.scaleR
lemma line_fundamental_theorem_calculus:
fixes x y :: "'a :: real_inner"
and s :: "real"
and f :: "'a ⇒ real"
assumes "∀v. (f has_derivative (f' v)) (at v) "
shows "((λt. f(x+t*⇩R(y-x))) has_derivative (λt. t *⇩R ((f'(x + s*⇩R(y-x))) (y-x)))) (at s)"
proof -
let ?z = "(λt. x + t*⇩R(y-x)) :: real ⇒ 'a"
let ?dzdt = " (λt. t*⇩R(y-x))"
have c1: "f ∘ ?z = (λt. f(x+t*⇩R(y-x)))" by auto
have c2: "(f'(x + s*⇩R(y-x))) ∘ (λt. t*⇩R(y-x)) = (λt. (f'(x + s*⇩R(y-x))) (t*⇩R(y-x)))" by auto
have a1: "(f has_derivative (f' (x + s*⇩R(y-x)))) (at (x + s*⇩R(y-x))) " using assms by auto
have c3: "linear (f'(x + s*⇩R(y-x)))" using assms has_derivative_linear by auto
have c5: "(f'(x + s*⇩R(y-x))) (t*⇩R(y-x)) = t *⇩R ((f'(x + s*⇩R(y-x))) (y-x))" using c3 linear.scaleR by blast
have h1: "(?z has_derivative ?dzdt) (at s)" by (fastforce intro: derivative_eq_intros)
hence "((f ∘ ?z) has_derivative ((f'(x + s*⇩R(y-x))) ∘ ?dzdt)) (at s) " using assms a1 c1 by (fastforce intro: derivative_eq_intros)
hence "((f ∘ ?z) has_derivative ((f'(x + s*⇩R(y-x))) ∘ (λt. t*⇩R(y-x)))) (at s) " by auto
hence "((f ∘ ?z) has_derivative (λt. (f'(x + s*⇩R(y-x))) (t*⇩R(y-x)))) (at s) " by (auto simp: c2)
hence "((f ∘ ?z) has_derivative (λt. t *⇩R ((f'(x + s*⇩R(y-x))) (y-x)))) (at s) "
then show ?thesis
qed
end
У меня есть несколько вопросов:
- Как закончить доказательство? Мне кажется, что я могу просто применить c5 для доказательства последнего, но различные комбинации auto, simp и т. Д., Которые я пробовал, похоже, не делают этого.
- Что было бы более изобелой идоматической версией этого доказательства? Я ожидаю, что было бы проще с has_vector_derivative вместо has_derivative, но я больше заинтересован в том, чтобы сохранить его has_derivative, но реструктурировать. Примеры, приведенные в документации Isabelle, как представляется, делают более значительные шаги между заявлениями отсюда, есть ли способ сделать это здесь?
- Я обнаружил, что здесь мне нужно использовать производные_ик_интроны. Есть ли альтернатива быстрой инициативе fastforce: производная_eq_intros, которая будет быстрее? На данный момент это занимает несколько секунд.
- В целом, для такого рода доказательств, связанных с векторами и исчислением, существуют ли другие наборы правил, такие как производные_ик_интросы, о которых я должен знать? Что он использует по умолчанию для значений real_inner с simp? Могу ли я применить метод алгебры здесь?
- Кувалда была довольно бесполезной в этом доказательстве, мне нужно передать некоторые параметры или множества теорем, чтобы иметь возможность доказать некоторые из этих шагов здесь?
Приложение: поскольку Isabelle 2016-1, Multivariate_Analysis был переименован в Analysis, поэтому правильная команда line invocation будет '-l HOL-Analysis'. Это однократно создает изображение кучи HOL-Analysis и использует его в будущем, так что вам не придется перерабатывать все теории каждый раз, когда вы запускаете Isabelle. –