| author | wenzelm | 
| Wed, 26 Dec 2018 20:57:23 +0100 | |
| changeset 69506 | 7d59af98af29 | 
| parent 69173 | 38beaaebe736 | 
| child 69517 | dc20f278e8f3 | 
| permissions | -rw-r--r-- | 
| 68625 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1 | (* | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2 | File: Analysis/Simplex_Content.thy | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3 | Author: Manuel Eberl <eberlm@in.tum.de> | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4 | |
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 5 | The content of an n-dimensional simplex, including the formula for the content of a | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 6 | triangle and Heron's formula. | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 7 | *) | 
| 69173 
38beaaebe736
tagged 8 theories for the Analysis manual.
 Angeliki KoutsoukouArgyraki <ak2110@cam.ac.uk> parents: 
68625diff
changeset | 8 | section%important \<open>Volume of a simplex\<close> | 
| 68625 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 9 | theory Simplex_Content | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 10 | imports Change_Of_Vars | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 11 | begin | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 12 | |
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 13 | lemma fact_neq_top_ennreal [simp]: "fact n \<noteq> (top :: ennreal)" | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 14 | by (induction n) (auto simp: ennreal_mult_eq_top_iff) | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 15 | |
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 16 | lemma ennreal_fact: "ennreal (fact n) = fact n" | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 17 | by (induction n) (auto simp: ennreal_mult algebra_simps ennreal_of_nat_eq_real_of_nat) | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 18 | |
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 19 | context | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 20 |   fixes S :: "'a set \<Rightarrow> real \<Rightarrow> ('a \<Rightarrow> real) set"
 | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 21 |   defines "S \<equiv> (\<lambda>A t. {x. (\<forall>i\<in>A. 0 \<le> x i) \<and> sum x A \<le> t})"
 | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 22 | begin | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 23 | |
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 24 | lemma emeasure_std_simplex_aux_step: | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 25 | assumes "b \<notin> A" "finite A" | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 26 |   shows   "x(b := y) \<in> S (insert b A) t \<longleftrightarrow> y \<in> {0..t} \<and> x \<in> S A (t - y)"
 | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 27 | using assms sum_nonneg[of A x] unfolding S_def | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 28 | by (force simp: sum_delta_notmem algebra_simps) | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 29 | |
| 69173 
38beaaebe736
tagged 8 theories for the Analysis manual.
 Angeliki KoutsoukouArgyraki <ak2110@cam.ac.uk> parents: 
68625diff
changeset | 30 | lemma%important emeasure_std_simplex_aux: | 
| 68625 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 31 | fixes t :: real | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 32 | assumes "finite (A :: 'a set)" "t \<ge> 0" | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 33 | shows "emeasure (Pi\<^sub>M A (\<lambda>_. lborel)) | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 34 | (S A t \<inter> space (Pi\<^sub>M A (\<lambda>_. lborel))) = t ^ card A / fact (card A)" | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 35 | using assms(1,2) | 
| 69173 
38beaaebe736
tagged 8 theories for the Analysis manual.
 Angeliki KoutsoukouArgyraki <ak2110@cam.ac.uk> parents: 
68625diff
changeset | 36 | proof%unimportant (induction arbitrary: t rule: finite_induct) | 
| 68625 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 37 | case (empty t) | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 38 | thus ?case by (simp add: PiM_empty S_def) | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 39 | next | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 40 | case (insert b A t) | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 41 | define n where "n = Suc (card A)" | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 42 | have n_pos: "n > 0" by (simp add: n_def) | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 43 | let ?M = "\<lambda>A. (Pi\<^sub>M A (\<lambda>_. lborel))" | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 44 |   {
 | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 45 | fix A :: "'a set" and t :: real assume "finite A" | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 46 | have "S A t \<inter> space (Pi\<^sub>M A (\<lambda>_. lborel)) = | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 47 |             Pi\<^sub>E A (\<lambda>_. {0..}) \<inter> (\<lambda>x. sum x A) -` {..t} \<inter> space (Pi\<^sub>M A (\<lambda>_. lborel))"
 | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 48 | by (auto simp: S_def space_PiM) | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 49 | also have "\<dots> \<in> sets (Pi\<^sub>M A (\<lambda>_. lborel))" | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 50 | using \<open>finite A\<close> by measurable | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 51 | finally have "S A t \<inter> space (Pi\<^sub>M A (\<lambda>_. lborel)) \<in> sets (Pi\<^sub>M A (\<lambda>_. lborel))" . | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 52 | } note meas [measurable] = this | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 53 | |
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 54 | interpret product_sigma_finite "\<lambda>_. lborel" | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 55 | by standard | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 56 | have "emeasure (?M (insert b A)) (S (insert b A) t \<inter> space (?M (insert b A))) = | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 57 | nn_integral (?M (insert b A)) | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 58 | (\<lambda>x. indicator (S (insert b A) t \<inter> space (?M (insert b A))) x)" | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 59 | using insert.hyps by (subst nn_integral_indicator) auto | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 60 | also have "\<dots> = (\<integral>\<^sup>+ y. \<integral>\<^sup>+ x. indicator (S (insert b A) t \<inter> space (?M (insert b A))) | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 61 | (x(b := y)) \<partial>?M A \<partial>lborel)" | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 62 | using insert.prems insert.hyps by (intro product_nn_integral_insert_rev) auto | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 63 |   also have "\<dots> = (\<integral>\<^sup>+ y. \<integral>\<^sup>+ x. indicator {0..t} y * indicator (S A (t - y) \<inter> space (?M A)) x
 | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 64 | \<partial>?M A \<partial>lborel)" | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 65 | using insert.hyps insert.prems emeasure_std_simplex_aux_step[of b A] | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 66 | by (intro nn_integral_cong) | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 67 | (auto simp: fun_eq_iff indicator_def space_PiM PiE_def extensional_def) | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 68 |   also have "\<dots> = (\<integral>\<^sup>+ y. indicator {0..t} y * (\<integral>\<^sup>+ x. indicator (S A (t - y) \<inter> space (?M A)) x
 | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 69 | \<partial>?M A) \<partial>lborel)" using \<open>finite A\<close> | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 70 | by (subst nn_integral_cmult) auto | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 71 |   also have "\<dots> = (\<integral>\<^sup>+ y. indicator {0..t} y * emeasure (?M A) (S A (t - y) \<inter> space (?M A)) \<partial>lborel)"
 | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 72 | using \<open>finite A\<close> by (subst nn_integral_indicator) auto | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 73 |   also have "\<dots> = (\<integral>\<^sup>+ y. indicator {0..t} y * (t - y) ^ card A / ennreal (fact (card A)) \<partial>lborel)"
 | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 74 | using insert.IH by (intro nn_integral_cong) (auto simp: indicator_def divide_ennreal) | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 75 |   also have "\<dots> = (\<integral>\<^sup>+ y. indicator {0..t} y * (t - y) ^ card A \<partial>lborel) / ennreal (fact (card A))"
 | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 76 | using \<open>finite A\<close> by (subst nn_integral_divide) auto | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 77 |   also have "(\<integral>\<^sup>+ y. indicator {0..t} y * (t - y) ^ card A \<partial>lborel) = 
 | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 78 |                (\<integral>\<^sup>+y\<in>{0..t}. ennreal ((t - y) ^ (n - 1)) \<partial>lborel)"
 | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 79 | by (intro nn_integral_cong) (auto simp: indicator_def n_def) | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 80 | also have "((\<lambda>x. - ((t - x) ^ n / n)) has_real_derivative (t - x) ^ (n - 1)) (at x)" | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 81 |     if "x \<in> {0..t}" for x by (rule derivative_eq_intros refl | simp add: n_pos)+
 | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 82 |   hence "(\<integral>\<^sup>+y\<in>{0..t}. ennreal ((t - y) ^ (n - 1)) \<partial>lborel) = 
 | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 83 | ennreal (-((t - t) ^ n / n) - (-((t - 0) ^ n / n)))" | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 84 | using insert.prems insert.hyps by (intro nn_integral_FTC_Icc) auto | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 85 | also have "\<dots> = ennreal (t ^ n / n)" using n_pos by (simp add: zero_power) | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 86 | also have "\<dots> / ennreal (fact (card A)) = ennreal (t ^ n / n / fact (card A))" | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 87 | using n_pos \<open>t \<ge> 0\<close> by (subst divide_ennreal) auto | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 88 | also have "t ^ n / n / fact (card A) = t ^ n / fact n" | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 89 | by (simp add: n_def) | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 90 | also have "n = card (insert b A)" | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 91 | using insert.hyps by (subst card_insert) (auto simp: n_def) | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 92 | finally show ?case . | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 93 | qed | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 94 | |
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 95 | end | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 96 | |
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 97 | lemma emeasure_std_simplex: | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 98 | "emeasure lborel (convex hull (insert 0 Basis :: 'a :: euclidean_space set)) = | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 99 |      ennreal (1 / fact DIM('a))"
 | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 100 | proof - | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 101 |   have "emeasure lborel {x::'a. (\<forall>i\<in>Basis. 0 \<le> x \<bullet> i) \<and> sum ((\<bullet>) x) Basis \<le> 1} =
 | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 102 | emeasure (distr (Pi\<^sub>M Basis (\<lambda>b. lborel)) borel (\<lambda>f. \<Sum>b\<in>Basis. f b *\<^sub>R b)) | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 103 |                  {x::'a. (\<forall>i\<in>Basis. 0 \<le> x \<bullet> i) \<and> sum ((\<bullet>) x) Basis \<le> 1}"
 | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 104 | by (subst lborel_eq) simp | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 105 | also have "\<dots> = emeasure (Pi\<^sub>M Basis (\<lambda>b. lborel)) | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 106 |                     ({y::'a \<Rightarrow> real. (\<forall>i\<in>Basis. 0 \<le> y i) \<and> sum y Basis \<le> 1} \<inter>
 | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 107 | space (Pi\<^sub>M Basis (\<lambda>b. lborel)))" | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 108 | by (subst emeasure_distr) auto | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 109 |   also have "\<dots> = ennreal (1 / fact DIM('a))"
 | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 110 | by (subst emeasure_std_simplex_aux) auto | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 111 | finally show ?thesis by (simp only: std_simplex) | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 112 | qed | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 113 | |
| 69173 
38beaaebe736
tagged 8 theories for the Analysis manual.
 Angeliki KoutsoukouArgyraki <ak2110@cam.ac.uk> parents: 
68625diff
changeset | 114 | theorem%important content_std_simplex: | 
| 68625 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 115 | "measure lborel (convex hull (insert 0 Basis :: 'a :: euclidean_space set)) = | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 116 |      1 / fact DIM('a)"
 | 
| 69173 
38beaaebe736
tagged 8 theories for the Analysis manual.
 Angeliki KoutsoukouArgyraki <ak2110@cam.ac.uk> parents: 
68625diff
changeset | 117 | by%unimportant (simp add: measure_def emeasure_std_simplex) | 
| 68625 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 118 | |
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 119 | (* TODO: move to Change_of_Vars *) | 
| 69173 
38beaaebe736
tagged 8 theories for the Analysis manual.
 Angeliki KoutsoukouArgyraki <ak2110@cam.ac.uk> parents: 
68625diff
changeset | 120 | lemma%important measure_lebesgue_linear_transformation: | 
| 68625 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 121 |   fixes A :: "(real ^ 'n :: {finite, wellorder}) set"
 | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 122 |   fixes f :: "_ \<Rightarrow> real ^ 'n :: {finite, wellorder}"
 | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 123 | assumes "bounded A" "A \<in> sets lebesgue" "linear f" | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 124 | shows "measure lebesgue (f ` A) = \<bar>det (matrix f)\<bar> * measure lebesgue A" | 
| 69173 
38beaaebe736
tagged 8 theories for the Analysis manual.
 Angeliki KoutsoukouArgyraki <ak2110@cam.ac.uk> parents: 
68625diff
changeset | 125 | proof%unimportant - | 
| 68625 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 126 | from assms have [intro]: "A \<in> lmeasurable" | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 127 | by (intro bounded_set_imp_lmeasurable) auto | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 128 | hence [intro]: "f ` A \<in> lmeasurable" | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 129 | by (intro lmeasure_integral measurable_linear_image assms) | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 130 | have "measure lebesgue (f ` A) = integral (f ` A) (\<lambda>_. 1)" | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 131 | by (intro lmeasure_integral measurable_linear_image assms) auto | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 132 | also have "\<dots> = integral (f ` A) (\<lambda>_. 1 :: real ^ 1) $ 0" | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 133 | by (subst integral_component_eq_cart [symmetric]) (auto intro: integrable_on_const) | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 134 | also have "\<dots> = \<bar>det (matrix f)\<bar> * integral A (\<lambda>x. 1 :: real ^ 1) $ 0" | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 135 | using assms | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 136 | by (subst integral_change_of_variables_linear) | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 137 | (auto simp: o_def absolutely_integrable_on_def intro: integrable_on_const) | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 138 | also have "integral A (\<lambda>x. 1 :: real ^ 1) $ 0 = integral A (\<lambda>x. 1)" | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 139 | by (subst integral_component_eq_cart [symmetric]) (auto intro: integrable_on_const) | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 140 | also have "\<dots> = measure lebesgue A" | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 141 | by (intro lmeasure_integral [symmetric]) auto | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 142 | finally show ?thesis . | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 143 | qed | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 144 | |
| 69173 
38beaaebe736
tagged 8 theories for the Analysis manual.
 Angeliki KoutsoukouArgyraki <ak2110@cam.ac.uk> parents: 
68625diff
changeset | 145 | theorem%important content_simplex: | 
| 68625 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 146 |   fixes X :: "(real ^ 'n :: {finite, wellorder}) set" and f :: "'n :: _ \<Rightarrow> real ^ ('n :: _)"
 | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 147 |   assumes "finite X" "card X = Suc CARD('n)" and x0: "x0 \<in> X" and bij: "bij_betw f UNIV (X - {x0})"
 | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 148 | defines "M \<equiv> (\<chi> i. \<chi> j. f j $ i - x0 $ i)" | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 149 |   shows "content (convex hull X) = \<bar>det M\<bar> / fact (CARD('n))"
 | 
| 69173 
38beaaebe736
tagged 8 theories for the Analysis manual.
 Angeliki KoutsoukouArgyraki <ak2110@cam.ac.uk> parents: 
68625diff
changeset | 150 | proof%unimportant - | 
| 68625 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 151 | define g where "g = (\<lambda>x. M *v x)" | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 152 | have [simp]: "M *v axis i 1 = f i - x0" for i :: 'n | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 153 | by (simp add: M_def matrix_vector_mult_basis column_def vec_eq_iff) | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 154 | define std where "std = (convex hull insert 0 Basis :: (real ^ 'n :: _) set)" | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 155 | have compact: "compact std" unfolding std_def | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 156 | by (intro finite_imp_compact_convex_hull) auto | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 157 | |
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 158 | have "measure lebesgue (convex hull X) = measure lebesgue (((+) (-x0)) ` (convex hull X))" | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 159 | by (rule measure_translation [symmetric]) | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 160 | also have "((+) (-x0)) ` (convex hull X) = convex hull (((+) (-x0)) ` X)" | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 161 | by (rule convex_hull_translation [symmetric]) | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 162 |   also have "((+) (-x0)) ` X = insert 0 ((\<lambda>x. x - x0) ` (X - {x0}))"
 | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 163 | using x0 by (auto simp: image_iff) | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 164 | finally have eq: "measure lebesgue (convex hull X) = measure lebesgue (convex hull \<dots>)" . | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 165 | |
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 166 | from compact have "measure lebesgue (g ` std) = \<bar>det M\<bar> * measure lebesgue std" | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 167 | by (subst measure_lebesgue_linear_transformation) | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 168 | (auto intro: finite_imp_bounded_convex_hull dest: compact_imp_closed simp: g_def std_def) | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 169 | also have "measure lebesgue std = content std" using compact | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 170 | by (intro measure_completion) (auto dest: compact_imp_closed) | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 171 |   also have "content std = 1 / fact CARD('n)" unfolding std_def
 | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 172 | by (simp add: content_std_simplex) | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 173 | also have "g ` std = convex hull (g ` insert 0 Basis)" unfolding std_def | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 174 | by (rule convex_hull_linear_image) (auto simp: g_def) | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 175 | also have "g ` insert 0 Basis = insert 0 (g ` Basis)" | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 176 | by (auto simp: g_def) | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 177 | also have "g ` Basis = (\<lambda>x. x - x0) ` range f" | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 178 | by (auto simp: g_def Basis_vec_def image_iff) | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 179 |   also have "range f = X - {x0}" using bij
 | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 180 | using bij_betw_imp_surj_on by blast | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 181 | also note eq [symmetric] | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 182 | finally show ?thesis | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 183 | using finite_imp_compact_convex_hull[OF \<open>finite X\<close>] by (auto dest: compact_imp_closed) | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 184 | qed | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 185 | |
