src/HOL/Multivariate_Analysis/Integration.thy
changeset 60435 35c6e2daa397
parent 60428 5e9de4faef98
child 60440 3c6acb281c38
equal deleted inserted replaced
60434:b050b557dbbe 60435:35c6e2daa397
  3034   }
  3034   }
  3035 qed
  3035 qed
  3036 
  3036 
  3037 lemma has_integral_split:
  3037 lemma has_integral_split:
  3038   fixes f :: "'a::euclidean_space \<Rightarrow> 'b::real_normed_vector"
  3038   fixes f :: "'a::euclidean_space \<Rightarrow> 'b::real_normed_vector"
  3039   assumes "(f has_integral i) (cbox a b \<inter> {x. x\<bullet>k \<le> c})"
  3039   assumes fi: "(f has_integral i) (cbox a b \<inter> {x. x\<bullet>k \<le> c})"
  3040     and "(f has_integral j) (cbox a b \<inter> {x. x\<bullet>k \<ge> c})"
  3040       and fj: "(f has_integral j) (cbox a b \<inter> {x. x\<bullet>k \<ge> c})"
  3041     and k: "k \<in> Basis"
  3041       and k: "k \<in> Basis"
  3042   shows "(f has_integral (i + j)) (cbox a b)"
  3042   shows "(f has_integral (i + j)) (cbox a b)"
  3043 proof (unfold has_integral, rule, rule)
  3043 proof (unfold has_integral, rule, rule)
  3044   case goal1
  3044   case goal1
  3045   then have e: "e/2 > 0"
  3045   then have e: "e/2 > 0"
  3046     by auto
  3046     by auto
  3047   guess d1 using has_integralD[OF assms(1)[unfolded interval_split[OF k]] e] .
  3047     obtain d1 
  3048   note d1=this[unfolded interval_split[symmetric,OF k]]
  3048     where d1: "gauge d1"
  3049   guess d2 using has_integralD[OF assms(2)[unfolded interval_split[OF k]] e] .
  3049       and d1norm: 
  3050   note d2=this[unfolded interval_split[symmetric,OF k]]
  3050         "\<And>p. \<lbrakk>p tagged_division_of cbox a b \<inter> {x. x \<bullet> k \<le> c};
       
  3051                d1 fine p\<rbrakk> \<Longrightarrow> norm ((\<Sum>(x, k) \<in> p. content k *\<^sub>R f x) - i) < e / 2"
       
  3052        apply (rule has_integralD[OF fi[unfolded interval_split[OF k]] e])
       
  3053        apply (simp add: interval_split[symmetric] k)
       
  3054        done
       
  3055     obtain d2 
       
  3056     where d2: "gauge d2"
       
  3057       and d2norm: 
       
  3058         "\<And>p. \<lbrakk>p tagged_division_of cbox a b \<inter> {x. c \<le> x \<bullet> k};
       
  3059                d2 fine p\<rbrakk> \<Longrightarrow> norm ((\<Sum>(x, k) \<in> p. content k *\<^sub>R f x) - j) < e / 2"
       
  3060        apply (rule has_integralD[OF fj[unfolded interval_split[OF k]] e])
       
  3061        apply (simp add: interval_split[symmetric] k)
       
  3062        done
  3051   let ?d = "\<lambda>x. if x\<bullet>k = c then (d1 x \<inter> d2 x) else ball x (abs(x\<bullet>k - c)) \<inter> d1 x \<inter> d2 x"
  3063   let ?d = "\<lambda>x. if x\<bullet>k = c then (d1 x \<inter> d2 x) else ball x (abs(x\<bullet>k - c)) \<inter> d1 x \<inter> d2 x"
  3052   show ?case
  3064   show ?case
  3053     apply (rule_tac x="?d" in exI)
  3065     apply (rule_tac x="?d" in exI)
  3054     apply rule
  3066     apply rule
  3055     defer
  3067     defer
  3060     show "gauge ?d"
  3072     show "gauge ?d"
  3061       using d1(1) d2(1) unfolding gauge_def by auto
  3073       using d1(1) d2(1) unfolding gauge_def by auto
  3062     fix p
  3074     fix p
  3063     assume "p tagged_division_of (cbox a b)" "?d fine p"
  3075     assume "p tagged_division_of (cbox a b)" "?d fine p"
  3064     note p = this tagged_division_ofD[OF this(1)]
  3076     note p = this tagged_division_ofD[OF this(1)]
  3065     have lem0:
  3077     have xk_le_c: "\<And>x kk. (x, kk) \<in> p \<Longrightarrow> kk \<inter> {x. x\<bullet>k \<le> c} \<noteq> {} \<Longrightarrow> x\<bullet>k \<le> c"
  3066       "\<And>x kk. (x, kk) \<in> p \<Longrightarrow> kk \<inter> {x. x\<bullet>k \<le> c} \<noteq> {} \<Longrightarrow> x\<bullet>k \<le> c"
  3078     proof -
       
  3079       fix x kk
       
  3080       assume as: "(x, kk) \<in> p" and *: "kk \<inter> {x. x\<bullet>k \<le> c} \<noteq> {}"
       
  3081       show "x\<bullet>k \<le> c"
       
  3082       proof (rule ccontr)
       
  3083         assume **: "\<not> ?thesis"
       
  3084         from this[unfolded not_le]
       
  3085         have "kk \<subseteq> ball x \<bar>x \<bullet> k - c\<bar>"
       
  3086           using p(2)[unfolded fine_def, rule_format,OF as,unfolded split_conv] by auto
       
  3087         with * have "\<exists>y. y \<in> ball x \<bar>x \<bullet> k - c\<bar> \<inter> {x. x \<bullet> k \<le> c}"
       
  3088           by blast
       
  3089         then guess y ..
       
  3090         then have "\<bar>x \<bullet> k - y \<bullet> k\<bar> < \<bar>x \<bullet> k - c\<bar>" "y\<bullet>k \<le> c"
       
  3091           apply -
       
  3092           apply (rule le_less_trans)
       
  3093           using Basis_le_norm[OF k, of "x - y"]
       
  3094           apply (auto simp add: dist_norm inner_diff_left)
       
  3095           done
       
  3096         then show False
       
  3097           using **[unfolded not_le] by (auto simp add: field_simps)
       
  3098       qed 
       
  3099     qed
       
  3100     have xk_ge_c:
  3067       "\<And>x kk. (x, kk) \<in> p \<Longrightarrow> kk \<inter> {x. x\<bullet>k \<ge> c} \<noteq> {} \<Longrightarrow> x\<bullet>k \<ge> c"
  3101       "\<And>x kk. (x, kk) \<in> p \<Longrightarrow> kk \<inter> {x. x\<bullet>k \<ge> c} \<noteq> {} \<Longrightarrow> x\<bullet>k \<ge> c"
  3068     proof -
  3102     proof -
  3069       fix x kk
  3103       fix x kk
  3070       assume as: "(x, kk) \<in> p"
  3104       assume as: "(x, kk) \<in> p" and *: "kk \<inter> {x. x\<bullet>k \<ge> c} \<noteq> {}"
  3071       {
  3105       show "x\<bullet>k \<ge> c"
  3072         assume *: "kk \<inter> {x. x\<bullet>k \<le> c} \<noteq> {}"
  3106       proof (rule ccontr)
  3073         show "x\<bullet>k \<le> c"
  3107         assume **: "\<not> ?thesis"
  3074         proof (rule ccontr)
  3108         from this[unfolded not_le] have "kk \<subseteq> ball x \<bar>x \<bullet> k - c\<bar>"
  3075           assume **: "\<not> ?thesis"
  3109           using p(2)[unfolded fine_def,rule_format,OF as,unfolded split_conv] by auto
  3076           from this[unfolded not_le]
  3110         with * have "\<exists>y. y \<in> ball x \<bar>x \<bullet> k - c\<bar> \<inter> {x. x \<bullet> k \<ge> c}"
  3077           have "kk \<subseteq> ball x \<bar>x \<bullet> k - c\<bar>"
  3111           by blast
  3078             using p(2)[unfolded fine_def, rule_format,OF as,unfolded split_conv] by auto
  3112         then guess y ..
  3079           with * have "\<exists>y. y \<in> ball x \<bar>x \<bullet> k - c\<bar> \<inter> {x. x \<bullet> k \<le> c}"
  3113         then have "\<bar>x \<bullet> k - y \<bullet> k\<bar> < \<bar>x \<bullet> k - c\<bar>" "y\<bullet>k \<ge> c"
  3080             by blast
  3114           apply -
  3081           then guess y ..
  3115           apply (rule le_less_trans)
  3082           then have "\<bar>x \<bullet> k - y \<bullet> k\<bar> < \<bar>x \<bullet> k - c\<bar>" "y\<bullet>k \<le> c"
  3116           using Basis_le_norm[OF k, of "x - y"]
  3083             apply -
  3117           apply (auto simp add: dist_norm inner_diff_left)
  3084             apply (rule le_less_trans)
  3118           done
  3085             using Basis_le_norm[OF k, of "x - y"]
  3119         then show False
  3086             apply (auto simp add: dist_norm inner_diff_left)
  3120           using **[unfolded not_le] by (auto simp add: field_simps)
  3087             done
  3121       qed
  3088           then show False
       
  3089             using **[unfolded not_le] by (auto simp add: field_simps)
       
  3090         qed
       
  3091       next
       
  3092         assume *: "kk \<inter> {x. x\<bullet>k \<ge> c} \<noteq> {}"
       
  3093         show "x\<bullet>k \<ge> c"
       
  3094         proof (rule ccontr)
       
  3095           assume **: "\<not> ?thesis"
       
  3096           from this[unfolded not_le] have "kk \<subseteq> ball x \<bar>x \<bullet> k - c\<bar>"
       
  3097             using p(2)[unfolded fine_def,rule_format,OF as,unfolded split_conv] by auto
       
  3098           with * have "\<exists>y. y \<in> ball x \<bar>x \<bullet> k - c\<bar> \<inter> {x. x \<bullet> k \<ge> c}"
       
  3099             by blast
       
  3100           then guess y ..
       
  3101           then have "\<bar>x \<bullet> k - y \<bullet> k\<bar> < \<bar>x \<bullet> k - c\<bar>" "y\<bullet>k \<ge> c"
       
  3102             apply -
       
  3103             apply (rule le_less_trans)
       
  3104             using Basis_le_norm[OF k, of "x - y"]
       
  3105             apply (auto simp add: dist_norm inner_diff_left)
       
  3106             done
       
  3107           then show False
       
  3108             using **[unfolded not_le] by (auto simp add: field_simps)
       
  3109         qed
       
  3110       }
       
  3111     qed
  3122     qed
  3112 
  3123 
  3113     have lem1: "\<And>f P Q. (\<forall>x k. (x, k) \<in> {(x, f k) | x k. P x k} \<longrightarrow> Q x k) \<longleftrightarrow>
  3124     have lem1: "\<And>f P Q. (\<forall>x k. (x, k) \<in> {(x, f k) | x k. P x k} \<longrightarrow> Q x k) \<longleftrightarrow>
  3114       (\<forall>x k. P x k \<longrightarrow> Q x (f k))" by auto
  3125       (\<forall>x k. P x k \<longrightarrow> Q x (f k))" by auto
  3115     have lem2: "\<And>f s P f. finite s \<Longrightarrow> finite {(x,f k) | x k. (x,k) \<in> s \<and> P x k}"
  3126     have fin_finite: "\<And>f s P f. finite s \<Longrightarrow> finite {(x,f k) | x k. (x,k) \<in> s \<and> P x k}"
  3116     proof -
  3127     proof -
  3117       case goal1
  3128       case goal1
  3118       then have "finite ((\<lambda>(x, k). (x, f k)) ` s)"
  3129       then have "finite ((\<lambda>(x, k). (x, f k)) ` s)"
  3119         by auto
  3130         by auto
  3120       then show ?case
  3131       then show ?case
  3121         by (rule rev_finite_subset) auto
  3132         by (rule rev_finite_subset) auto
  3122     qed
  3133     qed
  3123     have lem3: "\<And>g :: 'a set \<Rightarrow> 'a set. finite p \<Longrightarrow>
  3134     { fix g :: "'a set \<Rightarrow> 'a set"
  3124       setsum (\<lambda>(x, k). content k *\<^sub>R f x) {(x,g k) |x k. (x,k) \<in> p \<and> g k \<noteq> {}} =
       
  3125       setsum (\<lambda>(x, k). content k *\<^sub>R f x) ((\<lambda>(x, k). (x, g k)) ` p)"
       
  3126       apply (rule setsum.mono_neutral_left)
       
  3127       prefer 3
       
  3128     proof
       
  3129       fix g :: "'a set \<Rightarrow> 'a set"
       
  3130       fix i :: "'a \<times> 'a set"
  3135       fix i :: "'a \<times> 'a set"
  3131       assume "i \<in> (\<lambda>(x, k). (x, g k)) ` p - {(x, g k) |x k. (x, k) \<in> p \<and> g k \<noteq> {}}"
  3136       assume "i \<in> (\<lambda>(x, k). (x, g k)) ` p - {(x, g k) |x k. (x, k) \<in> p \<and> g k \<noteq> {}}"
  3132       then obtain x k where xk:
  3137       then obtain x k where xk:
  3133         "i = (x, g k)"
  3138               "i = (x, g k)"  "(x, k) \<in> p"
  3134         "(x, k) \<in> p"
  3139               "(x, g k) \<notin> {(x, g k) |x k. (x, k) \<in> p \<and> g k \<noteq> {}}"
  3135         "(x, g k) \<notin> {(x, g k) |x k. (x, k) \<in> p \<and> g k \<noteq> {}}"
  3140           by auto
  3136         by auto
       
  3137       have "content (g k) = 0"
  3141       have "content (g k) = 0"
  3138         using xk using content_empty by auto
  3142         using xk using content_empty by auto
  3139       then show "(\<lambda>(x, k). content k *\<^sub>R f x) i = 0"
  3143       then have "(\<lambda>(x, k). content k *\<^sub>R f x) i = 0"
  3140         unfolding xk split_conv by auto
  3144         unfolding xk split_conv by auto
  3141     qed auto
  3145     } note [simp] = this
  3142     have lem4: "\<And>g. (\<lambda>(x,l). content (g l) *\<^sub>R f x) = (\<lambda>(x,l). content l *\<^sub>R f x) \<circ> (\<lambda>(x,l). (x,g l))"
  3146     have lem3: "\<And>g :: 'a set \<Rightarrow> 'a set. finite p \<Longrightarrow>
  3143       by auto
  3147                   setsum (\<lambda>(x, k). content k *\<^sub>R f x) {(x,g k) |x k. (x,k) \<in> p \<and> g k \<noteq> {}} =
  3144 
  3148                   setsum (\<lambda>(x, k). content k *\<^sub>R f x) ((\<lambda>(x, k). (x, g k)) ` p)"
       
  3149       by (rule setsum.mono_neutral_left) auto
  3145     let ?M1 = "{(x, kk \<inter> {x. x\<bullet>k \<le> c}) |x kk. (x, kk) \<in> p \<and> kk \<inter> {x. x\<bullet>k \<le> c} \<noteq> {}}"
  3150     let ?M1 = "{(x, kk \<inter> {x. x\<bullet>k \<le> c}) |x kk. (x, kk) \<in> p \<and> kk \<inter> {x. x\<bullet>k \<le> c} \<noteq> {}}"
       
  3151     have d1_fine: "d1 fine ?M1"
       
  3152       by (force intro: fineI dest: fineD[OF p(2)] simp add: split: split_if_asm)
  3146     have "norm ((\<Sum>(x, k)\<in>?M1. content k *\<^sub>R f x) - i) < e/2"
  3153     have "norm ((\<Sum>(x, k)\<in>?M1. content k *\<^sub>R f x) - i) < e/2"
  3147       apply (rule d1(2),rule tagged_division_ofI)
  3154     proof (rule d1norm [OF tagged_division_ofI d1_fine])
  3148       apply (rule lem2 p(3))+
  3155       show "finite ?M1"
  3149       prefer 6
  3156         by (rule fin_finite p(3))+
  3150       apply (rule fineI)
       
  3151     proof -
       
  3152       show "\<Union>{k. \<exists>x. (x, k) \<in> ?M1} = cbox a b \<inter> {x. x\<bullet>k \<le> c}"
  3157       show "\<Union>{k. \<exists>x. (x, k) \<in> ?M1} = cbox a b \<inter> {x. x\<bullet>k \<le> c}"
  3153         unfolding p(8)[symmetric] by auto
  3158         unfolding p(8)[symmetric] by auto
  3154       fix x l
  3159       fix x l
  3155       assume xl: "(x, l) \<in> ?M1"
  3160       assume xl: "(x, l) \<in> ?M1"
  3156       then guess x' l' unfolding mem_Collect_eq unfolding Pair_eq by (elim exE conjE) note xl'=this
  3161       then guess x' l' unfolding mem_Collect_eq unfolding Pair_eq by (elim exE conjE) note xl'=this
  3157       have "l' \<subseteq> d1 x'"
       
  3158         apply (rule order_trans[OF fineD[OF p(2) xl'(3)]])
       
  3159         apply auto
       
  3160         done
       
  3161       then show "l \<subseteq> d1 x"
       
  3162         unfolding xl' by auto
       
  3163       show "x \<in> l" "l \<subseteq> cbox a b \<inter> {x. x \<bullet> k \<le> c}"
  3162       show "x \<in> l" "l \<subseteq> cbox a b \<inter> {x. x \<bullet> k \<le> c}"
  3164         unfolding xl'
  3163         unfolding xl'
  3165         using p(4-6)[OF xl'(3)] using xl'(4)
  3164         using p(4-6)[OF xl'(3)] using xl'(4)
  3166         using lem0(1)[OF xl'(3-4)] by auto
  3165         using xk_le_c[OF xl'(3-4)] by auto
  3167       show "\<exists>a b. l = cbox a b"
  3166       show "\<exists>a b. l = cbox a b"
  3168         unfolding xl'
  3167         unfolding xl'
  3169         using p(6)[OF xl'(3)]
  3168         using p(6)[OF xl'(3)]
  3170         by (fastforce simp add: interval_split[OF k,where c=c])
  3169         by (fastforce simp add: interval_split[OF k,where c=c])
  3171       fix y r
  3170       fix y r
  3186           using p(7)[OF xl'(3) yr'(3)] using as unfolding xl' yr' by auto
  3185           using p(7)[OF xl'(3) yr'(3)] using as unfolding xl' yr' by auto
  3187       qed
  3186       qed
  3188     qed
  3187     qed
  3189     moreover
  3188     moreover
  3190     let ?M2 = "{(x,kk \<inter> {x. x\<bullet>k \<ge> c}) |x kk. (x,kk) \<in> p \<and> kk \<inter> {x. x\<bullet>k \<ge> c} \<noteq> {}}"
  3189     let ?M2 = "{(x,kk \<inter> {x. x\<bullet>k \<ge> c}) |x kk. (x,kk) \<in> p \<and> kk \<inter> {x. x\<bullet>k \<ge> c} \<noteq> {}}"
       
  3190     have d2_fine: "d2 fine ?M2"
       
  3191       by (force intro: fineI dest: fineD[OF p(2)] simp add: split: split_if_asm)
  3191     have "norm ((\<Sum>(x, k)\<in>?M2. content k *\<^sub>R f x) - j) < e/2"
  3192     have "norm ((\<Sum>(x, k)\<in>?M2. content k *\<^sub>R f x) - j) < e/2"
  3192       apply (rule d2(2),rule tagged_division_ofI)
  3193     proof (rule d2norm [OF tagged_division_ofI d2_fine])
  3193       apply (rule lem2 p(3))+
  3194       show "finite ?M2"
  3194       prefer 6
  3195         by (rule fin_finite p(3))+
  3195       apply (rule fineI)
       
  3196     proof -
       
  3197       show "\<Union>{k. \<exists>x. (x, k) \<in> ?M2} = cbox a b \<inter> {x. x\<bullet>k \<ge> c}"
  3196       show "\<Union>{k. \<exists>x. (x, k) \<in> ?M2} = cbox a b \<inter> {x. x\<bullet>k \<ge> c}"
  3198         unfolding p(8)[symmetric] by auto
  3197         unfolding p(8)[symmetric] by auto
  3199       fix x l
  3198       fix x l
  3200       assume xl: "(x, l) \<in> ?M2"
  3199       assume xl: "(x, l) \<in> ?M2"
  3201       then guess x' l' unfolding mem_Collect_eq unfolding Pair_eq by (elim exE conjE) note xl'=this
  3200       then guess x' l' unfolding mem_Collect_eq unfolding Pair_eq by (elim exE conjE) note xl'=this
  3202       have "l' \<subseteq> d2 x'"
       
  3203         apply (rule order_trans[OF fineD[OF p(2) xl'(3)]])
       
  3204         apply auto
       
  3205         done
       
  3206       then show "l \<subseteq> d2 x"
       
  3207         unfolding xl' by auto
       
  3208       show "x \<in> l" "l \<subseteq> cbox a b \<inter> {x. x \<bullet> k \<ge> c}"
  3201       show "x \<in> l" "l \<subseteq> cbox a b \<inter> {x. x \<bullet> k \<ge> c}"
  3209         unfolding xl'
  3202         unfolding xl'
  3210         using p(4-6)[OF xl'(3)] xl'(4) lem0(2)[OF xl'(3-4)]
  3203         using p(4-6)[OF xl'(3)] xl'(4) xk_ge_c[OF xl'(3-4)]
  3211         by auto
  3204         by auto
  3212       show "\<exists>a b. l = cbox a b"
  3205       show "\<exists>a b. l = cbox a b"
  3213         unfolding xl'
  3206         unfolding xl'
  3214         using p(6)[OF xl'(3)]
  3207         using p(6)[OF xl'(3)]
  3215         by (fastforce simp add: interval_split[OF k, where c=c])
  3208         by (fastforce simp add: interval_split[OF k, where c=c])
  3233     qed
  3226     qed
  3234     ultimately
  3227     ultimately
  3235     have "norm (((\<Sum>(x, k)\<in>?M1. content k *\<^sub>R f x) - i) + ((\<Sum>(x, k)\<in>?M2. content k *\<^sub>R f x) - j)) < e/2 + e/2"
  3228     have "norm (((\<Sum>(x, k)\<in>?M1. content k *\<^sub>R f x) - i) + ((\<Sum>(x, k)\<in>?M2. content k *\<^sub>R f x) - j)) < e/2 + e/2"
  3236       using norm_add_less by blast
  3229       using norm_add_less by blast
  3237     also {
  3230     also {
  3238       have *: "\<And>x y. x = (0::real) \<Longrightarrow> x *\<^sub>R (y::'b) = 0"
  3231       have eq0: "\<And>x y. x = (0::real) \<Longrightarrow> x *\<^sub>R (y::'b) = 0"
  3239         using scaleR_zero_left by auto
  3232         using scaleR_zero_left by auto
       
  3233       have cont_eq: "\<And>g. (\<lambda>(x,l). content l *\<^sub>R f x) \<circ> (\<lambda>(x,l). (x,g l)) = (\<lambda>(x,l). content (g l) *\<^sub>R f x)"
       
  3234         by auto
  3240       have "((\<Sum>(x, k)\<in>?M1. content k *\<^sub>R f x) - i) + ((\<Sum>(x, k)\<in>?M2. content k *\<^sub>R f x) - j) =
  3235       have "((\<Sum>(x, k)\<in>?M1. content k *\<^sub>R f x) - i) + ((\<Sum>(x, k)\<in>?M2. content k *\<^sub>R f x) - j) =
  3241         (\<Sum>(x, k)\<in>?M1. content k *\<^sub>R f x) + (\<Sum>(x, k)\<in>?M2. content k *\<^sub>R f x) - (i + j)"
  3236         (\<Sum>(x, k)\<in>?M1. content k *\<^sub>R f x) + (\<Sum>(x, k)\<in>?M2. content k *\<^sub>R f x) - (i + j)"
  3242         by auto
  3237         by auto
  3243       also have "\<dots> = (\<Sum>(x, ka)\<in>p. content (ka \<inter> {x. x \<bullet> k \<le> c}) *\<^sub>R f x) +
  3238       also have "\<dots> = (\<Sum>(x, ka)\<in>p. content (ka \<inter> {x. x \<bullet> k \<le> c}) *\<^sub>R f x) +
  3244         (\<Sum>(x, ka)\<in>p. content (ka \<inter> {x. c \<le> x \<bullet> k}) *\<^sub>R f x) - (i + j)"
  3239         (\<Sum>(x, ka)\<in>p. content (ka \<inter> {x. c \<le> x \<bullet> k}) *\<^sub>R f x) - (i + j)"
  3245         unfolding lem3[OF p(3)]
  3240         unfolding lem3[OF p(3)]
  3246         apply (subst setsum.reindex_nontrivial[OF p(3)])
  3241         by (subst setsum.reindex_nontrivial[OF p(3)], auto intro!: k eq0 tagged_division_split_left_inj[OF p(1)] tagged_division_split_right_inj[OF p(1)]
  3247         defer
  3242               simp: cont_eq)+
  3248         apply (subst setsum.reindex_nontrivial[OF p(3)])
       
  3249         defer
       
  3250         unfolding lem4[symmetric]
       
  3251         apply (rule refl)
       
  3252         unfolding split_paired_all split_conv
       
  3253         apply (rule_tac[!] *)
       
  3254       proof -
       
  3255         case goal1
       
  3256         then show ?case
       
  3257           apply -
       
  3258           apply (rule tagged_division_split_left_inj [OF p(1), of a b aa ba])
       
  3259           using k
       
  3260           apply auto
       
  3261           done
       
  3262       next
       
  3263         case goal2
       
  3264         then show ?case
       
  3265           apply -
       
  3266           apply (rule tagged_division_split_right_inj[OF p(1), of a b aa ba])
       
  3267           using k
       
  3268           apply auto
       
  3269           done
       
  3270       qed
       
  3271       also note setsum.distrib[symmetric]
  3243       also note setsum.distrib[symmetric]
  3272       also have *: "\<And>x. x \<in> p \<Longrightarrow>
  3244       also have "\<And>x. x \<in> p \<Longrightarrow>
  3273         (\<lambda>(x,ka). content (ka \<inter> {x. x \<bullet> k \<le> c}) *\<^sub>R f x) x +
  3245                     (\<lambda>(x,ka). content (ka \<inter> {x. x \<bullet> k \<le> c}) *\<^sub>R f x) x +
  3274           (\<lambda>(x,ka). content (ka \<inter> {x. c \<le> x \<bullet> k}) *\<^sub>R f x) x =
  3246                     (\<lambda>(x,ka). content (ka \<inter> {x. c \<le> x \<bullet> k}) *\<^sub>R f x) x =
  3275         (\<lambda>(x,ka). content ka *\<^sub>R f x) x"
  3247                     (\<lambda>(x,ka). content ka *\<^sub>R f x) x"
  3276         unfolding split_paired_all split_conv
  3248       proof clarify
  3277       proof -
       
  3278         fix a b
  3249         fix a b
  3279         assume "(a, b) \<in> p"
  3250         assume "(a, b) \<in> p"
  3280         from p(6)[OF this] guess u v by (elim exE) note uv=this
  3251         from p(6)[OF this] guess u v by (elim exE) note uv=this
  3281         then show "content (b \<inter> {x. x \<bullet> k \<le> c}) *\<^sub>R f a + content (b \<inter> {x. c \<le> x \<bullet> k}) *\<^sub>R f a =
  3252         then show "content (b \<inter> {x. x \<bullet> k \<le> c}) *\<^sub>R f a + content (b \<inter> {x. c \<le> x \<bullet> k}) *\<^sub>R f a =
  3282           content b *\<^sub>R f a"
  3253           content b *\<^sub>R f a"