src/HOL/Multivariate_Analysis/Integration.thy
changeset 56189 c4daa97ac57a
parent 56188 0268784f60da
child 56190 f0d2609c4cdc
equal deleted inserted replaced
56188:0268784f60da 56189:c4daa97ac57a
   220   where "One \<equiv> \<Sum>Basis"
   220   where "One \<equiv> \<Sum>Basis"
   221 
   221 
   222 lemma empty_as_interval: "{} = cbox One (0::'a::euclidean_space)"
   222 lemma empty_as_interval: "{} = cbox One (0::'a::euclidean_space)"
   223   using nonempty_Basis
   223   using nonempty_Basis
   224   by (fastforce simp add: set_eq_iff mem_box)
   224   by (fastforce simp add: set_eq_iff mem_box)
   225 
       
   226 lemma One_nonneg: "0 \<le> (One::'a::ordered_euclidean_space)"
       
   227   by (auto intro: setsum_nonneg)
       
   228 
   225 
   229 lemma interior_subset_union_intervals:
   226 lemma interior_subset_union_intervals:
   230   assumes "i = cbox a b"
   227   assumes "i = cbox a b"
   231     and "j = cbox c d"
   228     and "j = cbox c d"
   232     and "interior j \<noteq> {}"
   229     and "interior j \<noteq> {}"
   514   done
   511   done
   515 
   512 
   516 lemma content_real: "a \<le> b \<Longrightarrow> content {a..b} = b - a"
   513 lemma content_real: "a \<le> b \<Longrightarrow> content {a..b} = b - a"
   517   by (auto simp: interval_upperbound_def interval_lowerbound_def SUP_def INF_def content_def)
   514   by (auto simp: interval_upperbound_def interval_lowerbound_def SUP_def INF_def content_def)
   518 
   515 
   519 lemma content_closed_interval:
       
   520   fixes a :: "'a::ordered_euclidean_space"
       
   521   assumes "a \<le> b"
       
   522   shows "content {a .. b} = (\<Prod>i\<in>Basis. b\<bullet>i - a\<bullet>i)"
       
   523   using content_cbox[of a b] assms
       
   524   by (simp add: cbox_interval eucl_le[where 'a='a])
       
   525 
       
   526 lemma content_singleton[simp]: "content {a} = 0"
   516 lemma content_singleton[simp]: "content {a} = 0"
   527 proof -
   517 proof -
   528   have "content (cbox a a) = 0"
   518   have "content (cbox a a) = 0"
   529     by (subst content_cbox) (auto simp: ex_in_conv)
   519     by (subst content_cbox) (auto simp: ex_in_conv)
   530   then show ?thesis by (simp add: cbox_sing)
   520   then show ?thesis by (simp add: cbox_sing)
  1171 qed
  1161 qed
  1172 
  1162 
  1173 lemma elementary_bounded[dest]:
  1163 lemma elementary_bounded[dest]:
  1174   fixes s :: "'a::euclidean_space set"
  1164   fixes s :: "'a::euclidean_space set"
  1175   shows "p division_of s \<Longrightarrow> bounded s"
  1165   shows "p division_of s \<Longrightarrow> bounded s"
  1176   unfolding division_of_def by (metis bounded_Union bounded_interval)
  1166   unfolding division_of_def by (metis bounded_Union bounded_cbox)
  1177 
  1167 
  1178 lemma elementary_subset_cbox:
  1168 lemma elementary_subset_cbox:
  1179   "p division_of s \<Longrightarrow> \<exists>a b. s \<subseteq> cbox a (b::'a::euclidean_space)"
  1169   "p division_of s \<Longrightarrow> \<exists>a b. s \<subseteq> cbox a (b::'a::euclidean_space)"
  1180   by (meson elementary_bounded bounded_subset_cbox)
  1170   by (meson elementary_bounded bounded_subset_cbox)
  1181 
  1171 
  1996 
  1986 
  1997 
  1987 
  1998 subsection {* The set we're concerned with must be closed. *}
  1988 subsection {* The set we're concerned with must be closed. *}
  1999 
  1989 
  2000 lemma division_of_closed:
  1990 lemma division_of_closed:
  2001   fixes i :: "'n::ordered_euclidean_space set"
  1991   fixes i :: "'n::euclidean_space set"
  2002   shows "s division_of i \<Longrightarrow> closed i"
  1992   shows "s division_of i \<Longrightarrow> closed i"
  2003   unfolding division_of_def by fastforce
  1993   unfolding division_of_def by fastforce
  2004 
  1994 
  2005 subsection {* General bisection principle for intervals; might be useful elsewhere. *}
  1995 subsection {* General bisection principle for intervals; might be useful elsewhere. *}
  2006 
  1996 
  3757   show ?thesis
  3747   show ?thesis
  3758     apply (subst *)
  3748     apply (subst *)
  3759     apply (rule tagged_division_union[OF assms(1-2)])
  3749     apply (rule tagged_division_union[OF assms(1-2)])
  3760     unfolding interval_split[OF k] interior_cbox
  3750     unfolding interval_split[OF k] interior_cbox
  3761     using k
  3751     using k
  3762     apply (auto simp add: box elim!: ballE[where x=k])
  3752     apply (auto simp add: box_def elim!: ballE[where x=k])
  3763     done
  3753     done
  3764 qed
  3754 qed
  3765 
  3755 
  3766 lemma tagged_division_union_interval_real:
  3756 lemma tagged_division_union_interval_real:
  3767   fixes a :: real
  3757   fixes a :: real
  7129   unfolding integrable_on_def
  7119   unfolding integrable_on_def
  7130   apply rule
  7120   apply rule
  7131   apply (rule has_integral_const)
  7121   apply (rule has_integral_const)
  7132   done
  7122   done
  7133 
  7123 
  7134 lemma integrable_const_ivl[intro]:
       
  7135   fixes a::"'a::ordered_euclidean_space"
       
  7136   shows "(\<lambda>x. c) integrable_on {a .. b}"
       
  7137   unfolding cbox_interval[symmetric]
       
  7138   by (rule integrable_const)
       
  7139 
       
  7140 lemma integral_has_vector_derivative:
  7124 lemma integral_has_vector_derivative:
  7141   fixes f :: "real \<Rightarrow> 'a::banach"
  7125   fixes f :: "real \<Rightarrow> 'a::banach"
  7142   assumes "continuous_on {a .. b} f"
  7126   assumes "continuous_on {a .. b} f"
  7143     and "x \<in> {a .. b}"
  7127     and "x \<in> {a .. b}"
  7144   shows "((\<lambda>u. integral {a .. u} f) has_vector_derivative f(x)) (at x within {a .. b})"
  7128   shows "((\<lambda>u. integral {a .. u} f) has_vector_derivative f(x)) (at x within {a .. b})"
  9044       apply auto
  9028       apply auto
  9045       done
  9029       done
  9046   }
  9030   }
  9047   assume "\<exists>a b. s = cbox a b"
  9031   assume "\<exists>a b. s = cbox a b"
  9048   then guess a b by (elim exE) note s=this
  9032   then guess a b by (elim exE) note s=this
  9049   from bounded_interval[of a b, THEN conjunct1, unfolded bounded_pos] guess B ..
  9033   from bounded_cbox[of a b, unfolded bounded_pos] guess B ..
  9050   note B = conjunctD2[OF this,rule_format] show ?thesis
  9034   note B = conjunctD2[OF this,rule_format] show ?thesis
  9051     apply safe
  9035     apply safe
  9052   proof -
  9036   proof -
  9053     fix e :: real
  9037     fix e :: real
  9054     assume ?l and "e > 0"
  9038     assume ?l and "e > 0"
  9600   defer
  9584   defer
  9601   apply (rule integrable_altD(1)[OF assms(1)])
  9585   apply (rule integrable_altD(1)[OF assms(1)])
  9602   using assms(2)
  9586   using assms(2)
  9603   apply auto
  9587   apply auto
  9604   done
  9588   done
  9605 
       
  9606 lemma integrable_on_subinterval:
       
  9607   fixes f :: "'n::ordered_euclidean_space \<Rightarrow> 'a::banach"
       
  9608   assumes "f integrable_on s"
       
  9609     and "{a .. b} \<subseteq> s"
       
  9610   shows "f integrable_on {a .. b}"
       
  9611   using integrable_on_subcbox[of f s a b] assms
       
  9612   by (simp add: cbox_interval)
       
  9613 
  9589 
  9614 
  9590 
  9615 subsection {* A straddling criterion for integrability *}
  9591 subsection {* A straddling criterion for integrability *}
  9616 
  9592 
  9617 lemma integrable_straddle_interval:
  9593 lemma integrable_straddle_interval: