1979 qed |
1979 qed |
1980 qed |
1980 qed |
1981 qed |
1981 qed |
1982 |
1982 |
1983 |
1983 |
1984 lemma negligible_standard_hyperplane[intro]: |
1984 proposition negligible_standard_hyperplane[intro]: |
1985 fixes k :: "'a::euclidean_space" |
1985 fixes k :: "'a::euclidean_space" |
1986 assumes k: "k \<in> Basis" |
1986 assumes k: "k \<in> Basis" |
1987 shows "negligible {x. x\<bullet>k = c}" |
1987 shows "negligible {x. x\<bullet>k = c}" |
1988 unfolding negligible_def has_integral |
1988 unfolding negligible_def has_integral |
1989 proof (clarify, goal_cases) |
1989 proof clarsimp |
1990 case (1 a b e) |
1990 fix a b and e::real assume "e > 0" |
1991 from this and k obtain d where d: "0 < d" "content (cbox a b \<inter> {x. \<bar>x \<bullet> k - c\<bar> \<le> d}) < e" |
1991 with k obtain d where d: "0 < d" "content (cbox a b \<inter> {x. \<bar>x \<bullet> k - c\<bar> \<le> d}) < e" |
1992 by (rule content_doublesplit) |
1992 by (metis content_doublesplit) |
1993 let ?i = "indicator {x::'a. x\<bullet>k = c} :: 'a\<Rightarrow>real" |
1993 let ?i = "indicator {x::'a. x\<bullet>k = c} :: 'a\<Rightarrow>real" |
1994 show ?case |
1994 show "\<exists>\<gamma>. gauge \<gamma> \<and> |
1995 apply (rule_tac x="\<lambda>x. ball x d" in exI) |
1995 (\<forall>\<D>. \<D> tagged_division_of cbox a b \<and> \<gamma> fine \<D> \<longrightarrow> |
1996 apply rule |
1996 \<bar>\<Sum>(x,K) \<in> \<D>. content K * ?i x\<bar> < e)" |
1997 apply (rule gauge_ball) |
1997 proof (intro exI, safe) |
1998 apply (rule d) |
1998 show "gauge (\<lambda>x. ball x d)" |
1999 proof (rule, rule) |
1999 using d(1) by blast |
2000 fix p |
2000 next |
2001 assume p: "p tagged_division_of (cbox a b) \<and> (\<lambda>x. ball x d) fine p" |
2001 fix \<D> |
2002 have *: "(\<Sum>(x, ka)\<in>p. content ka *\<^sub>R ?i x) = |
2002 assume p: "\<D> tagged_division_of (cbox a b)" "(\<lambda>x. ball x d) fine \<D>" |
2003 (\<Sum>(x, ka)\<in>p. content (ka \<inter> {x. \<bar>x\<bullet>k - c\<bar> \<le> d}) *\<^sub>R ?i x)" |
2003 have *: "(\<Sum>(x,K)\<in>\<D>. content K * ?i x) = (\<Sum>(x,K)\<in>\<D>. content (K \<inter> {x. \<bar>x\<bullet>k - c\<bar> \<le> d}) *\<^sub>R ?i x)" |
2004 apply (rule sum.cong) |
2004 apply (rule sum.cong [OF refl]) |
2005 apply (rule refl) |
|
2006 unfolding split_paired_all real_scaleR_def mult_cancel_right split_conv |
2005 unfolding split_paired_all real_scaleR_def mult_cancel_right split_conv |
2007 apply cases |
2006 apply cases |
2008 apply (rule disjI1) |
2007 apply (rule disjI1) |
2009 apply assumption |
2008 apply assumption |
2010 apply (rule disjI2) |
2009 apply (rule disjI2) |
2011 proof - |
2010 proof - |
2012 fix x l |
2011 fix x l |
2013 assume as: "(x, l) \<in> p" "?i x \<noteq> 0" |
2012 assume as: "(x, l) \<in> \<D>" "?i x \<noteq> 0" |
2014 then have xk: "x\<bullet>k = c" |
2013 then have xk: "x\<bullet>k = c" |
2015 unfolding indicator_def |
2014 by (simp add: indicator_def split: if_split_asm) |
2016 apply - |
|
2017 apply (rule ccontr) |
|
2018 apply auto |
|
2019 done |
|
2020 show "content l = content (l \<inter> {x. \<bar>x \<bullet> k - c\<bar> \<le> d})" |
2015 show "content l = content (l \<inter> {x. \<bar>x \<bullet> k - c\<bar> \<le> d})" |
2021 apply (rule arg_cong[where f=content]) |
2016 apply (rule arg_cong[where f=content]) |
2022 apply (rule set_eqI) |
2017 apply (rule set_eqI) |
2023 apply rule |
2018 apply rule |
2024 apply rule |
2019 apply rule |
2025 unfolding mem_Collect_eq |
2020 unfolding mem_Collect_eq |
2026 proof - |
2021 proof - |
2027 fix y |
2022 fix y |
2028 assume y: "y \<in> l" |
2023 assume y: "y \<in> l" |
2029 note p[THEN conjunct2,unfolded fine_def,rule_format,OF as(1),unfolded split_conv] |
2024 note p(2)[unfolded fine_def,rule_format,OF as(1),unfolded split_conv] |
2030 note this[unfolded subset_eq mem_ball dist_norm,rule_format,OF y] |
2025 note this[unfolded subset_eq mem_ball dist_norm,rule_format,OF y] |
2031 note le_less_trans[OF Basis_le_norm[OF k] this] |
2026 note le_less_trans[OF Basis_le_norm[OF k] this] |
2032 then show "\<bar>y \<bullet> k - c\<bar> \<le> d" |
2027 then show "\<bar>y \<bullet> k - c\<bar> \<le> d" |
2033 unfolding inner_simps xk by auto |
2028 unfolding inner_simps xk by auto |
2034 qed auto |
2029 qed auto |
2035 qed |
2030 qed |
2036 note p'= tagged_division_ofD[OF p[THEN conjunct1]] and p''=division_of_tagged_division[OF p[THEN conjunct1]] |
2031 note p'= tagged_division_ofD[OF p(1)] and p''=division_of_tagged_division[OF p(1)] |
2037 have "(\<Sum>(x, ka)\<in>p. content (ka \<inter> {x. \<bar>x \<bullet> k - c\<bar> \<le> d}) * indicator {x. x \<bullet> k = c} x) < e" |
2032 have "(\<Sum>(x,K)\<in>\<D>. content (K \<inter> {x. \<bar>x \<bullet> k - c\<bar> \<le> d}) * indicator {x. x \<bullet> k = c} x) < e" |
2038 proof - |
2033 proof - |
2039 have "(\<Sum>(x, ka)\<in>p. content (ka \<inter> {x. \<bar>x \<bullet> k - c\<bar> \<le> d}) * ?i x) \<le> |
2034 have "(\<Sum>(x,K)\<in>\<D>. content (K \<inter> {x. \<bar>x \<bullet> k - c\<bar> \<le> d}) * ?i x) \<le> |
2040 (\<Sum>(x, ka)\<in>p. content (ka \<inter> {x. \<bar>x \<bullet> k - c\<bar> \<le> d}))" |
2035 (\<Sum>(x,K)\<in>\<D>. content (K \<inter> {x. \<bar>x \<bullet> k - c\<bar> \<le> d}))" |
2041 apply (rule sum_mono) |
2036 apply (rule sum_mono) |
2042 unfolding split_paired_all split_conv |
2037 unfolding split_paired_all split_conv |
2043 apply (rule mult_right_le_one_le) |
2038 apply (rule mult_right_le_one_le) |
2044 apply (drule p'(4)) |
2039 apply (drule p'(4)) |
2045 apply (auto simp add:interval_doublesplit[OF k]) |
2040 apply (auto simp add:interval_doublesplit[OF k]) |
2046 done |
2041 done |
2047 also have "\<dots> < e" |
2042 also have "\<dots> < e" |
2048 proof (subst sum.over_tagged_division_lemma[OF p[THEN conjunct1]], goal_cases) |
2043 proof (subst sum.over_tagged_division_lemma[OF p(1)], goal_cases) |
2049 case prems: (1 u v) |
2044 case prems: (1 u v) |
2050 then have *: "content (cbox u v) = 0" |
2045 then have *: "content (cbox u v) = 0" |
2051 unfolding content_eq_0_interior by simp |
2046 unfolding content_eq_0_interior by simp |
2052 have "content (cbox u v \<inter> {x. \<bar>x \<bullet> k - c\<bar> \<le> d}) \<le> content (cbox u v)" |
2047 have "content (cbox u v \<inter> {x. \<bar>x \<bullet> k - c\<bar> \<le> d}) \<le> content (cbox u v)" |
2053 unfolding interval_doublesplit[OF k] |
2048 unfolding interval_doublesplit[OF k] |
2057 done |
2052 done |
2058 then show ?case |
2053 then show ?case |
2059 unfolding * interval_doublesplit[OF k] |
2054 unfolding * interval_doublesplit[OF k] |
2060 by (blast intro: antisym) |
2055 by (blast intro: antisym) |
2061 next |
2056 next |
2062 have "(\<Sum>l\<in>snd ` p. content (l \<inter> {x. \<bar>x \<bullet> k - c\<bar> \<le> d})) = |
2057 have "(\<Sum>l\<in>snd ` \<D>. content (l \<inter> {x. \<bar>x \<bullet> k - c\<bar> \<le> d})) = |
2063 sum content ((\<lambda>l. l \<inter> {x. \<bar>x \<bullet> k - c\<bar> \<le> d})`{l\<in>snd ` p. l \<inter> {x. \<bar>x \<bullet> k - c\<bar> \<le> d} \<noteq> {}})" |
2058 sum content ((\<lambda>l. l \<inter> {x. \<bar>x \<bullet> k - c\<bar> \<le> d})`{l\<in>snd ` \<D>. l \<inter> {x. \<bar>x \<bullet> k - c\<bar> \<le> d} \<noteq> {}})" |
2064 proof (subst (2) sum.reindex_nontrivial) |
2059 proof (subst (2) sum.reindex_nontrivial) |
2065 fix x y assume "x \<in> {l \<in> snd ` p. l \<inter> {x. \<bar>x \<bullet> k - c\<bar> \<le> d} \<noteq> {}}" "y \<in> {l \<in> snd ` p. l \<inter> {x. \<bar>x \<bullet> k - c\<bar> \<le> d} \<noteq> {}}" |
2060 fix x y assume "x \<in> {l \<in> snd ` \<D>. l \<inter> {x. \<bar>x \<bullet> k - c\<bar> \<le> d} \<noteq> {}}" "y \<in> {l \<in> snd ` \<D>. l \<inter> {x. \<bar>x \<bullet> k - c\<bar> \<le> d} \<noteq> {}}" |
2066 "x \<noteq> y" and eq: "x \<inter> {x. \<bar>x \<bullet> k - c\<bar> \<le> d} = y \<inter> {x. \<bar>x \<bullet> k - c\<bar> \<le> d}" |
2061 "x \<noteq> y" and eq: "x \<inter> {x. \<bar>x \<bullet> k - c\<bar> \<le> d} = y \<inter> {x. \<bar>x \<bullet> k - c\<bar> \<le> d}" |
2067 then obtain x' y' where "(x', x) \<in> p" "x \<inter> {x. \<bar>x \<bullet> k - c\<bar> \<le> d} \<noteq> {}" "(y', y) \<in> p" "y \<inter> {x. \<bar>x \<bullet> k - c\<bar> \<le> d} \<noteq> {}" |
2062 then obtain x' y' where "(x', x) \<in> \<D>" "x \<inter> {x. \<bar>x \<bullet> k - c\<bar> \<le> d} \<noteq> {}" "(y', y) \<in> \<D>" "y \<inter> {x. \<bar>x \<bullet> k - c\<bar> \<le> d} \<noteq> {}" |
2068 by (auto) |
2063 by (auto) |
2069 from p'(5)[OF \<open>(x', x) \<in> p\<close> \<open>(y', y) \<in> p\<close>] \<open>x \<noteq> y\<close> have "interior (x \<inter> y) = {}" |
2064 from p'(5)[OF \<open>(x', x) \<in> \<D>\<close> \<open>(y', y) \<in> \<D>\<close>] \<open>x \<noteq> y\<close> have "interior (x \<inter> y) = {}" |
2070 by auto |
2065 by auto |
2071 moreover have "interior ((x \<inter> {x. \<bar>x \<bullet> k - c\<bar> \<le> d}) \<inter> (y \<inter> {x. \<bar>x \<bullet> k - c\<bar> \<le> d})) \<subseteq> interior (x \<inter> y)" |
2066 moreover have "interior ((x \<inter> {x. \<bar>x \<bullet> k - c\<bar> \<le> d}) \<inter> (y \<inter> {x. \<bar>x \<bullet> k - c\<bar> \<le> d})) \<subseteq> interior (x \<inter> y)" |
2072 by (auto intro: interior_mono) |
2067 by (auto intro: interior_mono) |
2073 ultimately have "interior (x \<inter> {x. \<bar>x \<bullet> k - c\<bar> \<le> d}) = {}" |
2068 ultimately have "interior (x \<inter> {x. \<bar>x \<bullet> k - c\<bar> \<le> d}) = {}" |
2074 by (auto simp: eq) |
2069 by (auto simp: eq) |
2075 then show "content (x \<inter> {x. \<bar>x \<bullet> k - c\<bar> \<le> d}) = 0" |
2070 then show "content (x \<inter> {x. \<bar>x \<bullet> k - c\<bar> \<le> d}) = 0" |
2076 using p'(4)[OF \<open>(x', x) \<in> p\<close>] by (auto simp: interval_doublesplit[OF k] content_eq_0_interior simp del: interior_Int) |
2071 using p'(4)[OF \<open>(x', x) \<in> \<D>\<close>] by (auto simp: interval_doublesplit[OF k] content_eq_0_interior simp del: interior_Int) |
2077 qed (insert p'(1), auto intro!: sum.mono_neutral_right) |
2072 qed (insert p'(1), auto intro!: sum.mono_neutral_right) |
2078 also have "\<dots> \<le> norm (\<Sum>l\<in>(\<lambda>l. l \<inter> {x. \<bar>x \<bullet> k - c\<bar> \<le> d})`{l\<in>snd ` p. l \<inter> {x. \<bar>x \<bullet> k - c\<bar> \<le> d} \<noteq> {}}. content l *\<^sub>R 1::real)" |
2073 also have "\<dots> \<le> norm (\<Sum>l\<in>(\<lambda>l. l \<inter> {x. \<bar>x \<bullet> k - c\<bar> \<le> d})`{l\<in>snd ` \<D>. l \<inter> {x. \<bar>x \<bullet> k - c\<bar> \<le> d} \<noteq> {}}. content l *\<^sub>R 1::real)" |
2079 by simp |
2074 by simp |
2080 also have "\<dots> \<le> 1 * content (cbox a b \<inter> {x. \<bar>x \<bullet> k - c\<bar> \<le> d})" |
2075 also have "\<dots> \<le> 1 * content (cbox a b \<inter> {x. \<bar>x \<bullet> k - c\<bar> \<le> d})" |
2081 using division_doublesplit[OF p'' k, unfolded interval_doublesplit[OF k]] |
2076 using division_doublesplit[OF p'' k, unfolded interval_doublesplit[OF k]] |
2082 unfolding interval_doublesplit[OF k] by (intro dsum_bound) auto |
2077 unfolding interval_doublesplit[OF k] by (intro dsum_bound) auto |
2083 also have "\<dots> < e" |
2078 also have "\<dots> < e" |
2084 using d(2) by simp |
2079 using d(2) by simp |
2085 finally show "(\<Sum>ka\<in>snd ` p. content (ka \<inter> {x. \<bar>x \<bullet> k - c\<bar> \<le> d})) < e" . |
2080 finally show "(\<Sum>K\<in>snd ` \<D>. content (K \<inter> {x. \<bar>x \<bullet> k - c\<bar> \<le> d})) < e" . |
2086 qed |
2081 qed |
2087 finally show "(\<Sum>(x, ka)\<in>p. content (ka \<inter> {x. \<bar>x \<bullet> k - c\<bar> \<le> d}) * ?i x) < e" . |
2082 finally show "(\<Sum>(x, K)\<in>\<D>. content (K \<inter> {x. \<bar>x \<bullet> k - c\<bar> \<le> d}) * ?i x) < e" . |
2088 qed |
2083 qed |
2089 then show "norm ((\<Sum>(x, ka)\<in>p. content ka *\<^sub>R ?i x) - 0) < e" |
2084 then show "\<bar>\<Sum>(x, K)\<in>\<D>. content K * ?i x\<bar> < e" |
2090 unfolding * real_norm_def |
2085 unfolding * |
2091 apply (subst abs_of_nonneg) |
2086 apply (subst abs_of_nonneg) |
2092 using measure_nonneg by (force simp add: indicator_def intro: sum_nonneg)+ |
2087 using measure_nonneg |
|
2088 by (force simp add: indicator_def intro: sum_nonneg)+ |
2093 qed |
2089 qed |
2094 qed |
2090 qed |
2095 |
2091 |
2096 |
2092 |
2097 subsubsection \<open>Hence the main theorem about negligible sets.\<close> |
2093 subsubsection \<open>Hence the main theorem about negligible sets.\<close> |
2958 assumes "0 \<le> e" |
2954 assumes "0 \<le> e" |
2959 shows "operative conj True (\<lambda>i. f integrable_on i)" |
2955 shows "operative conj True (\<lambda>i. f integrable_on i)" |
2960 proof - |
2956 proof - |
2961 interpret comm_monoid conj True |
2957 interpret comm_monoid conj True |
2962 by standard auto |
2958 by standard auto |
|
2959 have 1: "\<And>a b. box a b = {} \<Longrightarrow> f integrable_on cbox a b" |
|
2960 by (simp add: content_eq_0_interior integrable_on_null) |
|
2961 have 2: "\<And>a b c k. |
|
2962 \<lbrakk>k \<in> Basis; |
|
2963 f integrable_on cbox a b \<inter> {x. x \<bullet> k \<le> c}; |
|
2964 f integrable_on cbox a b \<inter> {x. c \<le> x \<bullet> k}\<rbrakk> |
|
2965 \<Longrightarrow> f integrable_on cbox a b" |
|
2966 unfolding integrable_on_def by (auto intro!: has_integral_split) |
2963 show ?thesis |
2967 show ?thesis |
2964 apply standard |
2968 apply standard |
2965 apply safe |
2969 using 1 2 by blast+ |
2966 apply (subst integrable_on_def) |
|
2967 apply rule |
|
2968 apply (rule has_integral_null_eq[where i=0, THEN iffD2]) |
|
2969 apply (simp add: content_eq_0_interior) |
|
2970 apply rule |
|
2971 apply (rule, assumption, assumption)+ |
|
2972 unfolding integrable_on_def |
|
2973 apply (auto intro!: has_integral_split) |
|
2974 done |
|
2975 qed |
2970 qed |
2976 |
2971 |
2977 lemma integrable_subinterval: |
2972 lemma integrable_subinterval: |
2978 fixes f :: "'b::euclidean_space \<Rightarrow> 'a::banach" |
2973 fixes f :: "'b::euclidean_space \<Rightarrow> 'a::banach" |
2979 assumes "f integrable_on cbox a b" |
2974 assumes "f integrable_on cbox a b" |
4444 (is "?l = ?r") |
4430 (is "?l = ?r") |
4445 proof (cases "cbox c d = {}") |
4431 proof (cases "cbox c d = {}") |
4446 case False |
4432 case False |
4447 let ?g = "\<lambda>x. if x \<in> cbox c d then f x else 0" |
4433 let ?g = "\<lambda>x. if x \<in> cbox c d then f x else 0" |
4448 show ?thesis |
4434 show ?thesis |
4449 apply rule |
4435 proof |
4450 defer |
|
4451 apply (rule has_integral_restrict_closed_subinterval[OF _ assms]) |
|
4452 apply assumption |
|
4453 proof - |
|
4454 assume ?l |
4436 assume ?l |
4455 then have "?g integrable_on cbox c d" |
4437 then have "?g integrable_on cbox c d" |
4456 using assms has_integral_integrable integrable_subinterval by blast |
4438 using assms has_integral_integrable integrable_subinterval by blast |
4457 then have *: "f integrable_on cbox c d" |
4439 then have "f integrable_on cbox c d" |
4458 apply - |
4440 apply - |
4459 apply (rule integrable_eq) |
4441 apply (rule integrable_eq) |
4460 apply auto |
4442 apply auto |
4461 done |
4443 done |
4462 then have "i = integral (cbox c d) f" |
4444 moreover then have "i = integral (cbox c d) f" |
4463 apply - |
4445 by (meson \<open>((\<lambda>x. if x \<in> cbox c d then f x else 0) has_integral i) (cbox a b)\<close> assms has_integral_restrict_closed_subinterval has_integral_unique integrable_integral) |
4464 apply (rule has_integral_unique) |
4446 ultimately show ?r by auto |
4465 apply (rule \<open>?l\<close>) |
4447 next |
4466 apply (rule has_integral_restrict_closed_subinterval[OF _ assms]) |
4448 assume ?r then show ?l |
4467 apply auto |
4449 by (rule has_integral_restrict_closed_subinterval[OF _ assms]) |
4468 done |
|
4469 then show ?r |
|
4470 using * by auto |
|
4471 qed |
4450 qed |
4472 qed auto |
4451 qed auto |
4473 |
4452 |
4474 |
4453 |
4475 text \<open>Hence we can apply the limit process uniformly to all integrals.\<close> |
4454 text \<open>Hence we can apply the limit process uniformly to all integrals.\<close> |