src/HOL/Probability/ex/Koepf_Duermuth_Countermeasure.thy
author haftmann
Thu, 19 Jun 2025 17:15:40 +0200
changeset 82734 89347c0cc6a3
parent 82731 acd065f00194
permissions -rw-r--r--
treat map_filter similar to list_all, list_ex, list_ex1
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
41689
3e39b0e730d6 the measure valuation is again part of the measure_space type, instead of an explicit parameter to the locale;
hoelzl
parents: 41413
diff changeset
     1
(* Author: Johannes Hölzl, TU München *)
40859
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
     2
61808
fc1556774cfe isabelle update_cartouches -c -t;
wenzelm
parents: 61649
diff changeset
     3
section \<open>Formalization of a Countermeasure by Koepf \& Duermuth 2009\<close>
40859
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
     4
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
     5
theory Koepf_Duermuth_Countermeasure
73392
24f0df084aad reduced dependencies on theory List_Permutation
haftmann
parents: 73297
diff changeset
     6
  imports "HOL-Probability.Information"
40859
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
     7
begin
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
     8
45715
efd2b952f425 use list theorems in Dining Cryptographers and Koepf Duermuth Countermeasure
hoelzl
parents: 45712
diff changeset
     9
lemma SIGMA_image_vimage:
efd2b952f425 use list theorems in Dining Cryptographers and Koepf Duermuth Countermeasure
hoelzl
parents: 45712
diff changeset
    10
  "snd ` (SIGMA x:f`X. f -` {x} \<inter> X) = X"
efd2b952f425 use list theorems in Dining Cryptographers and Koepf Duermuth Countermeasure
hoelzl
parents: 45712
diff changeset
    11
  by (auto simp: image_iff)
40859
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
    12
45715
efd2b952f425 use list theorems in Dining Cryptographers and Koepf Duermuth Countermeasure
hoelzl
parents: 45712
diff changeset
    13
declare inj_split_Cons[simp]
40859
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
    14
42256
461624ffd382 Rename extensional to extensionalD (extensional is also defined in FuncSet)
hoelzl
parents: 41981
diff changeset
    15
definition extensionalD :: "'b \<Rightarrow> 'a set \<Rightarrow> ('a \<Rightarrow> 'b) set" where
461624ffd382 Rename extensional to extensionalD (extensional is also defined in FuncSet)
hoelzl
parents: 41981
diff changeset
    16
  "extensionalD d A = {f. \<forall>x. x \<notin> A \<longrightarrow> f x = d}"
40859
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
    17
42256
461624ffd382 Rename extensional to extensionalD (extensional is also defined in FuncSet)
hoelzl
parents: 41981
diff changeset
    18
lemma extensionalD_empty[simp]: "extensionalD d {} = {\<lambda>x. d}"
461624ffd382 Rename extensional to extensionalD (extensional is also defined in FuncSet)
hoelzl
parents: 41981
diff changeset
    19
  unfolding extensionalD_def by (simp add: set_eq_iff fun_eq_iff)
40859
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
    20
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
    21
lemma funset_eq_UN_fun_upd_I:
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
    22
  assumes *: "\<And>f. f \<in> F (insert a A) \<Longrightarrow> f(a := d) \<in> F A"
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
    23
  and **: "\<And>f. f \<in> F (insert a A) \<Longrightarrow> f a \<in> G (f(a:=d))"
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
    24
  and ***: "\<And>f x. \<lbrakk> f \<in> F A ; x \<in> G f \<rbrakk> \<Longrightarrow> f(a:=x) \<in> F (insert a A)"
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
    25
  shows "F (insert a A) = (\<Union>f\<in>F A. fun_upd f a ` (G f))"
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
    26
proof safe
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
    27
  fix f assume f: "f \<in> F (insert a A)"
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
    28
  show "f \<in> (\<Union>f\<in>F A. fun_upd f a ` G f)"
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
    29
  proof (rule UN_I[of "f(a := d)"])
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
    30
    show "f(a := d) \<in> F A" using *[OF f] .
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
    31
    show "f \<in> fun_upd (f(a:=d)) a ` G (f(a:=d))"
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
    32
    proof (rule image_eqI[of _ _ "f a"])
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
    33
      show "f a \<in> G (f(a := d))" using **[OF f] .
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
    34
    qed simp
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
    35
  qed
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
    36
next
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
    37
  fix f x assume "f \<in> F A" "x \<in> G f"
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
    38
  from ***[OF this] show "f(a := x) \<in> F (insert a A)" .
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
    39
qed
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
    40
42256
461624ffd382 Rename extensional to extensionalD (extensional is also defined in FuncSet)
hoelzl
parents: 41981
diff changeset
    41
lemma extensionalD_insert[simp]:
40859
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
    42
  assumes "a \<notin> A"
42256
461624ffd382 Rename extensional to extensionalD (extensional is also defined in FuncSet)
hoelzl
parents: 41981
diff changeset
    43
  shows "extensionalD d (insert a A) \<inter> (insert a A \<rightarrow> B) = (\<Union>f \<in> extensionalD d A \<inter> (A \<rightarrow> B). (\<lambda>b. f(a := b)) ` B)"
40859
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
    44
  apply (rule funset_eq_UN_fun_upd_I)
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
    45
  using assms
62390
842917225d56 more canonical names
nipkow
parents: 61808
diff changeset
    46
  by (auto intro!: inj_onI dest: inj_onD split: if_split_asm simp: extensionalD_def)
40859
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
    47
42256
461624ffd382 Rename extensional to extensionalD (extensional is also defined in FuncSet)
hoelzl
parents: 41981
diff changeset
    48
lemma finite_extensionalD_funcset[simp, intro]:
40859
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
    49
  assumes "finite A" "finite B"
42256
461624ffd382 Rename extensional to extensionalD (extensional is also defined in FuncSet)
hoelzl
parents: 41981
diff changeset
    50
  shows "finite (extensionalD d A \<inter> (A \<rightarrow> B))"
40859
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
    51
  using assms by induct auto
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
    52
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
    53
lemma fun_upd_eq_iff: "f(a := b) = g(a := b') \<longleftrightarrow> b = b' \<and> f(a := d) = g(a := d)"
41689
3e39b0e730d6 the measure valuation is again part of the measure_space type, instead of an explicit parameter to the locale;
hoelzl
parents: 41413
diff changeset
    54
  by (auto simp: fun_eq_iff)
40859
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
    55
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
    56
lemma card_funcset:
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
    57
  assumes "finite A" "finite B"
42256
461624ffd382 Rename extensional to extensionalD (extensional is also defined in FuncSet)
hoelzl
parents: 41981
diff changeset
    58
  shows "card (extensionalD d A \<inter> (A \<rightarrow> B)) = card B ^ card A"
61808
fc1556774cfe isabelle update_cartouches -c -t;
wenzelm
parents: 61649
diff changeset
    59
using \<open>finite A\<close> proof induct
fc1556774cfe isabelle update_cartouches -c -t;
wenzelm
parents: 61649
diff changeset
    60
  case (insert a A) thus ?case unfolding extensionalD_insert[OF \<open>a \<notin> A\<close>]
40859
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
    61
  proof (subst card_UN_disjoint, safe, simp_all)
42256
461624ffd382 Rename extensional to extensionalD (extensional is also defined in FuncSet)
hoelzl
parents: 41981
diff changeset
    62
    show "finite (extensionalD d A \<inter> (A \<rightarrow> B))" "\<And>f. finite (fun_upd f a ` B)"
61808
fc1556774cfe isabelle update_cartouches -c -t;
wenzelm
parents: 61649
diff changeset
    63
      using \<open>finite B\<close> \<open>finite A\<close> by simp_all
40859
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
    64
  next
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
    65
    fix f g b b' assume "f \<noteq> g" and eq: "f(a := b) = g(a := b')" and
42256
461624ffd382 Rename extensional to extensionalD (extensional is also defined in FuncSet)
hoelzl
parents: 41981
diff changeset
    66
      ext: "f \<in> extensionalD d A" "g \<in> extensionalD d A"
40859
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
    67
    have "f a = d" "g a = d"
61808
fc1556774cfe isabelle update_cartouches -c -t;
wenzelm
parents: 61649
diff changeset
    68
      using ext \<open>a \<notin> A\<close> by (auto simp add: extensionalD_def)