| 69173 
38beaaebe736
tagged 8 theories for the Analysis manual.
 Angeliki KoutsoukouArgyraki <ak2110@cam.ac.uk> parents: 
68625diff
changeset | 186 | theorem%important content_triangle: | 
| 68625 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 187 | fixes A B C :: "real ^ 2" | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 188 |   shows "content (convex hull {A, B, C}) =
 | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 189 | \<bar>(C $ 1 - A $ 1) * (B $ 2 - A $ 2) - (B $ 1 - A $ 1) * (C $ 2 - A $ 2)\<bar> / 2" | 
| 69173 
38beaaebe736
tagged 8 theories for the Analysis manual.
 Angeliki KoutsoukouArgyraki <ak2110@cam.ac.uk> parents: 
68625diff
changeset | 190 | proof%unimportant - | 
| 68625 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 191 | define M :: "real ^ 2 ^ 2" where "M \<equiv> (\<chi> i. \<chi> j. (if j = 1 then B else C) $ i - A $ i)" | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 192 | define g where "g = (\<lambda>x. M *v x)" | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 193 | define std where "std = (convex hull insert 0 Basis :: (real ^ 2) set)" | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 194 | have [simp]: "M *v axis i 1 = (if i = 1 then B - A else C - A)" for i | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 195 | by (auto simp: M_def matrix_vector_mult_basis column_def vec_eq_iff) | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 196 | have compact: "compact std" unfolding std_def | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 197 | by (intro finite_imp_compact_convex_hull) auto | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 198 | |
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 199 |   have "measure lebesgue (convex hull {A, B, C}) =
 | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 200 |           measure lebesgue (((+) (-A)) ` (convex hull {A, B, C}))"
 | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 201 | by (rule measure_translation [symmetric]) | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 202 |   also have "((+) (-A)) ` (convex hull {A, B, C}) = convex hull (((+) (-A)) ` {A, B, C})"
 | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 203 | by (rule convex_hull_translation [symmetric]) | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 204 |   also have "((+) (-A)) ` {A, B, C} = {0, B - A, C - A}"
 | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 205 | by (auto simp: image_iff) | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 206 |   finally have eq: "measure lebesgue (convex hull {A, B, C}) =
 | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 207 |                       measure lebesgue (convex hull {0, B - A, C - A})" .
 | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 208 | |
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 209 | from compact have "measure lebesgue (g ` std) = \<bar>det M\<bar> * measure lebesgue std" | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 210 | by (subst measure_lebesgue_linear_transformation) | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 211 | (auto intro: finite_imp_bounded_convex_hull dest: compact_imp_closed simp: g_def std_def) | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 212 | also have "measure lebesgue std = content std" using compact | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 213 | by (intro measure_completion) (auto dest: compact_imp_closed) | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 214 | also have "content std = 1 / 2" unfolding std_def | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 215 | by (simp add: content_std_simplex) | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 216 | also have "g ` std = convex hull (g ` insert 0 Basis)" unfolding std_def | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 217 | by (rule convex_hull_linear_image) (auto simp: g_def) | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 218 | also have "g ` insert 0 Basis = insert 0 (g ` Basis)" | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 219 | by (auto simp: g_def) | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 220 | also have "(2 :: 2) \<noteq> 1" by auto | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 221 | hence "\<not>(\<forall>y::2. y = 1)" by blast | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 222 |   hence "g ` Basis = {B - A, C - A}"
 | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 223 | by (auto simp: g_def Basis_vec_def image_iff) | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 224 | also note eq [symmetric] | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 225 | finally show ?thesis | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 226 |     using finite_imp_compact_convex_hull[of "{A, B, C}"]
 | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 227 | by (auto dest!: compact_imp_closed simp: det_2 M_def) | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 228 | qed | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 229 | |
| 69173 
38beaaebe736
tagged 8 theories for the Analysis manual.
 Angeliki KoutsoukouArgyraki <ak2110@cam.ac.uk> parents: 
68625diff
changeset | 230 | theorem%important heron: | 
| 68625 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 231 | fixes A B C :: "real ^ 2" | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 232 | defines "a \<equiv> dist B C" and "b \<equiv> dist A C" and "c \<equiv> dist A B" | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 233 | defines "s \<equiv> (a + b + c) / 2" | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 234 |   shows   "content (convex hull {A, B, C}) = sqrt (s * (s - a) * (s - b) * (s - c))"
 | 
| 69173 
38beaaebe736
tagged 8 theories for the Analysis manual.
 Angeliki KoutsoukouArgyraki <ak2110@cam.ac.uk> parents: 
68625diff
changeset | 235 | proof%unimportant - | 
| 68625 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 236 |   have [simp]: "(UNIV :: 2 set) = {1, 2}"
 | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 237 | using exhaust_2 by auto | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 238 | have dist_eq: "dist (A :: real ^ 2) B ^ 2 = (A $ 1 - B $ 1) ^ 2 + (A $ 2 - B $ 2) ^ 2" | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 239 | for A B by (simp add: dist_vec_def dist_real_def) | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 240 | have nonneg: "s * (s - a) * (s - b) * (s - c) \<ge> 0" | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 241 | using dist_triangle[of A B C] dist_triangle[of A C B] dist_triangle[of B C A] | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 242 | by (intro mult_nonneg_nonneg) (auto simp: s_def a_def b_def c_def dist_commute) | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 243 | |
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 244 |   have "16 * content (convex hull {A, B, C}) ^ 2 =
 | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 245 | 4 * ((C $ 1 - A $ 1) * (B $ 2 - A $ 2) - (B $ 1 - A $ 1) * (C $ 2 - A $ 2)) ^ 2" | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 246 | by (subst content_triangle) (simp add: power_divide) | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 247 | also have "\<dots> = (2 * (dist A B ^ 2 * dist A C ^ 2 + dist A B ^ 2 * dist B C ^ 2 + | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 248 | dist A C ^ 2 * dist B C ^ 2) - (dist A B ^ 2) ^ 2 - (dist A C ^ 2) ^ 2 - (dist B C ^ 2) ^ 2)" | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 249 | unfolding dist_eq unfolding power2_eq_square by algebra | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 250 | also have "\<dots> = (a + b + c) * ((a + b + c) - 2 * a) * ((a + b + c) - 2 * b) * | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 251 | ((a + b + c) - 2 * c)" | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 252 | unfolding power2_eq_square by (simp add: s_def a_def b_def c_def algebra_simps) | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 253 | also have "\<dots> = 16 * s * (s - a) * (s - b) * (s - c)" | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 254 | by (simp add: s_def divide_simps mult_ac) | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 255 |   finally have "content (convex hull {A, B, C}) ^ 2 = s * (s - a) * (s - b) * (s - c)"
 | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 256 | by simp | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 257 | also have "\<dots> = sqrt (s * (s - a) * (s - b) * (s - c)) ^ 2" | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 258 | by (intro real_sqrt_pow2 [symmetric] nonneg) | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 259 | finally show ?thesis using nonneg | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 260 | by (subst (asm) power2_eq_iff_nonneg) auto | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 261 | qed | 
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 262 | |
| 
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 263 | end |