author | wenzelm |
Wed, 03 Feb 2021 20:18:34 +0100 | |
changeset 73224 | 49686e3b1909 |
parent 72302 | d7d90ed4c74e |
child 74543 | ee039c11fb6f |
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 |
*) |
69737
ec3cc98c38db
tagged 4 theories
Angeliki KoutsoukouArgyraki <ak2110@cam.ac.uk>
parents:
69517
diff
changeset
|
8 |
section \<open>Volume of a Simplex\<close> |
69517 | 9 |
|
68625
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
10 |
theory Simplex_Content |
69517 | 11 |
imports Change_Of_Vars |
68625
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
12 |
begin |
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
13 |
|
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
14 |
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
|
15 |
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
|
16 |
|
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
17 |
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
|
18 |
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
|
19 |
|
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
20 |
context |
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
21 |
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
|
22 |
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
|
23 |
begin |
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
24 |
|
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
25 |
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
|
26 |
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
|
27 |
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
|
28 |
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
|
29 |
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
|
30 |
|
69737
ec3cc98c38db
tagged 4 theories
Angeliki KoutsoukouArgyraki <ak2110@cam.ac.uk>
parents:
69517
diff
changeset
|
31 |
lemma emeasure_std_simplex_aux: |
68625
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
32 |
fixes t :: real |
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
33 |
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
|
34 |
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
|
35 |
(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
|
36 |
using assms(1,2) |
69737
ec3cc98c38db
tagged 4 theories
Angeliki KoutsoukouArgyraki <ak2110@cam.ac.uk>
parents:
69517
diff
changeset
|
37 |
proof (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
|
38 |
case (empty t) |
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
39 |
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
|
40 |
next |
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
41 |
case (insert b A t) |
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
42 |
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
|
43 |
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
|
44 |
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
|
45 |
{ |
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
46 |
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
|
47 |
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
|
48 |
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
|
49 |
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
|
50 |
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
|
51 |
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
|
52 |
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
|
53 |
} note meas [measurable] = this |
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
54 |
|
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
55 |
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
|
56 |
by standard |
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
57 |
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
|
58 |
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
|
59 |
(\<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
|
60 |
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
|
61 |
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
|
62 |
(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
|
63 |
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
|
64 |
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
|
65 |
\<partial>?M A \<partial>lborel)" |
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
66 |
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
|
67 |
by (intro nn_integral_cong) |
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
68 |
(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
|
69 |
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
|
70 |
\<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
|
71 |
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
|
72 |
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
|
73 |
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
|
74 |
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
|
75 |
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
|
76 |
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
|
77 |
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
|
78 |
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
|
79 |
(\<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
|
80 |
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
|
81 |
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
|
82 |
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
|
83 |
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
|
84 |
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
|
85 |
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
|
86 |
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
|
87 |
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
|
88 |
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
|
89 |
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
|
90 |
by (simp add: n_def) |
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
91 |
also have "n = card (insert b A)" |
72302
d7d90ed4c74e
fixed some remarkably ugly proofs
paulson <lp15@cam.ac.uk>
parents:
71633
diff
changeset
|
92 |
using insert.hyps by (subst card.insert_remove) (auto simp: n_def) |
68625
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
93 |
finally show ?case . |
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
94 |
qed |
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
95 |
|
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
96 |
end |
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
97 |
|
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
98 |
lemma emeasure_std_simplex: |
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
99 |
"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
|
100 |
ennreal (1 / fact DIM('a))" |
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
101 |
proof - |
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
102 |
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
|
103 |
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
|
104 |
{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
|
105 |
by (subst lborel_eq) simp |
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
106 |
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
|
107 |
({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
|
108 |
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
|
109 |
by (subst emeasure_distr) auto |
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
110 |
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
|
111 |
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
|
112 |
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
|
113 |
qed |
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
114 |
|
69737
ec3cc98c38db
tagged 4 theories
Angeliki KoutsoukouArgyraki <ak2110@cam.ac.uk>
parents:
69517
diff
changeset
|
115 |
theorem content_std_simplex: |
68625
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
116 |
"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
|
117 |
1 / fact DIM('a)" |
69737
ec3cc98c38db
tagged 4 theories
Angeliki KoutsoukouArgyraki <ak2110@cam.ac.uk>
parents:
69517
diff
changeset
|
118 |
by (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
|
119 |
|
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
120 |
(* TODO: move to Change_of_Vars *) |
69737
ec3cc98c38db
tagged 4 theories
Angeliki KoutsoukouArgyraki <ak2110@cam.ac.uk>
parents:
69517
diff
changeset
|
121 |
proposition measure_lebesgue_linear_transformation: |
68625
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
122 |
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
|
123 |
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
|
124 |
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
|
125 |
shows "measure lebesgue (f ` A) = \<bar>det (matrix f)\<bar> * measure lebesgue A" |
69737
ec3cc98c38db
tagged 4 theories
Angeliki KoutsoukouArgyraki <ak2110@cam.ac.uk>
parents:
69517
diff
changeset
|
126 |
proof - |
68625
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
127 |
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
|
128 |
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
|
129 |
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
|
130 |
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
|
131 |
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
|
132 |
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
|
133 |
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
|
134 |
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
|
135 |
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
|
136 |
using assms |
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
137 |
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
|
138 |
(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
|
139 |
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
|
140 |
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
|
141 |
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
|
142 |
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
|
143 |
finally show ?thesis . |
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
144 |
qed |
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
145 |
|
69737
ec3cc98c38db
tagged 4 theories
Angeliki KoutsoukouArgyraki <ak2110@cam.ac.uk>
parents:
69517
diff
changeset
|
146 |
theorem content_simplex: |
68625
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
147 |
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
|
148 |
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
|
149 |
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
|
150 |
shows "content (convex hull X) = \<bar>det M\<bar> / fact (CARD('n))" |
69737
ec3cc98c38db
tagged 4 theories
Angeliki KoutsoukouArgyraki <ak2110@cam.ac.uk>
parents:
69517
diff
changeset
|
151 |
proof - |
68625
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
152 |
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
|
153 |
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
|
154 |
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
|
155 |
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
|
156 |
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
|
157 |
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
|
158 |
|
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
159 |
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
|
160 |
by (rule measure_translation [symmetric]) |
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
161 |
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
|
162 |
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
|
163 |
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
|
164 |
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
|
165 |
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
|
166 |
|
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
167 |
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
|
168 |
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
|
169 |
(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
|
170 |
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
|
171 |
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
|
172 |
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
|
173 |
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
|
174 |
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
|
175 |
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
|
176 |
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
|
177 |
by (auto simp: g_def) |
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
178 |
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
|
179 |
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
|
180 |
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
|
181 |
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
|
182 |
also note eq [symmetric] |
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
183 |
finally show ?thesis |
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
184 |
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
|
185 |
qed |
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
186 |
|
69737
ec3cc98c38db
tagged 4 theories
Angeliki KoutsoukouArgyraki <ak2110@cam.ac.uk>
parents:
69517
diff
changeset
|
187 |
theorem content_triangle: |
68625
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
188 |
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
|
189 |
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
|
190 |
\<bar>(C $ 1 - A $ 1) * (B $ 2 - A $ 2) - (B $ 1 - A $ 1) * (C $ 2 - A $ 2)\<bar> / 2" |
69737
ec3cc98c38db
tagged 4 theories
Angeliki KoutsoukouArgyraki <ak2110@cam.ac.uk>
parents:
69517
diff
changeset
|
191 |
proof - |
68625
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
192 |
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
|
193 |
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
|
194 |
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
|
195 |
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
|
196 |
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
|
197 |
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
|
198 |
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
|
199 |
|
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
200 |
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
|
201 |
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
|
202 |
by (rule measure_translation [symmetric]) |
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
203 |
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
|
204 |
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
|
205 |
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
|
206 |
by (auto simp: image_iff) |
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
207 |
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
|
208 |
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
|
209 |
|
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
210 |
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
|
211 |
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
|
212 |
(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
|
213 |
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
|
214 |
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
|
215 |
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
|
216 |
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
|
217 |
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
|
218 |
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
|
219 |
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
|
220 |
by (auto simp: g_def) |
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
221 |
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
|
222 |
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
|
223 |
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
|
224 |
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
|
225 |
also note eq [symmetric] |
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
226 |
finally show ?thesis |
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
227 |
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
|
228 |
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
|
229 |
qed |
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
230 |
|
69737
ec3cc98c38db
tagged 4 theories
Angeliki KoutsoukouArgyraki <ak2110@cam.ac.uk>
parents:
69517
diff
changeset
|
231 |
theorem heron: |
68625
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
232 |
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
|
233 |
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
|
234 |
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
|
235 |
shows "content (convex hull {A, B, C}) = sqrt (s * (s - a) * (s - b) * (s - c))" |
69737
ec3cc98c38db
tagged 4 theories
Angeliki KoutsoukouArgyraki <ak2110@cam.ac.uk>
parents:
69517
diff
changeset
|
236 |
proof - |
68625
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
237 |
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
|
238 |
using exhaust_2 by auto |
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
239 |
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
|
240 |
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
|
241 |
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
|
242 |
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
|
243 |
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
|
244 |
|
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
245 |
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
|
246 |
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
|
247 |
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
|
248 |
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
|
249 |
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
|
250 |
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
|
251 |
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
|
252 |
((a + b + c) - 2 * c)" |
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
253 |
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
|
254 |
also have "\<dots> = 16 * s * (s - a) * (s - b) * (s - c)" |
71633 | 255 |
by (simp add: s_def field_split_simps) |
68625
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
256 |
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
|
257 |
by simp |
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
258 |
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
|
259 |
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
|
260 |
finally show ?thesis using nonneg |
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
261 |
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
|
262 |
qed |
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
263 |
|
2ec84498f562
HOL-Analysis: Volume of a simplex, Heron's theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
264 |
end |