fc1556774cfe isabelle update_cartouches -c -t;
wenzelm
parents: 61649
diff changeset
    69
    with \<open>f \<noteq> g\<close> eq show False unfolding fun_upd_eq_iff[of _ _ b _ _ d]
40859
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
    70
      by (auto simp: fun_upd_idem fun_upd_eq_iff)
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
    71
  next
81179
cf2c03967178 tuned proofs;
wenzelm
parents: 81128
diff changeset
    72
    have "card (fun_upd f a ` B) = card B"
cf2c03967178 tuned proofs;
wenzelm
parents: 81128
diff changeset
    73
      if "f \<in> extensionalD d A \<inter> (A \<rightarrow> B)" for f
cf2c03967178 tuned proofs;
wenzelm
parents: 81128
diff changeset
    74
    proof (auto intro!: card_image inj_onI)
cf2c03967178 tuned proofs;
wenzelm
parents: 81128
diff changeset
    75
      fix b b' assume "f(a := b) = f(a := b')"
cf2c03967178 tuned proofs;
wenzelm
parents: 81128
diff changeset
    76
      from fun_upd_eq_iff[THEN iffD1, OF this] show "b = b'" by simp
cf2c03967178 tuned proofs;
wenzelm
parents: 81128
diff changeset
    77
    qed
42256
461624ffd382 Rename extensional to extensionalD (extensional is also defined in FuncSet)
hoelzl
parents: 41981
diff changeset
    78
    then show "(\<Sum>i\<in>extensionalD d A \<inter> (A \<rightarrow> B). card (fun_upd i a ` B)) = card B * card B ^ card A"
40859
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
    79
      using insert by simp
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
    80
  qed
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
    81
qed simp
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
    82
64272
f76b6dda2e56 setprod -> prod
nipkow
parents: 64267
diff changeset
    83
lemma prod_sum_distrib_lists:
45715
efd2b952f425 use list theorems in Dining Cryptographers and Koepf Duermuth Countermeasure
hoelzl
parents: 45712
diff changeset
    84
  fixes P and S :: "'a set" and f :: "'a \<Rightarrow> _::semiring_0" assumes "finite S"
efd2b952f425 use list theorems in Dining Cryptographers and Koepf Duermuth Countermeasure
hoelzl
parents: 45712
diff changeset
    85
  shows "(\<Sum>ms\<in>{ms. set ms \<subseteq> S \<and> length ms = n \<and> (\<forall>i<n. P i (ms!i))}. \<Prod>x<n. f (ms ! x)) =
efd2b952f425 use list theorems in Dining Cryptographers and Koepf Duermuth Countermeasure
hoelzl
parents: 45712
diff changeset
    86
         (\<Prod>i<n. \<Sum>m\<in>{m\<in>S. P i m}. f m)"
efd2b952f425 use list theorems in Dining Cryptographers and Koepf Duermuth Countermeasure
hoelzl
parents: 45712
diff changeset
    87
proof (induct n arbitrary: P)
efd2b952f425 use list theorems in Dining Cryptographers and Koepf Duermuth Countermeasure
hoelzl
parents: 45712
diff changeset
    88
  case 0 then show ?case by (simp cong: conj_cong)
efd2b952f425 use list theorems in Dining Cryptographers and Koepf Duermuth Countermeasure
hoelzl
parents: 45712
diff changeset
    89
next
efd2b952f425 use list theorems in Dining Cryptographers and Koepf Duermuth Countermeasure
hoelzl
parents: 45712
diff changeset
    90
  case (Suc n)
efd2b952f425 use list theorems in Dining Cryptographers and Koepf Duermuth Countermeasure
hoelzl
parents: 45712
diff changeset
    91
  have *: "{ms. set ms \<subseteq> S \<and> length ms = Suc n \<and> (\<forall>i<Suc n. P i (ms ! i))} =
efd2b952f425 use list theorems in Dining Cryptographers and Koepf Duermuth Countermeasure
hoelzl
parents: 45712
diff changeset
    92
    (\<lambda>(xs, x). x#xs) ` ({ms. set ms \<subseteq> S \<and> length ms = n \<and> (\<forall>i<n. P (Suc i) (ms ! i))} \<times> {m\<in>S. P 0 m})"
efd2b952f425 use list theorems in Dining Cryptographers and Koepf Duermuth Countermeasure
hoelzl
parents: 45712
diff changeset
    93
    apply (auto simp: image_iff length_Suc_conv)
efd2b952f425 use list theorems in Dining Cryptographers and Koepf Duermuth Countermeasure
hoelzl
parents: 45712
diff changeset
    94
    apply force+
efd2b952f425 use list theorems in Dining Cryptographers and Koepf Duermuth Countermeasure
hoelzl
parents: 45712
diff changeset
    95
    apply (case_tac i)
efd2b952f425 use list theorems in Dining Cryptographers and Koepf Duermuth Countermeasure
hoelzl
parents: 45712
diff changeset
    96
    by force+
efd2b952f425 use list theorems in Dining Cryptographers and Koepf Duermuth Countermeasure
hoelzl
parents: 45712
diff changeset
    97
  show ?case unfolding *
efd2b952f425 use list theorems in Dining Cryptographers and Koepf Duermuth Countermeasure
hoelzl
parents: 45712
diff changeset
    98
    using Suc[of "\<lambda>i. P (Suc i)"]
79492
c1b0f64eb865 A few new results (mostly brought in from other developments)
paulson <lp15@cam.ac.uk>
parents: 73392
diff changeset
    99
    by (simp add: sum.reindex sum.cartesian_product'
64272
f76b6dda2e56 setprod -> prod
nipkow
parents: 64267
diff changeset
   100
      lessThan_Suc_eq_insert_0 prod.reindex sum_distrib_right[symmetric] sum_distrib_left[symmetric])
45715
efd2b952f425 use list theorems in Dining Cryptographers and Koepf Duermuth Countermeasure
hoelzl
parents: 45712
diff changeset
   101
qed
efd2b952f425 use list theorems in Dining Cryptographers and Koepf Duermuth Countermeasure
hoelzl
parents: 45712
diff changeset
   102
47694
05663f75964c reworked Probability theory
hoelzl
parents: 46731
diff changeset
   103
declare space_point_measure[simp]
45715
efd2b952f425 use list theorems in Dining Cryptographers and Koepf Duermuth Countermeasure
hoelzl
parents: 45712
diff changeset
   104
47694
05663f75964c reworked Probability theory
hoelzl
parents: 46731
diff changeset
   105
declare sets_point_measure[simp]
45715
efd2b952f425 use list theorems in Dining Cryptographers and Koepf Duermuth Countermeasure
hoelzl
parents: 45712
diff changeset
   106
47694
05663f75964c reworked Probability theory
hoelzl
parents: 46731
diff changeset
   107
lemma measure_point_measure:
05663f75964c reworked Probability theory
hoelzl
parents: 46731
diff changeset
   108
  "finite \<Omega> \<Longrightarrow> A \<subseteq> \<Omega> \<Longrightarrow> (\<And>x. x \<in> \<Omega> \<Longrightarrow> 0 \<le> p x) \<Longrightarrow>
62977
2e874d9aca43 fix HOL-Probability-ex
hoelzl
parents: 62390
diff changeset
   109
    measure (point_measure \<Omega> (\<lambda>x. ennreal (p x))) A = (\<Sum>i\<in>A. p i)"
2e874d9aca43 fix HOL-Probability-ex
hoelzl
parents: 62390
diff changeset
   110
  unfolding measure_def
64267
b9a1486e79be setsum -> sum
nipkow
parents: 63918
diff changeset
   111
  by (subst emeasure_point_measure_finite) (auto simp: subset_eq sum_nonneg)
45715
efd2b952f425 use list theorems in Dining Cryptographers and Koepf Duermuth Countermeasure
hoelzl
parents: 45712
diff changeset
   112
40859
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   113
locale finite_information =
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   114
  fixes \<Omega> :: "'a set"
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   115
    and p :: "'a \<Rightarrow> real"
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   116
    and b :: real
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   117
  assumes finite_space[simp, intro]: "finite \<Omega>"
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   118
  and p_sums_1[simp]: "(\<Sum>\<omega>\<in>\<Omega>. p \<omega>) = 1"
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   119
  and positive_p[simp, intro]: "\<And>x. 0 \<le> p x"
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   120
  and b_gt_1[simp, intro]: "1 < b"
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   121
64267
b9a1486e79be setsum -> sum
nipkow
parents: 63918
diff changeset
   122
lemma (in finite_information) positive_p_sum[simp]: "0 \<le> sum p X"
b9a1486e79be setsum -> sum
nipkow
parents: 63918
diff changeset
   123
   by (auto intro!: sum_nonneg)
40859
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   124
47694
05663f75964c reworked Probability theory
hoelzl
parents: 46731
diff changeset
   125
sublocale finite_information \<subseteq> prob_space "point_measure \<Omega> p"
61169
4de9ff3ea29a tuned proofs -- less legacy;
wenzelm
parents: 60515
diff changeset
   126
  by standard (simp add: one_ereal_def emeasure_point_measure_finite)
40859
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   127
47694
05663f75964c reworked Probability theory
hoelzl
parents: 46731
diff changeset
   128
sublocale finite_information \<subseteq> information_space "point_measure \<Omega> p" b
61169
4de9ff3ea29a tuned proofs -- less legacy;
wenzelm
parents: 60515
diff changeset
   129
  by standard simp
40859
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   130
64267
b9a1486e79be setsum -> sum
nipkow
parents: 63918
diff changeset
   131
lemma (in finite_information) \<mu>'_eq: "A \<subseteq> \<Omega> \<Longrightarrow> prob A = sum p A"
47694
05663f75964c reworked Probability theory
hoelzl
parents: 46731
diff changeset
   132
  by (auto simp: measure_point_measure)
40859
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   133
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   134
locale koepf_duermuth = K: finite_information keys K b + M: finite_information messages M b
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   135
    for b :: real
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   136
    and keys :: "'key set" and K :: "'key \<Rightarrow> real"
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   137
    and messages :: "'message set" and M :: "'message \<Rightarrow> real" +
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   138
  fixes observe :: "'key \<Rightarrow> 'message \<Rightarrow> 'observation"
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   139
    and n :: nat
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   140
begin
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   141
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   142
definition msgs :: "('key \<times> 'message list) set" where
45715
efd2b952f425 use list theorems in Dining Cryptographers and Koepf Duermuth Countermeasure
hoelzl
parents: 45712
diff changeset
   143
  "msgs = keys \<times> {ms. set ms \<subseteq> messages \<and> length ms = n}"
40859
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   144
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   145
definition P :: "('key \<times> 'message list) \<Rightarrow> real" where
49793
dd719cdeca8f simplified definitions
hoelzl
parents: 49792
diff changeset
   146
  "P = (\<lambda>(k, ms). K k * (\<Prod>i<n. M (ms ! i)))"
40859
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   147
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   148
end
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   149
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   150
sublocale koepf_duermuth \<subseteq> finite_information msgs P b
61169
4de9ff3ea29a tuned proofs -- less legacy;
wenzelm
parents: 60515
diff changeset
   151
proof
40859
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   152
  show "finite msgs" unfolding msgs_def
45715
efd2b952f425 use list theorems in Dining Cryptographers and Koepf Duermuth Countermeasure
hoelzl
parents: 45712
diff changeset
   153
    using finite_lists_length_eq[OF M.finite_space, of n]
40859
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   154
    by auto
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   155
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   156
  have [simp]: "\<And>A. inj_on (\<lambda>(xs, n). n # xs) A" by (force intro!: inj_onI)
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   157
64267
b9a1486e79be setsum -> sum
nipkow
parents: 63918
diff changeset
   158
  note sum_distrib_left[symmetric, simp]
b9a1486e79be setsum -> sum
nipkow
parents: 63918
diff changeset
   159
  note sum_distrib_right[symmetric, simp]
79492
c1b0f64eb865 A few new results (mostly brought in from other developments)
paulson <lp15@cam.ac.uk>
parents: 73392
diff changeset
   160
  note sum.cartesian_product'[simp]
40859
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   161
45715
efd2b952f425 use list theorems in Dining Cryptographers and Koepf Duermuth Countermeasure
hoelzl
parents: 45712
diff changeset
   162
  have "(\<Sum>ms | set ms \<subseteq> messages \<and> length ms = n. \<Prod>x<length ms. M (ms ! x)) = 1"
40859
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   163
  proof (induct n)
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   164
    case 0 then show ?case by (simp cong: conj_cong)
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   165
  next
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   166
    case (Suc n)
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   167
    then show ?case
45715
efd2b952f425 use list theorems in Dining Cryptographers and Koepf Duermuth Countermeasure
hoelzl
parents: 45712
diff changeset
   168
      by (simp add: lists_length_Suc_eq lessThan_Suc_eq_insert_0
64272
f76b6dda2e56 setprod -> prod
nipkow
parents: 64267
diff changeset
   169
                    sum.reindex prod.reindex)
40859
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   170
  qed
64267
b9a1486e79be setsum -> sum
nipkow
parents: 63918
diff changeset
   171
  then show "sum P msgs = 1"
40859
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   172
    unfolding msgs_def P_def by simp
81179
cf2c03967178 tuned proofs;
wenzelm
parents: 81128
diff changeset
   173
  have "0 \<le> (\<Prod>x\<in>A. M (f x))" for A f
cf2c03967178 tuned proofs;
wenzelm
parents: 81128
diff changeset
   174
    by (auto simp: prod_nonneg)
cf2c03967178 tuned proofs;
wenzelm
parents: 81128
diff changeset
   175
  then show "0 \<le> P x" for x
40859
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   176
    unfolding P_def by (auto split: prod.split simp: zero_le_mult_iff)
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   177
qed auto
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   178
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   179
context koepf_duermuth
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   180
begin
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   181
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   182
definition observations :: "'observation set" where
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   183
  "observations = (\<Union>f\<in>observe ` keys. f ` messages)"
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   184
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   185
lemma finite_observations[simp, intro]: "finite observations"
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   186
  unfolding observations_def by auto
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   187
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   188
definition OB :: "'key \<times> 'message list \<Rightarrow> 'observation list" where
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   189
  "OB = (\<lambda>(k, ms). map (observe k) ms)"
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   190
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   191
definition t :: "'observation list \<Rightarrow> 'observation \<Rightarrow> nat" where
49793
dd719cdeca8f simplified definitions
hoelzl
parents: 49792
diff changeset
   192
  t_def2: "t seq obs = card { i. i < length seq \<and> seq ! i = obs}"
dd719cdeca8f simplified definitions
hoelzl
parents: 49792
diff changeset
   193
67399
eab6ce8368fa ran isabelle update_op on all sources
nipkow
parents: 66804
diff changeset
   194
lemma t_def: "t seq obs = length (filter ((=) obs) seq)"
49793
dd719cdeca8f simplified definitions
hoelzl
parents: 49792
diff changeset
   195
  unfolding t_def2 length_filter_conv_card by (subst eq_commute) simp
40859
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   196
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   197
lemma card_T_bound: "card ((t\<circ>OB)`msgs) \<le> (n+1)^card observations"
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   198
proof -
42256
461624ffd382 Rename extensional to extensionalD (extensional is also defined in FuncSet)
hoelzl
parents: 41981
diff changeset
   199
  have "(t\<circ>OB)`msgs \<subseteq> extensionalD 0 observations \<inter> (observations \<rightarrow> {.. n})"
461624ffd382 Rename extensional to extensionalD (extensional is also defined in FuncSet)
hoelzl
parents: 41981
diff changeset
   200
    unfolding observations_def extensionalD_def OB_def msgs_def
45715
efd2b952f425 use list theorems in Dining Cryptographers and Koepf Duermuth Countermeasure
hoelzl
parents: 45712
diff changeset
   201
    by (auto simp add: t_def comp_def image_iff subset_eq)
42256
461624ffd382 Rename extensional to extensionalD (extensional is also defined in FuncSet)
hoelzl
parents: 41981
diff changeset
   202
  with finite_extensionalD_funcset
461624ffd382 Rename extensional to extensionalD (extensional is also defined in FuncSet)
hoelzl
parents: 41981
diff changeset
   203
  have "card ((t\<circ>OB)`msgs) \<le> card (extensionalD 0 observations \<inter> (observations \<rightarrow> {.. n}))"
40859
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   204
    by (rule card_mono) auto
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   205
  also have "\<dots> = (n + 1) ^ card observations"
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   206
    by (subst card_funcset) auto
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   207
  finally show ?thesis .
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   208
qed
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   209
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   210
abbreviation
64267
b9a1486e79be setsum -> sum
nipkow
parents: 63918
diff changeset
   211
 "p A \<equiv> sum P A"
40859
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   212
47694
05663f75964c reworked Probability theory
hoelzl
parents: 46731
diff changeset
   213
abbreviation
05663f75964c reworked Probability theory
hoelzl
parents: 46731
diff changeset
   214
  "\<mu> \<equiv> point_measure msgs P"
05663f75964c reworked Probability theory
hoelzl
parents: 46731
diff changeset
   215
80914
d97fdabd9e2b standardize mixfix annotations via "isabelle update -a -u mixfix_cartouches" --- to simplify systematic editing;
wenzelm
parents: 80034
diff changeset
   216
abbreviation probability (\<open>\<P>'(_') _\<close>) where
47694
05663f75964c reworked Probability theory
hoelzl
parents: 46731
diff changeset
   217
  "\<P>(X) x \<equiv> measure \<mu> (X -` x \<inter> msgs)"
