# HG changeset patch # User wenzelm # Date 1349343956 -7200 # Node ID f68e237e8c104953eaa16e3cb1da138217c93662 # Parent ad2bd4e5a029ba9705db7339478babd228018707 tuned proofs; diff -r ad2bd4e5a029 -r f68e237e8c10 src/HOL/Multivariate_Analysis/Integration.thy --- a/src/HOL/Multivariate_Analysis/Integration.thy Thu Oct 04 11:39:24 2012 +0200 +++ b/src/HOL/Multivariate_Analysis/Integration.thy Thu Oct 04 11:45:56 2012 +0200 @@ -338,48 +338,72 @@ lemma content_empty[simp]: "content {} = 0" unfolding content_def by auto -lemma content_subset: assumes "{a..b} \ {c..d}" shows "content {a..b::'a::ordered_euclidean_space} \ content {c..d}" proof(cases "{a..b}={}") - case True thus ?thesis using content_pos_le[of c d] by auto next - case False hence ab_ne:"\i b $$ i" unfolding interval_ne_empty by auto +lemma content_subset: + assumes "{a..b} \ {c..d}" + shows "content {a..b::'a::ordered_euclidean_space} \ content {c..d}" +proof (cases "{a..b} = {}") + case True + thus ?thesis using content_pos_le[of c d] by auto +next + case False + hence ab_ne:"\i b $$ i" unfolding interval_ne_empty by auto hence ab_ab:"a\{a..b}" "b\{a..b}" unfolding mem_interval by auto have "{c..d} \ {}" using assms False by auto hence cd_ne:"\i d $$ i" using assms unfolding interval_ne_empty by auto - show ?thesis unfolding content_def unfolding interval_bounds[OF ab_ne] interval_bounds[OF cd_ne] - unfolding if_not_P[OF False] if_not_P[OF `{c..d} \ {}`] apply(rule setprod_mono,rule) proof - fix i assume i:"i\{.. {}`] + apply(rule setprod_mono,rule) + proof + fix i + assume i:"i\{.. b $$ i - a $$ i" using ab_ne[THEN spec[where x=i]] i by auto show "b $$ i - a $$ i \ d $$ i - c $$ i" using assms[unfolded subset_eq mem_interval,rule_format,OF ab_ab(2),of i] - using assms[unfolded subset_eq mem_interval,rule_format,OF ab_ab(1),of i] using i by auto qed qed + using assms[unfolded subset_eq mem_interval,rule_format,OF ab_ab(1),of i] + using i by auto + qed +qed lemma content_lt_nz: "0 < content {a..b} \ content {a..b} \ 0" unfolding content_pos_lt_eq content_eq_0 unfolding not_ex not_le by fastforce + subsection {* The notion of a gauge --- simply an open set containing the point. *} definition gauge where "gauge d \ (\x. x\(d x) \ open(d x))" -lemma gaugeI:assumes "\x. x\g x" "\x. open (g x)" shows "gauge g" +lemma gaugeI: assumes "\x. x\g x" "\x. open (g x)" shows "gauge g" using assms unfolding gauge_def by auto -lemma gaugeD[dest]: assumes "gauge d" shows "x\d x" "open (d x)" using assms unfolding gauge_def by auto +lemma gaugeD[dest]: assumes "gauge d" shows "x\d x" "open (d x)" + using assms unfolding gauge_def by auto lemma gauge_ball_dependent: "\x. 0 < e x \ gauge (\x. ball x (e x))" unfolding gauge_def by auto lemma gauge_ball[intro]: "0 < e \ gauge (\x. ball x e)" unfolding gauge_def by auto -lemma gauge_trivial[intro]: "gauge (\x. ball x 1)" apply(rule gauge_ball) by auto +lemma gauge_trivial[intro]: "gauge (\x. ball x 1)" + by (rule gauge_ball) auto lemma gauge_inter[intro]: "gauge d1 \ gauge d2 \ gauge (\x. (d1 x) \ (d2 x))" unfolding gauge_def by auto -lemma gauge_inters: assumes "finite s" "\d\s. gauge (f d)" shows "gauge(\x. \ {f d x | d. d \ s})" proof- - have *:"\x. {f d x |d. d \ s} = (\d. f d x) ` s" by auto show ?thesis - unfolding gauge_def unfolding * - using assms unfolding Ball_def Inter_iff mem_Collect_eq gauge_def by auto qed - -lemma gauge_existence_lemma: "(\x. \d::real. p x \ 0 < d \ q d x) \ (\x. \d>0. p x \ q d x)" by(meson zero_less_one) +lemma gauge_inters: + assumes "finite s" "\d\s. gauge (f d)" + shows "gauge(\x. \ {f d x | d. d \ s})" +proof - + have *:"\x. {f d x |d. d \ s} = (\d. f d x) ` s" by auto + show ?thesis + unfolding gauge_def unfolding * + using assms unfolding Ball_def Inter_iff mem_Collect_eq gauge_def by auto +qed + +lemma gauge_existence_lemma: "(\x. \d::real. p x \ 0 < d \ q d x) \ (\x. \d>0. p x \ q d x)" + by(meson zero_less_one) + subsection {* Divisions. *} @@ -390,13 +414,15 @@ (\k1\s. \k2\s. k1 \ k2 \ interior(k1) \ interior(k2) = {}) \ (\s = i)" -lemma division_ofD[dest]: assumes "s division_of i" - shows"finite s" "\k. k\s \ k \ i" "\k. k\s \ k \ {}" "\k. k\s \ (\a b. k = {a..b})" - "\k1 k2. \k1\s; k2\s; k1 \ k2\ \ interior(k1) \ interior(k2) = {}" "\s = i" using assms unfolding division_of_def by auto +lemma division_ofD[dest]: + assumes "s division_of i" + shows "finite s" "\k. k\s \ k \ i" "\k. k\s \ k \ {}" "\k. k\s \ (\a b. k = {a..b})" + "\k1 k2. \k1\s; k2\s; k1 \ k2\ \ interior(k1) \ interior(k2) = {}" "\s = i" + using assms unfolding division_of_def by auto lemma division_ofI: assumes "finite s" "\k. k\s \ k \ i" "\k. k\s \ k \ {}" "\k. k\s \ (\a b. k = {a..b})" - "\k1 k2. \k1\s; k2\s; k1 \ k2\ \ interior(k1) \ interior(k2) = {}" "\s = i" + "\k1 k2. \k1\s; k2\s; k1 \ k2\ \ interior(k1) \ interior(k2) = {}" "\s = i" shows "s division_of i" using assms unfolding division_of_def by auto lemma division_of_finite: "s division_of i \ finite s" @@ -407,19 +433,30 @@ lemma division_of_trivial[simp]: "s division_of {} \ s = {}" unfolding division_of_def by auto -lemma division_of_sing[simp]: "s division_of {a..a::'a::ordered_euclidean_space} \ s = {{a..a}}" (is "?l = ?r") proof - assume ?r moreover { assume "s = {{a}}" moreover fix k assume "k\s" - ultimately have"\x y. k = {x..y}" apply(rule_tac x=a in exI)+ unfolding interval_sing by auto } - ultimately show ?l unfolding division_of_def interval_sing by auto next - assume ?l note as=conjunctD4[OF this[unfolded division_of_def interval_sing]] +lemma division_of_sing[simp]: + "s division_of {a..a::'a::ordered_euclidean_space} \ s = {{a..a}}" (is "?l = ?r") +proof + assume ?r + moreover { + assume "s = {{a}}" + moreover fix k assume "k\s" + ultimately have"\x y. k = {x..y}" + apply (rule_tac x=a in exI)+ unfolding interval_sing by auto + } + ultimately show ?l unfolding division_of_def interval_sing by auto +next + assume ?l + note as=conjunctD4[OF this[unfolded division_of_def interval_sing]] { fix x assume x:"x\s" have "x={a}" using as(2)[rule_format,OF x] by auto } - moreover have "s \ {}" using as(4) by auto ultimately show ?r unfolding interval_sing by auto qed + moreover have "s \ {}" using as(4) by auto + ultimately show ?r unfolding interval_sing by auto +qed lemma elementary_empty: obtains p where "p division_of {}" unfolding division_of_trivial by auto -lemma elementary_interval: obtains p where "p division_of {a..b}" - by(metis division_of_trivial division_of_self) +lemma elementary_interval: obtains p where "p division_of {a..b}" + by (metis division_of_trivial division_of_self) lemma division_contains: "s division_of i \ \x\i. \k\s. x \ k" unfolding division_of_def by auto @@ -429,14 +466,27 @@ unfolding division_of_def by fastforce lemma division_of_subset: assumes "p division_of (\p)" "q \ p" shows "q division_of (\q)" - apply(rule division_ofI) proof- note as=division_ofD[OF assms(1)] - show "finite q" apply(rule finite_subset) using as(1) assms(2) by auto - { fix k assume "k \ q" hence kp:"k\p" using assms(2) by auto show "k\\q" using `k \ q` by auto - show "\a b. k = {a..b}" using as(4)[OF kp] by auto show "k \ {}" using as(3)[OF kp] by auto } - fix k1 k2 assume "k1 \ q" "k2 \ q" "k1 \ k2" hence *:"k1\p" "k2\p" "k1\k2" using assms(2) by auto - show "interior k1 \ interior k2 = {}" using as(5)[OF *] by auto qed auto - -lemma division_of_union_self[intro]: "p division_of s \ p division_of (\p)" unfolding division_of_def by auto + apply (rule division_ofI) +proof - + note as=division_ofD[OF assms(1)] + show "finite q" + apply (rule finite_subset) + using as(1) assms(2) apply auto + done + { fix k + assume "k \ q" + hence kp:"k\p" using assms(2) by auto + show "k\\q" using `k \ q` by auto + show "\a b. k = {a..b}" using as(4)[OF kp] + by auto show "k \ {}" using as(3)[OF kp] by auto } + fix k1 k2 + assume "k1 \ q" "k2 \ q" "k1 \ k2" + hence *: "k1\p" "k2\p" "k1\k2" using assms(2) by auto + show "interior k1 \ interior k2 = {}" using as(5)[OF *] by auto +qed auto + +lemma division_of_union_self[intro]: "p division_of s \ p division_of (\p)" + unfolding division_of_def by auto lemma division_of_content_0: assumes "content {a..b} = 0" "d division_of {a..b}" shows "\k\d. content k = 0" unfolding forall_in_division[OF assms(2)] apply(rule,rule,rule) apply(drule division_ofD(2)[OF assms(2)])