tuned proofs;
authorwenzelm
Sat, 14 Sep 2013 13:59:57 +0200
changeset 53634 ab5d01b69a07
parent 53631 e68732cd842e
child 53635 b6fb9151de66
tuned proofs;
src/HOL/Multivariate_Analysis/Integration.thy
--- a/src/HOL/Multivariate_Analysis/Integration.thy	Fri Sep 13 23:52:01 2013 +0200
+++ b/src/HOL/Multivariate_Analysis/Integration.thy	Sat Sep 14 13:59:57 2013 +0200
@@ -8287,386 +8287,953 @@
   done
 
 lemma indefinite_integral_continuous_left:
-  fixes f::"real \<Rightarrow> 'a::banach"
-  assumes "f integrable_on {a..b}" "a < c" "c \<le> b" "0 < e"
-  obtains d where "0 < d" "\<forall>t. c - d < t \<and> t \<le> c \<longrightarrow> norm(integral {a..c} f - integral {a..t} f) < e"
-proof- have "\<exists>w>0. \<forall>t. c - w < t \<and> t < c \<longrightarrow> norm(f c) * norm(c - t) < e / 3"
-  proof(cases "f c = 0") case False hence "0 < e / 3 / norm (f c)"
-      apply-apply(rule divide_pos_pos) using `e>0` by auto
-    thus ?thesis apply-apply(rule,rule,assumption,safe)
-    proof- fix t assume as:"t < c" and "c - e / 3 / norm (f c) < t"
-      hence "c - t < e / 3 / norm (f c)" by auto
-      hence "norm (c - t) < e / 3 / norm (f c)" using as by auto
-      thus "norm (f c) * norm (c - t) < e / 3" using False apply-
-        apply(subst mult_commute) apply(subst pos_less_divide_eq[symmetric]) by auto
-    qed next case True show ?thesis apply(rule_tac x=1 in exI) unfolding True using `e>0` by auto
-  qed then guess w .. note w = conjunctD2[OF this,rule_format]
-
-  have *:"e / 3 > 0" using assms by auto
-  have "f integrable_on {a..c}" apply(rule integrable_subinterval[OF assms(1)]) using assms(2-3) by auto
+  fixes f:: "real \<Rightarrow> 'a::banach"
+  assumes "f integrable_on {a..b}"
+    and "a < c"
+    and "c \<le> b"
+    and "e > 0"
+  obtains d where "d > 0"
+    and "\<forall>t. c - d < t \<and> t \<le> c \<longrightarrow> norm (integral {a..c} f - integral {a..t} f) < e"
+proof -
+  have "\<exists>w>0. \<forall>t. c - w < t \<and> t < c \<longrightarrow> norm (f c) * norm(c - t) < e / 3"
+  proof (cases "f c = 0")
+    case False
+    then have "0 < e / 3 / norm (f c)"
+      apply -
+      apply (rule divide_pos_pos)
+      using `e>0`
+      apply auto
+      done
+    then show ?thesis
+      apply -
+      apply rule
+      apply rule
+      apply assumption
+      apply safe
+    proof -
+      fix t
+      assume as: "t < c" and "c - e / 3 / norm (f c) < t"
+      then have "c - t < e / 3 / norm (f c)"
+        by auto
+      then have "norm (c - t) < e / 3 / norm (f c)"
+        using as by auto
+      then show "norm (f c) * norm (c - t) < e / 3"
+        using False
+        apply -
+        apply (subst mult_commute)
+        apply (subst pos_less_divide_eq[symmetric])
+        apply auto
+        done
+    qed
+  next
+    case True
+    show ?thesis
+      apply (rule_tac x=1 in exI)
+      unfolding True
+      using `e > 0`
+      apply auto
+      done
+  qed
+  then guess w .. note w = conjunctD2[OF this,rule_format]
+
+  have *: "e / 3 > 0"
+    using assms by auto
+  have "f integrable_on {a..c}"
+    apply (rule integrable_subinterval[OF assms(1)])
+    using assms(2-3)
+    apply auto
+    done
   from integrable_integral[OF this,unfolded has_integral,rule_format,OF *] guess d1 ..
-  note d1 = conjunctD2[OF this,rule_format] def d \<equiv> "\<lambda>x. ball x w \<inter> d1 x"
-  have "gauge d" unfolding d_def using w(1) d1 by auto
-  note this[unfolded gauge_def,rule_format,of c] note conjunctD2[OF this]
-  from this(2)[unfolded open_contains_ball,rule_format,OF this(1)] guess k .. note k=conjunctD2[OF this]
-
-  let ?d = "min k (c - a)/2" show ?thesis apply(rule that[of ?d])
-  proof safe
-    show "?d > 0" using k(1) using assms(2) by auto
-    fix t assume as:"c - ?d < t" "t \<le> c"
+  note d1 = conjunctD2[OF this,rule_format]
+  def d \<equiv> "\<lambda>x. ball x w \<inter> d1 x"
+  have "gauge d"
+    unfolding d_def using w(1) d1 by auto
+  note this[unfolded gauge_def,rule_format,of c]
+  note conjunctD2[OF this]
+  from this(2)[unfolded open_contains_ball,rule_format,OF this(1)] guess k ..
+  note k=conjunctD2[OF this]
+
+  let ?d = "min k (c - a) / 2"
+  show ?thesis
+    apply (rule that[of ?d])
+    apply safe
+  proof -
+    show "?d > 0"
+      using k(1) using assms(2) by auto
+    fix t
+    assume as: "c - ?d < t" "t \<le> c"
     let ?thesis = "norm (integral {a..c} f - integral {a..t} f) < e"
-    { presume *:"t < c \<Longrightarrow> ?thesis"
-      show ?thesis apply(cases "t = c") defer apply(rule *)
-        apply(subst less_le) using `e>0` as(2) by auto }
+    {
+      presume *: "t < c \<Longrightarrow> ?thesis"
+      show ?thesis
+        apply (cases "t = c")
+        defer
+        apply (rule *)
+        apply (subst less_le)
+        using `e > 0` as(2)
+        apply auto
+        done
+    }
     assume "t < c"
 
-    have "f integrable_on {a..t}" apply(rule integrable_subinterval[OF assms(1)]) using assms(2-3) as(2) by auto
+    have "f integrable_on {a..t}"
+      apply (rule integrable_subinterval[OF assms(1)])
+      using assms(2-3) as(2)
+      apply auto
+      done
     from integrable_integral[OF this,unfolded has_integral,rule_format,OF *] guess d2 ..
     note d2 = conjunctD2[OF this,rule_format]
     def d3 \<equiv> "\<lambda>x. if x \<le> t then d1 x \<inter> d2 x else d1 x"
-    have "gauge d3" using d2(1) d1(1) unfolding d3_def gauge_def by auto
+    have "gauge d3"
+      using d2(1) d1(1) unfolding d3_def gauge_def by auto
     from fine_division_exists[OF this, of a t] guess p . note p=this
     note p'=tagged_division_ofD[OF this(1)]
-    have pt:"\<forall>(x,k)\<in>p. x \<le> t" proof safe case goal1 from p'(2,3)[OF this] show ?case by auto qed
-    with p(2) have "d2 fine p" unfolding fine_def d3_def apply safe apply(erule_tac x="(a,b)" in ballE)+ by auto
+    have pt: "\<forall>(x,k)\<in>p. x \<le> t"
+    proof safe
+      case goal1
+      from p'(2,3)[OF this] show ?case
+        by auto
+    qed
+    with p(2) have "d2 fine p"
+      unfolding fine_def d3_def
+      apply safe
+      apply (erule_tac x="(a,b)" in ballE)+
+      apply auto
+      done
     note d2_fin = d2(2)[OF conjI[OF p(1) this]]
 
-    have *:"{a..c} \<inter> {x. x \<bullet> 1 \<le> t} = {a..t}" "{a..c} \<inter> {x. x \<bullet> 1 \<ge> t} = {t..c}"
-      using assms(2-3) as by(auto simp add:field_simps)
-    have "p \<union> {(c, {t..c})} tagged_division_of {a..c} \<and> d1 fine p \<union> {(c, {t..c})}" apply rule
-      apply(rule tagged_division_union_interval[of _ _ _ 1 "t"]) unfolding * apply(rule p)
-      apply(rule tagged_division_of_self) unfolding fine_def
-    proof safe fix x k y assume "(x,k)\<in>p" "y\<in>k" thus "y\<in>d1 x"
-        using p(2) pt unfolding fine_def d3_def apply- apply(erule_tac x="(x,k)" in ballE)+ by auto
-    next fix x assume "x\<in>{t..c}" hence "dist c x < k" unfolding dist_real_def
-        using as(1) by(auto simp add:field_simps)
-      thus "x \<in> d1 c" using k(2) unfolding d_def by auto
-    qed(insert as(2), auto) note d1_fin = d1(2)[OF this]
-
-    have *:"integral{a..c} f - integral {a..t} f = -(((c - t) *\<^sub>R f c + (\<Sum>(x, k)\<in>p. content k *\<^sub>R f x)) -
-        integral {a..c} f) + ((\<Sum>(x, k)\<in>p. content k *\<^sub>R f x) - integral {a..t} f) + (c - t) *\<^sub>R f c"
-      "e = (e/3 + e/3) + e/3" by auto
-    have **:"(\<Sum>(x, k)\<in>p \<union> {(c, {t..c})}. content k *\<^sub>R f x) = (c - t) *\<^sub>R f c + (\<Sum>(x, k)\<in>p. content k *\<^sub>R f x)"
-    proof- have **:"\<And>x F. F \<union> {x} = insert x F" by auto
-      have "(c, {t..c}) \<notin> p" proof safe case goal1 from p'(2-3)[OF this]
-        have "c \<in> {a..t}" by auto thus False using `t<c` by auto
-      qed thus ?thesis unfolding ** apply- apply(subst setsum_insert) apply(rule p')
-        unfolding split_conv defer apply(subst content_real) using as(2) by auto qed
-
-    have ***:"c - w < t \<and> t < c"
-    proof- have "c - k < t" using `k>0` as(1) by(auto simp add:field_simps)
-      moreover have "k \<le> w" apply(rule ccontr) using k(2)
-        unfolding subset_eq apply(erule_tac x="c + ((k + w)/2)" in ballE)
-        unfolding d_def using `k>0` `w>0` by(auto simp add:field_simps not_le not_less dist_real_def)
-      ultimately show  ?thesis using `t<c` by(auto simp add:field_simps) qed
-
-    show ?thesis unfolding *(1) apply(subst *(2)) apply(rule norm_triangle_lt add_strict_mono)+
-      unfolding norm_minus_cancel apply(rule d1_fin[unfolded **]) apply(rule d2_fin)
-      using w(2)[OF ***] unfolding norm_scaleR by(auto simp add:field_simps) qed qed
-
-lemma indefinite_integral_continuous_right: fixes f::"real \<Rightarrow> 'a::banach"
-  assumes "f integrable_on {a..b}" "a \<le> c" "c < b" "0 < e"
-  obtains d where "0 < d" "\<forall>t. c \<le> t \<and> t < c + d \<longrightarrow> norm(integral{a..c} f - integral{a..t} f) < e"
-proof- have *:"(\<lambda>x. f (- x)) integrable_on {- b..- a}" "- b < - c" "- c \<le> - a" using assms by auto
-  from indefinite_integral_continuous_left[OF * `e>0`] guess d . note d = this let ?d = "min d (b - c)"
-  show ?thesis apply(rule that[of "?d"])
-  proof safe show "0 < ?d" using d(1) assms(3) by auto
-    fix t::"real" assume as:"c \<le> t" "t < c + ?d"
-    have *:"integral{a..c} f = integral{a..b} f - integral{c..b} f"
-      "integral{a..t} f = integral{a..b} f - integral{t..b} f" unfolding algebra_simps
-      apply(rule_tac[!] integral_combine) using assms as by auto
-    have "(- c) - d < (- t) \<and> - t \<le> - c" using as by auto note d(2)[rule_format,OF this]
-    thus "norm (integral {a..c} f - integral {a..t} f) < e" unfolding *
-      unfolding integral_reflect apply-apply(subst norm_minus_commute) by(auto simp add:algebra_simps) qed qed
-
-lemma indefinite_integral_continuous: fixes f::"real \<Rightarrow> 'a::banach"
-  assumes "f integrable_on {a..b}" shows  "continuous_on {a..b} (\<lambda>x. integral {a..x} f)"
-proof(unfold continuous_on_iff, safe)  fix x e assume as:"x\<in>{a..b}" "0<(e::real)"
+    have *: "{a..c} \<inter> {x. x \<bullet> 1 \<le> t} = {a..t}" "{a..c} \<inter> {x. x \<bullet> 1 \<ge> t} = {t..c}"
+      using assms(2-3) as by (auto simp add: field_simps)
+    have "p \<union> {(c, {t..c})} tagged_division_of {a..c} \<and> d1 fine p \<union> {(c, {t..c})}"
+      apply rule
+      apply (rule tagged_division_union_interval[of _ _ _ 1 "t"])
+      unfolding *
+      apply (rule p)
+      apply (rule tagged_division_of_self)
+      unfolding fine_def
+      apply safe
+    proof -
+      fix x k y
+      assume "(x,k) \<in> p" and "y \<in> k"
+      then show "y \<in> d1 x"
+        using p(2) pt
+        unfolding fine_def d3_def
+        apply -
+        apply (erule_tac x="(x,k)" in ballE)+
+        apply auto
+        done
+    next
+      fix x assume "x \<in> {t..c}"
+      then have "dist c x < k"
+        unfolding dist_real_def
+        using as(1)
+        by (auto simp add: field_simps)
+      then show "x \<in> d1 c"
+        using k(2)
+        unfolding d_def
+        by auto
+    qed (insert as(2), auto) note d1_fin = d1(2)[OF this]
+
+    have *: "integral{a..c} f - integral {a..t} f = -(((c - t) *\<^sub>R f c + (\<Sum>(x, k)\<in>p. content k *\<^sub>R f x)) -
+      integral {a..c} f) + ((\<Sum>(x, k)\<in>p. content k *\<^sub>R f x) - integral {a..t} f) + (c - t) *\<^sub>R f c"
+      "e = (e/3 + e/3) + e/3"
+      by auto
+    have **: "(\<Sum>(x, k)\<in>p \<union> {(c, {t..c})}. content k *\<^sub>R f x) =
+      (c - t) *\<^sub>R f c + (\<Sum>(x, k)\<in>p. content k *\<^sub>R f x)"
+    proof -
+      have **: "\<And>x F. F \<union> {x} = insert x F"
+        by auto
+      have "(c, {t..c}) \<notin> p"
+      proof safe
+        case goal1
+        from p'(2-3)[OF this] have "c \<in> {a..t}"
+          by auto
+        then show False using `t < c`
+          by auto
+      qed
+      then show ?thesis
+        unfolding **
+        apply -
+        apply (subst setsum_insert)
+        apply (rule p')
+        unfolding split_conv
+        defer
+        apply (subst content_real)
+        using as(2)
+        apply auto
+        done
+    qed
+    have ***: "c - w < t \<and> t < c"
+    proof -
+      have "c - k < t"
+        using `k>0` as(1) by (auto simp add: field_simps)
+      moreover have "k \<le> w"
+        apply (rule ccontr)
+        using k(2)
+        unfolding subset_eq
+        apply (erule_tac x="c + ((k + w)/2)" in ballE)
+        unfolding d_def
+        using `k>0` `w>0`
+        apply (auto simp add: field_simps not_le not_less dist_real_def)
+        done
+      ultimately show ?thesis using `t < c`
+        by (auto simp add: field_simps)
+    qed
+    show ?thesis
+      unfolding *(1)
+      apply (subst *(2))
+      apply (rule norm_triangle_lt add_strict_mono)+
+      unfolding norm_minus_cancel
+      apply (rule d1_fin[unfolded **])
+      apply (rule d2_fin)
+      using w(2)[OF ***]
+      unfolding norm_scaleR
+      apply (auto simp add: field_simps)
+      done
+  qed
+qed
+
+lemma indefinite_integral_continuous_right:
+  fixes f :: "real \<Rightarrow> 'a::banach"
+  assumes "f integrable_on {a..b}"
+    and "a \<le> c"
+    and "c < b"
+    and "e > 0"
+  obtains d where "0 < d"
+    and "\<forall>t. c \<le> t \<and> t < c + d \<longrightarrow> norm (integral {a..c} f - integral {a..t} f) < e"
+proof -
+  have *: "(\<lambda>x. f (- x)) integrable_on {- b..- a}" "- b < - c" "- c \<le> - a"
+    using assms by auto
+  from indefinite_integral_continuous_left[OF * `e>0`] guess d . note d = this
+  let ?d = "min d (b - c)"
+  show ?thesis
+    apply (rule that[of "?d"])
+    apply safe
+  proof -
+    show "0 < ?d"
+      using d(1) assms(3) by auto
+    fix t :: real
+    assume as: "c \<le> t" "t < c + ?d"
+    have *: "integral {a..c} f = integral {a..b} f - integral {c..b} f"
+      "integral {a..t} f = integral {a..b} f - integral {t..b} f"
+      unfolding algebra_simps
+      apply (rule_tac[!] integral_combine)
+      using assms as
+      apply auto
+      done
+    have "(- c) - d < (- t) \<and> - t \<le> - c"
+      using as by auto note d(2)[rule_format,OF this]
+    then show "norm (integral {a..c} f - integral {a..t} f) < e"
+      unfolding *
+      unfolding integral_reflect
+      apply (subst norm_minus_commute)
+      apply (auto simp add: algebra_simps)
+      done
+  qed
+qed
+
+lemma indefinite_integral_continuous:
+  fixes f :: "real \<Rightarrow> 'a::banach"
+  assumes "f integrable_on {a..b}"
+  shows "continuous_on {a..b} (\<lambda>x. integral {a..x} f)"
+proof (unfold continuous_on_iff, safe)
+  fix x e :: real
+  assume as: "x \<in> {a..b}" "e > 0"
   let ?thesis = "\<exists>d>0. \<forall>x'\<in>{a..b}. dist x' x < d \<longrightarrow> dist (integral {a..x'} f) (integral {a..x} f) < e"
-  { presume *:"a<b \<Longrightarrow> ?thesis"
-    show ?thesis apply(cases,rule *,assumption)
-    proof- case goal1 hence "{a..b} = {x}" using as(1) apply-apply(rule set_eqI)
-        unfolding atLeastAtMost_iff by(auto simp only:field_simps not_less)
-      thus ?case using `e>0` by auto
-    qed } assume "a<b"
-  have "(x=a \<or> x=b) \<or> (a<x \<and> x<b)" using as(1) by (auto simp add:)
-  thus ?thesis apply-apply(erule disjE)+
-  proof- assume "x=a" have "a \<le> a" by auto
+  {
+    presume *: "a < b \<Longrightarrow> ?thesis"
+    show ?thesis
+      apply cases
+      apply (rule *)
+      apply assumption
+    proof -
+      case goal1
+      then have "{a..b} = {x}"
+        using as(1)
+        apply -
+        apply (rule set_eqI)
+        unfolding atLeastAtMost_iff
+        apply (auto simp only: field_simps not_less)
+        done
+      then show ?case using `e > 0` by auto
+    qed
+  }
+  assume "a < b"
+  have "(x = a \<or> x = b) \<or> (a < x \<and> x < b)"
+    using as(1) by auto
+  then show ?thesis
+    apply (elim disjE)
+  proof -
+    assume "x = a"
+    have "a \<le> a" ..
     from indefinite_integral_continuous_right[OF assms(1) this `a<b` `e>0`] guess d . note d=this
-    show ?thesis apply(rule,rule,rule d,safe) apply(subst dist_commute)
-      unfolding `x=a` dist_norm apply(rule d(2)[rule_format]) by auto
-  next   assume "x=b" have "b \<le> b" by auto
+    show ?thesis
+      apply rule
+      apply rule
+      apply (rule d)
+      apply safe
+      apply (subst dist_commute)
+      unfolding `x = a` dist_norm
+      apply (rule d(2)[rule_format])
+      apply auto
+      done
+  next
+    assume "x = b"
+    have "b \<le> b" ..
     from indefinite_integral_continuous_left[OF assms(1) `a<b` this `e>0`] guess d . note d=this
-    show ?thesis apply(rule,rule,rule d,safe) apply(subst dist_commute)
-      unfolding `x=b` dist_norm apply(rule d(2)[rule_format])  by auto
-  next assume "a<x \<and> x<b" hence xl:"a<x" "x\<le>b" and xr:"a\<le>x" "x<b" by(auto simp add: )
+    show ?thesis
+      apply rule
+      apply rule
+      apply (rule d)
+      apply safe
+      apply (subst dist_commute)
+      unfolding `x = b` dist_norm
+      apply (rule d(2)[rule_format])
+      apply auto
+      done
+  next
+    assume "a < x \<and> x < b"
+    then have xl: "a < x" "x \<le> b" and xr: "a \<le> x" "x < b"
+      by auto
     from indefinite_integral_continuous_left [OF assms(1) xl `e>0`] guess d1 . note d1=this
     from indefinite_integral_continuous_right[OF assms(1) xr `e>0`] guess d2 . note d2=this
-    show ?thesis apply(rule_tac x="min d1 d2" in exI)
-    proof safe show "0 < min d1 d2" using d1 d2 by auto
-      fix y assume "y\<in>{a..b}" "dist y x < min d1 d2"
-      thus "dist (integral {a..y} f) (integral {a..x} f) < e" apply-apply(subst dist_commute)
-        apply(cases "y < x") unfolding dist_norm apply(rule d1(2)[rule_format]) defer
-        apply(rule d2(2)[rule_format]) unfolding not_less by(auto simp add:field_simps)
-    qed qed qed
+    show ?thesis
+      apply (rule_tac x="min d1 d2" in exI)
+    proof safe
+      show "0 < min d1 d2"
+        using d1 d2 by auto
+      fix y
+      assume "y \<in> {a..b}" and "dist y x < min d1 d2"
+      then show "dist (integral {a..y} f) (integral {a..x} f) < e"
+        apply (subst dist_commute)
+        apply (cases "y < x")
+        unfolding dist_norm
+        apply (rule d1(2)[rule_format])
+        defer
+        apply (rule d2(2)[rule_format])
+        unfolding not_less
+        apply (auto simp add: field_simps)
+        done
+    qed
+  qed
+qed
+
 
 subsection {* This doesn't directly involve integration, but that gives an easy proof. *}
 
-lemma has_derivative_zero_unique_strong_interval: fixes f::"real \<Rightarrow> 'a::banach"
-  assumes "finite k" "continuous_on {a..b} f" "f a = y"
-  "\<forall>x\<in>({a..b} - k). (f has_derivative (\<lambda>h. 0)) (at x within {a..b})" "x \<in> {a..b}"
+lemma has_derivative_zero_unique_strong_interval:
+  fixes f :: "real \<Rightarrow> 'a::banach"
+  assumes "finite k"
+    and "continuous_on {a..b} f"
+    and "f a = y"
+    and "\<forall>x\<in>({a..b} - k). (f has_derivative (\<lambda>h. 0)) (at x within {a..b})" "x \<in> {a..b}"
   shows "f x = y"
-proof- have ab:"a\<le>b" using assms by auto
-  have *:"a\<le>x" using assms(5) by auto
+proof -
+  have ab: "a \<le> b"
+    using assms by auto
+  have *: "a \<le> x"
+    using assms(5) by auto
   have "((\<lambda>x. 0\<Colon>'a) has_integral f x - f a) {a..x}"
-    apply(rule fundamental_theorem_of_calculus_interior_strong[OF assms(1) *])
-    apply(rule continuous_on_subset[OF assms(2)]) defer
-    apply safe unfolding has_vector_derivative_def apply(subst has_derivative_within_open[symmetric])
-    apply assumption apply(rule open_interval) apply(rule has_derivative_within_subset[where s="{a..b}"])
-    using assms(4) assms(5) by auto note this[unfolded *]
+    apply (rule fundamental_theorem_of_calculus_interior_strong[OF assms(1) *])
+    apply (rule continuous_on_subset[OF assms(2)])
+    defer
+    apply safe
+    unfolding has_vector_derivative_def
+    apply (subst has_derivative_within_open[symmetric])
+    apply assumption
+    apply (rule open_interval)
+    apply (rule has_derivative_within_subset[where s="{a..b}"])
+    using assms(4) assms(5)
+    apply auto
+    done
+  note this[unfolded *]
   note has_integral_unique[OF has_integral_0 this]
-  thus ?thesis unfolding assms by auto qed
+  then show ?thesis
+    unfolding assms by auto
+qed
+
 
 subsection {* Generalize a bit to any convex set. *}
 
-lemma has_derivative_zero_unique_strong_convex: fixes f::"'a::ordered_euclidean_space \<Rightarrow> 'b::banach"
-  assumes "convex s" "finite k" "continuous_on s f" "c \<in> s" "f c = y"
-  "\<forall>x\<in>(s - k). (f has_derivative (\<lambda>h. 0)) (at x within s)" "x \<in> s"
+lemma has_derivative_zero_unique_strong_convex:
+  fixes f :: "'a::ordered_euclidean_space \<Rightarrow> 'b::banach"
+  assumes "convex s"
+    and "finite k"
+    and "continuous_on s f"
+    and "c \<in> s"
+    and "f c = y"
+    and "\<forall>x\<in>(s - k). (f has_derivative (\<lambda>h. 0)) (at x within s)"
+    and "x \<in> s"
   shows "f x = y"
-proof- { presume *:"x \<noteq> c \<Longrightarrow> ?thesis" show ?thesis apply(cases,rule *,assumption)
-      unfolding assms(5)[symmetric] by auto } assume "x\<noteq>c"
+proof -
+  {
+    presume *: "x \<noteq> c \<Longrightarrow> ?thesis"
+    show ?thesis
+      apply cases
+      apply (rule *)
+      apply assumption
+      unfolding assms(5)[symmetric]
+      apply auto
+      done
+  }
+  assume "x \<noteq> c"
   note conv = assms(1)[unfolded convex_alt,rule_format]
-  have as1:"continuous_on {0..1} (f \<circ> (\<lambda>t. (1 - t) *\<^sub>R c + t *\<^sub>R x))"
-    apply(rule continuous_on_intros)+ apply(rule continuous_on_subset[OF assms(3)])
-    apply safe apply(rule conv) using assms(4,7) by auto
-  have *:"\<And>t xa. (1 - t) *\<^sub>R c + t *\<^sub>R x = (1 - xa) *\<^sub>R c + xa *\<^sub>R x \<Longrightarrow> t = xa"
-  proof- case goal1 hence "(t - xa) *\<^sub>R x = (t - xa) *\<^sub>R c"
-      unfolding scaleR_simps by(auto simp add:algebra_simps)
-    thus ?case using `x\<noteq>c` by auto qed
-  have as2:"finite {t. ((1 - t) *\<^sub>R c + t *\<^sub>R x) \<in> k}" using assms(2)
-    apply(rule finite_surj[where f="\<lambda>z. SOME t. (1-t) *\<^sub>R c + t *\<^sub>R x = z"])
-    apply safe unfolding image_iff apply rule defer apply assumption
-    apply(rule sym) apply(rule some_equality) defer apply(drule *) by auto
+  have as1: "continuous_on {0..1} (f \<circ> (\<lambda>t. (1 - t) *\<^sub>R c + t *\<^sub>R x))"
+    apply (rule continuous_on_intros)+
+    apply (rule continuous_on_subset[OF assms(3)])
+    apply safe
+    apply (rule conv)
+    using assms(4,7)
+    apply auto
+    done
+  have *: "\<And>t xa. (1 - t) *\<^sub>R c + t *\<^sub>R x = (1 - xa) *\<^sub>R c + xa *\<^sub>R x \<Longrightarrow> t = xa"
+  proof -
+    case goal1
+    then have "(t - xa) *\<^sub>R x = (t - xa) *\<^sub>R c"
+      unfolding scaleR_simps by (auto simp add: algebra_simps)
+    then show ?case
+      using `x \<noteq> c` by auto
+  qed
+  have as2: "finite {t. ((1 - t) *\<^sub>R c + t *\<^sub>R x) \<in> k}"
+    using assms(2)
+    apply (rule finite_surj[where f="\<lambda>z. SOME t. (1-t) *\<^sub>R c + t *\<^sub>R x = z"])
+    apply safe
+    unfolding image_iff
+    apply rule
+    defer
+    apply assumption
+    apply (rule sym)
+    apply (rule some_equality)
+    defer
+    apply (drule *)
+    apply auto
+    done
   have "(f \<circ> (\<lambda>t. (1 - t) *\<^sub>R c + t *\<^sub>R x)) 1 = y"
-    apply(rule has_derivative_zero_unique_strong_interval[OF as2 as1, of ])
-    unfolding o_def using assms(5) defer apply-apply(rule)
-  proof- fix t assume as:"t\<in>{0..1} - {t. (1 - t) *\<^sub>R c + t *\<^sub>R x \<in> k}"
-    have *:"c - t *\<^sub>R c + t *\<^sub>R x \<in> s - k" apply safe apply(rule conv[unfolded scaleR_simps])
-      using `x\<in>s` `c\<in>s` as by(auto simp add: algebra_simps)
-    have "(f \<circ> (\<lambda>t. (1 - t) *\<^sub>R c + t *\<^sub>R x) has_derivative (\<lambda>x. 0) \<circ> (\<lambda>z. (0 - z *\<^sub>R c) + z *\<^sub>R x)) (at t within {0..1})"
-      apply(rule diff_chain_within) apply(rule has_derivative_add)
+    apply (rule has_derivative_zero_unique_strong_interval[OF as2 as1, of ])
+    unfolding o_def
+    using assms(5)
+    defer
+    apply -
+    apply rule
+  proof -
+    fix t
+    assume as: "t \<in> {0..1} - {t. (1 - t) *\<^sub>R c + t *\<^sub>R x \<in> k}"
+    have *: "c - t *\<^sub>R c + t *\<^sub>R x \<in> s - k"
+      apply safe
+      apply (rule conv[unfolded scaleR_simps])
+      using `x \<in> s` `c \<in> s` as
+      by (auto simp add: algebra_simps)
+    have "(f \<circ> (\<lambda>t. (1 - t) *\<^sub>R c + t *\<^sub>R x) has_derivative (\<lambda>x. 0) \<circ> (\<lambda>z. (0 - z *\<^sub>R c) + z *\<^sub>R x))
+      (at t within {0..1})"
+      apply (rule diff_chain_within)
+      apply (rule has_derivative_add)
       unfolding scaleR_simps
-      apply(intro FDERIV_intros)
-      apply(intro FDERIV_intros)
-      apply(rule has_derivative_within_subset,rule assms(6)[rule_format])
-      apply(rule *) apply safe apply(rule conv[unfolded scaleR_simps]) using `x\<in>s` `c\<in>s` by auto
-    thus "((\<lambda>xa. f ((1 - xa) *\<^sub>R c + xa *\<^sub>R x)) has_derivative (\<lambda>h. 0)) (at t within {0..1})" unfolding o_def .
-  qed auto thus ?thesis by auto qed
-
-subsection {* Also to any open connected set with finite set of exceptions. Could
+      apply (intro FDERIV_intros)
+      apply (intro FDERIV_intros)
+      apply (rule has_derivative_within_subset,rule assms(6)[rule_format])
+      apply (rule *)
+      apply safe
+      apply (rule conv[unfolded scaleR_simps])
+      using `x \<in> s` `c \<in> s`
+      apply auto
+      done
+    then show "((\<lambda>xa. f ((1 - xa) *\<^sub>R c + xa *\<^sub>R x)) has_derivative (\<lambda>h. 0)) (at t within {0..1})"
+      unfolding o_def .
+  qed auto
+  then show ?thesis
+    by auto
+qed
+
+
+text {* Also to any open connected set with finite set of exceptions. Could
  generalize to locally convex set with limpt-free set of exceptions. *}
 
-lemma has_derivative_zero_unique_strong_connected: fixes f::"'a::ordered_euclidean_space \<Rightarrow> 'b::banach"
-  assumes "connected s" "open s" "finite k" "continuous_on s f" "c \<in> s" "f c = y"
-  "\<forall>x\<in>(s - k). (f has_derivative (\<lambda>h. 0)) (at x within s)" "x\<in>s"
+lemma has_derivative_zero_unique_strong_connected:
+  fixes f :: "'a::ordered_euclidean_space \<Rightarrow> 'b::banach"
+  assumes "connected s"
+    and "open s"
+    and "finite k"
+    and "continuous_on s f"
+    and "c \<in> s"
+    and "f c = y"
+    and "\<forall>x\<in>(s - k). (f has_derivative (\<lambda>h. 0)) (at x within s)"
+    and "x\<in>s"
   shows "f x = y"
-proof- have "{x \<in> s. f x \<in> {y}} = {} \<or> {x \<in> s. f x \<in> {y}} = s"
-    apply(rule assms(1)[unfolded connected_clopen,rule_format]) apply rule defer
-    apply(rule continuous_closed_in_preimage[OF assms(4) closed_singleton])
-    apply(rule open_openin_trans[OF assms(2)]) unfolding open_contains_ball
-  proof safe fix x assume "x\<in>s"
+proof -
+  have "{x \<in> s. f x \<in> {y}} = {} \<or> {x \<in> s. f x \<in> {y}} = s"
+    apply (rule assms(1)[unfolded connected_clopen,rule_format])
+    apply rule
+    defer
+    apply (rule continuous_closed_in_preimage[OF assms(4) closed_singleton])
+    apply (rule open_openin_trans[OF assms(2)])
+    unfolding open_contains_ball
+  proof safe
+    fix x
+    assume "x \<in> s"
     from assms(2)[unfolded open_contains_ball,rule_format,OF this] guess e .. note e=conjunctD2[OF this]
-    show "\<exists>e>0. ball x e \<subseteq> {xa \<in> s. f xa \<in> {f x}}" apply(rule,rule,rule e)
-    proof safe fix y assume y:"y \<in> ball x e" thus "y\<in>s" using e by auto
-      show "f y = f x" apply(rule has_derivative_zero_unique_strong_convex[OF convex_ball])
-        apply(rule assms) apply(rule continuous_on_subset,rule assms) apply(rule e)+
-        apply(subst centre_in_ball,rule e,rule) apply safe
-        apply(rule has_derivative_within_subset) apply(rule assms(7)[rule_format])
-        using y e by auto qed qed
-  thus ?thesis using `x\<in>s` `f c = y` `c\<in>s` by auto qed
-
-subsection {* Integrating characteristic function of an interval. *}
-
-lemma has_integral_restrict_open_subinterval: fixes f::"'a::ordered_euclidean_space \<Rightarrow> 'b::banach"
-  assumes "(f has_integral i) {c..d}" "{c..d} \<subseteq> {a..b}"
+    show "\<exists>e>0. ball x e \<subseteq> {xa \<in> s. f xa \<in> {f x}}"
+      apply rule
+      apply rule
+      apply (rule e)
+    proof safe
+      fix y
+      assume y: "y \<in> ball x e"
+      then show "y \<in> s"
+        using e by auto
+      show "f y = f x"
+        apply (rule has_derivative_zero_unique_strong_convex[OF convex_ball])
+        apply (rule assms)
+        apply (rule continuous_on_subset)
+        apply (rule assms)
+        apply (rule e)+
+        apply (subst centre_in_ball)
+        apply (rule e)
+        apply rule
+        apply safe
+        apply (rule has_derivative_within_subset)
+        apply (rule assms(7)[rule_format])
+        using y e
+        apply auto
+        done
+    qed
+  qed
+  then show ?thesis
+    using `x \<in> s` `f c = y` `c \<in> s` by auto
+qed
+
+
+subsection {* Integrating characteristic function of an interval *}
+
+lemma has_integral_restrict_open_subinterval:
+  fixes f :: "'a::ordered_euclidean_space \<Rightarrow> 'b::banach"
+  assumes "(f has_integral i) {c..d}"
+    and "{c..d} \<subseteq> {a..b}"
   shows "((\<lambda>x. if x \<in> {c<..<d} then f x else 0) has_integral i) {a..b}"
-proof- def g \<equiv> "\<lambda>x. if x \<in>{c<..<d} then f x else 0"
-  { presume *:"{c..d}\<noteq>{} \<Longrightarrow> ?thesis"
-    show ?thesis apply(cases,rule *,assumption)
-    proof- case goal1 hence *:"{c<..<d} = {}" using interval_open_subset_closed by auto
-      show ?thesis using assms(1) unfolding * using goal1 by auto
-    qed } assume "{c..d}\<noteq>{}"
+proof -
+  def g \<equiv> "\<lambda>x. if x \<in>{c<..<d} then f x else 0"
+  {
+    presume *: "{c..d} \<noteq> {} \<Longrightarrow> ?thesis"
+    show ?thesis
+      apply cases
+      apply (rule *)
+      apply assumption
+    proof -
+      case goal1
+      then have *: "{c<..<d} = {}"
+        using interval_open_subset_closed
+        by auto
+      show ?thesis
+        using assms(1)
+        unfolding *
+        using goal1
+        by auto
+    qed
+  }
+  assume "{c..d} \<noteq> {}"
   from partial_division_extend_1[OF assms(2) this] guess p . note p=this
   note mon = monoidal_lifted[OF monoidal_monoid]
   note operat = operative_division[OF this operative_integral p(1), symmetric]
   let ?P = "(if g integrable_on {a..b} then Some (integral {a..b} g) else None) = Some i"
-  { presume "?P" hence "g integrable_on {a..b} \<and> integral {a..b} g = i"
-      apply- apply(cases,subst(asm) if_P,assumption) by auto
-    thus ?thesis using integrable_integral unfolding g_def by auto }
+  {
+    presume "?P"
+    then have "g integrable_on {a..b} \<and> integral {a..b} g = i"
+      apply -
+      apply cases
+      apply (subst(asm) if_P)
+      apply assumption
+      apply auto
+      done
+    then show ?thesis
+      using integrable_integral
+      unfolding g_def
+      by auto
+  }
 
   note iterate_eq_neutral[OF mon,unfolded neutral_lifted[OF monoidal_monoid]]
   note * = this[unfolded neutral_add]
   have iterate:"iterate (lifted op +) (p - {{c..d}})
-      (\<lambda>i. if g integrable_on i then Some (integral i g) else None) = Some 0"
-  proof(rule *,rule) case goal1 hence "x\<in>p" by auto note div = division_ofD(2-5)[OF p(1) this]
-    from div(3) guess u v apply-by(erule exE)+ note uv=this
-    have "interior x \<inter> interior {c..d} = {}" using div(4)[OF p(2)] goal1 by auto
-    hence "(g has_integral 0) x" unfolding uv apply-apply(rule has_integral_spike_interior[where f="\<lambda>x. 0"])
-      unfolding g_def interior_closed_interval by auto thus ?case by auto
+    (\<lambda>i. if g integrable_on i then Some (integral i g) else None) = Some 0"
+  proof (rule *, rule)
+    case goal1
+    then have "x \<in> p"
+      by auto
+    note div = division_ofD(2-5)[OF p(1) this]
+    from div(3) guess u v by (elim exE) note uv=this
+    have "interior x \<inter> interior {c..d} = {}"
+      using div(4)[OF p(2)] goal1 by auto
+    then have "(g has_integral 0) x"
+      unfolding uv
+      apply -
+      apply (rule has_integral_spike_interior[where f="\<lambda>x. 0"])
+      unfolding g_def interior_closed_interval
+      apply auto
+      done
+    then show ?case
+      by auto
   qed
 
-  have *:"p = insert {c..d} (p - {{c..d}})" using p by auto
-  have **:"g integrable_on {c..d}" apply(rule integrable_spike_interior[where f=f])
-    unfolding g_def defer apply(rule has_integral_integrable) using assms(1) by auto
-  moreover have "integral {c..d} g = i" apply(rule has_integral_unique[OF _ assms(1)])
-    apply(rule has_integral_spike_interior[where f=g]) defer
-    apply(rule integrable_integral[OF **]) unfolding g_def by auto
-  ultimately show ?P unfolding operat apply- apply(subst *) apply(subst iterate_insert) apply rule+
-    unfolding iterate defer apply(subst if_not_P) defer using p by auto qed
-
-lemma has_integral_restrict_closed_subinterval: fixes f::"'a::ordered_euclidean_space \<Rightarrow> 'b::banach"
-  assumes "(f has_integral i) ({c..d})" "{c..d} \<subseteq> {a..b}"
+  have *: "p = insert {c..d} (p - {{c..d}})"
+    using p by auto
+  have **: "g integrable_on {c..d}"
+    apply (rule integrable_spike_interior[where f=f])
+    unfolding g_def
+    defer
+    apply (rule has_integral_integrable)
+    using assms(1)
+    apply auto
+    done
+  moreover
+  have "integral {c..d} g = i"
+    apply (rule has_integral_unique[OF _ assms(1)])
+    apply (rule has_integral_spike_interior[where f=g])
+    defer
+    apply (rule integrable_integral[OF **])
+    unfolding g_def
+    apply auto
+    done
+  ultimately show ?P
+    unfolding operat
+    apply (subst *)
+    apply (subst iterate_insert)
+    apply rule+
+    unfolding iterate
+    defer
+    apply (subst if_not_P)
+    defer
+    using p
+    apply auto
+    done
+qed
+
+lemma has_integral_restrict_closed_subinterval:
+  fixes f :: "'a::ordered_euclidean_space \<Rightarrow> 'b::banach"
+  assumes "(f has_integral i) {c..d}"
+    and "{c..d} \<subseteq> {a..b}"
   shows "((\<lambda>x. if x \<in> {c..d} then f x else 0) has_integral i) {a..b}"
-proof- note has_integral_restrict_open_subinterval[OF assms]
+proof -
+  note has_integral_restrict_open_subinterval[OF assms]
   note * = has_integral_spike[OF negligible_frontier_interval _ this]
-  show ?thesis apply(rule *[of c d]) using interval_open_subset_closed[of c d] by auto qed
-
-lemma has_integral_restrict_closed_subintervals_eq: fixes f::"'a::ordered_euclidean_space \<Rightarrow> 'b::banach" assumes "{c..d} \<subseteq> {a..b}"
-  shows "((\<lambda>x. if x \<in> {c..d} then f x else 0) has_integral i) {a..b} \<longleftrightarrow> (f has_integral i) {c..d}" (is "?l = ?r")
-proof(cases "{c..d} = {}") case False let ?g = "\<lambda>x. if x \<in> {c..d} then f x else 0"
-  show ?thesis apply rule defer apply(rule has_integral_restrict_closed_subinterval[OF _ assms])
-  proof assumption assume ?l hence "?g integrable_on {c..d}"
-      apply-apply(rule integrable_subinterval[OF _ assms]) by auto
-    hence *:"f integrable_on {c..d}"apply-apply(rule integrable_eq) by auto
-    hence "i = integral {c..d} f" apply-apply(rule has_integral_unique)
-      apply(rule `?l`) apply(rule has_integral_restrict_closed_subinterval[OF _ assms]) by auto
-    thus ?r using * by auto qed qed auto
-
-subsection {* Hence we can apply the limit process uniformly to all integrals. *}
-
-lemma has_integral': fixes f::"'n::ordered_euclidean_space \<Rightarrow> 'a::banach" shows
- "(f has_integral i) s \<longleftrightarrow> (\<forall>e>0. \<exists>B>0. \<forall>a b. ball 0 B \<subseteq> {a..b}
-  \<longrightarrow> (\<exists>z. ((\<lambda>x. if x \<in> s then f(x) else 0) has_integral z) {a..b} \<and> norm(z - i) < e))" (is "?l \<longleftrightarrow> (\<forall>e>0. ?r e)")
-proof- { presume *:"\<exists>a b. s = {a..b} \<Longrightarrow> ?thesis"
-    show ?thesis apply(cases,rule *,assumption)
-      apply(subst has_integral_alt) by auto }
-  assume "\<exists>a b. s = {a..b}" then guess a b apply-by(erule exE)+ note s=this
+  show ?thesis
+    apply (rule *[of c d])
+    using interval_open_subset_closed[of c d]
+    apply auto
+    done
+qed
+
+lemma has_integral_restrict_closed_subintervals_eq:
+  fixes f :: "'a::ordered_euclidean_space \<Rightarrow> 'b::banach"
+  assumes "{c..d} \<subseteq> {a..b}"
+  shows "((\<lambda>x. if x \<in> {c..d} then f x else 0) has_integral i) {a..b} \<longleftrightarrow> (f has_integral i) {c..d}"
+  (is "?l = ?r")
+proof (cases "{c..d} = {}")
+  case False
+  let ?g = "\<lambda>x. if x \<in> {c..d} then f x else 0"
+  show ?thesis
+    apply rule
+    defer
+    apply (rule has_integral_restrict_closed_subinterval[OF _ assms])
+    apply assumption
+  proof -
+    assume ?l
+    then have "?g integrable_on {c..d}"
+      apply -
+      apply (rule integrable_subinterval[OF _ assms])
+      apply auto
+      done
+    then have *: "f integrable_on {c..d}"
+      apply -
+      apply (rule integrable_eq)
+      apply auto
+      done
+    then have "i = integral {c..d} f"
+      apply -
+      apply (rule has_integral_unique)
+      apply (rule `?l`)
+      apply (rule has_integral_restrict_closed_subinterval[OF _ assms])
+      apply auto
+      done
+    then show ?r
+      using * by auto
+  qed
+qed auto
+
+
+text {* Hence we can apply the limit process uniformly to all integrals. *}
+
+lemma has_integral':
+  fixes f :: "'n::ordered_euclidean_space \<Rightarrow> 'a::banach"
+  shows "(f has_integral i) s \<longleftrightarrow>
+    (\<forall>e>0. \<exists>B>0. \<forall>a b. ball 0 B \<subseteq> {a..b} \<longrightarrow>
+      (\<exists>z. ((\<lambda>x. if x \<in> s then f(x) else 0) has_integral z) {a..b} \<and> norm(z - i) < e))"
+  (is "?l \<longleftrightarrow> (\<forall>e>0. ?r e)")
+proof -
+  {
+    presume *: "\<exists>a b. s = {a..b} \<Longrightarrow> ?thesis"
+    show ?thesis
+      apply cases
+      apply (rule *)
+      apply assumption
+      apply (subst has_integral_alt)
+      apply auto
+      done
+  }
+  assume "\<exists>a b. s = {a..b}"
+  then guess a b by (elim exE) note s=this
   from bounded_interval[of a b, THEN conjunct1, unfolded bounded_pos] guess B ..
-  note B = conjunctD2[OF this,rule_format] show ?thesis apply safe
-  proof- fix e assume ?l "e>(0::real)"
-    show "?r e" apply(rule_tac x="B+1" in exI) apply safe defer apply(rule_tac x=i in exI)
-    proof fix c d assume as:"ball 0 (B+1) \<subseteq> {c..d::'n::ordered_euclidean_space}"
-      thus "((\<lambda>x. if x \<in> s then f x else 0) has_integral i) {c..d}" unfolding s
-        apply-apply(rule has_integral_restrict_closed_subinterval) apply(rule `?l`[unfolded s])
-        apply safe apply(drule B(2)[rule_format]) unfolding subset_eq apply(erule_tac x=x in ballE)
-        by(auto simp add:dist_norm)
-    qed(insert B `e>0`, auto)
-  next assume as:"\<forall>e>0. ?r e"
+  note B = conjunctD2[OF this,rule_format] show ?thesis
+    apply safe
+  proof -
+    fix e :: real
+    assume ?l and "e > 0"
+    show "?r e"
+      apply (rule_tac x="B+1" in exI)
+      apply safe
+      defer
+      apply (rule_tac x=i in exI)
+    proof
+      fix c d :: 'n
+      assume as: "ball 0 (B+1) \<subseteq> {c..d}"
+      then show "((\<lambda>x. if x \<in> s then f x else 0) has_integral i) {c..d}"
+        unfolding s
+        apply -
+        apply (rule has_integral_restrict_closed_subinterval)
+        apply (rule `?l`[unfolded s])
+        apply safe
+        apply (drule B(2)[rule_format])
+        unfolding subset_eq
+        apply (erule_tac x=x in ballE)
+        apply (auto simp add: dist_norm)
+        done
+    qed (insert B `e>0`, auto)
+  next
+    assume as: "\<forall>e>0. ?r e"
     from this[rule_format,OF zero_less_one] guess C .. note C=conjunctD2[OF this,rule_format]
-    def c \<equiv> "(\<Sum>i\<in>Basis. (- max B C) *\<^sub>R i)::'n::ordered_euclidean_space"
-    def d \<equiv> "(\<Sum>i\<in>Basis. max B C *\<^sub>R i)::'n::ordered_euclidean_space"
-    have c_d:"{a..b} \<subseteq> {c..d}" apply safe apply(drule B(2)) unfolding mem_interval
+    def c \<equiv> "(\<Sum>i\<in>Basis. (- max B C) *\<^sub>R i)::'n"
+    def d \<equiv> "(\<Sum>i\<in>Basis. max B C *\<^sub>R i)::'n"
+    have c_d: "{a..b} \<subseteq> {c..d}"
+      apply safe
+      apply (drule B(2))
+      unfolding mem_interval
     proof
-      case goal1 thus ?case using Basis_le_norm[OF `i\<in>Basis`, of x] unfolding c_def d_def
-        by(auto simp add:field_simps setsum_negf)
+      case goal1
+      then show ?case
+        using Basis_le_norm[OF `i\<in>Basis`, of x]
+        unfolding c_def d_def
+        by (auto simp add: field_simps setsum_negf)
     qed
-    have "ball 0 C \<subseteq> {c..d}" apply safe unfolding mem_interval mem_ball dist_norm
+    have "ball 0 C \<subseteq> {c..d}"
+      apply safe
+      unfolding mem_interval mem_ball dist_norm
     proof
-      case goal1 thus ?case
-        using Basis_le_norm[OF `i\<in>Basis`, of x] unfolding c_def d_def by (auto simp: setsum_negf)
+      case goal1
+      then show ?case
+        using Basis_le_norm[OF `i\<in>Basis`, of x]
+        unfolding c_def d_def
+        by (auto simp: setsum_negf)
     qed
     from C(2)[OF this] have "\<exists>y. (f has_integral y) {a..b}"
-      unfolding has_integral_restrict_closed_subintervals_eq[OF c_d,symmetric] unfolding s by auto
+      unfolding has_integral_restrict_closed_subintervals_eq[OF c_d,symmetric]
+      unfolding s
+      by auto
     then guess y .. note y=this
 
-    have "y = i" proof(rule ccontr) assume "y\<noteq>i" hence "0 < norm (y - i)" by auto
+    have "y = i"
+    proof (rule ccontr)
+      assume "\<not> ?thesis"
+      then have "0 < norm (y - i)"
+        by auto
       from as[rule_format,OF this] guess C ..  note C=conjunctD2[OF this,rule_format]
-      def c \<equiv> "(\<Sum>i\<in>Basis. (- max B C) *\<^sub>R i)::'n::ordered_euclidean_space"
-      def d \<equiv> "(\<Sum>i\<in>Basis. max B C *\<^sub>R i)::'n::ordered_euclidean_space"
-      have c_d:"{a..b} \<subseteq> {c..d}" apply safe apply(drule B(2)) unfolding mem_interval
-      proof case goal1 thus ?case using Basis_le_norm[of i x] unfolding c_def d_def
-          by(auto simp add:field_simps setsum_negf) qed
-      have "ball 0 C \<subseteq> {c..d}" apply safe unfolding mem_interval mem_ball dist_norm
-      proof case goal1 thus ?case using Basis_le_norm[of i x] unfolding c_def d_def by (auto simp: setsum_negf) qed
+      def c \<equiv> "(\<Sum>i\<in>Basis. (- max B C) *\<^sub>R i)::'n"
+      def d \<equiv> "(\<Sum>i\<in>Basis. max B C *\<^sub>R i)::'n"
+      have c_d: "{a..b} \<subseteq> {c..d}"
+        apply safe
+        apply (drule B(2))
+        unfolding mem_interval
+      proof
+        case goal1
+        then show ?case
+          using Basis_le_norm[of i x]
+          unfolding c_def d_def
+          by (auto simp add: field_simps setsum_negf)
+      qed
+      have "ball 0 C \<subseteq> {c..d}"
+        apply safe
+        unfolding mem_interval mem_ball dist_norm
+      proof
+        case goal1
+        then show ?case
+          using Basis_le_norm[of i x]
+          unfolding c_def d_def
+          by (auto simp: setsum_negf)
+      qed
       note C(2)[OF this] then guess z .. note z = conjunctD2[OF this, unfolded s]
       note this[unfolded has_integral_restrict_closed_subintervals_eq[OF c_d]]
-      hence "z = y" "norm (z - i) < norm (y - i)" apply- apply(rule has_integral_unique[OF _ y(1)]) .
-      thus False by auto qed
-    thus ?l using y unfolding s by auto qed qed
-
-lemma has_integral_le: fixes f::"'n::ordered_euclidean_space \<Rightarrow> real"
-  assumes "(f has_integral i) s" "(g has_integral j) s"  "\<forall>x\<in>s. (f x) \<le> (g x)"
+      then have "z = y" and "norm (z - i) < norm (y - i)"
+        apply -
+        apply (rule has_integral_unique[OF _ y(1)])
+        apply assumption
+        apply assumption
+        done
+      then show False
+        by auto
+    qed
+    then show ?l
+      using y
+      unfolding s
+      by auto
+  qed
+qed
+
+lemma has_integral_le:
+  fixes f :: "'n::ordered_euclidean_space \<Rightarrow> real"
+  assumes "(f has_integral i) s"
+    and "(g has_integral j) s"
+    and "\<forall>x\<in>s. f x \<le> g x"
   shows "i \<le> j"
-  using has_integral_component_le[OF _ assms(1-2), of 1] using assms(3) by auto
-
-lemma integral_le: fixes f::"'n::ordered_euclidean_space \<Rightarrow> real"
-  assumes "f integrable_on s" "g integrable_on s" "\<forall>x\<in>s. f x \<le> g x"
+  using has_integral_component_le[OF _ assms(1-2), of 1]
+  using assms(3)
+  by auto
+
+lemma integral_le:
+  fixes f :: "'n::ordered_euclidean_space \<Rightarrow> real"
+  assumes "f integrable_on s"
+    and "g integrable_on s"
+    and "\<forall>x\<in>s. f x \<le> g x"
   shows "integral s f \<le> integral s g"
-  using has_integral_le[OF assms(1,2)[unfolded has_integral_integral] assms(3)] .
-
-lemma has_integral_nonneg: fixes f::"'n::ordered_euclidean_space \<Rightarrow> real"
-  assumes "(f has_integral i) s" "\<forall>x\<in>s. 0 \<le> f x" shows "0 \<le> i"
+  by (rule has_integral_le[OF assms(1,2)[unfolded has_integral_integral] assms(3)])
+
+lemma has_integral_nonneg:
+  fixes f :: "'n::ordered_euclidean_space \<Rightarrow> real"
+  assumes "(f has_integral i) s"
+    and "\<forall>x\<in>s. 0 \<le> f x"
+  shows "0 \<le> i"
   using has_integral_component_nonneg[of 1 f i s]
-  unfolding o_def using assms by auto
-
-lemma integral_nonneg: fixes f::"'n::ordered_euclidean_space \<Rightarrow> real"
-  assumes "f integrable_on s" "\<forall>x\<in>s. 0 \<le> f x" shows "0 \<le> integral s f"
-  using has_integral_nonneg[OF assms(1)[unfolded has_integral_integral] assms(2)] .
-
-subsection {* Hence a general restriction property. *}
-
-lemma has_integral_restrict[simp]: assumes "s \<subseteq> t" shows
-  "((\<lambda>x. if x \<in> s then f x else (0::'a::banach)) has_integral i) t \<longleftrightarrow> (f has_integral i) s"
-proof- have *:"\<And>x. (if x \<in> t then if x \<in> s then f x else 0 else 0) =  (if x\<in>s then f x else 0)" using assms by auto
-  show ?thesis apply(subst(2) has_integral') apply(subst has_integral') unfolding * by rule qed
-
-lemma has_integral_restrict_univ: fixes f::"'n::ordered_euclidean_space \<Rightarrow> 'a::banach" shows
-  "((\<lambda>x. if x \<in> s then f x else 0) has_integral i) UNIV \<longleftrightarrow> (f has_integral i) s" by auto
-
-lemma has_integral_on_superset: fixes f::"'n::ordered_euclidean_space \<Rightarrow> 'a::banach"
-  assumes "\<forall>x. ~(x \<in> s) \<longrightarrow> f x = 0" "s \<subseteq> t" "(f has_integral i) s"
+  unfolding o_def
+  using assms
+  by auto
+
+lemma integral_nonneg:
+  fixes f :: "'n::ordered_euclidean_space \<Rightarrow> real"
+  assumes "f integrable_on s"
+    and "\<forall>x\<in>s. 0 \<le> f x"
+  shows "0 \<le> integral s f"
+  by (rule has_integral_nonneg[OF assms(1)[unfolded has_integral_integral] assms(2)])
+
+
+text {* Hence a general restriction property. *}
+
+lemma has_integral_restrict[simp]:
+  assumes "s \<subseteq> t"
+  shows "((\<lambda>x. if x \<in> s then f x else (0::'a::banach)) has_integral i) t \<longleftrightarrow> (f has_integral i) s"
+proof -
+  have *: "\<And>x. (if x \<in> t then if x \<in> s then f x else 0 else 0) =  (if x\<in>s then f x else 0)"
+    using assms by auto
+  show ?thesis
+    apply (subst(2) has_integral')
+    apply (subst has_integral')
+    unfolding *
+    apply rule
+    done
+qed
+
+lemma has_integral_restrict_univ:
+  fixes f :: "'n::ordered_euclidean_space \<Rightarrow> 'a::banach"
+  shows "((\<lambda>x. if x \<in> s then f x else 0) has_integral i) UNIV \<longleftrightarrow> (f has_integral i) s"
+  by auto
+
+lemma has_integral_on_superset:
+  fixes f :: "'n::ordered_euclidean_space \<Rightarrow> 'a::banach"
+  assumes "\<forall>x. x \<notin> s \<longrightarrow> f x = 0"
+    and "s \<subseteq> t"
+    and "(f has_integral i) s"
   shows "(f has_integral i) t"
-proof- have "(\<lambda>x. if x \<in> s then f x else 0) = (\<lambda>x. if x \<in> t then f x else 0)"
-    apply(rule) using assms(1-2) by auto
-  thus ?thesis apply- using assms(3) apply(subst has_integral_restrict_univ[symmetric])
-  apply- apply(subst(asm) has_integral_restrict_univ[symmetric]) by auto qed
-
-lemma integrable_on_superset: fixes f::"'n::ordered_euclidean_space \<Rightarrow> 'a::banach"
-  assumes "\<forall>x. ~(x \<in> s) \<longrightarrow> f x = 0" "s \<subseteq> t" "f integrable_on s"
+proof -
+  have "(\<lambda>x. if x \<in> s then f x else 0) = (\<lambda>x. if x \<in> t then f x else 0)"
+    apply rule
+    using assms(1-2)
+    apply auto
+    done
+  then show ?thesis
+    using assms(3)
+    apply (subst has_integral_restrict_univ[symmetric])
+    apply (subst(asm) has_integral_restrict_univ[symmetric])
+    apply auto
+    done
+qed
+
+lemma integrable_on_superset:
+  fixes f :: "'n::ordered_euclidean_space \<Rightarrow> 'a::banach"
+  assumes "\<forall>x. x \<notin> s \<longrightarrow> f x = 0"
+    and "s \<subseteq> t"
+    and "f integrable_on s"
   shows "f integrable_on t"
-  using assms unfolding integrable_on_def by(auto intro:has_integral_on_superset)
-
-lemma integral_restrict_univ[intro]: fixes f::"'n::ordered_euclidean_space \<Rightarrow> 'a::banach"
+  using assms
+  unfolding integrable_on_def
+  by (auto intro:has_integral_on_superset)
+
+lemma integral_restrict_univ[intro]:
+  fixes f :: "'n::ordered_euclidean_space \<Rightarrow> 'a::banach"
   shows "f integrable_on s \<Longrightarrow> integral UNIV (\<lambda>x. if x \<in> s then f x else 0) = integral s f"
-  apply(rule integral_unique) unfolding has_integral_restrict_univ by auto
-
-lemma integrable_restrict_univ: fixes f::"'n::ordered_euclidean_space \<Rightarrow> 'a::banach" shows
- "(\<lambda>x. if x \<in> s then f x else 0) integrable_on UNIV \<longleftrightarrow> f integrable_on s"
-  unfolding integrable_on_def by auto
-
-lemma negligible_on_intervals: "negligible s \<longleftrightarrow> (\<forall>a b. negligible(s \<inter> {a..b}))" (is "?l = ?r")
-proof assume ?r show ?l unfolding negligible_def
-  proof safe case goal1 show ?case apply(rule has_integral_negligible[OF `?r`[rule_format,of a b]])
-      unfolding indicator_def by auto qed qed auto
-
-lemma has_integral_spike_set_eq: fixes f::"'n::ordered_euclidean_space \<Rightarrow> 'a::banach"
-  assumes "negligible((s - t) \<union> (t - s))" shows "((f has_integral y) s \<longleftrightarrow> (f has_integral y) t)"
-  unfolding has_integral_restrict_univ[symmetric,of f] apply(rule has_integral_spike_eq[OF assms]) by (auto split: split_if_asm)
-
-lemma has_integral_spike_set[dest]: fixes f::"'n::ordered_euclidean_space \<Rightarrow> 'a::banach"
-  assumes "negligible((s - t) \<union> (t - s))" "(f has_integral y) s"
+  apply (rule integral_unique)
+  unfolding has_integral_restrict_univ
+  apply auto
+  done
+
+lemma integrable_restrict_univ:
+  fixes f :: "'n::ordered_euclidean_space \<Rightarrow> 'a::banach"
+  shows "(\<lambda>x. if x \<in> s then f x else 0) integrable_on UNIV \<longleftrightarrow> f integrable_on s"
+  unfolding integrable_on_def
+  by auto
+
+lemma negligible_on_intervals: "negligible s \<longleftrightarrow> (\<forall>a b. negligible(s \<inter> {a..b}))" (is "?l \<longleftrightarrow> ?r")
+proof
+  assume ?r
+  show ?l
+    unfolding negligible_def
+  proof safe
+    case goal1
+    show ?case
+      apply (rule has_integral_negligible[OF `?r`[rule_format,of a b]])
+      unfolding indicator_def
+      apply auto
+      done
+  qed
+qed auto
+
+lemma has_integral_spike_set_eq:
+  fixes f :: "'n::ordered_euclidean_space \<Rightarrow> 'a::banach"
+  assumes "negligible ((s - t) \<union> (t - s))"
+  shows "(f has_integral y) s \<longleftrightarrow> (f has_integral y) t"
+  unfolding has_integral_restrict_univ[symmetric,of f]
+  apply (rule has_integral_spike_eq[OF assms])
+  by (auto split: split_if_asm)
+
+lemma has_integral_spike_set[dest]:
+  fixes f :: "'n::ordered_euclidean_space \<Rightarrow> 'a::banach"
+  assumes "negligible ((s - t) \<union> (t - s))"
+    and "(f has_integral y) s"
   shows "(f has_integral y) t"
-  using assms has_integral_spike_set_eq by auto
-
-lemma integrable_spike_set[dest]: fixes f::"'n::ordered_euclidean_space \<Rightarrow> 'a::banach"
-  assumes "negligible((s - t) \<union> (t - s))" "f integrable_on s"
-  shows "f integrable_on t" using assms(2) unfolding integrable_on_def
+  using assms has_integral_spike_set_eq
+  by auto
+
+lemma integrable_spike_set[dest]:
+  fixes f :: "'n::ordered_euclidean_space \<Rightarrow> 'a::banach"
+  assumes "negligible ((s - t) \<union> (t - s))"
+    and "f integrable_on s"
+  shows "f integrable_on t"
+  using assms(2)
+  unfolding integrable_on_def
   unfolding has_integral_spike_set_eq[OF assms(1)] .
 
-lemma integrable_spike_set_eq: fixes f::"'n::ordered_euclidean_space \<Rightarrow> 'a::banach"
-  assumes "negligible((s - t) \<union> (t - s))"
-  shows "(f integrable_on s \<longleftrightarrow> f integrable_on t)"
-  apply(rule,rule_tac[!] integrable_spike_set) using assms by auto
+lemma integrable_spike_set_eq:
+  fixes f :: "'n::ordered_euclidean_space \<Rightarrow> 'a::banach"
+  assumes "negligible ((s - t) \<union> (t - s))"
+  shows "f integrable_on s \<longleftrightarrow> f integrable_on t"
+  apply rule
+  apply (rule_tac[!] integrable_spike_set)
+  using assms
+  apply auto
+  done
 
 (*lemma integral_spike_set:
  "\<forall>f:real^M->real^N g s t.
@@ -8700,156 +9267,354 @@
   MP_TAC(ISPEC `s:real^M->bool` CLOSURE_SUBSET) THEN
   SET_TAC[]);;*)
 
-subsection {* More lemmas that are useful later. *}
-
-lemma has_integral_subset_component_le: fixes f::"'n::ordered_euclidean_space \<Rightarrow> 'm::ordered_euclidean_space"
-  assumes k: "k\<in>Basis" and as: "s \<subseteq> t" "(f has_integral i) s" "(f has_integral j) t" "\<forall>x\<in>t. 0 \<le> f(x)\<bullet>k"
+
+subsection {* More lemmas that are useful later *}
+
+lemma has_integral_subset_component_le:
+  fixes f :: "'n::ordered_euclidean_space \<Rightarrow> 'm::ordered_euclidean_space"
+  assumes k: "k \<in> Basis"
+    and as: "s \<subseteq> t" "(f has_integral i) s" "(f has_integral j) t" "\<forall>x\<in>t. 0 \<le> f(x)\<bullet>k"
   shows "i\<bullet>k \<le> j\<bullet>k"
-proof- note has_integral_restrict_univ[symmetric, of f]
+proof -
+  note has_integral_restrict_univ[symmetric, of f]
   note as(2-3)[unfolded this] note * = has_integral_component_le[OF k this]
-  show ?thesis apply(rule *) using as(1,4) by auto qed
-
-lemma has_integral_subset_le: fixes f::"'n::ordered_euclidean_space \<Rightarrow> real"
-  assumes as: "s \<subseteq> t" "(f has_integral i) s" "(f has_integral j) t" "\<forall>x\<in>t. 0 \<le> f(x)"
+  show ?thesis
+    apply (rule *)
+    using as(1,4)
+    apply auto
+    done
+qed
+
+lemma has_integral_subset_le:
+  fixes f :: "'n::ordered_euclidean_space \<Rightarrow> real"
+  assumes "s \<subseteq> t"
+    and "(f has_integral i) s"
+    and "(f has_integral j) t"
+    and "\<forall>x\<in>t. 0 \<le> f x"
   shows "i \<le> j"
-  using has_integral_subset_component_le[OF _ assms(1), of 1 f i j] using assms by auto
-
-lemma integral_subset_component_le: fixes f::"'n::ordered_euclidean_space \<Rightarrow> 'm::ordered_euclidean_space"
-  assumes "k\<in>Basis" "s \<subseteq> t" "f integrable_on s" "f integrable_on t" "\<forall>x \<in> t. 0 \<le> f(x)\<bullet>k"
+  using has_integral_subset_component_le[OF _ assms(1), of 1 f i j]
+  using assms
+  by auto
+
+lemma integral_subset_component_le:
+  fixes f :: "'n::ordered_euclidean_space \<Rightarrow> 'm::ordered_euclidean_space"
+  assumes "k \<in> Basis"
+    and "s \<subseteq> t"
+    and "f integrable_on s"
+    and "f integrable_on t"
+    and "\<forall>x \<in> t. 0 \<le> f x \<bullet> k"
   shows "(integral s f)\<bullet>k \<le> (integral t f)\<bullet>k"
-  apply(rule has_integral_subset_component_le) using assms by auto
-
-lemma integral_subset_le: fixes f::"'n::ordered_euclidean_space \<Rightarrow> real"
-  assumes "s \<subseteq> t" "f integrable_on s" "f integrable_on t" "\<forall>x \<in> t. 0 \<le> f(x)"
-  shows "(integral s f) \<le> (integral t f)"
-  apply(rule has_integral_subset_le) using assms by auto
-
-lemma has_integral_alt': fixes f::"'n::ordered_euclidean_space \<Rightarrow> 'a::banach"
+  apply (rule has_integral_subset_component_le)
+  using assms
+  apply auto
+  done
+
+lemma integral_subset_le:
+  fixes f :: "'n::ordered_euclidean_space \<Rightarrow> real"
+  assumes "s \<subseteq> t"
+    and "f integrable_on s"
+    and "f integrable_on t"
+    and "\<forall>x \<in> t. 0 \<le> f x"
+  shows "integral s f \<le> integral t f"
+  apply (rule has_integral_subset_le)
+  using assms
+  apply auto
+  done
+
+lemma has_integral_alt':
+  fixes f :: "'n::ordered_euclidean_space \<Rightarrow> 'a::banach"
   shows "(f has_integral i) s \<longleftrightarrow> (\<forall>a b. (\<lambda>x. if x \<in> s then f x else 0) integrable_on {a..b}) \<and>
-  (\<forall>e>0. \<exists>B>0. \<forall>a b. ball 0 B \<subseteq> {a..b} \<longrightarrow> norm(integral {a..b} (\<lambda>x. if x \<in> s then f x else 0) - i) < e)" (is "?l = ?r")
-proof assume ?r
-  show ?l apply- apply(subst has_integral')
-  proof safe case goal1 from `?r`[THEN conjunct2,rule_format,OF this] guess B .. note B=conjunctD2[OF this]
-    show ?case apply(rule,rule,rule B,safe)
-      apply(rule_tac x="integral {a..b} (\<lambda>x. if x \<in> s then f x else 0)" in exI)
-      apply(drule B(2)[rule_format]) using integrable_integral[OF `?r`[THEN conjunct1,rule_format]] by auto
-  qed next
+    (\<forall>e>0. \<exists>B>0. \<forall>a b. ball 0 B \<subseteq> {a..b} \<longrightarrow>
+      norm (integral {a..b} (\<lambda>x. if x \<in> s then f x else 0) - i) < e)"
+  (is "?l = ?r")
+proof
+  assume ?r
+  show ?l
+    apply (subst has_integral')
+    apply safe
+  proof -
+    case goal1
+    from `?r`[THEN conjunct2,rule_format,OF this] guess B .. note B=conjunctD2[OF this]
+    show ?case
+      apply rule
+      apply rule
+      apply (rule B)
+      apply safe
+      apply (rule_tac x="integral {a..b} (\<lambda>x. if x \<in> s then f x else 0)" in exI)
+      apply (drule B(2)[rule_format])
+      using integrable_integral[OF `?r`[THEN conjunct1,rule_format]]
+      apply auto
+      done
+  qed
+next
   assume ?l note as = this[unfolded has_integral'[of f],rule_format]
   let ?f = "\<lambda>x. if x \<in> s then f x else 0"
-  show ?r proof safe fix a b::"'n::ordered_euclidean_space"
+  show ?r
+  proof safe
+    fix a b :: 'n
     from as[OF zero_less_one] guess B .. note B=conjunctD2[OF this,rule_format]
-    let ?a = "\<Sum>i\<in>Basis. min (a\<bullet>i) (-B) *\<^sub>R i::'n" and ?b = "\<Sum>i\<in>Basis. max (b\<bullet>i) B *\<^sub>R i::'n"
-    show "?f integrable_on {a..b}" apply(rule integrable_subinterval[of _ ?a ?b])
-    proof- have "ball 0 B \<subseteq> {?a..?b}" apply safe unfolding mem_ball mem_interval dist_norm
-      proof case goal1 thus ?case using Basis_le_norm[of i x] by(auto simp add:field_simps) qed
+    let ?a = "\<Sum>i\<in>Basis. min (a\<bullet>i) (-B) *\<^sub>R i::'n"
+    let ?b = "\<Sum>i\<in>Basis. max (b\<bullet>i) B *\<^sub>R i::'n"
+    show "?f integrable_on {a..b}"
+    proof (rule integrable_subinterval[of _ ?a ?b])
+      have "ball 0 B \<subseteq> {?a..?b}"
+        apply safe
+        unfolding mem_ball mem_interval dist_norm
+      proof
+        case goal1
+        then show ?case using Basis_le_norm[of i x]
+          by (auto simp add:field_simps)
+      qed
       from B(2)[OF this] guess z .. note conjunct1[OF this]
-      thus "?f integrable_on {?a..?b}" unfolding integrable_on_def by auto
-      show "{a..b} \<subseteq> {?a..?b}" apply safe unfolding mem_interval apply(rule,erule_tac x=i in ballE) by auto qed
-
-    fix e::real assume "e>0" from as[OF this] guess B .. note B=conjunctD2[OF this,rule_format]
+      then show "?f integrable_on {?a..?b}"
+        unfolding integrable_on_def by auto
+      show "{a..b} \<subseteq> {?a..?b}"
+        apply safe
+        unfolding mem_interval
+        apply rule
+        apply (erule_tac x=i in ballE)
+        apply auto
+        done
+    qed
+
+    fix e :: real
+    assume "e > 0"
+    from as[OF this] guess B .. note B=conjunctD2[OF this,rule_format]
     show "\<exists>B>0. \<forall>a b. ball 0 B \<subseteq> {a..b} \<longrightarrow>
-                    norm (integral {a..b} (\<lambda>x. if x \<in> s then f x else 0) - i) < e"
-    proof(rule,rule,rule B,safe) case goal1 from B(2)[OF this] guess z .. note z=conjunctD2[OF this]
-      from integral_unique[OF this(1)] show ?case using z(2) by auto qed qed qed
+      norm (integral {a..b} (\<lambda>x. if x \<in> s then f x else 0) - i) < e"
+      apply rule
+      apply rule
+      apply (rule B)
+      apply safe
+    proof -
+      case goal1
+      from B(2)[OF this] guess z .. note z=conjunctD2[OF this]
+      from integral_unique[OF this(1)] show ?case
+        using z(2) by auto
+    qed
+  qed
+qed
 
 
 subsection {* Continuity of the integral (for a 1-dimensional interval). *}
 
-lemma integrable_alt: fixes f::"'n::ordered_euclidean_space \<Rightarrow> 'a::banach" shows
-  "f integrable_on s \<longleftrightarrow>
-          (\<forall>a b. (\<lambda>x. if x \<in> s then f x else 0) integrable_on {a..b}) \<and>
-          (\<forall>e>0. \<exists>B>0. \<forall>a b c d. ball 0 B \<subseteq> {a..b} \<and> ball 0 B \<subseteq> {c..d}
-  \<longrightarrow> norm(integral {a..b} (\<lambda>x. if x \<in> s then f x else 0) -
-          integral {c..d}  (\<lambda>x. if x \<in> s then f x else 0)) < e)" (is "?l = ?r")
-proof assume ?l then guess y unfolding integrable_on_def .. note this[unfolded has_integral_alt'[of f]]
-  note y=conjunctD2[OF this,rule_format] show ?r apply safe apply(rule y)
-  proof- case goal1 hence "e/2 > 0" by auto from y(2)[OF this] guess B .. note B=conjunctD2[OF this,rule_format]
-    show ?case apply(rule,rule,rule B)
-    proof safe case goal1 show ?case apply(rule norm_triangle_half_l)
-        using B(2)[OF goal1(1)] B(2)[OF goal1(2)] by auto qed qed
-
-next assume ?r note as = conjunctD2[OF this,rule_format]
+lemma integrable_alt:
+  fixes f :: "'n::ordered_euclidean_space \<Rightarrow> 'a::banach"
+  shows "f integrable_on s \<longleftrightarrow>
+    (\<forall>a b. (\<lambda>x. if x \<in> s then f x else 0) integrable_on {a..b}) \<and>
+    (\<forall>e>0. \<exists>B>0. \<forall>a b c d. ball 0 B \<subseteq> {a..b} \<and> ball 0 B \<subseteq> {c..d} \<longrightarrow>
+    norm (integral {a..b} (\<lambda>x. if x \<in> s then f x else 0) -
+      integral {c..d}  (\<lambda>x. if x \<in> s then f x else 0)) < e)"
+  (is "?l = ?r")
+proof
+  assume ?l
+  then guess y unfolding integrable_on_def .. note this[unfolded has_integral_alt'[of f]]
+  note y=conjunctD2[OF this,rule_format]
+  show ?r
+    apply safe
+    apply (rule y)
+  proof -
+    case goal1
+    then have "e/2 > 0"
+      by auto
+    from y(2)[OF this] guess B .. note B=conjunctD2[OF this,rule_format]
+    show ?case
+      apply rule
+      apply rule
+      apply (rule B)
+      apply safe
+    proof -
+      case goal1
+      show ?case
+        apply (rule norm_triangle_half_l)
+        using B(2)[OF goal1(1)] B(2)[OF goal1(2)]
+        apply auto
+        done
+    qed
+  qed
+next
+  assume ?r
+  note as = conjunctD2[OF this,rule_format]
   let ?cube = "\<lambda>n. {(\<Sum>i\<in>Basis. - real n *\<^sub>R i)::'n .. (\<Sum>i\<in>Basis. real n *\<^sub>R i)} :: 'n set"
   have "Cauchy (\<lambda>n. integral (?cube n) (\<lambda>x. if x \<in> s then f x else 0))"
-  proof(unfold Cauchy_def,safe) case goal1
+  proof (unfold Cauchy_def, safe)
+    case goal1
     from as(2)[OF this] guess B .. note B = conjunctD2[OF this,rule_format]
     from real_arch_simple[of B] guess N .. note N = this
-    { fix n assume n:"n \<ge> N" have "ball 0 B \<subseteq> ?cube n" apply safe
+    {
+      fix n
+      assume n: "n \<ge> N"
+      have "ball 0 B \<subseteq> ?cube n"
+        apply safe
         unfolding mem_ball mem_interval dist_norm
-      proof case goal1 thus ?case using Basis_le_norm[of i x] `i\<in>Basis`
-          using n N by(auto simp add:field_simps setsum_negf) qed }
-    thus ?case apply-apply(rule_tac x=N in exI) apply safe unfolding dist_norm apply(rule B(2)) by auto
-  qed from this[unfolded convergent_eq_cauchy[symmetric]] guess i ..
+      proof
+        case goal1
+        then show ?case
+          using Basis_le_norm[of i x] `i\<in>Basis`
+          using n N
+          by (auto simp add: field_simps setsum_negf)
+      qed
+    }
+    then show ?case
+      apply -
+      apply (rule_tac x=N in exI)
+      apply safe
+      unfolding dist_norm
+      apply (rule B(2))
+      apply auto
+      done
+  qed
+  from this[unfolded convergent_eq_cauchy[symmetric]] guess i ..
   note i = this[THEN LIMSEQ_D]
 
-  show ?l unfolding integrable_on_def has_integral_alt'[of f] apply(rule_tac x=i in exI)
-    apply safe apply(rule as(1)[unfolded integrable_on_def])
-  proof- case goal1 hence *:"e/2 > 0" by auto
+  show ?l unfolding integrable_on_def has_integral_alt'[of f]
+    apply (rule_tac x=i in exI)
+    apply safe
+    apply (rule as(1)[unfolded integrable_on_def])
+  proof -
+    case goal1
+    then have *: "e/2 > 0" by auto
     from i[OF this] guess N .. note N =this[rule_format]
-    from as(2)[OF *] guess B .. note B=conjunctD2[OF this,rule_format] let ?B = "max (real N) B"
-    show ?case apply(rule_tac x="?B" in exI)
-    proof safe show "0 < ?B" using B(1) by auto
-      fix a b assume ab:"ball 0 ?B \<subseteq> {a..b::'n::ordered_euclidean_space}"
+    from as(2)[OF *] guess B .. note B=conjunctD2[OF this,rule_format]
+    let ?B = "max (real N) B"
+    show ?case
+      apply (rule_tac x="?B" in exI)
+    proof safe
+      show "0 < ?B"
+        using B(1) by auto
+      fix a b :: 'n
+      assume ab: "ball 0 ?B \<subseteq> {a..b}"
       from real_arch_simple[of ?B] guess n .. note n=this
       show "norm (integral {a..b} (\<lambda>x. if x \<in> s then f x else 0) - i) < e"
-        apply(rule norm_triangle_half_l) apply(rule B(2)) defer apply(subst norm_minus_commute)
-        apply(rule N[of n])
-      proof safe show "N \<le> n" using n by auto
-        fix x::"'n::ordered_euclidean_space" assume x:"x \<in> ball 0 B" hence "x\<in> ball 0 ?B" by auto
-        thus "x\<in>{a..b}" using ab by blast
-        show "x\<in>?cube n" using x unfolding mem_interval mem_ball dist_norm apply-
-        proof case goal1 thus ?case using Basis_le_norm[of i x] `i\<in>Basis`
-            using n by(auto simp add:field_simps setsum_negf) qed qed qed qed qed
-
-lemma integrable_altD: fixes f::"'n::ordered_euclidean_space \<Rightarrow> 'a::banach"
+        apply (rule norm_triangle_half_l)
+        apply (rule B(2))
+        defer
+        apply (subst norm_minus_commute)
+        apply (rule N[of n])
+      proof safe
+        show "N \<le> n"
+          using n by auto
+        fix x :: 'n
+        assume x: "x \<in> ball 0 B"
+        then have "x \<in> ball 0 ?B"
+          by auto
+        then show "x \<in> {a..b}"
+          using ab by blast
+        show "x \<in> ?cube n"
+          using x
+          unfolding mem_interval mem_ball dist_norm
+          apply -
+        proof
+          case goal1
+          then show ?case
+            using Basis_le_norm[of i x] `i \<in> Basis`
+            using n
+            by (auto simp add: field_simps setsum_negf)
+        qed
+      qed
+    qed
+  qed
+qed
+
+lemma integrable_altD:
+  fixes f :: "'n::ordered_euclidean_space \<Rightarrow> 'a::banach"
   assumes "f integrable_on s"
   shows "\<And>a b. (\<lambda>x. if x \<in> s then f x else 0) integrable_on {a..b}"
-  "\<And>e. e>0 \<Longrightarrow> \<exists>B>0. \<forall>a b c d. ball 0 B \<subseteq> {a..b} \<and> ball 0 B \<subseteq> {c..d}
-  \<longrightarrow> norm(integral {a..b} (\<lambda>x. if x \<in> s then f x else 0) - integral {c..d}  (\<lambda>x. if x \<in> s then f x else 0)) < e"
+    and "\<And>e. e > 0 \<Longrightarrow> \<exists>B>0. \<forall>a b c d. ball 0 B \<subseteq> {a..b} \<and> ball 0 B \<subseteq> {c..d} \<longrightarrow>
+      norm (integral {a..b} (\<lambda>x. if x \<in> s then f x else 0) - integral {c..d}  (\<lambda>x. if x \<in> s then f x else 0)) < e"
   using assms[unfolded integrable_alt[of f]] by auto
 
-lemma integrable_on_subinterval: fixes f::"'n::ordered_euclidean_space \<Rightarrow> 'a::banach"
-  assumes "f integrable_on s" "{a..b} \<subseteq> s" shows "f integrable_on {a..b}"
-  apply(rule integrable_eq) defer apply(rule integrable_altD(1)[OF assms(1)])
-  using assms(2) by auto
-
-subsection {* A straddling criterion for integrability. *}
-
-lemma integrable_straddle_interval: fixes f::"'n::ordered_euclidean_space \<Rightarrow> real"
-  assumes "\<forall>e>0. \<exists>g  h i j. (g has_integral i) ({a..b}) \<and> (h has_integral j) ({a..b}) \<and>
-  norm(i - j) < e \<and> (\<forall>x\<in>{a..b}. (g x) \<le> (f x) \<and> (f x) \<le>(h x))"
+lemma integrable_on_subinterval:
+  fixes f :: "'n::ordered_euclidean_space \<Rightarrow> 'a::banach"
+  assumes "f integrable_on s"
+    and "{a..b} \<subseteq> s"
   shows "f integrable_on {a..b}"
-proof(subst integrable_cauchy,safe)
-  case goal1 hence e:"e/3 > 0" by auto note assms[rule_format,OF this]
-  then guess g h i j apply- by(erule exE conjE)+ note obt = this
+  apply (rule integrable_eq)
+  defer
+  apply (rule integrable_altD(1)[OF assms(1)])
+  using assms(2)
+  apply auto
+  done
+
+
+subsection {* A straddling criterion for integrability *}
+
+lemma integrable_straddle_interval:
+  fixes f :: "'n::ordered_euclidean_space \<Rightarrow> real"
+  assumes "\<forall>e>0. \<exists>g  h i j. (g has_integral i) {a..b} \<and> (h has_integral j) {a..b} \<and>
+    norm (i - j) < e \<and> (\<forall>x\<in>{a..b}. (g x) \<le> f x \<and> f x \<le> h x)"
+  shows "f integrable_on {a..b}"
+proof (subst integrable_cauchy, safe)
+  case goal1
+  then have e: "e/3 > 0"
+    by auto
+  note assms[rule_format,OF this]
+  then guess g h i j by (elim exE conjE) note obt = this
   from obt(1)[unfolded has_integral[of g], rule_format, OF e] guess d1 .. note d1=conjunctD2[OF this,rule_format]
   from obt(2)[unfolded has_integral[of h], rule_format, OF e] guess d2 .. note d2=conjunctD2[OF this,rule_format]
-  show ?case apply(rule_tac x="\<lambda>x. d1 x \<inter> d2 x" in exI) apply(rule conjI gauge_inter d1 d2)+ unfolding fine_inter
-  proof safe have **:"\<And>i j g1 g2 h1 h2 f1 f2. g1 - h2 \<le> f1 - f2 \<Longrightarrow> f1 - f2 \<le> h1 - g2 \<Longrightarrow>
-      abs(i - j) < e / 3 \<Longrightarrow> abs(g2 - i) < e / 3 \<Longrightarrow>  abs(g1 - i) < e / 3 \<Longrightarrow>
-      abs(h2 - j) < e / 3 \<Longrightarrow> abs(h1 - j) < e / 3 \<Longrightarrow> abs(f1 - f2) < e" using `e>0` by arith
-    case goal1 note tagged_division_ofD(2-4) note * = this[OF goal1(1)] this[OF goal1(4)]
+  show ?case
+    apply (rule_tac x="\<lambda>x. d1 x \<inter> d2 x" in exI)
+    apply (rule conjI gauge_inter d1 d2)+
+    unfolding fine_inter
+  proof safe
+    have **: "\<And>i j g1 g2 h1 h2 f1 f2. g1 - h2 \<le> f1 - f2 \<Longrightarrow> f1 - f2 \<le> h1 - g2 \<Longrightarrow>
+      abs (i - j) < e / 3 \<Longrightarrow> abs (g2 - i) < e / 3 \<Longrightarrow>  abs (g1 - i) < e / 3 \<Longrightarrow>
+      abs (h2 - j) < e / 3 \<Longrightarrow> abs (h1 - j) < e / 3 \<Longrightarrow> abs (f1 - f2) < e"
+    using `e > 0` by arith
+    case goal1
+    note tagged_division_ofD(2-4) note * = this[OF goal1(1)] this[OF goal1(4)]
 
     have "(\<Sum>(x, k)\<in>p1. content k *\<^sub>R f x) - (\<Sum>(x, k)\<in>p1. content k *\<^sub>R g x) \<ge> 0"
-      "0 \<le> (\<Sum>(x, k)\<in>p2. content k *\<^sub>R h x) - (\<Sum>(x, k)\<in>p2. content k *\<^sub>R f x)"
-      "(\<Sum>(x, k)\<in>p2. content k *\<^sub>R f x) - (\<Sum>(x, k)\<in>p2. content k *\<^sub>R g x) \<ge> 0"
-      "0 \<le> (\<Sum>(x, k)\<in>p1. content k *\<^sub>R h x) - (\<Sum>(x, k)\<in>p1. content k *\<^sub>R f x)"
-      unfolding setsum_subtractf[symmetric] apply- apply(rule_tac[!] setsum_nonneg)
-      apply safe unfolding real_scaleR_def right_diff_distrib[symmetric]
-      apply(rule_tac[!] mult_nonneg_nonneg)
-    proof- fix a b assume ab:"(a,b) \<in> p1"
-      show "0 \<le> content b" using *(3)[OF ab] apply safe using content_pos_le . thus "0 \<le> content b" .
-      show "0 \<le> f a - g a" "0 \<le> h a - f a" using *(1-2)[OF ab] using obt(4)[rule_format,of a] by auto
-    next fix a b assume ab:"(a,b) \<in> p2"
-      show "0 \<le> content b" using *(6)[OF ab] apply safe using content_pos_le . thus "0 \<le> content b" .
-      show "0 \<le> f a - g a" "0 \<le> h a - f a" using *(4-5)[OF ab] using obt(4)[rule_format,of a] by auto qed
-
-    thus ?case apply- unfolding real_norm_def apply(rule **) defer defer
-      unfolding real_norm_def[symmetric] apply(rule obt(3))
-      apply(rule d1(2)[OF conjI[OF goal1(4,5)]])
-      apply(rule d1(2)[OF conjI[OF goal1(1,2)]])
-      apply(rule d2(2)[OF conjI[OF goal1(4,6)]])
-      apply(rule d2(2)[OF conjI[OF goal1(1,3)]]) by auto qed qed
+      and "0 \<le> (\<Sum>(x, k)\<in>p2. content k *\<^sub>R h x) - (\<Sum>(x, k)\<in>p2. content k *\<^sub>R f x)"
+      and "(\<Sum>(x, k)\<in>p2. content k *\<^sub>R f x) - (\<Sum>(x, k)\<in>p2. content k *\<^sub>R g x) \<ge> 0"
+      and "0 \<le> (\<Sum>(x, k)\<in>p1. content k *\<^sub>R h x) - (\<Sum>(x, k)\<in>p1. content k *\<^sub>R f x)"
+      unfolding setsum_subtractf[symmetric]
+      apply -
+      apply (rule_tac[!] setsum_nonneg)
+      apply safe
+      unfolding real_scaleR_def right_diff_distrib[symmetric]
+      apply (rule_tac[!] mult_nonneg_nonneg)
+    proof -
+      fix a b
+      assume ab: "(a, b) \<in> p1"
+      show "0 \<le> content b"
+        using *(3)[OF ab]
+        apply safe
+        apply (rule content_pos_le)
+        done
+      then show "0 \<le> content b" .
+      show "0 \<le> f a - g a" "0 \<le> h a - f a"
+        using *(1-2)[OF ab]
+        using obt(4)[rule_format,of a]
+        by auto
+    next
+      fix a b
+      assume ab: "(a, b) \<in> p2"
+      show "0 \<le> content b"
+        using *(6)[OF ab]
+        apply safe
+        apply (rule content_pos_le)
+        done
+      then show "0 \<le> content b" .
+      show "0 \<le> f a - g a" and "0 \<le> h a - f a"
+        using *(4-5)[OF ab] using obt(4)[rule_format,of a] by auto
+    qed
+    then show ?case
+      apply -
+      unfolding real_norm_def
+      apply (rule **)
+      defer
+      defer
+      unfolding real_norm_def[symmetric]
+      apply (rule obt(3))
+      apply (rule d1(2)[OF conjI[OF goal1(4,5)]])
+      apply (rule d1(2)[OF conjI[OF goal1(1,2)]])
+      apply (rule d2(2)[OF conjI[OF goal1(4,6)]])
+      apply (rule d2(2)[OF conjI[OF goal1(1,3)]])
+      apply auto
+      done
+  qed
+qed
 
 lemma integrable_straddle: fixes f::"'n::ordered_euclidean_space \<Rightarrow> real"
   assumes "\<forall>e>0. \<exists>g h i j. (g has_integral i) s \<and> (h has_integral j) s \<and>