40859
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   218
80914
d97fdabd9e2b standardize mixfix annotations via "isabelle update -a -u mixfix_cartouches" --- to simplify systematic editing;
wenzelm
parents: 80034
diff changeset
   219
abbreviation joint_probability (\<open>\<P>'(_ ; _') _\<close>) where
47694
05663f75964c reworked Probability theory
hoelzl
parents: 46731
diff changeset
   220
  "\<P>(X ; Y) x \<equiv> \<P>(\<lambda>x. (X x, Y x)) x"
40859
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   221
81128
5b201b24d99b tuned whitespace, to simplify hypersearch;
wenzelm
parents: 80914
diff changeset
   222
no_notation disj  (infixr \<open>|\<close> 30)
47694
05663f75964c reworked Probability theory
hoelzl
parents: 46731
diff changeset
   223
80914
d97fdabd9e2b standardize mixfix annotations via "isabelle update -a -u mixfix_cartouches" --- to simplify systematic editing;
wenzelm
parents: 80034
diff changeset
   224
abbreviation conditional_probability (\<open>\<P>'(_ | _') _\<close>) where
47694
05663f75964c reworked Probability theory
hoelzl
parents: 46731
diff changeset
   225
  "\<P>(X | Y) x \<equiv> (\<P>(X ; Y) x) / \<P>(Y) (snd`x)"
40859
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   226
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   227
notation
80914
d97fdabd9e2b standardize mixfix annotations via "isabelle update -a -u mixfix_cartouches" --- to simplify systematic editing;
wenzelm
parents: 80034
diff changeset
   228
  entropy_Pow (\<open>\<H>'( _ ')\<close>)
40859
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   229
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   230
notation
80914
d97fdabd9e2b standardize mixfix annotations via "isabelle update -a -u mixfix_cartouches" --- to simplify systematic editing;
wenzelm
parents: 80034
diff changeset
   231
  conditional_entropy_Pow (\<open>\<H>'( _ | _ ')\<close>)
40859
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   232
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   233
notation
80914
d97fdabd9e2b standardize mixfix annotations via "isabelle update -a -u mixfix_cartouches" --- to simplify systematic editing;
wenzelm
parents: 80034
diff changeset
   234
  mutual_information_Pow (\<open>\<I>'( _ ; _ ')\<close>)
40859
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   235
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   236
lemma t_eq_imp_bij_func:
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   237
  assumes "t xs = t ys"
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   238
  shows "\<exists>f. bij_betw f {..<length xs} {..<length ys} \<and> (\<forall>i<length xs. xs ! i = ys ! (f i))"
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   239
proof -
73392
24f0df084aad reduced dependencies on theory List_Permutation
haftmann
parents: 73297
diff changeset
   240
  from assms have \<open>mset xs = mset ys\<close>
82731
acd065f00194 defined mset in terms of its list-versin count_list instead of the ugly length of filter.
nipkow
parents: 81179
diff changeset
   241
    using assms by (simp add: fun_eq_iff t_def multiset_eq_iff count_mset count_list_eq_length_filter)
73392
24f0df084aad reduced dependencies on theory List_Permutation
haftmann
parents: 73297
diff changeset
   242
  then obtain p where \<open>p permutes {..<length ys}\<close> \<open>permute_list p ys = xs\<close>
24f0df084aad reduced dependencies on theory List_Permutation
haftmann
parents: 73297
diff changeset
   243
    by (rule mset_eq_permutation)
24f0df084aad reduced dependencies on theory List_Permutation
haftmann
parents: 73297
diff changeset
   244
  then have \<open>bij_betw p {..<length xs} {..<length ys}\<close> \<open>\<forall>i<length xs. xs ! i = ys ! p i\<close>
24f0df084aad reduced dependencies on theory List_Permutation
haftmann
parents: 73297
diff changeset
   245
    by (auto dest: permutes_imp_bij simp add: permute_list_nth)
24f0df084aad reduced dependencies on theory List_Permutation
haftmann
parents: 73297
diff changeset
   246
  then show ?thesis
24f0df084aad reduced dependencies on theory List_Permutation
haftmann
parents: 73297
diff changeset
   247
    by blast
40859
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   248
qed
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   249
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   250
lemma \<P>_k: assumes "k \<in> keys" shows "\<P>(fst) {k} = K k"
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   251
proof -
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   252
  from assms have *:
45715
efd2b952f425 use list theorems in Dining Cryptographers and Koepf Duermuth Countermeasure
hoelzl
parents: 45712
diff changeset
   253
      "fst -` {k} \<inter> msgs = {k}\<times>{ms. set ms \<subseteq> messages \<and> length ms = n}"
40859
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   254
    unfolding msgs_def by auto
47694
05663f75964c reworked Probability theory
hoelzl
parents: 46731
diff changeset
   255
  show "(\<P>(fst) {k}) = K k"
