src/HOL/Analysis/Simplex_Content.thy
author Angeliki KoutsoukouArgyraki <ak2110@cam.ac.uk>
Fri, 25 Jan 2019 02:38:26 +0000
changeset 69737 ec3cc98c38db
parent 69517 dc20f278e8f3
child 70817 dd675800469d
permissions -rw-r--r--
tagged 4 theories
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
dc20f278e8f3 tuned style and headers
nipkow
parents: 69173
diff changeset
     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
dc20f278e8f3 tuned style and headers
nipkow
parents: 69173
diff changeset
    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)"
2ec84498f562 HOL-Analysis: Volume of a simplex, Heron's theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    92
    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
    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)"
2ec84498f562 HOL-Analysis: Volume of a simplex, Heron's theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   255
    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
   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