# HG changeset patch # User paulson # Date 1504129904 -3600 # Node ID ad0cefe1e9a9cdfec1dab066a351c74a69cc6018 # Parent beb48215cda765ef8cd92e596c230c0f1563433b# Parent 8f12f7e0d99702bb7e65a773206aaeb9c528df13 merged diff -r beb48215cda7 -r ad0cefe1e9a9 src/HOL/Analysis/Henstock_Kurzweil_Integration.thy --- a/src/HOL/Analysis/Henstock_Kurzweil_Integration.thy Wed Aug 30 23:36:21 2017 +0200 +++ b/src/HOL/Analysis/Henstock_Kurzweil_Integration.thy Wed Aug 30 22:51:44 2017 +0100 @@ -685,10 +685,10 @@ unfolding integral_linear[OF assms(1) bounded_linear_inner_left,unfolded o_def] .. lemma has_integral_sum: - assumes "finite t" - and "\a\t. ((f a) has_integral (i a)) S" - shows "((\x. sum (\a. f a x) t) has_integral (sum i t)) S" - using assms(1) subset_refl[of t] + assumes "finite T" + and "\a. a \ T \ ((f a) has_integral (i a)) S" + shows "((\x. sum (\a. f a x) T) has_integral (sum i T)) S" + using assms(1) subset_refl[of T] proof (induct rule: finite_subset_induct) case empty then show ?case by auto @@ -2328,9 +2328,9 @@ using assms by (induct s) auto lemma negligible_Union[intro]: - assumes "finite s" - and "\t\s. negligible t" - shows "negligible(\s)" + assumes "finite \" + and "\t. t \ \ \ negligible t" + shows "negligible(\\)" using assms by induct auto lemma negligible: @@ -5123,43 +5123,42 @@ lemma has_integral_Union: fixes f :: "'n::euclidean_space \ 'a::banach" - assumes "finite t" - and "\s\t. (f has_integral (i s)) s" - and "\s\t. \s'\t. s \ s' \ negligible (s \ s')" - shows "(f has_integral (sum i t)) (\t)" + assumes \: "finite \" + and int: "\S. S \ \ \ (f has_integral (i S)) S" + and neg: "\S S'. \S \ \; S' \ \; S \ S'\ \ negligible (S \ S')" + shows "(f has_integral (sum i \)) (\\)" proof - - note * = has_integral_restrict_UNIV[symmetric, of f] - have **: "negligible (\((\(a,b). a \ b) ` {(a,b). a \ t \ b \ {y. y \ t \ a \ y}}))" - apply (rule negligible_Union) - apply (rule finite_imageI) - apply (rule finite_subset[of _ "t \ t"]) - defer - apply (rule finite_cartesian_product[OF assms(1,1)]) - using assms(3) - apply auto - done - note assms(2)[unfolded *] - note has_integral_sum[OF assms(1) this] + let ?\ = "((\(a,b). a \ b) ` {(a,b). a \ \ \ b \ {y. y \ \ \ a \ y}})" + have "((\x. if x \ \\ then f x else 0) has_integral sum i \) UNIV" + proof (rule has_integral_spike) + show "negligible (\?\)" + proof (rule negligible_Union) + have "finite (\ \ \)" + by (simp add: \) + moreover have "{(a, b). a \ \ \ b \ {y \ \. a \ y}} \ \ \ \" + by auto + ultimately show "finite ?\" + by (blast intro: finite_subset[of _ "\ \ \"]) + show "\t. t \ ?\ \ negligible t" + using neg by auto + qed + next + show "(if x \ \\ then f x else 0) = (\A\\. if x \ A then f x else 0)" + if "x \ UNIV - (\?\)" for x + proof clarsimp + fix S assume "S \ \" "x \ S" + moreover then have "\b\\. x \ b \ b = S" + using that by blast + ultimately show "f x = (\A\\. if x \ A then f x else 0)" + by (simp add: sum.delta[OF \]) + qed + next + show "((\x. \A\\. if x \ A then f x else 0) has_integral (\A\\. i A)) UNIV" + apply (rule has_integral_sum [OF \]) + using int by (simp add: has_integral_restrict_UNIV) + qed then show ?thesis - unfolding * - apply - - apply (rule has_integral_spike[OF **]) - defer - apply assumption - apply safe - proof goal_cases - case prems: (1 x) - then show ?case - proof (cases "x \ \t") - case True - then obtain s where "s \ t" "x \ s" - by blast - moreover then have "\b\t. x \ b \ b = s" - using prems(3) by blast - ultimately show ?thesis - by (simp add: sum.delta[OF assms(1)]) - qed auto - qed + using has_integral_restrict_UNIV by blast qed @@ -5167,61 +5166,54 @@ lemma has_integral_combine_division: fixes f :: "'n::euclidean_space \ 'a::banach" - assumes "d division_of S" - and "\k. k \ d \ (f has_integral (i k)) k" - shows "(f has_integral (sum i d)) S" + assumes "\ division_of S" + and "\k. k \ \ \ (f has_integral (i k)) k" + shows "(f has_integral (sum i \)) S" proof - - note d = division_ofD[OF assms(1)] - have neg: "negligible (S \ s')" if "S \ d" "s' \ d" "S \ s'" for S s' + note \ = division_ofD[OF assms(1)] + have neg: "negligible (S \ s')" if "S \ \" "s' \ \" "S \ s'" for S s' proof - - obtain a c b d where obt: "S = cbox a b" "s' = cbox c d" - by (meson \S \ d\ \s' \ d\ d(4)) - from d(5)[OF that] show ?thesis + obtain a c b \ where obt: "S = cbox a b" "s' = cbox c \" + by (meson \S \ \\ \s' \ \\ \(4)) + from \(5)[OF that] show ?thesis unfolding obt interior_cbox by (metis (no_types, lifting) Diff_empty Int_interval box_Int_box negligible_frontier_interval) qed show ?thesis - unfolding d(6)[symmetric] - by (auto intro: d neg assms has_integral_Union) + unfolding \(6)[symmetric] + by (auto intro: \ neg assms has_integral_Union) qed lemma integral_combine_division_bottomup: fixes f :: "'n::euclidean_space \ 'a::banach" - assumes "d division_of S" - and "\k. k \ d \ f integrable_on k" - shows "integral S f = sum (\i. integral i f) d" + assumes "\ division_of S" "\k. k \ \ \ f integrable_on k" + shows "integral S f = sum (\i. integral i f) \" apply (rule integral_unique) - apply (rule has_integral_combine_division[OF assms(1)]) - using assms(2) - unfolding has_integral_integral - apply assumption - done + by (meson assms has_integral_combine_division has_integral_integrable_integral) lemma has_integral_combine_division_topdown: fixes f :: "'n::euclidean_space \ 'a::banach" - assumes "f integrable_on S" - and "d division_of k" - and "k \ S" - shows "(f has_integral (sum (\i. integral i f) d)) k" - apply (rule has_integral_combine_division[OF assms(2)]) - unfolding has_integral_integral[symmetric] -proof goal_cases - case (1 k) - from division_ofD(2,4)[OF assms(2) this] - show ?case - apply safe - apply (rule integrable_on_subcbox) - apply (rule assms) - using assms(3) - apply auto - done + assumes f: "f integrable_on S" + and \: "\ division_of K" + and "K \ S" + shows "(f has_integral (sum (\i. integral i f) \)) K" +proof - + have "f integrable_on L" if "L \ \" for L + proof - + have "L \ S" + using \K \ S\ \ that by blast + then show "f integrable_on L" + using that by (metis (no_types) f \ division_ofD(4) integrable_on_subcbox) + qed + then show ?thesis + by (meson \ has_integral_combine_division has_integral_integrable_integral) qed lemma integral_combine_division_topdown: fixes f :: "'n::euclidean_space \ 'a::banach" assumes "f integrable_on S" - and "d division_of S" - shows "integral S f = sum (\i. integral i f) d" + and "\ division_of S" + shows "integral S f = sum (\i. integral i f) \" apply (rule integral_unique) apply (rule has_integral_combine_division_topdown) using assms @@ -5230,30 +5222,27 @@ lemma integrable_combine_division: fixes f :: "'n::euclidean_space \ 'a::banach" - assumes "d division_of S" - and "\i\d. f integrable_on i" + assumes \: "\ division_of S" + and f: "\i. i \ \ \ f integrable_on i" shows "f integrable_on S" - using assms(2) - unfolding integrable_on_def - by (metis has_integral_combine_division[OF assms(1)]) + using f unfolding integrable_on_def by (metis has_integral_combine_division[OF \]) lemma integrable_on_subdivision: fixes f :: "'n::euclidean_space \ 'a::banach" - assumes "d division_of i" - and "f integrable_on S" + assumes \: "\ division_of i" + and f: "f integrable_on S" and "i \ S" shows "f integrable_on i" - apply (rule integrable_combine_division assms)+ - apply safe -proof goal_cases - case 1 - note division_ofD(2,4)[OF assms(1) this] - then show ?case - apply safe - apply (rule integrable_on_subcbox[OF assms(2)]) - using assms(3) - apply auto - done +proof - + have "f integrable_on i" if "i \ \" for i +proof - + have "i \ S" + using assms that by auto + then show "f integrable_on i" + using that by (metis (no_types) \ f division_ofD(4) integrable_on_subcbox) +qed + then show ?thesis + using \ integrable_combine_division by blast qed @@ -5294,16 +5283,14 @@ lemma has_integral_combine_tagged_division_topdown: fixes f :: "'n::euclidean_space \ 'a::banach" - assumes "f integrable_on cbox a b" - and "p tagged_division_of (cbox a b)" - shows "(f has_integral (sum (\(x,k). integral k f) p)) (cbox a b)" - apply (rule has_integral_combine_tagged_division[OF assms(2)]) - apply safe -proof goal_cases - case 1 - note tagged_division_ofD(3-4)[OF assms(2) this] - then show ?case - using integrable_subinterval[OF assms(1)] by blast + assumes f: "f integrable_on cbox a b" + and p: "p tagged_division_of (cbox a b)" + shows "(f has_integral (sum (\(x,K). integral K f) p)) (cbox a b)" +proof - + have "(f has_integral integral K f) K" if "(x,K) \ p" for x K + by (metis assms integrable_integral integrable_on_subcbox tagged_division_ofD(3,4) that) + then show ?thesis + by (metis assms case_prodI2 has_integral_integrable_integral integral_combine_tagged_division_bottomup) qed lemma integral_combine_tagged_division_topdown: @@ -5311,10 +5298,8 @@ assumes "f integrable_on cbox a b" and "p tagged_division_of (cbox a b)" shows "integral (cbox a b) f = sum (\(x,k). integral k f) p" - apply (rule integral_unique) - apply (rule has_integral_combine_tagged_division_topdown) - using assms - apply auto + apply (rule integral_unique [OF has_integral_combine_tagged_division_topdown]) + using assms apply auto done