05663f75964c reworked Probability theory
hoelzl
parents: 46731
diff changeset
   256
    apply (simp add: \<mu>'_eq)
41981
cdf7693bbe08 reworked Probability theory: measures are not type restricted to positive extended reals
hoelzl
parents: 41689
diff changeset
   257
    apply (simp add: * P_def)
79492
c1b0f64eb865 A few new results (mostly brought in from other developments)
paulson <lp15@cam.ac.uk>
parents: 73392
diff changeset
   258
    apply (simp add: sum.cartesian_product')
64272
f76b6dda2e56 setprod -> prod
nipkow
parents: 64267
diff changeset
   259
    using prod_sum_distrib_lists[OF M.finite_space, of M n "\<lambda>x x. True"] \<open>k \<in> keys\<close>
f76b6dda2e56 setprod -> prod
nipkow
parents: 64267
diff changeset
   260
    by (auto simp add: sum_distrib_left[symmetric] subset_eq prod.neutral_const)
40859
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   261
qed
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   262
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   263
lemma fst_image_msgs[simp]: "fst`msgs = keys"
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   264
proof -
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   265
  from M.not_empty obtain m where "m \<in> messages" by auto
45715
efd2b952f425 use list theorems in Dining Cryptographers and Koepf Duermuth Countermeasure
hoelzl
parents: 45712
diff changeset
   266
  then have *: "{m. set m \<subseteq> messages \<and> length m = n} \<noteq> {}"
40859
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   267
    by (auto intro!: exI[of _ "replicate n m"])
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   268
  then show ?thesis
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   269
    unfolding msgs_def fst_image_times if_not_P[OF *] by simp
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   270
qed
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   271
64267
b9a1486e79be setsum -> sum
nipkow
parents: 63918
diff changeset
   272
lemma sum_distribution_cut:
47694
05663f75964c reworked Probability theory
hoelzl
parents: 46731
diff changeset
   273
  "\<P>(X) {x} = (\<Sum>y \<in> Y`space \<mu>. \<P>(X ; Y) {(x, y)})"
05663f75964c reworked Probability theory
hoelzl
parents: 46731
diff changeset
   274
  by (subst finite_measure_finite_Union[symmetric])
05663f75964c reworked Probability theory
hoelzl
parents: 46731
diff changeset
   275
     (auto simp add: disjoint_family_on_def inj_on_def
05663f75964c reworked Probability theory
hoelzl
parents: 46731
diff changeset
   276
           intro!: arg_cong[where f=prob])
05663f75964c reworked Probability theory
hoelzl
parents: 46731
diff changeset
   277
05663f75964c reworked Probability theory
hoelzl
parents: 46731
diff changeset
   278
lemma prob_conj_imp1:
05663f75964c reworked Probability theory
hoelzl
parents: 46731
diff changeset
   279
  "prob ({x. Q x} \<inter> msgs) = 0 \<Longrightarrow> prob ({x. Pr x \<and> Q x} \<inter> msgs) = 0"
05663f75964c reworked Probability theory
hoelzl
parents: 46731
diff changeset
   280
  using finite_measure_mono[of "{x. Pr x \<and> Q x} \<inter> msgs" "{x. Q x} \<inter> msgs"]
05663f75964c reworked Probability theory
hoelzl
parents: 46731
diff changeset
   281
  using measure_nonneg[of \<mu> "{x. Pr x \<and> Q x} \<inter> msgs"]
05663f75964c reworked Probability theory
hoelzl
parents: 46731
diff changeset
   282
  by (simp add: subset_eq)
05663f75964c reworked Probability theory
hoelzl
parents: 46731
diff changeset
   283
05663f75964c reworked Probability theory
hoelzl
parents: 46731
diff changeset
   284
lemma prob_conj_imp2:
05663f75964c reworked Probability theory
hoelzl
parents: 46731
diff changeset
   285
  "prob ({x. Pr x} \<inter> msgs) = 0 \<Longrightarrow> prob ({x. Pr x \<and> Q x} \<inter> msgs) = 0"
05663f75964c reworked Probability theory
hoelzl
parents: 46731
diff changeset
   286
  using finite_measure_mono[of "{x. Pr x \<and> Q x} \<inter> msgs" "{x. Pr x} \<inter> msgs"]
05663f75964c reworked Probability theory
hoelzl
parents: 46731
diff changeset
   287
  using measure_nonneg[of \<mu> "{x. Pr x \<and> Q x} \<inter> msgs"]
05663f75964c reworked Probability theory
hoelzl
parents: 46731
diff changeset
   288
  by (simp add: subset_eq)
05663f75964c reworked Probability theory
hoelzl
parents: 46731
diff changeset
   289
05663f75964c reworked Probability theory
hoelzl
parents: 46731
diff changeset
   290
lemma simple_function_finite: "simple_function \<mu> f"
05663f75964c reworked Probability theory
hoelzl
parents: 46731
diff changeset
   291
  by (simp add: simple_function_def)
05663f75964c reworked Probability theory
hoelzl
parents: 46731
diff changeset
   292
05663f75964c reworked Probability theory
hoelzl
parents: 46731
diff changeset
   293
lemma entropy_commute: "\<H>(\<lambda>x. (X x, Y x)) = \<H>(\<lambda>x. (Y x, X x))"
62977
2e874d9aca43 fix HOL-Probability-ex
hoelzl
parents: 62390
diff changeset
   294
  apply (subst (1 2) entropy_simple_distributed[OF simple_distributedI[OF simple_function_finite _ refl]])
47694
05663f75964c reworked Probability theory
hoelzl
parents: 46731
diff changeset
   295
  unfolding space_point_measure
05663f75964c reworked Probability theory
hoelzl
parents: 46731
diff changeset
   296
proof -
05663f75964c reworked Probability theory
hoelzl
parents: 46731
diff changeset
   297
  have eq: "(\<lambda>x. (X x, Y x)) ` msgs = (\<lambda>(x, y). (y, x)) ` (\<lambda>x. (Y x, X x)) ` msgs"
05663f75964c reworked Probability theory
hoelzl
parents: 46731
diff changeset
   298
    by auto
05663f75964c reworked Probability theory
hoelzl
parents: 46731
diff changeset
   299
  show "- (\<Sum>x\<in>(\<lambda>x. (X x, Y x)) ` msgs. (\<P>(X ; Y) {x}) * log b (\<P>(X ; Y) {x})) =
05663f75964c reworked Probability theory
hoelzl
parents: 46731
diff changeset
   300
    - (\<Sum>x\<in>(\<lambda>x. (Y x, X x)) ` msgs. (\<P>(Y ; X) {x}) * log b (\<P>(Y ; X) {x}))"
05663f75964c reworked Probability theory
hoelzl
parents: 46731
diff changeset
   301
    unfolding eq
64267
b9a1486e79be setsum -> sum
nipkow
parents: 63918
diff changeset
   302
    apply (subst sum.reindex)
b9a1486e79be setsum -> sum
nipkow
parents: 63918
diff changeset
   303
    apply (auto simp: vimage_def inj_on_def intro!: sum.cong arg_cong[where f="\<lambda>x. prob x * log b (prob x)"])
47694
05663f75964c reworked Probability theory
hoelzl
parents: 46731
diff changeset
   304
    done
62977
2e874d9aca43 fix HOL-Probability-ex
hoelzl
parents: 62390
diff changeset
   305
qed simp_all
47694
05663f75964c reworked Probability theory
hoelzl
parents: 46731
diff changeset
   306
05663f75964c reworked Probability theory
hoelzl
parents: 46731
diff changeset
   307
lemma (in -) measure_eq_0I: "A = {} \<Longrightarrow> measure M A = 0" by simp
05663f75964c reworked Probability theory
hoelzl
parents: 46731
diff changeset
   308
05663f75964c reworked Probability theory
hoelzl
parents: 46731
diff changeset
   309
lemma conditional_entropy_eq_ce_with_hypothesis:
05663f75964c reworked Probability theory
hoelzl
parents: 46731
diff changeset
   310
  "\<H>(X | Y) = -(\<Sum>y\<in>Y`msgs. (\<P>(Y) {y}) * (\<Sum>x\<in>X`msgs. (\<P>(X ; Y) {(x,y)}) / (\<P>(Y) {y}) *
05663f75964c reworked Probability theory
hoelzl
parents: 46731
diff changeset
   311
     log b ((\<P>(X ; Y) {(x,y)}) / (\<P>(Y) {y}))))"
05663f75964c reworked Probability theory
hoelzl
parents: 46731
diff changeset
   312
  apply (subst conditional_entropy_eq[OF
62977
2e874d9aca43 fix HOL-Probability-ex
hoelzl
parents: 62390
diff changeset
   313
    simple_distributedI[OF simple_function_finite _ refl]
2e874d9aca43 fix HOL-Probability-ex
hoelzl
parents: 62390
diff changeset
   314
    simple_distributedI[OF simple_function_finite _ refl]])
47694
05663f75964c reworked Probability theory
hoelzl
parents: 46731
diff changeset
   315
  unfolding space_point_measure
05663f75964c reworked Probability theory
hoelzl
parents: 46731
diff changeset
   316
proof -
05663f75964c reworked Probability theory
hoelzl
parents: 46731
diff changeset
   317
  have "- (\<Sum>(x, y)\<in>(\<lambda>x. (X x, Y x)) ` msgs. (\<P>(X ; Y) {(x, y)}) * log b ((\<P>(X ; Y) {(x, y)}) / (\<P>(Y) {y}))) =
05663f75964c reworked Probability theory
hoelzl
parents: 46731
diff changeset
   318
    - (\<Sum>x\<in>X`msgs. (\<Sum>y\<in>Y`msgs. (\<P>(X ; Y) {(x, y)}) * log b ((\<P>(X ; Y) {(x, y)}) / (\<P>(Y) {y}))))"
64267
b9a1486e79be setsum -> sum
nipkow
parents: 63918
diff changeset
   319
    unfolding sum.cartesian_product
b9a1486e79be setsum -> sum
nipkow
parents: 63918
diff changeset
   320
    apply (intro arg_cong[where f=uminus] sum.mono_neutral_left)
47694
05663f75964c reworked Probability theory
hoelzl
parents: 46731
diff changeset
   321
    apply (auto simp: vimage_def image_iff intro!: measure_eq_0I)
05663f75964c reworked Probability theory
hoelzl
parents: 46731
diff changeset
   322
    apply metis
05663f75964c reworked Probability theory
hoelzl
parents: 46731
diff changeset
   323
    done
05663f75964c reworked Probability theory
hoelzl
parents: 46731
diff changeset
   324
  also have "\<dots> = - (\<Sum>y\<in>Y`msgs. (\<Sum>x\<in>X`msgs. (\<P>(X ; Y) {(x, y)}) * log b ((\<P>(X ; Y) {(x, y)}) / (\<P>(Y) {y}))))"
66804
3f9bb52082c4 avoid name clashes on interpretation of abstract locales
haftmann
parents: 66453
diff changeset
   325
    by (subst sum.swap) rule
47694
05663f75964c reworked Probability theory
hoelzl
parents: 46731
diff changeset
   326
  also have "\<dots> = -(\<Sum>y\<in>Y`msgs. (\<P>(Y) {y}) * (\<Sum>x\<in>X`msgs. (\<P>(X ; Y) {(x,y)}) / (\<P>(Y) {y}) * log b ((\<P>(X ; Y) {(x,y)}) / (\<P>(Y) {y}))))"
64267
b9a1486e79be setsum -> sum
nipkow
parents: 63918
diff changeset
   327
    by (auto simp add: sum_distrib_left vimage_def intro!: sum.cong prob_conj_imp1)
47694
05663f75964c reworked Probability theory
hoelzl
parents: 46731
diff changeset
   328
  finally show "- (\<Sum>(x, y)\<in>(\<lambda>x. (X x, Y x)) ` msgs. (\<P>(X ; Y) {(x, y)}) * log b ((\<P>(X ; Y) {(x, y)}) / (\<P>(Y) {y}))) =
05663f75964c reworked Probability theory
hoelzl
parents: 46731
diff changeset
   329
    -(\<Sum>y\<in>Y`msgs. (\<P>(Y) {y}) * (\<Sum>x\<in>X`msgs. (\<P>(X ; Y) {(x,y)}) / (\<P>(Y) {y}) * log b ((\<P>(X ; Y) {(x,y)}) / (\<P>(Y) {y}))))" .
62977
2e874d9aca43 fix HOL-Probability-ex
hoelzl
parents: 62390
diff changeset
   330
qed simp_all
47694
05663f75964c reworked Probability theory
hoelzl
parents: 46731
diff changeset
   331
49793
dd719cdeca8f simplified definitions
hoelzl
parents: 49792
diff changeset
   332
lemma ce_OB_eq_ce_t: "\<I>(fst ; OB) = \<I>(fst ; t\<circ>OB)"
40859
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   333
proof -
61808
fc1556774cfe isabelle update_cartouches -c -t;
wenzelm
parents: 61649
diff changeset
   334
  txt \<open>Lemma 2\<close>
40859
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   335
81179
cf2c03967178 tuned proofs;
wenzelm
parents: 81128
diff changeset
   336
  have t_eq_imp: "(\<P>(OB ; fst) {(obs, k)}) = (\<P>(OB ; fst) {(obs', k)})"
cf2c03967178 tuned proofs;
wenzelm
parents: 81128
diff changeset
   337
    if "k \<in> keys" "K k \<noteq> 0" and obs': "obs' \<in> OB ` msgs" and obs: "obs \<in> OB ` msgs"
cf2c03967178 tuned proofs;
wenzelm
parents: 81128
diff changeset
   338
      and eq: "t obs = t obs'"
cf2c03967178 tuned proofs;
wenzelm
parents: 81128
diff changeset
   339
    for k obs obs'
cf2c03967178 tuned proofs;
wenzelm
parents: 81128
diff changeset
   340
  proof -
cf2c03967178 tuned proofs;
wenzelm
parents: 81128
diff changeset
   341
    from t_eq_imp_bij_func[OF eq]
40859
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   342
    obtain t_f where "bij_betw t_f {..<n} {..<n}" and
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   343
      obs_t_f: "\<And>i. i<n \<Longrightarrow> obs!i = obs' ! t_f i"
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   344
      using obs obs' unfolding OB_def msgs_def by auto
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   345
    then have t_f: "inj_on t_f {..<n}" "{..<n} = t_f`{..<n}" unfolding bij_betw_def by auto
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   346
81179
cf2c03967178 tuned proofs;
wenzelm
parents: 81128
diff changeset
   347
    have *: "(\<P>(OB ; fst) {(obs, k)}) / K k =
cf2c03967178 tuned proofs;
wenzelm
parents: 81128
diff changeset
   348
            (\<Prod>i<n. \<Sum>m\<in>{m\<in>messages. observe k m = obs ! i}. M m)"
cf2c03967178 tuned proofs;
wenzelm
parents: 81128
diff changeset
   349
      if "obs \<in> OB`msgs" for obs
cf2c03967178 tuned proofs;
wenzelm
parents: 81128
diff changeset
   350
    proof -
cf2c03967178 tuned proofs;
wenzelm
parents: 81128
diff changeset
   351
      from that have **: "length ms = n \<Longrightarrow> OB (k, ms) = obs \<longleftrightarrow> (\<forall>i<n. observe k (ms!i) = obs ! i)"
cf2c03967178 tuned proofs;
wenzelm
parents: 81128
diff changeset
   352
        for ms
40859
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   353
        unfolding OB_def msgs_def by (simp add: image_iff list_eq_iff_nth_eq)
47694
05663f75964c reworked Probability theory
hoelzl
parents: 46731
diff changeset
   354
      have "(\<P>(OB ; fst) {(obs, k)}) / K k =
40859
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   355
          p ({k}\<times>{ms. (k,ms) \<in> msgs \<and> OB (k,ms) = obs}) / K k"
81179
cf2c03967178 tuned proofs;
wenzelm
parents: 81128
diff changeset
   356
        by (simp add: \<mu>'_eq) (auto intro!: arg_cong[where f=p])
cf2c03967178 tuned proofs;
wenzelm
parents: 81128
diff changeset
   357
      also have "\<dots> = (\<Prod>i<n. \<Sum>m\<in>{m\<in>messages. observe k m = obs ! i}. M m)"
61808
fc1556774cfe isabelle update_cartouches -c -t;
wenzelm
parents: 61649
diff changeset
   358
        unfolding P_def using \<open>K k \<noteq> 0\<close> \<open>k \<in> keys\<close>
79492
c1b0f64eb865 A few new results (mostly brought in from other developments)
paulson <lp15@cam.ac.uk>
parents: 73392
diff changeset
   359
        apply (simp add: sum.cartesian_product' sum_divide_distrib msgs_def ** cong: conj_cong)
64272
f76b6dda2e56 setprod -> prod
nipkow
parents: 64267
diff changeset
   360
        apply (subst prod_sum_distrib_lists[OF M.finite_space]) ..
81179
cf2c03967178 tuned proofs;
wenzelm
parents: 81128
diff changeset
   361
      finally show ?thesis .
cf2c03967178 tuned proofs;
wenzelm
parents: 81128
diff changeset
   362
    qed
40859
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   363
47694
05663f75964c reworked Probability theory
hoelzl
parents: 46731
diff changeset
   364
    have "(\<P>(OB ; fst) {(obs, k)}) / K k = (\<P>(OB ; fst) {(obs', k)}) / K k"
40859
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   365
      unfolding *[OF obs] *[OF obs']
64272
f76b6dda2e56 setprod -> prod
nipkow
parents: 64267
diff changeset
   366
      using t_f(1) obs_t_f by (subst (2) t_f(2)) (simp add: prod.reindex)
81179
cf2c03967178 tuned proofs;
wenzelm
parents: 81128
diff changeset
   367
    then show ?thesis using \<open>K k \<noteq> 0\<close> by auto
cf2c03967178 tuned proofs;
wenzelm
parents: 81128
diff changeset
   368
  qed
40859
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   369
46731
5302e932d1e5 avoid undeclared variables in let bindings;
wenzelm
parents: 45715
diff changeset
   370
  let ?S = "\<lambda>obs. t -`{t obs} \<inter> OB`msgs"
81179
cf2c03967178 tuned proofs;
wenzelm
parents: 81128
diff changeset
   371
  have P_t_eq_P_OB: "\<P>(t\<circ>OB ; fst) {(t obs, k)} = real (card (?S obs)) * \<P>(OB ; fst) {(obs, k)}"
cf2c03967178 tuned proofs;
wenzelm
parents: 81128
diff changeset
   372
    if "k \<in> keys" "K k \<noteq> 0" and obs: "obs \<in> OB`msgs"
cf2c03967178 tuned proofs;
wenzelm
parents: 81128
diff changeset
   373
    for k obs
cf2c03967178 tuned proofs;
wenzelm
parents: 81128
diff changeset
   374
  proof -
40859
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   375
    have *: "((\<lambda>x. (t (OB x), fst x)) -` {(t obs, k)} \<inter> msgs) =
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   376
      (\<Union>obs'\<in>?S obs. ((\<lambda>x. (OB x, fst x)) -` {(obs', k)} \<inter> msgs))" by auto
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   377
    have df: "disjoint_family_on (\<lambda>obs'. (\<lambda>x. (OB x, fst x)) -` {(obs', k)} \<inter> msgs) (?S obs)"
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   378
      unfolding disjoint_family_on_def by auto
47694
05663f75964c reworked Probability theory
hoelzl
parents: 46731
diff changeset
   379
    have "\<P>(t\<circ>OB ; fst) {(t obs, k)} = (\<Sum>obs'\<in>?S obs. \<P>(OB ; fst) {(obs', k)})"
05663f75964c reworked Probability theory
hoelzl
parents: 46731
diff changeset
   380
      unfolding comp_def
62977
2e874d9aca43 fix HOL-Probability-ex
hoelzl
parents: 62390
diff changeset
   381
      using finite_measure_finite_Union[OF _ _ df]
64267
b9a1486e79be setsum -> sum
nipkow
parents: 63918
diff changeset
   382
      by (auto simp add: * intro!: sum_nonneg)
47694
05663f75964c reworked Probability theory
hoelzl
parents: 46731
diff changeset
   383
    also have "(\<Sum>obs'\<in>?S obs. \<P>(OB ; fst) {(obs', k)}) = real (card (?S obs)) * \<P>(OB ; fst) {(obs, k)}"
61808
fc1556774cfe isabelle update_cartouches -c -t;
wenzelm
parents: 61649
diff changeset
   384
      by (simp add: t_eq_imp[OF \<open>k \<in> keys\<close> \<open>K k \<noteq> 0\<close> obs])
81179
cf2c03967178 tuned proofs;
wenzelm
parents: 81128
diff changeset
   385
    finally show ?thesis .
cf2c03967178 tuned proofs;
wenzelm
parents: 81128
diff changeset
   386
  qed
40859
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   387
81179
cf2c03967178 tuned proofs;
wenzelm
parents: 81128
diff changeset
   388
  have CP_t_K: "\<P>(t\<circ>OB | fst) {(t obs, k)} =
cf2c03967178 tuned proofs;
wenzelm
parents: 81128
diff changeset
   389
    real (card (t -` {t obs} \<inter> OB ` msgs)) * \<P>(OB | fst) {(obs, k)}"
cf2c03967178 tuned proofs;
wenzelm
parents: 81128
diff changeset
   390
    if k: "k \<in> keys" and obs: "obs \<in> OB`msgs" for k obs
cf2c03967178 tuned proofs;
wenzelm
parents: 81128
diff changeset
   391
    using \<P>_k[OF k] P_t_eq_P_OB[OF k _ obs] by auto
40859
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   392
81179
cf2c03967178 tuned proofs;
wenzelm
parents: 81128
diff changeset
   393
  have CP_T_eq_CP_O: "\<P>(fst | t\<circ>OB) {(k, t obs)} = \<P>(fst | OB) {(k, obs)}"
cf2c03967178 tuned proofs;
wenzelm
parents: 81128
diff changeset
   394
    if "k \<in> keys" and obs: "obs \<in> OB`msgs" for k obs
cf2c03967178 tuned proofs;
wenzelm
parents: 81128
diff changeset
   395
  proof -
cf2c03967178 tuned proofs;
wenzelm
parents: 81128
diff changeset
   396
    from that have "t -`{t obs} \<inter> OB`msgs \<noteq> {}" (is "?S \<noteq> {}") by auto
40859
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   397
    then have "real (card ?S) \<noteq> 0" by auto
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   398
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   399
    have "\<P>(fst | t\<circ>OB) {(k, t obs)} = \<P>(t\<circ>OB | fst) {(t obs, k)} * \<P>(fst) {k} / \<P>(t\<circ>OB) {t obs}"
47694
05663f75964c reworked Probability theory
hoelzl
parents: 46731
diff changeset
   400
      using finite_measure_mono[of "{x. fst x = k \<and> t (OB x) = t obs} \<inter> msgs" "{x. fst x = k} \<inter> msgs"]
05663f75964c reworked Probability theory
hoelzl
parents: 46731
diff changeset
   401
      using measure_nonneg[of \<mu> "{x. fst x = k \<and> t (OB x) = t obs} \<inter> msgs"]
62977
2e874d9aca43 fix HOL-Probability-ex
hoelzl
parents: 62390
diff changeset
   402
      by (auto simp add: vimage_def conj_commute subset_eq simp del: measure_nonneg)
47694
05663f75964c reworked Probability theory
hoelzl
parents: 46731
diff changeset
   403
    also have "(\<P>(t\<circ>OB) {t obs}) = (\<Sum>k'\<in>keys. (\<P>(t\<circ>OB|fst) {(t obs, k')}) * (\<P>(fst) {k'}))"
05663f75964c reworked Probability theory
hoelzl
parents: 46731
diff changeset
   404
      using finite_measure_mono[of "{x. t (OB x) = t obs \<and> fst x = k} \<inter> msgs" "{x. fst x = k} \<inter> msgs"]
05663f75964c reworked Probability theory
hoelzl
parents: 46731
diff changeset
   405
      using measure_nonneg[of \<mu> "{x. fst x = k \<and> t (OB x) = t obs} \<inter> msgs"]
64267
b9a1486e79be setsum -> sum
nipkow
parents: 63918
diff changeset
   406
      apply (simp add: sum_distribution_cut[of "t\<circ>OB" "t obs" fst])
b9a1486e79be setsum -> sum
nipkow
parents: 63918
diff changeset
   407
      apply (auto intro!: sum.cong simp: subset_eq vimage_def prob_conj_imp1)
47694
05663f75964c reworked Probability theory
hoelzl
parents: 46731
diff changeset
   408
      done
40859
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   409
    also have "\<P>(t\<circ>OB | fst) {(t obs, k)} * \<P>(fst) {k} / (\<Sum>k'\<in>keys. \<P>(t\<circ>OB|fst) {(t obs, k')} * \<P>(fst) {k'}) =
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   410
      \<P>(OB | fst) {(obs, k)} * \<P>(fst) {k} / (\<Sum>k'\<in>keys. \<P>(OB|fst) {(obs, k')} * \<P>(fst) {k'})"
61808
fc1556774cfe isabelle update_cartouches -c -t;
wenzelm
parents: 61649
diff changeset
   411
      using CP_t_K[OF \<open>k\<in>keys\<close> obs] CP_t_K[OF _ obs] \<open>real (card ?S) \<noteq> 0\<close>
64267
b9a1486e79be setsum -> sum
nipkow
parents: 63918
diff changeset
   412
      by (simp only: sum_distrib_left[symmetric] ac_simps
61808
fc1556774cfe isabelle update_cartouches -c -t;
wenzelm
parents: 61649
diff changeset
   413
          mult_divide_mult_cancel_left[OF \<open>real (card ?S) \<noteq> 0\<close>]
64267
b9a1486e79be setsum -> sum
nipkow
parents: 63918
diff changeset
   414
        cong: sum.cong)
40859
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   415
    also have "(\<Sum>k'\<in>keys. \<P>(OB|fst) {(obs, k')} * \<P>(fst) {k'}) = \<P>(OB) {obs}"
64267
b9a1486e79be setsum -> sum
nipkow
parents: 63918
diff changeset
   416
      using sum_distribution_cut[of OB obs fst]
b9a1486e79be setsum -> sum
nipkow
parents: 63918
diff changeset
   417
      by (auto intro!: sum.cong simp: prob_conj_imp1 vimage_def)
40859
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   418
    also have "\<P>(OB | fst) {(obs, k)} * \<P>(fst) {k} / \<P>(OB) {obs} = \<P>(fst | OB) {(k, obs)}"
47694
05663f75964c reworked Probability theory
hoelzl
parents: 46731
diff changeset
   419
      by (auto simp: vimage_def conj_commute prob_conj_imp2)
81179
cf2c03967178 tuned proofs;
wenzelm
parents: 81128
diff changeset
   420
    finally show ?thesis .
cf2c03967178 tuned proofs;
wenzelm
parents: 81128
diff changeset
   421
  qed
40859
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   422
46731
5302e932d1e5 avoid undeclared variables in let bindings;
wenzelm
parents: 45715
diff changeset
   423
  let ?H = "\<lambda>obs. (\<Sum>k\<in>keys. \<P>(fst|OB) {(k, obs)} * log b (\<P>(fst|OB) {(k, obs)})) :: real"
5302e932d1e5 avoid undeclared variables in let bindings;
wenzelm
parents: 45715
diff changeset
   424
  let ?Ht = "\<lambda>obs. (\<Sum>k\<in>keys. \<P>(fst|t\<circ>OB) {(k, obs)} * log b (\<P>(fst|t\<circ>OB) {(k, obs)})) :: real"
40859
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   425
81179
cf2c03967178 tuned proofs;
wenzelm
parents: 81128
diff changeset
   426
  have *: "?H obs = ?Ht (t obs)" if obs: "obs \<in> OB`msgs" for obs
cf2c03967178 tuned proofs;
wenzelm
parents: 81128
diff changeset
   427
  proof -
40859
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   428
    have "?H obs = (\<Sum>k\<in>keys. \<P>(fst|t\<circ>OB) {(k, t obs)} * log b (\<P>(fst|t\<circ>OB) {(k, t obs)}))"
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   429
      using CP_T_eq_CP_O[OF _ obs]
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   430
      by simp
81179
cf2c03967178 tuned proofs;
wenzelm
parents: 81128
diff changeset
   431
    then show ?thesis .
cf2c03967178 tuned proofs;
wenzelm
parents: 81128
diff changeset
   432
  qed
40859
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   433
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   434
  have **: "\<And>x f A. (\<Sum>y\<in>t-`{x}\<inter>A. f y (t y)) = (\<Sum>y\<in>t-`{x}\<inter>A. f y x)" by auto
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   435
81179
cf2c03967178 tuned proofs;
wenzelm
parents: 81128
diff changeset
   436
  have P_t_sum_P_O: "\<P>(t\<circ>OB) {t (OB x)} = (\<Sum>obs\<in>?S (OB x). \<P>(OB) {obs})" for x
cf2c03967178 tuned proofs;
wenzelm
parents: 81128
diff changeset
   437
  proof -
40859
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   438
    have *: "(\<lambda>x. t (OB x)) -` {t (OB x)} \<inter> msgs =
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   439
      (\<Union>obs\<in>?S (OB x). OB -` {obs} \<inter> msgs)" by auto
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   440
    have df: "disjoint_family_on (\<lambda>obs. OB -` {obs} \<inter> msgs) (?S (OB x))"
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   441
      unfolding disjoint_family_on_def by auto
81179
cf2c03967178 tuned proofs;
wenzelm
parents: 81128
diff changeset
   442
    show ?thesis
47694
05663f75964c reworked Probability theory
hoelzl
parents: 46731
diff changeset
   443
      unfolding comp_def
62977
2e874d9aca43 fix HOL-Probability-ex
hoelzl
parents: 62390
diff changeset
   444
      using finite_measure_finite_Union[OF _ _ df]
81179
cf2c03967178 tuned proofs;
wenzelm
parents: 81128
diff changeset
   445
      by (force simp add: * intro!: sum_nonneg)
cf2c03967178 tuned proofs;
wenzelm
parents: 81128
diff changeset
   446
  qed
40859
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   447
61808
fc1556774cfe isabelle update_cartouches -c -t;
wenzelm
parents: 61649
diff changeset
   448
  txt \<open>Lemma 3\<close>
40859
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   449
  have "\<H>(fst | OB) = -(\<Sum>obs\<in>OB`msgs. \<P>(OB) {obs} * ?Ht (t obs))"
47694
05663f75964c reworked Probability theory
hoelzl
parents: 46731
diff changeset
   450
    unfolding conditional_entropy_eq_ce_with_hypothesis using * by simp
40859
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   451
  also have "\<dots> = -(\<Sum>obs\<in>t`OB`msgs. \<P>(t\<circ>OB) {obs} * ?Ht obs)"
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   452
    apply (subst SIGMA_image_vimage[symmetric, of "OB`msgs" t])
64267
b9a1486e79be setsum -> sum
nipkow
parents: 63918
diff changeset
   453
    apply (subst sum.reindex)
44890
22f665a2e91c new fastforce replacing fastsimp - less confusing name
nipkow
parents: 43920
diff changeset
   454
    apply (fastforce intro!: inj_onI)
40859
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   455
    apply simp
64267
b9a1486e79be setsum -> sum
nipkow
parents: 63918
diff changeset
   456
    apply (subst sum.Sigma[symmetric, unfolded split_def])
44890
22f665a2e91c new fastforce replacing fastsimp - less confusing name
nipkow
parents: 43920
diff changeset
   457
    using finite_space apply fastforce
22f665a2e91c new fastforce replacing fastsimp - less confusing name
nipkow
parents: 43920
diff changeset
   458
    using finite_space apply fastforce
64267
b9a1486e79be setsum -> sum
nipkow
parents: 63918
diff changeset
   459
    apply (safe intro!: sum.cong)
40859
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   460
    using P_t_sum_P_O
64267
b9a1486e79be setsum -> sum
nipkow
parents: 63918
diff changeset
   461
    by (simp add: sum_divide_distrib[symmetric] field_simps **
b9a1486e79be setsum -> sum
nipkow
parents: 63918
diff changeset
   462
                  sum_distrib_left[symmetric] sum_distrib_right[symmetric])
40859
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   463
  also have "\<dots> = \<H>(fst | t\<circ>OB)"
47694
05663f75964c reworked Probability theory
hoelzl
parents: 46731
diff changeset
   464
    unfolding conditional_entropy_eq_ce_with_hypothesis
40859
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   465
    by (simp add: comp_def image_image[symmetric])
49793
dd719cdeca8f simplified definitions
hoelzl
parents: 49792
diff changeset
   466
  finally show ?thesis
dd719cdeca8f simplified definitions
hoelzl
parents: 49792
diff changeset
   467
    by (subst (1 2) mutual_information_eq_entropy_conditional_entropy) simp_all
40859
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   468
qed
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   469
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   470
theorem "\<I>(fst ; OB) \<le> real (card observations) * log b (real n + 1)"
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   471
proof -
49793
dd719cdeca8f simplified definitions
hoelzl
parents: 49792
diff changeset
   472
  have "\<I>(fst ; OB) = \<H>(fst) - \<H>(fst | t\<circ>OB)"
dd719cdeca8f simplified definitions
hoelzl
parents: 49792
diff changeset
   473
    unfolding ce_OB_eq_ce_t
dd719cdeca8f simplified definitions
hoelzl
parents: 49792
diff changeset
   474
    by (rule mutual_information_eq_entropy_conditional_entropy simple_function_finite)+
40859
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   475
  also have "\<dots> = \<H>(t\<circ>OB) - \<H>(t\<circ>OB | fst)"
70347
e5cd5471c18a official fact collection sign_simps
haftmann
parents: 67399
diff changeset
   476
    unfolding entropy_chain_rule[symmetric, OF simple_function_finite simple_function_finite] algebra_simps
47694
05663f75964c reworked Probability theory
hoelzl
parents: 46731
diff changeset
   477
    by (subst entropy_commute) simp
40859
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   478
  also have "\<dots> \<le> \<H>(t\<circ>OB)"
47694
05663f75964c reworked Probability theory
hoelzl
parents: 46731
diff changeset
   479
    using conditional_entropy_nonneg[of "t\<circ>OB" fst] by simp
40859
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   480
  also have "\<dots> \<le> log b (real (card ((t\<circ>OB)`msgs)))"
62977
2e874d9aca43 fix HOL-Probability-ex
hoelzl
parents: 62390
diff changeset
   481
    using entropy_le_card[of "t\<circ>OB", OF simple_distributedI[OF simple_function_finite _ refl]] by simp
40859
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   482
  also have "\<dots> \<le> log b (real (n + 1)^card observations)"
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   483
    using card_T_bound not_empty
80034
95b4fb2b5359 New material and a bit of refactoring
paulson <lp15@cam.ac.uk>
parents: 79492
diff changeset
   484
    by (auto intro!: log_mono simp: card_gt_0_iff of_nat_power [symmetric] simp del: of_nat_power of_nat_Suc)
40859
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   485
  also have "\<dots> = real (card observations) * log b (real n + 1)"
61609
77b453bd616f Coercion "real" now has type nat => real only and is no longer overloaded. Type class "real_of" is gone. Many duplicate theorems removed.
paulson <lp15@cam.ac.uk>
parents: 61284
diff changeset
   486
    by (simp add: log_nat_power add.commute)
40859
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   487
  finally show ?thesis  .
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   488
qed
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   489
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   490
end
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents:
diff changeset
   491
41689
3e39b0e730d6 the measure valuation is again part of the measure_space type, instead of an explicit parameter to the locale;
hoelzl
parents: 41413
diff changeset
   492
end