| author | paulson | 
| Tue, 10 Jan 2023 11:06:20 +0000 | |
| changeset 76942 | c732fa27b60f | 
| parent 76137 | 175e6d47e3af | 
| child 77811 | ae9e6218443d | 
| permissions | -rw-r--r-- | 
| 62375 | 1 | (* Title: HOL/Library/Extended_Nonnegative_Real.thy | 
| 2 | Author: Johannes Hölzl | |
| 3 | *) | |
| 4 | ||
| 5 | subsection \<open>The type of non-negative extended real numbers\<close> | |
| 6 | ||
| 7 | theory Extended_Nonnegative_Real | |
| 62648 | 8 | imports Extended_Real Indicator_Function | 
| 62375 | 9 | begin | 
| 10 | ||
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 11 | lemma ereal_ineq_diff_add: | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 12 | assumes "b \<noteq> (-\<infinity>::ereal)" "a \<ge> b" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 13 | shows "a = b + (a-b)" | 
| 67691 
db202a00a29c
fixing ennreal using add_mono1; shifting results from linordered_semidom to linordered_nonzero_semiring
 paulson <lp15@cam.ac.uk> parents: 
67456diff
changeset | 14 | by (metis add.commute assms ereal_eq_minus_iff ereal_minus_le_iff ereal_plus_eq_PInfty) | 
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 15 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 16 | lemma Limsup_const_add: | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 17 |   fixes c :: "'a::{complete_linorder, linorder_topology, topological_monoid_add, ordered_ab_semigroup_add}"
 | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 18 | shows "F \<noteq> bot \<Longrightarrow> Limsup F (\<lambda>x. c + f x) = c + Limsup F f" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 19 | by (rule Limsup_compose_continuous_mono) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 20 | (auto intro!: monoI add_mono continuous_on_add continuous_on_id continuous_on_const) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 21 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 22 | lemma Liminf_const_add: | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 23 |   fixes c :: "'a::{complete_linorder, linorder_topology, topological_monoid_add, ordered_ab_semigroup_add}"
 | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 24 | shows "F \<noteq> bot \<Longrightarrow> Liminf F (\<lambda>x. c + f x) = c + Liminf F f" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 25 | by (rule Liminf_compose_continuous_mono) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 26 | (auto intro!: monoI add_mono continuous_on_add continuous_on_id continuous_on_const) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 27 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 28 | lemma Liminf_add_const: | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 29 |   fixes c :: "'a::{complete_linorder, linorder_topology, topological_monoid_add, ordered_ab_semigroup_add}"
 | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 30 | shows "F \<noteq> bot \<Longrightarrow> Liminf F (\<lambda>x. f x + c) = Liminf F f + c" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 31 | by (rule Liminf_compose_continuous_mono) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 32 | (auto intro!: monoI add_mono continuous_on_add continuous_on_id continuous_on_const) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 33 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 34 | lemma sums_offset: | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 35 |   fixes f g :: "nat \<Rightarrow> 'a :: {t2_space, topological_comm_monoid_add}"
 | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 36 | assumes "(\<lambda>n. f (n + i)) sums l" shows "f sums (l + (\<Sum>j<i. f j))" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 37 | proof - | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 38 | have "(\<lambda>k. (\<Sum>n<k. f (n + i)) + (\<Sum>j<i. f j)) \<longlonglongrightarrow> l + (\<Sum>j<i. f j)" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 39 | using assms by (auto intro!: tendsto_add simp: sums_def) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 40 | moreover | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 41 |   { fix k :: nat
 | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 42 | have "(\<Sum>j<k + i. f j) = (\<Sum>j=i..<k + i. f j) + (\<Sum>j=0..<i. f j)" | 
| 64267 | 43 | by (subst sum.union_disjoint[symmetric]) (auto intro!: sum.cong) | 
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 44 |     also have "(\<Sum>j=i..<k + i. f j) = (\<Sum>j\<in>(\<lambda>n. n + i)`{0..<k}. f j)"
 | 
| 67411 
3f4b0c84630f
restored naming of lemmas after corresponding constants
 haftmann parents: 
67408diff
changeset | 45 | unfolding image_add_atLeastLessThan by simp | 
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 46 | finally have "(\<Sum>j<k + i. f j) = (\<Sum>n<k. f (n + i)) + (\<Sum>j<i. f j)" | 
| 64267 | 47 | by (auto simp: inj_on_def atLeast0LessThan sum.reindex) } | 
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 48 | ultimately have "(\<lambda>k. (\<Sum>n<k + i. f n)) \<longlonglongrightarrow> l + (\<Sum>j<i. f j)" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 49 | by simp | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 50 | then show ?thesis | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 51 | unfolding sums_def by (rule LIMSEQ_offset) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 52 | qed | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 53 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 54 | lemma suminf_offset: | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 55 |   fixes f g :: "nat \<Rightarrow> 'a :: {t2_space, topological_comm_monoid_add}"
 | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 56 | shows "summable (\<lambda>j. f (j + i)) \<Longrightarrow> suminf f = (\<Sum>j. f (j + i)) + (\<Sum>j<i. f j)" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 57 | by (intro sums_unique[symmetric] sums_offset summable_sums) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 58 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 59 | lemma eventually_at_left_1: "(\<And>z::real. 0 < z \<Longrightarrow> z < 1 \<Longrightarrow> P z) \<Longrightarrow> eventually P (at_left 1)" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 60 | by (subst eventually_at_left[of 0]) (auto intro: exI[of _ 0]) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 61 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 62 | lemma mult_eq_1: | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 63 |   fixes a b :: "'a :: {ordered_semiring, comm_monoid_mult}"
 | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 64 | shows "0 \<le> a \<Longrightarrow> a \<le> 1 \<Longrightarrow> b \<le> 1 \<Longrightarrow> a * b = 1 \<longleftrightarrow> (a = 1 \<and> b = 1)" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 65 | by (metis mult.left_neutral eq_iff mult.commute mult_right_mono) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 66 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 67 | lemma ereal_add_diff_cancel: | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 68 | fixes a b :: ereal | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 69 | shows "\<bar>b\<bar> \<noteq> \<infinity> \<Longrightarrow> (a + b) - b = a" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 70 | by (cases a b rule: ereal2_cases) auto | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 71 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 72 | lemma add_top: | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 73 |   fixes x :: "'a::{order_top, ordered_comm_monoid_add}"
 | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 74 | shows "0 \<le> x \<Longrightarrow> x + top = top" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 75 | by (intro top_le add_increasing order_refl) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 76 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 77 | lemma top_add: | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 78 |   fixes x :: "'a::{order_top, ordered_comm_monoid_add}"
 | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 79 | shows "0 \<le> x \<Longrightarrow> top + x = top" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 80 | by (intro top_le add_increasing2 order_refl) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 81 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 82 | lemma le_lfp: "mono f \<Longrightarrow> x \<le> lfp f \<Longrightarrow> f x \<le> lfp f" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 83 | by (subst lfp_unfold) (auto dest: monoD) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 84 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 85 | lemma lfp_transfer: | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 86 | assumes \<alpha>: "sup_continuous \<alpha>" and f: "sup_continuous f" and mg: "mono g" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 87 | assumes bot: "\<alpha> bot \<le> lfp g" and eq: "\<And>x. x \<le> lfp f \<Longrightarrow> \<alpha> (f x) = g (\<alpha> x)" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 88 | shows "\<alpha> (lfp f) = lfp g" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 89 | proof (rule antisym) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 90 | note mf = sup_continuous_mono[OF f] | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 91 | have f_le_lfp: "(f ^^ i) bot \<le> lfp f" for i | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 92 | by (induction i) (auto intro: le_lfp mf) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 93 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 94 | have "\<alpha> ((f ^^ i) bot) \<le> lfp g" for i | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 95 | by (induction i) (auto simp: bot eq f_le_lfp intro!: le_lfp mg) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 96 | then show "\<alpha> (lfp f) \<le> lfp g" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 97 | unfolding sup_continuous_lfp[OF f] | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 98 | by (subst \<alpha>[THEN sup_continuousD]) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 99 | (auto intro!: mono_funpow sup_continuous_mono[OF f] SUP_least) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 100 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 101 | show "lfp g \<le> \<alpha> (lfp f)" | 
| 63979 | 102 | by (rule lfp_lowerbound) (simp add: eq[symmetric] lfp_fixpoint[OF mf]) | 
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 103 | qed | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 104 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 105 | lemma sup_continuous_applyD: "sup_continuous f \<Longrightarrow> sup_continuous (\<lambda>x. f x h)" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 106 | using sup_continuous_apply[THEN sup_continuous_compose] . | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 107 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 108 | lemma sup_continuous_SUP[order_continuous_intros]: | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 109 | fixes M :: "_ \<Rightarrow> _ \<Rightarrow> 'a::complete_lattice" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 110 | assumes M: "\<And>i. i \<in> I \<Longrightarrow> sup_continuous (M i)" | 
| 69260 
0a9688695a1b
removed relics of ASCII syntax for indexed big operators
 haftmann parents: 
69064diff
changeset | 111 | shows "sup_continuous (SUP i\<in>I. M i)" | 
| 69861 
62e47f06d22c
avoid context-sensitive simp rules whose context-free form (image_comp) is not simp by default
 haftmann parents: 
69661diff
changeset | 112 | unfolding sup_continuous_def by (auto simp add: sup_continuousD [OF M] image_comp intro: SUP_commute) | 
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 113 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 114 | lemma sup_continuous_apply_SUP[order_continuous_intros]: | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 115 | fixes M :: "_ \<Rightarrow> _ \<Rightarrow> 'a::complete_lattice" | 
| 69260 
0a9688695a1b
removed relics of ASCII syntax for indexed big operators
 haftmann parents: 
69064diff
changeset | 116 | shows "(\<And>i. i \<in> I \<Longrightarrow> sup_continuous (M i)) \<Longrightarrow> sup_continuous (\<lambda>x. SUP i\<in>I. M i x)" | 
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 117 | unfolding SUP_apply[symmetric] by (rule sup_continuous_SUP) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 118 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 119 | lemma sup_continuous_lfp'[order_continuous_intros]: | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 120 | assumes 1: "sup_continuous f" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 121 | assumes 2: "\<And>g. sup_continuous g \<Longrightarrow> sup_continuous (f g)" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 122 | shows "sup_continuous (lfp f)" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 123 | proof - | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 124 | have "sup_continuous ((f ^^ i) bot)" for i | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 125 | proof (induction i) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 126 | case (Suc i) then show ?case | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 127 | by (auto intro!: 2) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 128 | qed (simp add: bot_fun_def sup_continuous_const) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 129 | then show ?thesis | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 130 | unfolding sup_continuous_lfp[OF 1] by (intro order_continuous_intros) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 131 | qed | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 132 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 133 | lemma sup_continuous_lfp''[order_continuous_intros]: | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 134 | assumes 1: "\<And>s. sup_continuous (f s)" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 135 | assumes 2: "\<And>g. sup_continuous g \<Longrightarrow> sup_continuous (\<lambda>s. f s (g s))" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 136 | shows "sup_continuous (\<lambda>x. lfp (f x))" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 137 | proof - | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 138 | have "sup_continuous (\<lambda>x. (f x ^^ i) bot)" for i | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 139 | proof (induction i) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 140 | case (Suc i) then show ?case | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 141 | by (auto intro!: 2) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 142 | qed (simp add: bot_fun_def sup_continuous_const) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 143 | then show ?thesis | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 144 | unfolding sup_continuous_lfp[OF 1] by (intro order_continuous_intros) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 145 | qed | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 146 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 147 | lemma mono_INF_fun: | 
| 69260 
0a9688695a1b
removed relics of ASCII syntax for indexed big operators
 haftmann parents: 
69064diff
changeset | 148 | "(\<And>x y. mono (F x y)) \<Longrightarrow> mono (\<lambda>z x. INF y \<in> X x. F x y z :: 'a :: complete_lattice)" | 
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 149 | by (auto intro!: INF_mono[OF bexI] simp: le_fun_def mono_def) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 150 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 151 | lemma continuous_on_cmult_ereal: | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 152 | "\<bar>c::ereal\<bar> \<noteq> \<infinity> \<Longrightarrow> continuous_on A f \<Longrightarrow> continuous_on A (\<lambda>x. c * f x)" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 153 | using tendsto_cmult_ereal[of c f "f x" "at x within A" for x] | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 154 | by (auto simp: continuous_on_def simp del: tendsto_cmult_ereal) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 155 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 156 | lemma real_of_nat_Sup: | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 157 |   assumes "A \<noteq> {}" "bdd_above A"
 | 
| 69260 
0a9688695a1b
removed relics of ASCII syntax for indexed big operators
 haftmann parents: 
69064diff
changeset | 158 | shows "of_nat (Sup A) = (SUP a\<in>A. of_nat a :: real)" | 
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 159 | proof (intro antisym) | 
| 69260 
0a9688695a1b
removed relics of ASCII syntax for indexed big operators
 haftmann parents: 
69064diff
changeset | 160 | show "(SUP a\<in>A. of_nat a::real) \<le> of_nat (Sup A)" | 
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 161 | using assms by (intro cSUP_least of_nat_mono) (auto intro: cSup_upper) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 162 | have "Sup A \<in> A" | 
| 71834 | 163 | using assms by (auto simp: Sup_nat_def bdd_above_nat) | 
| 69260 
0a9688695a1b
removed relics of ASCII syntax for indexed big operators
 haftmann parents: 
69064diff
changeset | 164 | then show "of_nat (Sup A) \<le> (SUP a\<in>A. of_nat a::real)" | 
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 165 | by (intro cSUP_upper bdd_above_image_mono assms) (auto simp: mono_def) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 166 | qed | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 167 | |
| 62378 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 168 | lemma (in complete_lattice) SUP_sup_const1: | 
| 69260 
0a9688695a1b
removed relics of ASCII syntax for indexed big operators
 haftmann parents: 
69064diff
changeset | 169 |   "I \<noteq> {} \<Longrightarrow> (SUP i\<in>I. sup c (f i)) = sup c (SUP i\<in>I. f i)"
 | 
| 62378 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 170 | using SUP_sup_distrib[of "\<lambda>_. c" I f] by simp | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 171 | |
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 172 | lemma (in complete_lattice) SUP_sup_const2: | 
| 69260 
0a9688695a1b
removed relics of ASCII syntax for indexed big operators
 haftmann parents: 
69064diff
changeset | 173 |   "I \<noteq> {} \<Longrightarrow> (SUP i\<in>I. sup (f i) c) = sup (SUP i\<in>I. f i) c"
 | 
| 62378 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 174 | using SUP_sup_distrib[of f I "\<lambda>_. c"] by simp | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 175 | |
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 176 | lemma one_less_of_natD: | 
| 72236 | 177 | assumes "(1::'a::linordered_semidom) < of_nat n" shows "1 < n" | 
| 178 | by (cases n) (use assms in auto) | |
| 62378 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 179 | |
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 180 | subsection \<open>Defining the extended non-negative reals\<close> | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 181 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 182 | text \<open>Basic definitions and type class setup\<close> | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 183 | |
| 62375 | 184 | typedef ennreal = "{x :: ereal. 0 \<le> x}"
 | 
| 62378 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 185 | morphisms enn2ereal e2ennreal' | 
| 62375 | 186 | by auto | 
| 187 | ||
| 62378 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 188 | definition "e2ennreal x = e2ennreal' (max 0 x)" | 
| 62375 | 189 | |
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 190 | lemma enn2ereal_range: "e2ennreal ` {0..} = UNIV"
 | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 191 | proof - | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 192 | have "\<exists>y\<ge>0. x = e2ennreal y" for x | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 193 | by (cases x) (auto simp: e2ennreal_def max_absorb2) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 194 | then show ?thesis | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 195 | by (auto simp: image_iff Bex_def) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 196 | qed | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 197 | |
| 62378 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 198 | lemma type_definition_ennreal': "type_definition enn2ereal e2ennreal {x. 0 \<le> x}"
 | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 199 | using type_definition_ennreal | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 200 | by (auto simp: type_definition_def e2ennreal_def max_absorb2) | 
| 62375 | 201 | |
| 62378 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 202 | setup_lifting type_definition_ennreal' | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 203 | |
| 62375 | 204 | declare [[coercion e2ennreal]] | 
| 205 | ||
| 62378 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 206 | instantiation ennreal :: complete_linorder | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 207 | begin | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 208 | |
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 209 | lift_definition top_ennreal :: ennreal is top by (rule top_greatest) | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 210 | lift_definition bot_ennreal :: ennreal is 0 by (rule order_refl) | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 211 | lift_definition sup_ennreal :: "ennreal \<Rightarrow> ennreal \<Rightarrow> ennreal" is sup by (rule le_supI1) | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 212 | lift_definition inf_ennreal :: "ennreal \<Rightarrow> ennreal \<Rightarrow> ennreal" is inf by (rule le_infI) | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 213 | |
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 214 | lift_definition Inf_ennreal :: "ennreal set \<Rightarrow> ennreal" is "Inf" | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 215 | by (rule Inf_greatest) | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 216 | |
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 217 | lift_definition Sup_ennreal :: "ennreal set \<Rightarrow> ennreal" is "sup 0 \<circ> Sup" | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 218 | by auto | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 219 | |
| 67399 | 220 | lift_definition less_eq_ennreal :: "ennreal \<Rightarrow> ennreal \<Rightarrow> bool" is "(\<le>)" . | 
| 221 | lift_definition less_ennreal :: "ennreal \<Rightarrow> ennreal \<Rightarrow> bool" is "(<)" . | |
| 62378 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 222 | |
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 223 | instance | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 224 | by standard | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 225 | (transfer ; auto simp: Inf_lower Inf_greatest Sup_upper Sup_least le_max_iff_disj max.absorb1)+ | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 226 | |
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 227 | end | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 228 | |
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 229 | lemma pcr_ennreal_enn2ereal[simp]: "pcr_ennreal (enn2ereal x) x" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 230 | by (simp add: ennreal.pcr_cr_eq cr_ennreal_def) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 231 | |
| 67399 | 232 | lemma rel_fun_eq_pcr_ennreal: "rel_fun (=) pcr_ennreal f g \<longleftrightarrow> f = enn2ereal \<circ> g" | 
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 233 | by (auto simp: rel_fun_def ennreal.pcr_cr_eq cr_ennreal_def) | 
| 62378 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 234 | |
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 235 | instantiation ennreal :: infinity | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 236 | begin | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 237 | |
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 238 | definition infinity_ennreal :: ennreal | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 239 | where | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 240 | [simp]: "\<infinity> = (top::ennreal)" | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 241 | |
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 242 | instance .. | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 243 | |
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 244 | end | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 245 | |
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 246 | instantiation ennreal :: "{semiring_1_no_zero_divisors, comm_semiring_1}"
 | 
| 62375 | 247 | begin | 
| 248 | ||
| 249 | lift_definition one_ennreal :: ennreal is 1 by simp | |
| 250 | lift_definition zero_ennreal :: ennreal is 0 by simp | |
| 67399 | 251 | lift_definition plus_ennreal :: "ennreal \<Rightarrow> ennreal \<Rightarrow> ennreal" is "(+)" by simp | 
| 69064 
5840724b1d71
Prefix form of infix with * on either side no longer needs special treatment
 nipkow parents: 
68752diff
changeset | 252 | lift_definition times_ennreal :: "ennreal \<Rightarrow> ennreal \<Rightarrow> ennreal" is "(*)" by simp | 
| 62375 | 253 | |
| 254 | instance | |
| 255 | by standard (transfer; auto simp: field_simps ereal_right_distrib)+ | |
| 256 | ||
| 257 | end | |
| 258 | ||
| 62378 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 259 | instantiation ennreal :: minus | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 260 | begin | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 261 | |
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 262 | lift_definition minus_ennreal :: "ennreal \<Rightarrow> ennreal \<Rightarrow> ennreal" is "\<lambda>a b. max 0 (a - b)" | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 263 | by simp | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 264 | |
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 265 | instance .. | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 266 | |
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 267 | end | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 268 | |
| 62375 | 269 | instance ennreal :: numeral .. | 
| 270 | ||
| 271 | instantiation ennreal :: inverse | |
| 272 | begin | |
| 273 | ||
| 274 | lift_definition inverse_ennreal :: "ennreal \<Rightarrow> ennreal" is inverse | |
| 275 | by (rule inverse_ereal_ge0I) | |
| 276 | ||
| 277 | definition divide_ennreal :: "ennreal \<Rightarrow> ennreal \<Rightarrow> ennreal" | |
| 278 | where "x div y = x * inverse (y :: ennreal)" | |
| 279 | ||
| 280 | instance .. | |
| 281 | ||
| 282 | end | |
| 283 | ||
| 67443 
3abf6a722518
standardized towards new-style formal comments: isabelle update_comments;
 wenzelm parents: 
67411diff
changeset | 284 | lemma ennreal_zero_less_one: "0 < (1::ennreal)" \<comment> \<open>TODO: remove\<close> | 
| 62375 | 285 | by transfer auto | 
| 286 | ||
| 62376 
85f38d5f8807
Rename ordered_comm_monoid_add to ordered_cancel_comm_monoid_add. Introduce ordreed_comm_monoid_add, canonically_ordered_comm_monoid and dioid. Setup nat, entat and ennreal as dioids.
 hoelzl parents: 
62375diff
changeset | 287 | instance ennreal :: dioid | 
| 
85f38d5f8807
Rename ordered_comm_monoid_add to ordered_cancel_comm_monoid_add. Introduce ordreed_comm_monoid_add, canonically_ordered_comm_monoid and dioid. Setup nat, entat and ennreal as dioids.
 hoelzl parents: 
62375diff
changeset | 288 | proof (standard; transfer) | 
| 67399 | 289 | fix a b :: ereal assume "0 \<le> a" "0 \<le> b" then show "(a \<le> b) = (\<exists>c\<in>Collect ((\<le>) 0). b = a + c)" | 
| 62376 
85f38d5f8807
Rename ordered_comm_monoid_add to ordered_cancel_comm_monoid_add. Introduce ordreed_comm_monoid_add, canonically_ordered_comm_monoid and dioid. Setup nat, entat and ennreal as dioids.
 hoelzl parents: 
62375diff
changeset | 290 | unfolding ereal_ex_split Bex_def | 
| 
85f38d5f8807
Rename ordered_comm_monoid_add to ordered_cancel_comm_monoid_add. Introduce ordreed_comm_monoid_add, canonically_ordered_comm_monoid and dioid. Setup nat, entat and ennreal as dioids.
 hoelzl parents: 
62375diff
changeset | 291 | by (cases a b rule: ereal2_cases) (auto intro!: exI[of _ "real_of_ereal (b - a)"]) | 
| 
85f38d5f8807
Rename ordered_comm_monoid_add to ordered_cancel_comm_monoid_add. Introduce ordreed_comm_monoid_add, canonically_ordered_comm_monoid and dioid. Setup nat, entat and ennreal as dioids.
 hoelzl parents: 
62375diff
changeset | 292 | qed | 
| 
85f38d5f8807
Rename ordered_comm_monoid_add to ordered_cancel_comm_monoid_add. Introduce ordreed_comm_monoid_add, canonically_ordered_comm_monoid and dioid. Setup nat, entat and ennreal as dioids.
 hoelzl parents: 
62375diff
changeset | 293 | |
| 62375 | 294 | instance ennreal :: ordered_comm_semiring | 
| 295 | by standard | |
| 296 | (transfer ; auto intro: add_mono mult_mono mult_ac ereal_left_distrib ereal_mult_left_mono)+ | |
| 297 | ||
| 62378 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 298 | instance ennreal :: linordered_nonzero_semiring | 
| 67691 
db202a00a29c
fixing ennreal using add_mono1; shifting results from linordered_semidom to linordered_nonzero_semiring
 paulson <lp15@cam.ac.uk> parents: 
67456diff
changeset | 299 | proof | 
| 
db202a00a29c
fixing ennreal using add_mono1; shifting results from linordered_semidom to linordered_nonzero_semiring
 paulson <lp15@cam.ac.uk> parents: 
67456diff
changeset | 300 | fix a b::ennreal | 
| 
db202a00a29c
fixing ennreal using add_mono1; shifting results from linordered_semidom to linordered_nonzero_semiring
 paulson <lp15@cam.ac.uk> parents: 
67456diff
changeset | 301 | show "a < b \<Longrightarrow> a + 1 < b + 1" | 
| 
db202a00a29c
fixing ennreal using add_mono1; shifting results from linordered_semidom to linordered_nonzero_semiring
 paulson <lp15@cam.ac.uk> parents: 
67456diff
changeset | 302 | by transfer (simp add: add_right_mono ereal_add_cancel_right less_le) | 
| 
db202a00a29c
fixing ennreal using add_mono1; shifting results from linordered_semidom to linordered_nonzero_semiring
 paulson <lp15@cam.ac.uk> parents: 
67456diff
changeset | 303 | qed (transfer; simp) | 
| 62378 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 304 | |
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 305 | instance ennreal :: strict_ordered_ab_semigroup_add | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 306 | proof | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 307 | fix a b c d :: ennreal show "a < b \<Longrightarrow> c < d \<Longrightarrow> a + c < b + d" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 308 | by transfer (auto intro!: ereal_add_strict_mono) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 309 | qed | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 310 | |
| 62378 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 311 | declare [[coercion "of_nat :: nat \<Rightarrow> ennreal"]] | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 312 | |
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 313 | lemma e2ennreal_neg: "x \<le> 0 \<Longrightarrow> e2ennreal x = 0" | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 314 | unfolding zero_ennreal_def e2ennreal_def by (simp add: max_absorb1) | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 315 | |
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 316 | lemma e2ennreal_mono: "x \<le> y \<Longrightarrow> e2ennreal x \<le> e2ennreal y" | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 317 | by (cases "0 \<le> x" "0 \<le> y" rule: bool.exhaust[case_product bool.exhaust]) | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 318 | (auto simp: e2ennreal_neg less_eq_ennreal.abs_eq eq_onp_def) | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 319 | |
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 320 | lemma enn2ereal_nonneg[simp]: "0 \<le> enn2ereal x" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 321 | using ennreal.enn2ereal[of x] by simp | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 322 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 323 | lemma ereal_ennreal_cases: | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 324 | obtains b where "0 \<le> a" "a = enn2ereal b" | "a < 0" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 325 | using e2ennreal'_inverse[of a, symmetric] by (cases "0 \<le> a") (auto intro: enn2ereal_nonneg) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 326 | |
| 67399 | 327 | lemma rel_fun_liminf[transfer_rule]: "rel_fun (rel_fun (=) pcr_ennreal) pcr_ennreal liminf liminf" | 
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 328 | proof - | 
| 67399 | 329 | have "rel_fun (rel_fun (=) pcr_ennreal) pcr_ennreal (\<lambda>x. sup 0 (liminf x)) liminf" | 
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 330 | unfolding liminf_SUP_INF[abs_def] by (transfer_prover_start, transfer_step+; simp) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 331 | then show ?thesis | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 332 | apply (subst (asm) (2) rel_fun_def) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 333 | apply (subst (2) rel_fun_def) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 334 | apply (auto simp: comp_def max.absorb2 Liminf_bounded rel_fun_eq_pcr_ennreal) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 335 | done | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 336 | qed | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 337 | |
| 67399 | 338 | lemma rel_fun_limsup[transfer_rule]: "rel_fun (rel_fun (=) pcr_ennreal) pcr_ennreal limsup limsup" | 
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 339 | proof - | 
| 69260 
0a9688695a1b
removed relics of ASCII syntax for indexed big operators
 haftmann parents: 
69064diff
changeset | 340 |   have "rel_fun (rel_fun (=) pcr_ennreal) pcr_ennreal (\<lambda>x. INF n. sup 0 (SUP i\<in>{n..}. x i)) limsup"
 | 
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 341 | unfolding limsup_INF_SUP[abs_def] by (transfer_prover_start, transfer_step+; simp) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 342 | then show ?thesis | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 343 | unfolding limsup_INF_SUP[abs_def] | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 344 | apply (subst (asm) (2) rel_fun_def) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 345 | apply (subst (2) rel_fun_def) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 346 | apply (auto simp: comp_def max.absorb2 Sup_upper2 rel_fun_eq_pcr_ennreal) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 347 | apply (subst (asm) max.absorb2) | 
| 72236 | 348 | apply (auto intro: SUP_upper2) | 
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 349 | done | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 350 | qed | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 351 | |
| 64267 | 352 | lemma sum_enn2ereal[simp]: "(\<And>i. i \<in> I \<Longrightarrow> 0 \<le> f i) \<Longrightarrow> (\<Sum>i\<in>I. enn2ereal (f i)) = enn2ereal (sum f I)" | 
| 353 | by (induction I rule: infinite_finite_induct) (auto simp: sum_nonneg zero_ennreal.rep_eq plus_ennreal.rep_eq) | |
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 354 | |
| 64267 | 355 | lemma transfer_e2ennreal_sum [transfer_rule]: | 
| 67399 | 356 | "rel_fun (rel_fun (=) pcr_ennreal) (rel_fun (=) pcr_ennreal) sum sum" | 
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 357 | by (auto intro!: rel_funI simp: rel_fun_eq_pcr_ennreal comp_def) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 358 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 359 | lemma enn2ereal_of_nat[simp]: "enn2ereal (of_nat n) = ereal n" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 360 | by (induction n) (auto simp: zero_ennreal.rep_eq one_ennreal.rep_eq plus_ennreal.rep_eq) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 361 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 362 | lemma enn2ereal_numeral[simp]: "enn2ereal (numeral a) = numeral a" | 
| 72236 | 363 | by (metis enn2ereal_of_nat numeral_eq_ereal of_nat_numeral) | 
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 364 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 365 | lemma transfer_numeral[transfer_rule]: "pcr_ennreal (numeral a) (numeral a)" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 366 | unfolding cr_ennreal_def pcr_ennreal_def by auto | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 367 | |
| 62378 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 368 | subsection \<open>Cancellation simprocs\<close> | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 369 | |
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 370 | lemma ennreal_add_left_cancel: "a + b = a + c \<longleftrightarrow> a = (\<infinity>::ennreal) \<or> b = c" | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 371 | unfolding infinity_ennreal_def by transfer (simp add: top_ereal_def ereal_add_cancel_left) | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 372 | |
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 373 | lemma ennreal_add_left_cancel_le: "a + b \<le> a + c \<longleftrightarrow> a = (\<infinity>::ennreal) \<or> b \<le> c" | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 374 | unfolding infinity_ennreal_def by transfer (simp add: ereal_add_le_add_iff top_ereal_def disj_commute) | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 375 | |
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 376 | lemma ereal_add_left_cancel_less: | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 377 | fixes a b c :: ereal | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 378 | shows "0 \<le> a \<Longrightarrow> 0 \<le> b \<Longrightarrow> a + b < a + c \<longleftrightarrow> a \<noteq> \<infinity> \<and> b < c" | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 379 | by (cases a b c rule: ereal3_cases) auto | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 380 | |
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 381 | lemma ennreal_add_left_cancel_less: "a + b < a + c \<longleftrightarrow> a \<noteq> (\<infinity>::ennreal) \<and> b < c" | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 382 | unfolding infinity_ennreal_def | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 383 | by transfer (simp add: top_ereal_def ereal_add_left_cancel_less) | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 384 | |
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 385 | ML \<open> | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 386 | structure Cancel_Ennreal_Common = | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 387 | struct | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 388 | (* copied from src/HOL/Tools/nat_numeral_simprocs.ML *) | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 389 |   fun find_first_t _    _ []         = raise TERM("find_first_t", [])
 | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 390 | | find_first_t past u (t::terms) = | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 391 | if u aconv t then (rev past @ terms) | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 392 | else find_first_t (t::past) u terms | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 393 | |
| 69593 | 394 | fun dest_summing (Const (\<^const_name>\<open>Groups.plus\<close>, _) $ t $ u, ts) = | 
| 62378 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 395 | dest_summing (t, dest_summing (u, ts)) | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 396 | | dest_summing (t, ts) = t :: ts | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 397 | |
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 398 | val mk_sum = Arith_Data.long_mk_sum | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 399 | fun dest_sum t = dest_summing (t, []) | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 400 | val find_first = find_first_t [] | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 401 | val trans_tac = Numeral_Simprocs.trans_tac | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 402 | val norm_ss = | 
| 69593 | 403 | simpset_of (put_simpset HOL_basic_ss \<^context> | 
| 62378 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 404 |       addsimps @{thms ac_simps add_0_left add_0_right})
 | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 405 | fun norm_tac ctxt = ALLGOALS (simp_tac (put_simpset norm_ss ctxt)) | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 406 | fun simplify_meta_eq ctxt cancel_th th = | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 407 | Arith_Data.simplify_meta_eq [] ctxt | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 408 | ([th, cancel_th] MRS trans) | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 409 | fun mk_eq (a, b) = HOLogic.mk_Trueprop (HOLogic.mk_eq (a, b)) | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 410 | end | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 411 | |
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 412 | structure Eq_Ennreal_Cancel = ExtractCommonTermFun | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 413 | (open Cancel_Ennreal_Common | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 414 | val mk_bal = HOLogic.mk_eq | 
| 69593 | 415 | val dest_bal = HOLogic.dest_bin \<^const_name>\<open>HOL.eq\<close> \<^typ>\<open>ennreal\<close> | 
| 62378 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 416 |   fun simp_conv _ _ = SOME @{thm ennreal_add_left_cancel}
 | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 417 | ) | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 418 | |
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 419 | structure Le_Ennreal_Cancel = ExtractCommonTermFun | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 420 | (open Cancel_Ennreal_Common | 
| 69593 | 421 | val mk_bal = HOLogic.mk_binrel \<^const_name>\<open>Orderings.less_eq\<close> | 
| 422 | val dest_bal = HOLogic.dest_bin \<^const_name>\<open>Orderings.less_eq\<close> \<^typ>\<open>ennreal\<close> | |
| 62378 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 423 |   fun simp_conv _ _ = SOME @{thm ennreal_add_left_cancel_le}
 | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 424 | ) | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 425 | |
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 426 | structure Less_Ennreal_Cancel = ExtractCommonTermFun | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 427 | (open Cancel_Ennreal_Common | 
| 69593 | 428 | val mk_bal = HOLogic.mk_binrel \<^const_name>\<open>Orderings.less\<close> | 
| 429 | val dest_bal = HOLogic.dest_bin \<^const_name>\<open>Orderings.less\<close> \<^typ>\<open>ennreal\<close> | |
| 62378 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 430 |   fun simp_conv _ _ = SOME @{thm ennreal_add_left_cancel_less}
 | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 431 | ) | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 432 | \<close> | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 433 | |
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 434 | simproc_setup ennreal_eq_cancel | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 435 |   ("(l::ennreal) + m = n" | "(l::ennreal) = m + n") =
 | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 436 | \<open>fn phi => fn ctxt => fn ct => Eq_Ennreal_Cancel.proc ctxt (Thm.term_of ct)\<close> | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 437 | |
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 438 | simproc_setup ennreal_le_cancel | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 439 |   ("(l::ennreal) + m \<le> n" | "(l::ennreal) \<le> m + n") =
 | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 440 | \<open>fn phi => fn ctxt => fn ct => Le_Ennreal_Cancel.proc ctxt (Thm.term_of ct)\<close> | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 441 | |
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 442 | simproc_setup ennreal_less_cancel | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 443 |   ("(l::ennreal) + m < n" | "(l::ennreal) < m + n") =
 | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 444 | \<open>fn phi => fn ctxt => fn ct => Less_Ennreal_Cancel.proc ctxt (Thm.term_of ct)\<close> | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 445 | |
| 62375 | 446 | |
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 447 | subsection \<open>Order with top\<close> | 
| 62378 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 448 | |
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 449 | lemma ennreal_zero_less_top[simp]: "0 < (top::ennreal)" | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 450 | by transfer (simp add: top_ereal_def) | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 451 | |
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 452 | lemma ennreal_one_less_top[simp]: "1 < (top::ennreal)" | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 453 | by transfer (simp add: top_ereal_def) | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 454 | |
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 455 | lemma ennreal_zero_neq_top[simp]: "0 \<noteq> (top::ennreal)" | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 456 | by transfer (simp add: top_ereal_def) | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 457 | |
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 458 | lemma ennreal_top_neq_zero[simp]: "(top::ennreal) \<noteq> 0" | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 459 | by transfer (simp add: top_ereal_def) | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 460 | |
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 461 | lemma ennreal_top_neq_one[simp]: "top \<noteq> (1::ennreal)" | 
| 68406 | 462 | by transfer (simp add: top_ereal_def one_ereal_def flip: ereal_max) | 
| 62378 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 463 | |
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 464 | lemma ennreal_one_neq_top[simp]: "1 \<noteq> (top::ennreal)" | 
| 68406 | 465 | by transfer (simp add: top_ereal_def one_ereal_def flip: ereal_max) | 
| 62378 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 466 | |
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 467 | lemma ennreal_add_less_top[simp]: | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 468 | fixes a b :: ennreal | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 469 | shows "a + b < top \<longleftrightarrow> a < top \<and> b < top" | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 470 | by transfer (auto simp: top_ereal_def) | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 471 | |
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 472 | lemma ennreal_add_eq_top[simp]: | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 473 | fixes a b :: ennreal | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 474 | shows "a + b = top \<longleftrightarrow> a = top \<or> b = top" | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 475 | by transfer (auto simp: top_ereal_def) | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 476 | |
| 64267 | 477 | lemma ennreal_sum_less_top[simp]: | 
| 62378 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 478 | fixes f :: "'a \<Rightarrow> ennreal" | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 479 | shows "finite I \<Longrightarrow> (\<Sum>i\<in>I. f i) < top \<longleftrightarrow> (\<forall>i\<in>I. f i < top)" | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 480 | by (induction I rule: finite_induct) auto | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 481 | |
| 64267 | 482 | lemma ennreal_sum_eq_top[simp]: | 
| 62378 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 483 | fixes f :: "'a \<Rightarrow> ennreal" | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 484 | shows "finite I \<Longrightarrow> (\<Sum>i\<in>I. f i) = top \<longleftrightarrow> (\<exists>i\<in>I. f i = top)" | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 485 | by (induction I rule: finite_induct) auto | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 486 | |
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 487 | lemma ennreal_mult_eq_top_iff: | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 488 | fixes a b :: ennreal | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 489 | shows "a * b = top \<longleftrightarrow> (a = top \<and> b \<noteq> 0) \<or> (b = top \<and> a \<noteq> 0)" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 490 | by transfer (auto simp: top_ereal_def) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 491 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 492 | lemma ennreal_top_eq_mult_iff: | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 493 | fixes a b :: ennreal | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 494 | shows "top = a * b \<longleftrightarrow> (a = top \<and> b \<noteq> 0) \<or> (b = top \<and> a \<noteq> 0)" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 495 | using ennreal_mult_eq_top_iff[of a b] by auto | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 496 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 497 | lemma ennreal_mult_less_top: | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 498 | fixes a b :: ennreal | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 499 | shows "a * b < top \<longleftrightarrow> (a = 0 \<or> b = 0 \<or> (a < top \<and> b < top))" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 500 | by transfer (auto simp add: top_ereal_def) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 501 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 502 | lemma top_power_ennreal: "top ^ n = (if n = 0 then 1 else top :: ennreal)" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 503 | by (induction n) (simp_all add: ennreal_mult_eq_top_iff) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 504 | |
| 64272 | 505 | lemma ennreal_prod_eq_0[simp]: | 
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 506 | fixes f :: "'a \<Rightarrow> ennreal" | 
| 64272 | 507 | shows "(prod f A = 0) = (finite A \<and> (\<exists>i\<in>A. f i = 0))" | 
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 508 | by (induction A rule: infinite_finite_induct) auto | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 509 | |
| 64272 | 510 | lemma ennreal_prod_eq_top: | 
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 511 | fixes f :: "'a \<Rightarrow> ennreal" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 512 | shows "(\<Prod>i\<in>I. f i) = top \<longleftrightarrow> (finite I \<and> ((\<forall>i\<in>I. f i \<noteq> 0) \<and> (\<exists>i\<in>I. f i = top)))" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 513 | by (induction I rule: infinite_finite_induct) (auto simp: ennreal_mult_eq_top_iff) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 514 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 515 | lemma ennreal_top_mult: "top * a = (if a = 0 then 0 else top :: ennreal)" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 516 | by (simp add: ennreal_mult_eq_top_iff) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 517 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 518 | lemma ennreal_mult_top: "a * top = (if a = 0 then 0 else top :: ennreal)" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 519 | by (simp add: ennreal_mult_eq_top_iff) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 520 | |
| 62378 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 521 | lemma enn2ereal_eq_top_iff[simp]: "enn2ereal x = \<infinity> \<longleftrightarrow> x = top" | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 522 | by transfer (simp add: top_ereal_def) | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 523 | |
| 67451 | 524 | lemma enn2ereal_top[simp]: "enn2ereal top = \<infinity>" | 
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 525 | by transfer (simp add: top_ereal_def) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 526 | |
| 67451 | 527 | lemma e2ennreal_infty[simp]: "e2ennreal \<infinity> = top" | 
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 528 | by (simp add: top_ennreal.abs_eq top_ereal_def) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 529 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 530 | lemma ennreal_top_minus[simp]: "top - x = (top::ennreal)" | 
| 62378 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 531 | by transfer (auto simp: top_ereal_def max_def) | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 532 | |
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 533 | lemma minus_top_ennreal: "x - top = (if x = top then top else 0:: ennreal)" | 
| 72236 | 534 | by transfer (use ereal_eq_minus_iff top_ereal_def in force) | 
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 535 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 536 | lemma bot_ennreal: "bot = (0::ennreal)" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 537 | by transfer rule | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 538 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 539 | lemma ennreal_of_nat_neq_top[simp]: "of_nat i \<noteq> (top::ennreal)" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 540 | by (induction i) auto | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 541 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 542 | lemma numeral_eq_of_nat: "(numeral a::ennreal) = of_nat (numeral a)" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 543 | by simp | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 544 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 545 | lemma of_nat_less_top: "of_nat i < (top::ennreal)" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 546 | using less_le_trans[of "of_nat i" "of_nat (Suc i)" "top::ennreal"] | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 547 | by simp | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 548 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 549 | lemma top_neq_numeral[simp]: "top \<noteq> (numeral i::ennreal)" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 550 | using of_nat_less_top[of "numeral i"] by simp | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 551 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 552 | lemma ennreal_numeral_less_top[simp]: "numeral i < (top::ennreal)" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 553 | using of_nat_less_top[of "numeral i"] by simp | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 554 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 555 | lemma ennreal_add_bot[simp]: "bot + x = (x::ennreal)" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 556 | by transfer simp | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 557 | |
| 73253 
f6bb31879698
HOL-Analysis/Probability: Hoeffding's inequality, negative binomial distribution, etc.
 Manuel Eberl <eberlm@in.tum.de> parents: 
72236diff
changeset | 558 | lemma add_top_right_ennreal [simp]: "x + top = (top :: ennreal)" | 
| 
f6bb31879698
HOL-Analysis/Probability: Hoeffding's inequality, negative binomial distribution, etc.
 Manuel Eberl <eberlm@in.tum.de> parents: 
72236diff
changeset | 559 | by (cases x) auto | 
| 
f6bb31879698
HOL-Analysis/Probability: Hoeffding's inequality, negative binomial distribution, etc.
 Manuel Eberl <eberlm@in.tum.de> parents: 
72236diff
changeset | 560 | |
| 
f6bb31879698
HOL-Analysis/Probability: Hoeffding's inequality, negative binomial distribution, etc.
 Manuel Eberl <eberlm@in.tum.de> parents: 
72236diff
changeset | 561 | lemma add_top_left_ennreal [simp]: "top + x = (top :: ennreal)" | 
| 
f6bb31879698
HOL-Analysis/Probability: Hoeffding's inequality, negative binomial distribution, etc.
 Manuel Eberl <eberlm@in.tum.de> parents: 
72236diff
changeset | 562 | by (cases x) auto | 
| 
f6bb31879698
HOL-Analysis/Probability: Hoeffding's inequality, negative binomial distribution, etc.
 Manuel Eberl <eberlm@in.tum.de> parents: 
72236diff
changeset | 563 | |
| 
f6bb31879698
HOL-Analysis/Probability: Hoeffding's inequality, negative binomial distribution, etc.
 Manuel Eberl <eberlm@in.tum.de> parents: 
72236diff
changeset | 564 | lemma ennreal_top_mult_left [simp]: "x \<noteq> 0 \<Longrightarrow> x * top = (top :: ennreal)" | 
| 
f6bb31879698
HOL-Analysis/Probability: Hoeffding's inequality, negative binomial distribution, etc.
 Manuel Eberl <eberlm@in.tum.de> parents: 
72236diff
changeset | 565 | by (subst ennreal_mult_eq_top_iff) auto | 
| 
f6bb31879698
HOL-Analysis/Probability: Hoeffding's inequality, negative binomial distribution, etc.
 Manuel Eberl <eberlm@in.tum.de> parents: 
72236diff
changeset | 566 | |
| 
f6bb31879698
HOL-Analysis/Probability: Hoeffding's inequality, negative binomial distribution, etc.
 Manuel Eberl <eberlm@in.tum.de> parents: 
72236diff
changeset | 567 | lemma ennreal_top_mult_right [simp]: "x \<noteq> 0 \<Longrightarrow> top * x = (top :: ennreal)" | 
| 
f6bb31879698
HOL-Analysis/Probability: Hoeffding's inequality, negative binomial distribution, etc.
 Manuel Eberl <eberlm@in.tum.de> parents: 
72236diff
changeset | 568 | by (subst ennreal_mult_eq_top_iff) auto | 
| 
f6bb31879698
HOL-Analysis/Probability: Hoeffding's inequality, negative binomial distribution, etc.
 Manuel Eberl <eberlm@in.tum.de> parents: 
72236diff
changeset | 569 | |
| 
f6bb31879698
HOL-Analysis/Probability: Hoeffding's inequality, negative binomial distribution, etc.
 Manuel Eberl <eberlm@in.tum.de> parents: 
72236diff
changeset | 570 | |
| 
f6bb31879698
HOL-Analysis/Probability: Hoeffding's inequality, negative binomial distribution, etc.
 Manuel Eberl <eberlm@in.tum.de> parents: 
72236diff
changeset | 571 | lemma power_top_ennreal [simp]: "n > 0 \<Longrightarrow> top ^ n = (top :: ennreal)" | 
| 
f6bb31879698
HOL-Analysis/Probability: Hoeffding's inequality, negative binomial distribution, etc.
 Manuel Eberl <eberlm@in.tum.de> parents: 
72236diff
changeset | 572 | by (induction n) auto | 
| 
f6bb31879698
HOL-Analysis/Probability: Hoeffding's inequality, negative binomial distribution, etc.
 Manuel Eberl <eberlm@in.tum.de> parents: 
72236diff
changeset | 573 | |
| 
f6bb31879698
HOL-Analysis/Probability: Hoeffding's inequality, negative binomial distribution, etc.
 Manuel Eberl <eberlm@in.tum.de> parents: 
72236diff
changeset | 574 | lemma power_eq_top_ennreal_iff: "x ^ n = top \<longleftrightarrow> x = (top :: ennreal) \<and> n > 0" | 
| 
f6bb31879698
HOL-Analysis/Probability: Hoeffding's inequality, negative binomial distribution, etc.
 Manuel Eberl <eberlm@in.tum.de> parents: 
72236diff
changeset | 575 | by (induction n) (auto simp: ennreal_mult_eq_top_iff) | 
| 
f6bb31879698
HOL-Analysis/Probability: Hoeffding's inequality, negative binomial distribution, etc.
 Manuel Eberl <eberlm@in.tum.de> parents: 
72236diff
changeset | 576 | |
| 
f6bb31879698
HOL-Analysis/Probability: Hoeffding's inequality, negative binomial distribution, etc.
 Manuel Eberl <eberlm@in.tum.de> parents: 
72236diff
changeset | 577 | lemma ennreal_mult_le_mult_iff: "c \<noteq> 0 \<Longrightarrow> c \<noteq> top \<Longrightarrow> c * a \<le> c * b \<longleftrightarrow> a \<le> (b :: ennreal)" | 
| 
f6bb31879698
HOL-Analysis/Probability: Hoeffding's inequality, negative binomial distribution, etc.
 Manuel Eberl <eberlm@in.tum.de> parents: 
72236diff
changeset | 578 | including ennreal.lifting | 
| 
f6bb31879698
HOL-Analysis/Probability: Hoeffding's inequality, negative binomial distribution, etc.
 Manuel Eberl <eberlm@in.tum.de> parents: 
72236diff
changeset | 579 | by (transfer, subst ereal_mult_le_mult_iff) (auto simp: top_ereal_def) | 
| 
f6bb31879698
HOL-Analysis/Probability: Hoeffding's inequality, negative binomial distribution, etc.
 Manuel Eberl <eberlm@in.tum.de> parents: 
72236diff
changeset | 580 | |
| 
f6bb31879698
HOL-Analysis/Probability: Hoeffding's inequality, negative binomial distribution, etc.
 Manuel Eberl <eberlm@in.tum.de> parents: 
72236diff
changeset | 581 | lemma power_mono_ennreal: "x \<le> y \<Longrightarrow> x ^ n \<le> (y ^ n :: ennreal)" | 
| 
f6bb31879698
HOL-Analysis/Probability: Hoeffding's inequality, negative binomial distribution, etc.
 Manuel Eberl <eberlm@in.tum.de> parents: 
72236diff
changeset | 582 | by (induction n) (auto intro!: mult_mono) | 
| 
f6bb31879698
HOL-Analysis/Probability: Hoeffding's inequality, negative binomial distribution, etc.
 Manuel Eberl <eberlm@in.tum.de> parents: 
72236diff
changeset | 583 | |
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 584 | instance ennreal :: semiring_char_0 | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 585 | proof (standard, safe intro!: linorder_injI) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 586 | have *: "1 + of_nat k \<noteq> (0::ennreal)" for k | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 587 | using add_pos_nonneg[OF zero_less_one, of "of_nat k :: ennreal"] by auto | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 588 | fix x y :: nat assume "x < y" "of_nat x = (of_nat y::ennreal)" then show False | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 589 | by (auto simp add: less_iff_Suc_add *) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 590 | qed | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 591 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 592 | subsection \<open>Arithmetic\<close> | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 593 | |
| 62378 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 594 | lemma ennreal_minus_zero[simp]: "a - (0::ennreal) = a" | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 595 | by transfer (auto simp: max_def) | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 596 | |
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 597 | lemma ennreal_add_diff_cancel_right[simp]: | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 598 | fixes x y z :: ennreal shows "y \<noteq> top \<Longrightarrow> (x + y) - y = x" | 
| 72236 | 599 | by transfer (metis ereal_eq_minus_iff max_absorb2 not_MInfty_nonneg top_ereal_def) | 
| 62378 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 600 | |
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 601 | lemma ennreal_add_diff_cancel_left[simp]: | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 602 | fixes x y z :: ennreal shows "y \<noteq> top \<Longrightarrow> (y + x) - y = x" | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 603 | by (simp add: add.commute) | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 604 | |
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 605 | lemma | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 606 | fixes a b :: ennreal | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 607 | shows "a - b = 0 \<Longrightarrow> a \<le> b" | 
| 72236 | 608 | by transfer (metis ereal_diff_gr0 le_cases max.absorb2 not_less) | 
| 62378 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 609 | |
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 610 | lemma ennreal_minus_cancel: | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 611 | fixes a b c :: ennreal | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 612 | shows "c \<noteq> top \<Longrightarrow> a \<le> c \<Longrightarrow> b \<le> c \<Longrightarrow> c - a = c - b \<Longrightarrow> a = b" | 
| 76137 | 613 | by (metis ennreal_add_diff_cancel_left ennreal_add_diff_cancel_right ennreal_add_eq_top less_eqE) | 
| 62378 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 614 | |
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 615 | lemma sup_const_add_ennreal: | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 616 | fixes a b c :: "ennreal" | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 617 | shows "sup (c + a) (c + b) = c + sup a b" | 
| 72236 | 618 | by transfer (metis add_left_mono le_cases sup.absorb2 sup.orderE) | 
| 62378 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 619 | |
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 620 | lemma ennreal_diff_add_assoc: | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 621 | fixes a b c :: ennreal | 
| 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 622 | shows "a \<le> b \<Longrightarrow> c + b - a = c + (b - a)" | 
| 76137 | 623 | by (metis add.left_commute ennreal_add_diff_cancel_left ennreal_add_eq_top ennreal_top_minus less_eqE) | 
| 62378 
85ed00c1fe7c
generalize more theorems to support enat and ennreal
 hoelzl parents: 
62376diff
changeset | 624 | |
| 62648 | 625 | lemma mult_divide_eq_ennreal: | 
| 626 | fixes a b :: ennreal | |
| 627 | shows "b \<noteq> 0 \<Longrightarrow> b \<noteq> top \<Longrightarrow> (a * b) / b = a" | |
| 628 | unfolding divide_ennreal_def | |
| 629 | apply transfer | |
| 76137 | 630 | by (metis abs_ereal_ge0 divide_ereal_def ereal_divide_eq ereal_times_divide_eq top_ereal_def) | 
| 62648 | 631 | |
| 632 | lemma divide_mult_eq: "a \<noteq> 0 \<Longrightarrow> a \<noteq> \<infinity> \<Longrightarrow> x * a / (b * a) = x / (b::ennreal)" | |
| 633 | unfolding divide_ennreal_def infinity_ennreal_def | |
| 634 | apply transfer | |
| 635 | subgoal for a b c | |
| 636 | apply (cases a b c rule: ereal3_cases) | |
| 637 | apply (auto simp: top_ereal_def) | |
| 638 | done | |
| 639 | done | |
| 640 | ||
| 641 | lemma ennreal_mult_divide_eq: | |
| 642 | fixes a b :: ennreal | |
| 643 | shows "b \<noteq> 0 \<Longrightarrow> b \<noteq> top \<Longrightarrow> (a * b) / b = a" | |
| 76137 | 644 | by (fact mult_divide_eq_ennreal) | 
| 62648 | 645 | |
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 646 | lemma ennreal_add_diff_cancel: | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 647 | fixes a b :: ennreal | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 648 | shows "b \<noteq> \<infinity> \<Longrightarrow> (a + b) - b = a" | 
| 76137 | 649 | by simp | 
| 62648 | 650 | |
| 651 | lemma ennreal_minus_eq_0: | |
| 652 | "a - b = 0 \<Longrightarrow> a \<le> (b::ennreal)" | |
| 72236 | 653 | by transfer (metis ereal_diff_gr0 le_cases max.absorb2 not_less) | 
| 62648 | 654 | |
| 655 | lemma ennreal_mono_minus_cancel: | |
| 656 | fixes a b c :: ennreal | |
| 657 | shows "a - b \<le> a - c \<Longrightarrow> a < top \<Longrightarrow> b \<le> a \<Longrightarrow> c \<le> a \<Longrightarrow> c \<le> b" | |
| 658 | by transfer | |
| 659 | (auto simp add: max.absorb2 ereal_diff_positive top_ereal_def dest: ereal_mono_minus_cancel) | |
| 660 | ||
| 661 | lemma ennreal_mono_minus: | |
| 662 | fixes a b c :: ennreal | |
| 663 | shows "c \<le> b \<Longrightarrow> a - b \<le> a - c" | |
| 72236 | 664 | by transfer (meson ereal_minus_mono max.mono order_refl) | 
| 62648 | 665 | |
| 666 | lemma ennreal_minus_pos_iff: | |
| 667 | fixes a b :: ennreal | |
| 668 | shows "a < top \<or> b < top \<Longrightarrow> 0 < a - b \<Longrightarrow> b < a" | |
| 72236 | 669 | by transfer (use add.left_neutral ereal_minus_le_iff less_irrefl not_less in fastforce) | 
| 62648 | 670 | |
| 671 | lemma ennreal_inverse_top[simp]: "inverse top = (0::ennreal)" | |
| 672 | by transfer (simp add: top_ereal_def ereal_inverse_eq_0) | |
| 673 | ||
| 674 | lemma ennreal_inverse_zero[simp]: "inverse 0 = (top::ennreal)" | |
| 675 | by transfer (simp add: top_ereal_def ereal_inverse_eq_0) | |
| 676 | ||
| 677 | lemma ennreal_top_divide: "top / (x::ennreal) = (if x = top then 0 else top)" | |
| 678 | unfolding divide_ennreal_def | |
| 679 | by transfer (simp add: top_ereal_def ereal_inverse_eq_0 ereal_0_gt_inverse) | |
| 680 | ||
| 681 | lemma ennreal_zero_divide[simp]: "0 / (x::ennreal) = 0" | |
| 682 | by (simp add: divide_ennreal_def) | |
| 683 | ||
| 684 | lemma ennreal_divide_zero[simp]: "x / (0::ennreal) = (if x = 0 then 0 else top)" | |
| 685 | by (simp add: divide_ennreal_def ennreal_mult_top) | |
| 686 | ||
| 687 | lemma ennreal_divide_top[simp]: "x / (top::ennreal) = 0" | |
| 688 | by (simp add: divide_ennreal_def ennreal_top_mult) | |
| 689 | ||
| 690 | lemma ennreal_times_divide: "a * (b / c) = a * b / (c::ennreal)" | |
| 691 | unfolding divide_ennreal_def | |
| 692 | by transfer (simp add: divide_ereal_def[symmetric] ereal_times_divide_eq) | |
| 693 | ||
| 694 | lemma ennreal_zero_less_divide: "0 < a / b \<longleftrightarrow> (0 < a \<and> b < (top::ennreal))" | |
| 695 | unfolding divide_ennreal_def | |
| 696 | by transfer (auto simp: ereal_zero_less_0_iff top_ereal_def ereal_0_gt_inverse) | |
| 697 | ||
| 73253 
f6bb31879698
HOL-Analysis/Probability: Hoeffding's inequality, negative binomial distribution, etc.
 Manuel Eberl <eberlm@in.tum.de> parents: 
72236diff
changeset | 698 | lemma add_divide_distrib_ennreal: "(a + b) / c = a / c + b / (c :: ennreal)" | 
| 
f6bb31879698
HOL-Analysis/Probability: Hoeffding's inequality, negative binomial distribution, etc.
 Manuel Eberl <eberlm@in.tum.de> parents: 
72236diff
changeset | 699 | by (simp add: divide_ennreal_def ring_distribs) | 
| 
f6bb31879698
HOL-Analysis/Probability: Hoeffding's inequality, negative binomial distribution, etc.
 Manuel Eberl <eberlm@in.tum.de> parents: 
72236diff
changeset | 700 | |
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 701 | lemma divide_right_mono_ennreal: | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 702 | fixes a b c :: ennreal | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 703 | shows "a \<le> b \<Longrightarrow> a / c \<le> b / c" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 704 | unfolding divide_ennreal_def by (intro mult_mono) auto | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 705 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 706 | lemma ennreal_mult_strict_right_mono: "(a::ennreal) < c \<Longrightarrow> 0 < b \<Longrightarrow> b < top \<Longrightarrow> a * b < c * b" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 707 | by transfer (auto intro!: ereal_mult_strict_right_mono) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 708 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 709 | lemma ennreal_indicator_less[simp]: | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 710 | "indicator A x \<le> (indicator B x::ennreal) \<longleftrightarrow> (x \<in> A \<longrightarrow> x \<in> B)" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 711 | by (simp add: indicator_def not_le) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 712 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 713 | lemma ennreal_inverse_positive: "0 < inverse x \<longleftrightarrow> (x::ennreal) \<noteq> top" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 714 | by transfer (simp add: ereal_0_gt_inverse top_ereal_def) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 715 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 716 | lemma ennreal_inverse_mult': "((0 < b \<or> a < top) \<and> (0 < a \<or> b < top)) \<Longrightarrow> inverse (a * b::ennreal) = inverse a * inverse b" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 717 | apply transfer | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 718 | subgoal for a b | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 719 | by (cases a b rule: ereal2_cases) (auto simp: top_ereal_def) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 720 | done | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 721 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 722 | lemma ennreal_inverse_mult: "a < top \<Longrightarrow> b < top \<Longrightarrow> inverse (a * b::ennreal) = inverse a * inverse b" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 723 | apply transfer | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 724 | subgoal for a b | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 725 | by (cases a b rule: ereal2_cases) (auto simp: top_ereal_def) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 726 | done | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 727 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 728 | lemma ennreal_inverse_1[simp]: "inverse (1::ennreal) = 1" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 729 | by transfer simp | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 730 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 731 | lemma ennreal_inverse_eq_0_iff[simp]: "inverse (a::ennreal) = 0 \<longleftrightarrow> a = top" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 732 | by transfer (simp add: ereal_inverse_eq_0 top_ereal_def) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 733 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 734 | lemma ennreal_inverse_eq_top_iff[simp]: "inverse (a::ennreal) = top \<longleftrightarrow> a = 0" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 735 | by transfer (simp add: top_ereal_def) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 736 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 737 | lemma ennreal_divide_eq_0_iff[simp]: "(a::ennreal) / b = 0 \<longleftrightarrow> (a = 0 \<or> b = top)" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 738 | by (simp add: divide_ennreal_def) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 739 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 740 | lemma ennreal_divide_eq_top_iff: "(a::ennreal) / b = top \<longleftrightarrow> ((a \<noteq> 0 \<and> b = 0) \<or> (a = top \<and> b \<noteq> top))" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 741 | by (auto simp add: divide_ennreal_def ennreal_mult_eq_top_iff) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 742 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 743 | lemma one_divide_one_divide_ennreal[simp]: "1 / (1 / c) = (c::ennreal)" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 744 | including ennreal.lifting | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 745 | unfolding divide_ennreal_def | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 746 | by transfer auto | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 747 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 748 | lemma ennreal_mult_left_cong: | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 749 | "((a::ennreal) \<noteq> 0 \<Longrightarrow> b = c) \<Longrightarrow> a * b = a * c" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 750 | by (cases "a = 0") simp_all | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 751 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 752 | lemma ennreal_mult_right_cong: | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 753 | "((a::ennreal) \<noteq> 0 \<Longrightarrow> b = c) \<Longrightarrow> b * a = c * a" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 754 | by (cases "a = 0") simp_all | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 755 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 756 | lemma ennreal_zero_less_mult_iff: "0 < a * b \<longleftrightarrow> 0 < a \<and> 0 < (b::ennreal)" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 757 | by transfer (auto simp add: ereal_zero_less_0_iff le_less) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 758 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 759 | lemma less_diff_eq_ennreal: | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 760 | fixes a b c :: ennreal | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 761 | shows "b < top \<or> c < top \<Longrightarrow> a < b - c \<longleftrightarrow> a + c < b" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 762 | apply transfer | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 763 | subgoal for a b c | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 764 | by (cases a b c rule: ereal3_cases) (auto split: split_max) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 765 | done | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 766 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 767 | lemma diff_add_cancel_ennreal: | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 768 | fixes a b :: ennreal shows "a \<le> b \<Longrightarrow> b - a + a = b" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 769 | unfolding infinity_ennreal_def | 
| 72236 | 770 | by transfer (metis (no_types) add.commute ereal_diff_positive ereal_ineq_diff_add max_def not_MInfty_nonneg) | 
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 771 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 772 | lemma ennreal_diff_self[simp]: "a \<noteq> top \<Longrightarrow> a - a = (0::ennreal)" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 773 | by transfer (simp add: top_ereal_def) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 774 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 775 | lemma ennreal_minus_mono: | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 776 | fixes a b c :: ennreal | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 777 | shows "a \<le> c \<Longrightarrow> d \<le> b \<Longrightarrow> a - b \<le> c - d" | 
| 72236 | 778 | by transfer (meson ereal_minus_mono max.mono order_refl) | 
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 779 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 780 | lemma ennreal_minus_eq_top[simp]: "a - (b::ennreal) = top \<longleftrightarrow> a = top" | 
| 76137 | 781 | by (metis add_top diff_add_cancel_ennreal ennreal_mono_minus ennreal_top_minus zero_le) | 
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 782 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 783 | lemma ennreal_divide_self[simp]: "a \<noteq> 0 \<Longrightarrow> a < top \<Longrightarrow> a / a = (1::ennreal)" | 
| 76137 | 784 | by (metis mult_1 mult_divide_eq_ennreal top.not_eq_extremum) | 
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 785 | |
| 69593 | 786 | subsection \<open>Coercion from \<^typ>\<open>real\<close> to \<^typ>\<open>ennreal\<close>\<close> | 
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 787 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 788 | lift_definition ennreal :: "real \<Rightarrow> ennreal" is "sup 0 \<circ> ereal" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 789 | by simp | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 790 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 791 | declare [[coercion ennreal]] | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 792 | |
| 76137 | 793 | lemma ennreal_cong: "x = y \<Longrightarrow> ennreal x = ennreal y" | 
| 794 | by simp | |
| 63099 
af0e964aad7b
Moved material from AFP/Randomised_Social_Choice to distribution
 eberlm parents: 
63060diff
changeset | 795 | |
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 796 | lemma ennreal_cases[cases type: ennreal]: | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 797 | fixes x :: ennreal | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 798 | obtains (real) r :: real where "0 \<le> r" "x = ennreal r" | (top) "x = top" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 799 | apply transfer | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 800 | subgoal for x thesis | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 801 | by (cases x) (auto simp: max.absorb2 top_ereal_def) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 802 | done | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 803 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 804 | lemmas ennreal2_cases = ennreal_cases[case_product ennreal_cases] | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 805 | lemmas ennreal3_cases = ennreal_cases[case_product ennreal2_cases] | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 806 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 807 | lemma ennreal_neq_top[simp]: "ennreal r \<noteq> top" | 
| 68406 | 808 | by transfer (simp add: top_ereal_def zero_ereal_def flip: ereal_max) | 
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 809 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 810 | lemma top_neq_ennreal[simp]: "top \<noteq> ennreal r" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 811 | using ennreal_neq_top[of r] by (auto simp del: ennreal_neq_top) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 812 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 813 | lemma ennreal_less_top[simp]: "ennreal x < top" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 814 | by transfer (simp add: top_ereal_def max_def) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 815 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 816 | lemma ennreal_neg: "x \<le> 0 \<Longrightarrow> ennreal x = 0" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 817 | by transfer (simp add: max.absorb1) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 818 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 819 | lemma ennreal_inj[simp]: | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 820 | "0 \<le> a \<Longrightarrow> 0 \<le> b \<Longrightarrow> ennreal a = ennreal b \<longleftrightarrow> a = b" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 821 | by (transfer fixing: a b) (auto simp: max_absorb2) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 822 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 823 | lemma ennreal_le_iff[simp]: "0 \<le> y \<Longrightarrow> ennreal x \<le> ennreal y \<longleftrightarrow> x \<le> y" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 824 | by (auto simp: ennreal_def zero_ereal_def less_eq_ennreal.abs_eq eq_onp_def split: split_max) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 825 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 826 | lemma le_ennreal_iff: "0 \<le> r \<Longrightarrow> x \<le> ennreal r \<longleftrightarrow> (\<exists>q\<ge>0. x = ennreal q \<and> q \<le> r)" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 827 | by (cases x) (auto simp: top_unique) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 828 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 829 | lemma ennreal_less_iff: "0 \<le> r \<Longrightarrow> ennreal r < ennreal q \<longleftrightarrow> r < q" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 830 | unfolding not_le[symmetric] by auto | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 831 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 832 | lemma ennreal_eq_zero_iff[simp]: "0 \<le> x \<Longrightarrow> ennreal x = 0 \<longleftrightarrow> x = 0" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 833 | by transfer (auto simp: max_absorb2) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 834 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 835 | lemma ennreal_less_zero_iff[simp]: "0 < ennreal x \<longleftrightarrow> 0 < x" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 836 | by transfer (auto simp: max_def) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 837 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 838 | lemma ennreal_lessI: "0 < q \<Longrightarrow> r < q \<Longrightarrow> ennreal r < ennreal q" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 839 | by (cases "0 \<le> r") (auto simp: ennreal_less_iff ennreal_neg) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 840 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 841 | lemma ennreal_leI: "x \<le> y \<Longrightarrow> ennreal x \<le> ennreal y" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 842 | by (cases "0 \<le> y") (auto simp: ennreal_neg) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 843 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 844 | lemma enn2ereal_ennreal[simp]: "0 \<le> x \<Longrightarrow> enn2ereal (ennreal x) = x" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 845 | by transfer (simp add: max_absorb2) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 846 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 847 | lemma e2ennreal_enn2ereal[simp]: "e2ennreal (enn2ereal x) = x" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 848 | by (simp add: e2ennreal_def max_absorb2 ennreal.enn2ereal_inverse) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 849 | |
| 67456 | 850 | lemma enn2ereal_e2ennreal: "x \<ge> 0 \<Longrightarrow> enn2ereal (e2ennreal x) = x" | 
| 851 | by (metis e2ennreal_enn2ereal ereal_ennreal_cases not_le) | |
| 852 | ||
| 67451 | 853 | lemma e2ennreal_ereal [simp]: "e2ennreal (ereal x) = ennreal x" | 
| 854 | by (metis e2ennreal_def enn2ereal_inverse ennreal.rep_eq sup_ereal_def) | |
| 855 | ||
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 856 | lemma ennreal_0[simp]: "ennreal 0 = 0" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 857 | by (simp add: ennreal_def max.absorb1 zero_ennreal.abs_eq) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 858 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 859 | lemma ennreal_1[simp]: "ennreal 1 = 1" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 860 | by transfer (simp add: max_absorb2) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 861 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 862 | lemma ennreal_eq_0_iff: "ennreal x = 0 \<longleftrightarrow> x \<le> 0" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 863 | by (cases "0 \<le> x") (auto simp: ennreal_neg) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 864 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 865 | lemma ennreal_le_iff2: "ennreal x \<le> ennreal y \<longleftrightarrow> ((0 \<le> y \<and> x \<le> y) \<or> (x \<le> 0 \<and> y \<le> 0))" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 866 | by (cases "0 \<le> y") (auto simp: ennreal_eq_0_iff ennreal_neg) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 867 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 868 | lemma ennreal_eq_1[simp]: "ennreal x = 1 \<longleftrightarrow> x = 1" | 
| 68406 | 869 | by (cases "0 \<le> x") (auto simp: ennreal_neg simp flip: ennreal_1) | 
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 870 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 871 | lemma ennreal_le_1[simp]: "ennreal x \<le> 1 \<longleftrightarrow> x \<le> 1" | 
| 68406 | 872 | by (cases "0 \<le> x") (auto simp: ennreal_neg simp flip: ennreal_1) | 
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 873 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 874 | lemma ennreal_ge_1[simp]: "ennreal x \<ge> 1 \<longleftrightarrow> x \<ge> 1" | 
| 68406 | 875 | by (cases "0 \<le> x") (auto simp: ennreal_neg simp flip: ennreal_1) | 
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 876 | |
| 64284 
f3b905b2eee2
HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
 hoelzl parents: 
64272diff
changeset | 877 | lemma one_less_ennreal[simp]: "1 < ennreal x \<longleftrightarrow> 1 < x" | 
| 76137 | 878 | by (meson ennreal_le_1 linorder_not_le) | 
| 64284 
f3b905b2eee2
HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
 hoelzl parents: 
64272diff
changeset | 879 | |
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 880 | lemma ennreal_plus[simp]: | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 881 | "0 \<le> a \<Longrightarrow> 0 \<le> b \<Longrightarrow> ennreal (a + b) = ennreal a + ennreal b" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 882 | by (transfer fixing: a b) (auto simp: max_absorb2) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 883 | |
| 70378 
ebd108578ab1
more new material about analysis
 paulson <lp15@cam.ac.uk> parents: 
70365diff
changeset | 884 | lemma add_mono_ennreal: "x < ennreal y \<Longrightarrow> x' < ennreal y' \<Longrightarrow> x + x' < ennreal (y + y')" | 
| 
ebd108578ab1
more new material about analysis
 paulson <lp15@cam.ac.uk> parents: 
70365diff
changeset | 885 | by (metis (full_types) add_strict_mono ennreal_less_zero_iff ennreal_plus less_le not_less zero_le) | 
| 
ebd108578ab1
more new material about analysis
 paulson <lp15@cam.ac.uk> parents: 
70365diff
changeset | 886 | |
| 64267 | 887 | lemma sum_ennreal[simp]: "(\<And>i. i \<in> I \<Longrightarrow> 0 \<le> f i) \<Longrightarrow> (\<Sum>i\<in>I. ennreal (f i)) = ennreal (sum f I)" | 
| 888 | by (induction I rule: infinite_finite_induct) (auto simp: sum_nonneg) | |
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 889 | |
| 63882 
018998c00003
renamed listsum -> sum_list, listprod ~> prod_list
 nipkow parents: 
63540diff
changeset | 890 | lemma sum_list_ennreal[simp]: | 
| 63225 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 891 | assumes "\<And>x. x \<in> set xs \<Longrightarrow> f x \<ge> 0" | 
| 63882 
018998c00003
renamed listsum -> sum_list, listprod ~> prod_list
 nipkow parents: 
63540diff
changeset | 892 | shows "sum_list (map (\<lambda>x. ennreal (f x)) xs) = ennreal (sum_list (map f xs))" | 
| 63099 
af0e964aad7b
Moved material from AFP/Randomised_Social_Choice to distribution
 eberlm parents: 
63060diff
changeset | 893 | using assms | 
| 
af0e964aad7b
Moved material from AFP/Randomised_Social_Choice to distribution
 eberlm parents: 
63060diff
changeset | 894 | proof (induction xs) | 
| 
af0e964aad7b
Moved material from AFP/Randomised_Social_Choice to distribution
 eberlm parents: 
63060diff
changeset | 895 | case (Cons x xs) | 
| 63882 
018998c00003
renamed listsum -> sum_list, listprod ~> prod_list
 nipkow parents: 
63540diff
changeset | 896 | from Cons have "(\<Sum>x\<leftarrow>x # xs. ennreal (f x)) = ennreal (f x) + ennreal (sum_list (map f xs))" | 
| 63099 
af0e964aad7b
Moved material from AFP/Randomised_Social_Choice to distribution
 eberlm parents: 
63060diff
changeset | 897 | by simp | 
| 63882 
018998c00003
renamed listsum -> sum_list, listprod ~> prod_list
 nipkow parents: 
63540diff
changeset | 898 | also from Cons.prems have "\<dots> = ennreal (f x + sum_list (map f xs))" | 
| 
018998c00003
renamed listsum -> sum_list, listprod ~> prod_list
 nipkow parents: 
63540diff
changeset | 899 | by (intro ennreal_plus [symmetric] sum_list_nonneg) auto | 
| 63099 
af0e964aad7b
Moved material from AFP/Randomised_Social_Choice to distribution
 eberlm parents: 
63060diff
changeset | 900 | finally show ?case by simp | 
| 
af0e964aad7b
Moved material from AFP/Randomised_Social_Choice to distribution
 eberlm parents: 
63060diff
changeset | 901 | qed simp_all | 
| 
af0e964aad7b
Moved material from AFP/Randomised_Social_Choice to distribution
 eberlm parents: 
63060diff
changeset | 902 | |
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 903 | lemma ennreal_of_nat_eq_real_of_nat: "of_nat i = ennreal (of_nat i)" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 904 | by (induction i) simp_all | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 905 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 906 | lemma of_nat_le_ennreal_iff[simp]: "0 \<le> r \<Longrightarrow> of_nat i \<le> ennreal r \<longleftrightarrow> of_nat i \<le> r" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 907 | by (simp add: ennreal_of_nat_eq_real_of_nat) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 908 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 909 | lemma ennreal_le_of_nat_iff[simp]: "ennreal r \<le> of_nat i \<longleftrightarrow> r \<le> of_nat i" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 910 | by (simp add: ennreal_of_nat_eq_real_of_nat) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 911 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 912 | lemma ennreal_indicator: "ennreal (indicator A x) = indicator A x" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 913 | by (auto split: split_indicator) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 914 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 915 | lemma ennreal_numeral[simp]: "ennreal (numeral n) = numeral n" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 916 | using ennreal_of_nat_eq_real_of_nat[of "numeral n"] by simp | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 917 | |
| 70271 | 918 | lemma ennreal_less_numeral_iff [simp]: "ennreal n < numeral w \<longleftrightarrow> n < numeral w" | 
| 919 | by (metis ennreal_less_iff ennreal_numeral less_le not_less zero_less_numeral) | |
| 920 | ||
| 921 | lemma numeral_less_ennreal_iff [simp]: "numeral w < ennreal n \<longleftrightarrow> numeral w < n" | |
| 922 | using ennreal_less_iff zero_le_numeral by fastforce | |
| 923 | ||
| 924 | lemma numeral_le_ennreal_iff [simp]: "numeral n \<le> ennreal m \<longleftrightarrow> numeral n \<le> m" | |
| 925 | by (metis not_le ennreal_less_numeral_iff) | |
| 926 | ||
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 927 | lemma min_ennreal: "0 \<le> x \<Longrightarrow> 0 \<le> y \<Longrightarrow> min (ennreal x) (ennreal y) = ennreal (min x y)" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 928 | by (auto split: split_min) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 929 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 930 | lemma ennreal_half[simp]: "ennreal (1/2) = inverse 2" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 931 | by transfer (simp add: max.absorb2) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 932 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 933 | lemma ennreal_minus: "0 \<le> q \<Longrightarrow> ennreal r - ennreal q = ennreal (r - q)" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 934 | by transfer | 
| 68406 | 935 | (simp add: max.absorb2 zero_ereal_def flip: ereal_max) | 
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 936 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 937 | lemma ennreal_minus_top[simp]: "ennreal a - top = 0" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 938 | by (simp add: minus_top_ennreal) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 939 | |
| 67451 | 940 | lemma e2eenreal_enn2ereal_diff [simp]: | 
| 941 | "e2ennreal(enn2ereal x - enn2ereal y) = x - y" for x y | |
| 942 | by (cases x, cases y, auto simp add: ennreal_minus e2ennreal_neg) | |
| 943 | ||
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 944 | lemma ennreal_mult: "0 \<le> a \<Longrightarrow> 0 \<le> b \<Longrightarrow> ennreal (a * b) = ennreal a * ennreal b" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 945 | by transfer (simp add: max_absorb2) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 946 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 947 | lemma ennreal_mult': "0 \<le> a \<Longrightarrow> ennreal (a * b) = ennreal a * ennreal b" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 948 | by (cases "0 \<le> b") (auto simp: ennreal_mult ennreal_neg mult_nonneg_nonpos) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 949 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 950 | lemma indicator_mult_ennreal: "indicator A x * ennreal r = ennreal (indicator A x * r)" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 951 | by (simp split: split_indicator) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 952 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 953 | lemma ennreal_mult'': "0 \<le> b \<Longrightarrow> ennreal (a * b) = ennreal a * ennreal b" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 954 | by (cases "0 \<le> a") (auto simp: ennreal_mult ennreal_neg mult_nonpos_nonneg) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 955 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 956 | lemma numeral_mult_ennreal: "0 \<le> x \<Longrightarrow> numeral b * ennreal x = ennreal (numeral b * x)" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 957 | by (simp add: ennreal_mult) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 958 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 959 | lemma ennreal_power: "0 \<le> r \<Longrightarrow> ennreal r ^ n = ennreal (r ^ n)" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 960 | by (induction n) (auto simp: ennreal_mult) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 961 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 962 | lemma power_eq_top_ennreal: "x ^ n = top \<longleftrightarrow> (n \<noteq> 0 \<and> (x::ennreal) = top)" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 963 | by (cases x rule: ennreal_cases) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 964 | (auto simp: ennreal_power top_power_ennreal) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 965 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 966 | lemma inverse_ennreal: "0 < r \<Longrightarrow> inverse (ennreal r) = ennreal (inverse r)" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 967 | by transfer (simp add: max.absorb2) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 968 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 969 | lemma divide_ennreal: "0 \<le> r \<Longrightarrow> 0 < q \<Longrightarrow> ennreal r / ennreal q = ennreal (r / q)" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 970 | by (simp add: divide_ennreal_def inverse_ennreal ennreal_mult[symmetric] inverse_eq_divide) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 971 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 972 | lemma ennreal_inverse_power: "inverse (x ^ n :: ennreal) = inverse x ^ n" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 973 | proof (cases x rule: ennreal_cases) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 974 | case top with power_eq_top_ennreal[of x n] show ?thesis | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 975 | by (cases "n = 0") auto | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 976 | next | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 977 | case (real r) then show ?thesis | 
| 76137 | 978 | proof (cases "x = 0") | 
| 979 | case False then show ?thesis | |
| 980 | by (smt (verit, best) ennreal_0 ennreal_power inverse_ennreal | |
| 981 | inverse_nonnegative_iff_nonnegative power_inverse real zero_less_power) | |
| 982 | qed (simp add: top_power_ennreal) | |
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 983 | qed | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 984 | |
| 73253 
f6bb31879698
HOL-Analysis/Probability: Hoeffding's inequality, negative binomial distribution, etc.
 Manuel Eberl <eberlm@in.tum.de> parents: 
72236diff
changeset | 985 | lemma power_divide_distrib_ennreal [algebra_simps]: | 
| 
f6bb31879698
HOL-Analysis/Probability: Hoeffding's inequality, negative binomial distribution, etc.
 Manuel Eberl <eberlm@in.tum.de> parents: 
72236diff
changeset | 986 | "(x / y) ^ n = x ^ n / (y ^ n :: ennreal)" | 
| 
f6bb31879698
HOL-Analysis/Probability: Hoeffding's inequality, negative binomial distribution, etc.
 Manuel Eberl <eberlm@in.tum.de> parents: 
72236diff
changeset | 987 | by (simp add: divide_ennreal_def algebra_simps ennreal_inverse_power) | 
| 
f6bb31879698
HOL-Analysis/Probability: Hoeffding's inequality, negative binomial distribution, etc.
 Manuel Eberl <eberlm@in.tum.de> parents: 
72236diff
changeset | 988 | |
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 989 | lemma ennreal_divide_numeral: "0 \<le> x \<Longrightarrow> ennreal x / numeral b = ennreal (x / numeral b)" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 990 | by (subst divide_ennreal[symmetric]) auto | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 991 | |
| 64272 | 992 | lemma prod_ennreal: "(\<And>i. i \<in> A \<Longrightarrow> 0 \<le> f i) \<Longrightarrow> (\<Prod>i\<in>A. ennreal (f i)) = ennreal (prod f A)" | 
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 993 | by (induction A rule: infinite_finite_induct) | 
| 64272 | 994 | (auto simp: ennreal_mult prod_nonneg) | 
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 995 | |
| 73253 
f6bb31879698
HOL-Analysis/Probability: Hoeffding's inequality, negative binomial distribution, etc.
 Manuel Eberl <eberlm@in.tum.de> parents: 
72236diff
changeset | 996 | lemma prod_mono_ennreal: | 
| 
f6bb31879698
HOL-Analysis/Probability: Hoeffding's inequality, negative binomial distribution, etc.
 Manuel Eberl <eberlm@in.tum.de> parents: 
72236diff
changeset | 997 | assumes "\<And>x. x \<in> A \<Longrightarrow> f x \<le> (g x :: ennreal)" | 
| 
f6bb31879698
HOL-Analysis/Probability: Hoeffding's inequality, negative binomial distribution, etc.
 Manuel Eberl <eberlm@in.tum.de> parents: 
72236diff
changeset | 998 | shows "prod f A \<le> prod g A" | 
| 
f6bb31879698
HOL-Analysis/Probability: Hoeffding's inequality, negative binomial distribution, etc.
 Manuel Eberl <eberlm@in.tum.de> parents: 
72236diff
changeset | 999 | using assms by (induction A rule: infinite_finite_induct) (auto intro!: mult_mono) | 
| 
f6bb31879698
HOL-Analysis/Probability: Hoeffding's inequality, negative binomial distribution, etc.
 Manuel Eberl <eberlm@in.tum.de> parents: 
72236diff
changeset | 1000 | |
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1001 | lemma mult_right_ennreal_cancel: "a * ennreal c = b * ennreal c \<longleftrightarrow> (a = b \<or> c \<le> 0)" | 
| 72236 | 1002 | proof (cases "0 \<le> c") | 
| 1003 | case True | |
| 1004 | then show ?thesis | |
| 1005 | by (metis ennreal_eq_0_iff ennreal_mult_right_cong ennreal_neq_top mult_divide_eq_ennreal) | |
| 1006 | qed (use ennreal_neg in auto) | |
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1007 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1008 | lemma ennreal_le_epsilon: | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1009 | "(\<And>e::real. y < top \<Longrightarrow> 0 < e \<Longrightarrow> x \<le> y + ennreal e) \<Longrightarrow> x \<le> y" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1010 | apply (cases y rule: ennreal_cases) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1011 | apply (cases x rule: ennreal_cases) | 
| 68406 | 1012 | apply (auto simp flip: ennreal_plus simp add: top_unique intro: zero_less_one field_le_epsilon) | 
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1013 | done | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1014 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1015 | lemma ennreal_rat_dense: | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1016 | fixes x y :: ennreal | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1017 | shows "x < y \<Longrightarrow> \<exists>r::rat. x < real_of_rat r \<and> real_of_rat r < y" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1018 | proof transfer | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1019 | fix x y :: ereal assume xy: "0 \<le> x" "0 \<le> y" "x < y" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1020 | moreover | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1021 | from ereal_dense3[OF \<open>x < y\<close>] | 
| 63540 | 1022 | obtain r where r: "x < ereal (real_of_rat r)" "ereal (real_of_rat r) < y" | 
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1023 | by auto | 
| 63540 | 1024 | then have "0 \<le> r" | 
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1025 | using le_less_trans[OF \<open>0 \<le> x\<close> \<open>x < ereal (real_of_rat r)\<close>] by auto | 
| 63540 | 1026 | with r show "\<exists>r. x < (sup 0 \<circ> ereal) (real_of_rat r) \<and> (sup 0 \<circ> ereal) (real_of_rat r) < y" | 
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1027 | by (intro exI[of _ r]) (auto simp: max_absorb2) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1028 | qed | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1029 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1030 | lemma ennreal_Ex_less_of_nat: "(x::ennreal) < top \<Longrightarrow> \<exists>n. x < of_nat n" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1031 | by (cases x rule: ennreal_cases) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1032 | (auto simp: ennreal_of_nat_eq_real_of_nat ennreal_less_iff reals_Archimedean2) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1033 | |
| 69593 | 1034 | subsection \<open>Coercion from \<^typ>\<open>ennreal\<close> to \<^typ>\<open>real\<close>\<close> | 
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1035 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1036 | definition "enn2real x = real_of_ereal (enn2ereal x)" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1037 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1038 | lemma enn2real_nonneg[simp]: "0 \<le> enn2real x" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1039 | by (auto simp: enn2real_def intro!: real_of_ereal_pos enn2ereal_nonneg) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1040 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1041 | lemma enn2real_mono: "a \<le> b \<Longrightarrow> b < top \<Longrightarrow> enn2real a \<le> enn2real b" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1042 | by (auto simp add: enn2real_def less_eq_ennreal.rep_eq intro!: real_of_ereal_positive_mono enn2ereal_nonneg) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1043 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1044 | lemma enn2real_of_nat[simp]: "enn2real (of_nat n) = n" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1045 | by (auto simp: enn2real_def) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1046 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1047 | lemma enn2real_ennreal[simp]: "0 \<le> r \<Longrightarrow> enn2real (ennreal r) = r" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1048 | by (simp add: enn2real_def) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1049 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1050 | lemma ennreal_enn2real[simp]: "r < top \<Longrightarrow> ennreal (enn2real r) = r" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1051 | by (cases r rule: ennreal_cases) auto | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1052 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1053 | lemma real_of_ereal_enn2ereal[simp]: "real_of_ereal (enn2ereal x) = enn2real x" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1054 | by (simp add: enn2real_def) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1055 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1056 | lemma enn2real_top[simp]: "enn2real top = 0" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1057 | unfolding enn2real_def top_ennreal.rep_eq top_ereal_def by simp | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1058 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1059 | lemma enn2real_0[simp]: "enn2real 0 = 0" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1060 | unfolding enn2real_def zero_ennreal.rep_eq by simp | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1061 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1062 | lemma enn2real_1[simp]: "enn2real 1 = 1" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1063 | unfolding enn2real_def one_ennreal.rep_eq by simp | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1064 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1065 | lemma enn2real_numeral[simp]: "enn2real (numeral n) = (numeral n)" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1066 | unfolding enn2real_def by simp | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1067 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1068 | lemma enn2real_mult: "enn2real (a * b) = enn2real a * enn2real b" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1069 | unfolding enn2real_def | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1070 | by (simp del: real_of_ereal_enn2ereal add: times_ennreal.rep_eq) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1071 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1072 | lemma enn2real_leI: "0 \<le> B \<Longrightarrow> x \<le> ennreal B \<Longrightarrow> enn2real x \<le> B" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1073 | by (cases x rule: ennreal_cases) (auto simp: top_unique) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1074 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1075 | lemma enn2real_positive_iff: "0 < enn2real x \<longleftrightarrow> (0 < x \<and> x < top)" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1076 | by (cases x rule: ennreal_cases) auto | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1077 | |
| 70380 
2b0dca68c3ee
More analysis / measure theory material
 paulson <lp15@cam.ac.uk> parents: 
70378diff
changeset | 1078 | lemma enn2real_eq_posreal_iff[simp]: "c > 0 \<Longrightarrow> enn2real x = c \<longleftrightarrow> x = c" | 
| 64320 
ba194424b895
HOL-Probability: move stopping time from AFP/Markov_Models
 hoelzl parents: 
64284diff
changeset | 1079 | by (cases x) auto | 
| 
ba194424b895
HOL-Probability: move stopping time from AFP/Markov_Models
 hoelzl parents: 
64284diff
changeset | 1080 | |
| 70381 
b151d1f00204
More results about measure and integration theory
 paulson <lp15@cam.ac.uk> parents: 
70380diff
changeset | 1081 | lemma ennreal_enn2real_if: "ennreal (enn2real r) = (if r = top then 0 else r)" | 
| 
b151d1f00204
More results about measure and integration theory
 paulson <lp15@cam.ac.uk> parents: 
70380diff
changeset | 1082 | by(auto intro!: ennreal_enn2real simp add: less_top) | 
| 
b151d1f00204
More results about measure and integration theory
 paulson <lp15@cam.ac.uk> parents: 
70380diff
changeset | 1083 | |
| 69593 | 1084 | subsection \<open>Coercion from \<^typ>\<open>enat\<close> to \<^typ>\<open>ennreal\<close>\<close> | 
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1085 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1086 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1087 | definition ennreal_of_enat :: "enat \<Rightarrow> ennreal" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1088 | where | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1089 | "ennreal_of_enat n = (case n of \<infinity> \<Rightarrow> top | enat n \<Rightarrow> of_nat n)" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1090 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1091 | declare [[coercion ennreal_of_enat]] | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1092 | declare [[coercion "of_nat :: nat \<Rightarrow> ennreal"]] | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1093 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1094 | lemma ennreal_of_enat_infty[simp]: "ennreal_of_enat \<infinity> = \<infinity>" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1095 | by (simp add: ennreal_of_enat_def) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1096 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1097 | lemma ennreal_of_enat_enat[simp]: "ennreal_of_enat (enat n) = of_nat n" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1098 | by (simp add: ennreal_of_enat_def) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1099 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1100 | lemma ennreal_of_enat_0[simp]: "ennreal_of_enat 0 = 0" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1101 | using ennreal_of_enat_enat[of 0] unfolding enat_0 by simp | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1102 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1103 | lemma ennreal_of_enat_1[simp]: "ennreal_of_enat 1 = 1" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1104 | using ennreal_of_enat_enat[of 1] unfolding enat_1 by simp | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1105 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1106 | lemma ennreal_top_neq_of_nat[simp]: "(top::ennreal) \<noteq> of_nat i" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1107 | using ennreal_of_nat_neq_top[of i] by metis | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1108 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1109 | lemma ennreal_of_enat_inj[simp]: "ennreal_of_enat i = ennreal_of_enat j \<longleftrightarrow> i = j" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1110 | by (cases i j rule: enat.exhaust[case_product enat.exhaust]) auto | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1111 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1112 | lemma ennreal_of_enat_le_iff[simp]: "ennreal_of_enat m \<le> ennreal_of_enat n \<longleftrightarrow> m \<le> n" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1113 | by (auto simp: ennreal_of_enat_def top_unique split: enat.split) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1114 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1115 | lemma of_nat_less_ennreal_of_nat[simp]: "of_nat n \<le> ennreal_of_enat x \<longleftrightarrow> of_nat n \<le> x" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1116 | by (cases x) (auto simp: of_nat_eq_enat) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1117 | |
| 69260 
0a9688695a1b
removed relics of ASCII syntax for indexed big operators
 haftmann parents: 
69064diff
changeset | 1118 | lemma ennreal_of_enat_Sup: "ennreal_of_enat (Sup X) = (SUP x\<in>X. ennreal_of_enat x)" | 
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1119 | proof - | 
| 69260 
0a9688695a1b
removed relics of ASCII syntax for indexed big operators
 haftmann parents: 
69064diff
changeset | 1120 | have "ennreal_of_enat (Sup X) \<le> (SUP x \<in> X. ennreal_of_enat x)" | 
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1121 | unfolding Sup_enat_def | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1122 | proof (clarsimp, intro conjI impI) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1123 |     fix x assume "finite X" "X \<noteq> {}"
 | 
| 69260 
0a9688695a1b
removed relics of ASCII syntax for indexed big operators
 haftmann parents: 
69064diff
changeset | 1124 | then show "ennreal_of_enat (Max X) \<le> (SUP x \<in> X. ennreal_of_enat x)" | 
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1125 | by (intro SUP_upper Max_in) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1126 | next | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1127 |     assume "infinite X" "X \<noteq> {}"
 | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1128 | have "\<exists>y\<in>X. r < ennreal_of_enat y" if r: "r < top" for r | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1129 | proof - | 
| 74325 | 1130 | obtain n where n: "r < of_nat n" | 
| 1131 | using ennreal_Ex_less_of_nat[OF r] .. | |
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1132 |       have "\<not> (X \<subseteq> enat ` {.. n})"
 | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1133 | using \<open>infinite X\<close> by (auto dest: finite_subset) | 
| 63540 | 1134 |       then obtain x where x: "x \<in> X" "x \<notin> enat ` {..n}"
 | 
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1135 | by blast | 
| 63540 | 1136 | then have "of_nat n \<le> x" | 
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1137 | by (cases x) (auto simp: of_nat_eq_enat) | 
| 63540 | 1138 | with x show ?thesis | 
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1139 | by (auto intro!: bexI[of _ x] less_le_trans[OF n]) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1140 | qed | 
| 69260 
0a9688695a1b
removed relics of ASCII syntax for indexed big operators
 haftmann parents: 
69064diff
changeset | 1141 | then have "(SUP x \<in> X. ennreal_of_enat x) = top" | 
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1142 | by simp | 
| 69260 
0a9688695a1b
removed relics of ASCII syntax for indexed big operators
 haftmann parents: 
69064diff
changeset | 1143 | then show "top \<le> (SUP x \<in> X. ennreal_of_enat x)" | 
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1144 | unfolding top_unique by simp | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1145 | qed | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1146 | then show ?thesis | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1147 | by (auto intro!: antisym Sup_least intro: Sup_upper) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1148 | qed | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1149 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1150 | lemma ennreal_of_enat_eSuc[simp]: "ennreal_of_enat (eSuc x) = 1 + ennreal_of_enat x" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1151 | by (cases x) (auto simp: eSuc_enat) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1152 | |
| 74475 
409ca22dee4c
new notion of infinite sums in HOL-Analysis, ordering on complex numbers
 eberlm <eberlm@in.tum.de> parents: 
74325diff
changeset | 1153 | (* Contributed by Dominique Unruh *) | 
| 
409ca22dee4c
new notion of infinite sums in HOL-Analysis, ordering on complex numbers
 eberlm <eberlm@in.tum.de> parents: 
74325diff
changeset | 1154 | lemma ennreal_of_enat_plus[simp]: \<open>ennreal_of_enat (a+b) = ennreal_of_enat a + ennreal_of_enat b\<close> | 
| 74639 
f831b6e589dc
tuned proofs -- avoid z3, which is unavailable on arm64-linux;
 wenzelm parents: 
74475diff
changeset | 1155 | apply (induct a) | 
| 
f831b6e589dc
tuned proofs -- avoid z3, which is unavailable on arm64-linux;
 wenzelm parents: 
74475diff
changeset | 1156 | apply (metis enat.exhaust ennreal_add_eq_top ennreal_of_enat_enat ennreal_of_enat_infty infinity_ennreal_def of_nat_add plus_enat_simps(1) plus_eq_infty_iff_enat) | 
| 
f831b6e589dc
tuned proofs -- avoid z3, which is unavailable on arm64-linux;
 wenzelm parents: 
74475diff
changeset | 1157 | apply simp | 
| 
f831b6e589dc
tuned proofs -- avoid z3, which is unavailable on arm64-linux;
 wenzelm parents: 
74475diff
changeset | 1158 | done | 
| 74475 
409ca22dee4c
new notion of infinite sums in HOL-Analysis, ordering on complex numbers
 eberlm <eberlm@in.tum.de> parents: 
74325diff
changeset | 1159 | |
| 
409ca22dee4c
new notion of infinite sums in HOL-Analysis, ordering on complex numbers
 eberlm <eberlm@in.tum.de> parents: 
74325diff
changeset | 1160 | (* Contributed by Dominique Unruh *) | 
| 
409ca22dee4c
new notion of infinite sums in HOL-Analysis, ordering on complex numbers
 eberlm <eberlm@in.tum.de> parents: 
74325diff
changeset | 1161 | lemma sum_ennreal_of_enat[simp]: "(\<Sum>i\<in>I. ennreal_of_enat (f i)) = ennreal_of_enat (sum f I)" | 
| 74639 
f831b6e589dc
tuned proofs -- avoid z3, which is unavailable on arm64-linux;
 wenzelm parents: 
74475diff
changeset | 1162 | by (induct I rule: infinite_finite_induct) (auto simp: sum_nonneg) | 
| 
f831b6e589dc
tuned proofs -- avoid z3, which is unavailable on arm64-linux;
 wenzelm parents: 
74475diff
changeset | 1163 | |
| 74475 
409ca22dee4c
new notion of infinite sums in HOL-Analysis, ordering on complex numbers
 eberlm <eberlm@in.tum.de> parents: 
74325diff
changeset | 1164 | |
| 69593 | 1165 | subsection \<open>Topology on \<^typ>\<open>ennreal\<close>\<close> | 
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1166 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1167 | lemma enn2ereal_Iio: "enn2ereal -` {..<a} = (if 0 \<le> a then {..< e2ennreal a} else {})"
 | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1168 | using enn2ereal_nonneg | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1169 | by (cases a rule: ereal_ennreal_cases) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1170 | (auto simp add: vimage_def set_eq_iff ennreal.enn2ereal_inverse less_ennreal.rep_eq e2ennreal_def max_absorb2 | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1171 | simp del: enn2ereal_nonneg | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1172 | intro: le_less_trans less_imp_le) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1173 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1174 | lemma enn2ereal_Ioi: "enn2ereal -` {a <..} = (if 0 \<le> a then {e2ennreal a <..} else UNIV)"
 | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1175 | by (cases a rule: ereal_ennreal_cases) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1176 | (auto simp add: vimage_def set_eq_iff ennreal.enn2ereal_inverse less_ennreal.rep_eq e2ennreal_def max_absorb2 | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1177 | intro: less_le_trans) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1178 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1179 | instantiation ennreal :: linear_continuum_topology | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1180 | begin | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1181 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1182 | definition open_ennreal :: "ennreal set \<Rightarrow> bool" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1183 | where "(open :: ennreal set \<Rightarrow> bool) = generate_topology (range lessThan \<union> range greaterThan)" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1184 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1185 | instance | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1186 | proof | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1187 | show "\<exists>a b::ennreal. a \<noteq> b" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1188 | using zero_neq_one by (intro exI) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1189 | show "\<And>x y::ennreal. x < y \<Longrightarrow> \<exists>z>x. z < y" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1190 | proof transfer | 
| 74325 | 1191 | fix x y :: ereal | 
| 1192 | assume *: "0 \<le> x" | |
| 1193 | assume "x < y" | |
| 1194 | from dense[OF this] obtain z where "x < z \<and> z < y" .. | |
| 1195 | with * show "\<exists>z\<in>Collect ((\<le>) 0). x < z \<and> z < y" | |
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1196 | by (intro bexI[of _ z]) auto | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1197 | qed | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1198 | qed (rule open_ennreal_def) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1199 | |
| 62375 | 1200 | end | 
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1201 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1202 | lemma continuous_on_e2ennreal: "continuous_on A e2ennreal" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1203 | proof (rule continuous_on_subset) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1204 |   show "continuous_on ({0..} \<union> {..0}) e2ennreal"
 | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1205 | proof (rule continuous_on_closed_Un) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1206 |     show "continuous_on {0 ..} e2ennreal"
 | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1207 | by (rule continuous_onI_mono) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1208 | (auto simp add: less_eq_ennreal.abs_eq eq_onp_def enn2ereal_range) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1209 |     show "continuous_on {.. 0} e2ennreal"
 | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1210 | by (subst continuous_on_cong[OF refl, of _ _ "\<lambda>_. 0"]) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1211 | (auto simp add: e2ennreal_neg continuous_on_const) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1212 | qed auto | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1213 |   show "A \<subseteq> {0..} \<union> {..0::ereal}"
 | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1214 | by auto | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1215 | qed | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1216 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1217 | lemma continuous_at_e2ennreal: "continuous (at x within A) e2ennreal" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1218 | by (rule continuous_on_imp_continuous_within[OF continuous_on_e2ennreal, of _ UNIV]) auto | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1219 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1220 | lemma continuous_on_enn2ereal: "continuous_on UNIV enn2ereal" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1221 | by (rule continuous_on_generate_topology[OF open_generated_order]) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1222 | (auto simp add: enn2ereal_Iio enn2ereal_Ioi) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1223 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1224 | lemma continuous_at_enn2ereal: "continuous (at x within A) enn2ereal" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1225 | by (rule continuous_on_imp_continuous_within[OF continuous_on_enn2ereal]) auto | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1226 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1227 | lemma sup_continuous_e2ennreal[order_continuous_intros]: | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1228 | assumes f: "sup_continuous f" shows "sup_continuous (\<lambda>x. e2ennreal (f x))" | 
| 72236 | 1229 | proof (rule sup_continuous_compose[OF _ f]) | 
| 1230 | show "sup_continuous e2ennreal" | |
| 1231 | by (simp add: continuous_at_e2ennreal continuous_at_left_imp_sup_continuous e2ennreal_mono mono_def) | |
| 1232 | qed | |
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1233 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1234 | lemma sup_continuous_enn2ereal[order_continuous_intros]: | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1235 | assumes f: "sup_continuous f" shows "sup_continuous (\<lambda>x. enn2ereal (f x))" | 
| 72236 | 1236 | proof (rule sup_continuous_compose[OF _ f]) | 
| 1237 | show "sup_continuous enn2ereal" | |
| 1238 | by (simp add: continuous_at_enn2ereal continuous_at_left_imp_sup_continuous less_eq_ennreal.rep_eq mono_def) | |
| 1239 | qed | |
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1240 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1241 | lemma sup_continuous_mult_left_ennreal': | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1242 | fixes c :: "ennreal" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1243 | shows "sup_continuous (\<lambda>x. c * x)" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1244 | unfolding sup_continuous_def | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1245 | by transfer (auto simp: SUP_ereal_mult_left max.absorb2 SUP_upper2) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1246 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1247 | lemma sup_continuous_mult_left_ennreal[order_continuous_intros]: | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1248 | "sup_continuous f \<Longrightarrow> sup_continuous (\<lambda>x. c * f x :: ennreal)" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1249 | by (rule sup_continuous_compose[OF sup_continuous_mult_left_ennreal']) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1250 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1251 | lemma sup_continuous_mult_right_ennreal[order_continuous_intros]: | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1252 | "sup_continuous f \<Longrightarrow> sup_continuous (\<lambda>x. f x * c :: ennreal)" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1253 | using sup_continuous_mult_left_ennreal[of f c] by (simp add: mult.commute) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1254 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1255 | lemma sup_continuous_divide_ennreal[order_continuous_intros]: | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1256 | fixes f g :: "'a::complete_lattice \<Rightarrow> ennreal" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1257 | shows "sup_continuous f \<Longrightarrow> sup_continuous (\<lambda>x. f x / c)" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1258 | unfolding divide_ennreal_def by (rule sup_continuous_mult_right_ennreal) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1259 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1260 | lemma transfer_enn2ereal_continuous_on [transfer_rule]: | 
| 67399 | 1261 | "rel_fun (=) (rel_fun (rel_fun (=) pcr_ennreal) (=)) continuous_on continuous_on" | 
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1262 | proof - | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1263 | have "continuous_on A f" if "continuous_on A (\<lambda>x. enn2ereal (f x))" for A and f :: "'a \<Rightarrow> ennreal" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1264 |     using continuous_on_compose2[OF continuous_on_e2ennreal[of "{0..}"] that]
 | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1265 | by (auto simp: ennreal.enn2ereal_inverse subset_eq e2ennreal_def max_absorb2) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1266 | moreover | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1267 | have "continuous_on A (\<lambda>x. enn2ereal (f x))" if "continuous_on A f" for A and f :: "'a \<Rightarrow> ennreal" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1268 | using continuous_on_compose2[OF continuous_on_enn2ereal that] by auto | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1269 | ultimately | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1270 | show ?thesis | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1271 | by (auto simp add: rel_fun_def ennreal.pcr_cr_eq cr_ennreal_def) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1272 | qed | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1273 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1274 | lemma transfer_sup_continuous[transfer_rule]: | 
| 67399 | 1275 | "(rel_fun (rel_fun (=) pcr_ennreal) (=)) sup_continuous sup_continuous" | 
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1276 | proof (safe intro!: rel_funI dest!: rel_fun_eq_pcr_ennreal[THEN iffD1]) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1277 | show "sup_continuous (enn2ereal \<circ> f) \<Longrightarrow> sup_continuous f" for f :: "'a \<Rightarrow> _" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1278 | using sup_continuous_e2ennreal[of "enn2ereal \<circ> f"] by simp | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1279 | show "sup_continuous f \<Longrightarrow> sup_continuous (enn2ereal \<circ> f)" for f :: "'a \<Rightarrow> _" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1280 | using sup_continuous_enn2ereal[of f] by (simp add: comp_def) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1281 | qed | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1282 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1283 | lemma continuous_on_ennreal[tendsto_intros]: | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1284 | "continuous_on A f \<Longrightarrow> continuous_on A (\<lambda>x. ennreal (f x))" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1285 | by transfer (auto intro!: continuous_on_max continuous_on_const continuous_on_ereal) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1286 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1287 | lemma tendsto_ennrealD: | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1288 | assumes lim: "((\<lambda>x. ennreal (f x)) \<longlongrightarrow> ennreal x) F" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1289 | assumes *: "\<forall>\<^sub>F x in F. 0 \<le> f x" and x: "0 \<le> x" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1290 | shows "(f \<longlongrightarrow> x) F" | 
| 72236 | 1291 | proof - | 
| 1292 | have "((\<lambda>x. enn2ereal (ennreal (f x))) \<longlongrightarrow> enn2ereal (ennreal x)) F | |
| 1293 | \<longleftrightarrow> (f \<longlongrightarrow> enn2ereal (ennreal x)) F" | |
| 1294 | using "*" eventually_mono | |
| 1295 | by (intro tendsto_cong) fastforce | |
| 1296 | then show ?thesis | |
| 1297 | using assms(1) continuous_at_enn2ereal isCont_tendsto_compose x by fastforce | |
| 1298 | qed | |
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1299 | |
| 73869 | 1300 | lemma tendsto_ennreal_iff [simp]: | 
| 1301 | \<open>((\<lambda>x. ennreal (f x)) \<longlongrightarrow> ennreal x) F \<longleftrightarrow> (f \<longlongrightarrow> x) F\<close> (is \<open>?P \<longleftrightarrow> ?Q\<close>) | |
| 1302 | if \<open>\<forall>\<^sub>F x in F. 0 \<le> f x\<close> \<open>0 \<le> x\<close> | |
| 1303 | proof | |
| 1304 | assume \<open>?P\<close> | |
| 1305 | then show \<open>?Q\<close> | |
| 1306 | using that by (rule tendsto_ennrealD) | |
| 1307 | next | |
| 1308 | assume \<open>?Q\<close> | |
| 1309 | have \<open>continuous_on UNIV ereal\<close> | |
| 1310 | using continuous_on_ereal [of _ id] by simp | |
| 1311 | then have \<open>continuous_on UNIV (e2ennreal \<circ> ereal)\<close> | |
| 1312 | by (rule continuous_on_compose) (simp_all add: continuous_on_e2ennreal) | |
| 1313 | then have \<open>((\<lambda>x. (e2ennreal \<circ> ereal) (f x)) \<longlongrightarrow> (e2ennreal \<circ> ereal) x) F\<close> | |
| 1314 | using \<open>?Q\<close> by (rule continuous_on_tendsto_compose) simp_all | |
| 1315 | then show \<open>?P\<close> | |
| 1316 | by (simp flip: e2ennreal_ereal) | |
| 1317 | qed | |
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1318 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1319 | lemma tendsto_enn2ereal_iff[simp]: "((\<lambda>i. enn2ereal (f i)) \<longlongrightarrow> enn2ereal x) F \<longleftrightarrow> (f \<longlongrightarrow> x) F" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1320 | using continuous_on_enn2ereal[THEN continuous_on_tendsto_compose, of f x F] | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1321 | continuous_on_e2ennreal[THEN continuous_on_tendsto_compose, of "\<lambda>x. enn2ereal (f x)" "enn2ereal x" F UNIV] | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1322 | by auto | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1323 | |
| 70381 
b151d1f00204
More results about measure and integration theory
 paulson <lp15@cam.ac.uk> parents: 
70380diff
changeset | 1324 | lemma ennreal_tendsto_0_iff: "(\<And>n. f n \<ge> 0) \<Longrightarrow> ((\<lambda>n. ennreal (f n)) \<longlonglongrightarrow> 0) \<longleftrightarrow> (f \<longlonglongrightarrow> 0)" | 
| 
b151d1f00204
More results about measure and integration theory
 paulson <lp15@cam.ac.uk> parents: 
70380diff
changeset | 1325 | by (metis (mono_tags) ennreal_0 eventuallyI order_refl tendsto_ennreal_iff) | 
| 
b151d1f00204
More results about measure and integration theory
 paulson <lp15@cam.ac.uk> parents: 
70380diff
changeset | 1326 | |
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1327 | lemma continuous_on_add_ennreal: | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1328 | fixes f g :: "'a::topological_space \<Rightarrow> ennreal" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1329 | shows "continuous_on A f \<Longrightarrow> continuous_on A g \<Longrightarrow> continuous_on A (\<lambda>x. f x + g x)" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1330 | by (transfer fixing: A) (auto intro!: tendsto_add_ereal_nonneg simp: continuous_on_def) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1331 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1332 | lemma continuous_on_inverse_ennreal[continuous_intros]: | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1333 | fixes f :: "'a::topological_space \<Rightarrow> ennreal" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1334 | shows "continuous_on A f \<Longrightarrow> continuous_on A (\<lambda>x. inverse (f x))" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1335 | proof (transfer fixing: A) | 
| 67399 | 1336 | show "pred_fun top ((\<le>) 0) f \<Longrightarrow> continuous_on A (\<lambda>x. inverse (f x))" if "continuous_on A f" | 
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1337 | for f :: "'a \<Rightarrow> ereal" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1338 | using continuous_on_compose2[OF continuous_on_inverse_ereal that] by (auto simp: subset_eq) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1339 | qed | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1340 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1341 | instance ennreal :: topological_comm_monoid_add | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1342 | proof | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1343 | show "((\<lambda>x. fst x + snd x) \<longlongrightarrow> a + b) (nhds a \<times>\<^sub>F nhds b)" for a b :: ennreal | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1344 | using continuous_on_add_ennreal[of UNIV fst snd] | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1345 | using tendsto_at_iff_tendsto_nhds[symmetric, of "\<lambda>x::(ennreal \<times> ennreal). fst x + snd x"] | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1346 | by (auto simp: continuous_on_eq_continuous_at) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1347 | (simp add: isCont_def nhds_prod[symmetric]) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1348 | qed | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1349 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1350 | lemma sup_continuous_add_ennreal[order_continuous_intros]: | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1351 | fixes f g :: "'a::complete_lattice \<Rightarrow> ennreal" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1352 | shows "sup_continuous f \<Longrightarrow> sup_continuous g \<Longrightarrow> sup_continuous (\<lambda>x. f x + g x)" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1353 | by transfer (auto intro!: sup_continuous_add) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1354 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1355 | lemma ennreal_suminf_lessD: "(\<Sum>i. f i :: ennreal) < x \<Longrightarrow> f i < x" | 
| 64267 | 1356 |   using le_less_trans[OF sum_le_suminf[OF summableI, of "{i}" f]] by simp
 | 
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1357 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1358 | lemma sums_ennreal[simp]: "(\<And>i. 0 \<le> f i) \<Longrightarrow> 0 \<le> x \<Longrightarrow> (\<lambda>i. ennreal (f i)) sums ennreal x \<longleftrightarrow> f sums x" | 
| 64267 | 1359 | unfolding sums_def by (simp add: always_eventually sum_nonneg) | 
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1360 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1361 | lemma summable_suminf_not_top: "(\<And>i. 0 \<le> f i) \<Longrightarrow> (\<Sum>i. ennreal (f i)) \<noteq> top \<Longrightarrow> summable f" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1362 | using summable_sums[OF summableI, of "\<lambda>i. ennreal (f i)"] | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1363 | by (cases "\<Sum>i. ennreal (f i)" rule: ennreal_cases) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1364 | (auto simp: summable_def) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1365 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1366 | lemma suminf_ennreal[simp]: | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1367 | "(\<And>i. 0 \<le> f i) \<Longrightarrow> (\<Sum>i. ennreal (f i)) \<noteq> top \<Longrightarrow> (\<Sum>i. ennreal (f i)) = ennreal (\<Sum>i. f i)" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1368 | by (rule sums_unique[symmetric]) (simp add: summable_suminf_not_top suminf_nonneg summable_sums) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1369 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1370 | lemma sums_enn2ereal[simp]: "(\<lambda>i. enn2ereal (f i)) sums enn2ereal x \<longleftrightarrow> f sums x" | 
| 64267 | 1371 | unfolding sums_def by (simp add: always_eventually sum_nonneg) | 
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1372 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1373 | lemma suminf_enn2ereal[simp]: "(\<Sum>i. enn2ereal (f i)) = enn2ereal (suminf f)" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1374 | by (rule sums_unique[symmetric]) (simp add: summable_sums) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1375 | |
| 67399 | 1376 | lemma transfer_e2ennreal_suminf [transfer_rule]: "rel_fun (rel_fun (=) pcr_ennreal) pcr_ennreal suminf suminf" | 
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1377 | by (auto simp: rel_funI rel_fun_eq_pcr_ennreal comp_def) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1378 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1379 | lemma ennreal_suminf_cmult[simp]: "(\<Sum>i. r * f i) = r * (\<Sum>i. f i::ennreal)" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1380 | by transfer (auto intro!: suminf_cmult_ereal) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1381 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1382 | lemma ennreal_suminf_multc[simp]: "(\<Sum>i. f i * r) = (\<Sum>i. f i::ennreal) * r" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1383 | using ennreal_suminf_cmult[of r f] by (simp add: ac_simps) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1384 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1385 | lemma ennreal_suminf_divide[simp]: "(\<Sum>i. f i / r) = (\<Sum>i. f i::ennreal) / r" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1386 | by (simp add: divide_ennreal_def) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1387 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1388 | lemma ennreal_suminf_neq_top: "summable f \<Longrightarrow> (\<And>i. 0 \<le> f i) \<Longrightarrow> (\<Sum>i. ennreal (f i)) \<noteq> top" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1389 | using sums_ennreal[of f "suminf f"] | 
| 68406 | 1390 | by (simp add: suminf_nonneg flip: sums_unique summable_sums_iff del: sums_ennreal) | 
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1391 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1392 | lemma suminf_ennreal_eq: | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1393 | "(\<And>i. 0 \<le> f i) \<Longrightarrow> f sums x \<Longrightarrow> (\<Sum>i. ennreal (f i)) = ennreal x" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1394 | using suminf_nonneg[of f] sums_unique[of f x] | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1395 | by (intro sums_unique[symmetric]) (auto simp: summable_sums_iff) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1396 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1397 | lemma ennreal_suminf_bound_add: | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1398 | fixes f :: "nat \<Rightarrow> ennreal" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1399 | shows "(\<And>N. (\<Sum>n<N. f n) + y \<le> x) \<Longrightarrow> suminf f + y \<le> x" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1400 | by transfer (auto intro!: suminf_bound_add) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1401 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1402 | lemma ennreal_suminf_SUP_eq_directed: | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1403 | fixes f :: "'a \<Rightarrow> nat \<Rightarrow> ennreal" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1404 | assumes *: "\<And>N i j. i \<in> I \<Longrightarrow> j \<in> I \<Longrightarrow> finite N \<Longrightarrow> \<exists>k\<in>I. \<forall>n\<in>N. f i n \<le> f k n \<and> f j n \<le> f k n" | 
| 69260 
0a9688695a1b
removed relics of ASCII syntax for indexed big operators
 haftmann parents: 
69064diff
changeset | 1405 | shows "(\<Sum>n. SUP i\<in>I. f i n) = (SUP i\<in>I. \<Sum>n. f i n)" | 
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1406 | proof cases | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1407 |   assume "I \<noteq> {}"
 | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1408 | then obtain i where "i \<in> I" by auto | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1409 | from * show ?thesis | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1410 | by (transfer fixing: I) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1411 |        (auto simp: max_absorb2 SUP_upper2[OF \<open>i \<in> I\<close>] suminf_nonneg summable_ereal_pos \<open>I \<noteq> {}\<close>
 | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1412 | intro!: suminf_SUP_eq_directed) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1413 | qed (simp add: bot_ennreal) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1414 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1415 | lemma INF_ennreal_add_const: | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1416 | fixes f g :: "nat \<Rightarrow> ennreal" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1417 | shows "(INF i. f i + c) = (INF i. f i) + c" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1418 | using continuous_at_Inf_mono[of "\<lambda>x. x + c" "f`UNIV"] | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1419 | using continuous_add[of "at_right (Inf (range f))", of "\<lambda>x. x" "\<lambda>x. c"] | 
| 69861 
62e47f06d22c
avoid context-sensitive simp rules whose context-free form (image_comp) is not simp by default
 haftmann parents: 
69661diff
changeset | 1420 | by (auto simp: mono_def image_comp) | 
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1421 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1422 | lemma INF_ennreal_const_add: | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1423 | fixes f g :: "nat \<Rightarrow> ennreal" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1424 | shows "(INF i. c + f i) = c + (INF i. f i)" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1425 | using INF_ennreal_add_const[of f c] by (simp add: ac_simps) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1426 | |
| 69260 
0a9688695a1b
removed relics of ASCII syntax for indexed big operators
 haftmann parents: 
69064diff
changeset | 1427 | lemma SUP_mult_left_ennreal: "c * (SUP i\<in>I. f i) = (SUP i\<in>I. c * f i ::ennreal)" | 
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1428 | proof cases | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1429 |   assume "I \<noteq> {}" then show ?thesis
 | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1430 | by transfer (auto simp add: SUP_ereal_mult_left max_absorb2 SUP_upper2) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1431 | qed (simp add: bot_ennreal) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1432 | |
| 69260 
0a9688695a1b
removed relics of ASCII syntax for indexed big operators
 haftmann parents: 
69064diff
changeset | 1433 | lemma SUP_mult_right_ennreal: "(SUP i\<in>I. f i) * c = (SUP i\<in>I. f i * c ::ennreal)" | 
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1434 | using SUP_mult_left_ennreal by (simp add: mult.commute) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1435 | |
| 69260 
0a9688695a1b
removed relics of ASCII syntax for indexed big operators
 haftmann parents: 
69064diff
changeset | 1436 | lemma SUP_divide_ennreal: "(SUP i\<in>I. f i) / c = (SUP i\<in>I. f i / c ::ennreal)" | 
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1437 | using SUP_mult_right_ennreal by (simp add: divide_ennreal_def) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1438 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1439 | lemma ennreal_SUP_of_nat_eq_top: "(SUP x. of_nat x :: ennreal) = top" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1440 | proof (intro antisym top_greatest le_SUP_iff[THEN iffD2] allI impI) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1441 | fix y :: ennreal assume "y < top" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1442 | then obtain r where "y = ennreal r" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1443 | by (cases y rule: ennreal_cases) auto | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1444 | then show "\<exists>i\<in>UNIV. y < of_nat i" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1445 | using reals_Archimedean2[of "max 1 r"] zero_less_one | 
| 67451 | 1446 | by (simp add: ennreal_Ex_less_of_nat) | 
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1447 | qed | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1448 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1449 | lemma ennreal_SUP_eq_top: | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1450 | fixes f :: "'a \<Rightarrow> ennreal" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1451 | assumes "\<And>n. \<exists>i\<in>I. of_nat n \<le> f i" | 
| 69260 
0a9688695a1b
removed relics of ASCII syntax for indexed big operators
 haftmann parents: 
69064diff
changeset | 1452 | shows "(SUP i \<in> I. f i) = top" | 
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1453 | proof - | 
| 69260 
0a9688695a1b
removed relics of ASCII syntax for indexed big operators
 haftmann parents: 
69064diff
changeset | 1454 | have "(SUP x. of_nat x :: ennreal) \<le> (SUP i \<in> I. f i)" | 
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1455 | using assms by (auto intro!: SUP_least intro: SUP_upper2) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1456 | then show ?thesis | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1457 | by (auto simp: ennreal_SUP_of_nat_eq_top top_unique) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1458 | qed | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1459 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1460 | lemma ennreal_INF_const_minus: | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1461 | fixes f :: "'a \<Rightarrow> ennreal" | 
| 69260 
0a9688695a1b
removed relics of ASCII syntax for indexed big operators
 haftmann parents: 
69064diff
changeset | 1462 |   shows "I \<noteq> {} \<Longrightarrow> (SUP x\<in>I. c - f x) = c - (INF x\<in>I. f x)"
 | 
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1463 | by (transfer fixing: I) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1464 | (simp add: sup_max[symmetric] SUP_sup_const1 SUP_ereal_minus_right del: sup_ereal_def) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1465 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1466 | lemma of_nat_Sup_ennreal: | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1467 |   assumes "A \<noteq> {}" "bdd_above A"
 | 
| 69260 
0a9688695a1b
removed relics of ASCII syntax for indexed big operators
 haftmann parents: 
69064diff
changeset | 1468 | shows "of_nat (Sup A) = (SUP a\<in>A. of_nat a :: ennreal)" | 
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1469 | proof (intro antisym) | 
| 69260 
0a9688695a1b
removed relics of ASCII syntax for indexed big operators
 haftmann parents: 
69064diff
changeset | 1470 | show "(SUP a\<in>A. of_nat a::ennreal) \<le> of_nat (Sup A)" | 
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1471 | by (intro SUP_least of_nat_mono) (auto intro: cSup_upper assms) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1472 | have "Sup A \<in> A" | 
| 71834 | 1473 | using assms by (auto simp: Sup_nat_def bdd_above_nat) | 
| 69260 
0a9688695a1b
removed relics of ASCII syntax for indexed big operators
 haftmann parents: 
69064diff
changeset | 1474 | then show "of_nat (Sup A) \<le> (SUP a\<in>A. of_nat a::ennreal)" | 
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1475 | by (intro SUP_upper) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1476 | qed | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1477 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1478 | lemma ennreal_tendsto_const_minus: | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1479 | fixes g :: "'a \<Rightarrow> ennreal" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1480 | assumes ae: "\<forall>\<^sub>F x in F. g x \<le> c" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1481 | assumes g: "((\<lambda>x. c - g x) \<longlongrightarrow> 0) F" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1482 | shows "(g \<longlongrightarrow> c) F" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1483 | proof (cases c rule: ennreal_cases) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1484 | case top with tendsto_unique[OF _ g, of "top"] show ?thesis | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1485 | by (cases "F = bot") auto | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1486 | next | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1487 | case (real r) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1488 | then have "\<forall>x. \<exists>q\<ge>0. g x \<le> c \<longrightarrow> (g x = ennreal q \<and> q \<le> r)" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1489 | by (auto simp: le_ennreal_iff) | 
| 63060 | 1490 | then obtain f where *: "0 \<le> f x" "g x = ennreal (f x)" "f x \<le> r" if "g x \<le> c" for x | 
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1491 | by metis | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1492 | from ae have ae2: "\<forall>\<^sub>F x in F. c - g x = ennreal (r - f x) \<and> f x \<le> r \<and> g x = ennreal (f x) \<and> 0 \<le> f x" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1493 | proof eventually_elim | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1494 | fix x assume "g x \<le> c" with *[of x] \<open>0 \<le> r\<close> show "c - g x = ennreal (r - f x) \<and> f x \<le> r \<and> g x = ennreal (f x) \<and> 0 \<le> f x" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1495 | by (auto simp: real ennreal_minus) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1496 | qed | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1497 | with g have "((\<lambda>x. ennreal (r - f x)) \<longlongrightarrow> ennreal 0) F" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1498 | by (auto simp add: tendsto_cong eventually_conj_iff) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1499 | with ae2 have "((\<lambda>x. r - f x) \<longlongrightarrow> 0) F" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1500 | by (subst (asm) tendsto_ennreal_iff) (auto elim: eventually_mono) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1501 | then have "(f \<longlongrightarrow> r) F" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1502 | by (rule Lim_transform2[OF tendsto_const]) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1503 | with ae2 have "((\<lambda>x. ennreal (f x)) \<longlongrightarrow> ennreal r) F" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1504 | by (subst tendsto_ennreal_iff) (auto elim: eventually_mono simp: real) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1505 | with ae2 show ?thesis | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1506 | by (auto simp: real tendsto_cong eventually_conj_iff) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1507 | qed | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1508 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1509 | lemma ennreal_SUP_add: | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1510 | fixes f g :: "nat \<Rightarrow> ennreal" | 
| 69313 | 1511 | shows "incseq f \<Longrightarrow> incseq g \<Longrightarrow> (SUP i. f i + g i) = Sup (f ` UNIV) + Sup (g ` UNIV)" | 
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1512 | unfolding incseq_def le_fun_def | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1513 | by transfer | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1514 | (simp add: SUP_ereal_add incseq_def le_fun_def max_absorb2 SUP_upper2) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1515 | |
| 64267 | 1516 | lemma ennreal_SUP_sum: | 
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1517 | fixes f :: "'a \<Rightarrow> nat \<Rightarrow> ennreal" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1518 | shows "(\<And>i. i \<in> I \<Longrightarrow> incseq (f i)) \<Longrightarrow> (SUP n. \<Sum>i\<in>I. f i n) = (\<Sum>i\<in>I. SUP n. f i n)" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1519 | unfolding incseq_def | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1520 | by transfer | 
| 64267 | 1521 | (simp add: SUP_ereal_sum incseq_def SUP_upper2 max_absorb2 sum_nonneg) | 
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1522 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1523 | lemma ennreal_liminf_minus: | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1524 | fixes f :: "nat \<Rightarrow> ennreal" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1525 | shows "(\<And>n. f n \<le> c) \<Longrightarrow> liminf (\<lambda>n. c - f n) = c - limsup f" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1526 | apply transfer | 
| 76137 | 1527 | apply (simp add: ereal_diff_positive liminf_ereal_cminus) | 
| 1528 | by (metis max.absorb2 ereal_diff_positive Limsup_bounded eventually_sequentiallyI) | |
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1529 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1530 | lemma ennreal_continuous_on_cmult: | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1531 | "(c::ennreal) < top \<Longrightarrow> continuous_on A f \<Longrightarrow> continuous_on A (\<lambda>x. c * f x)" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1532 | by (transfer fixing: A) (auto intro: continuous_on_cmult_ereal) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1533 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1534 | lemma ennreal_tendsto_cmult: | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1535 | "(c::ennreal) < top \<Longrightarrow> (f \<longlongrightarrow> x) F \<Longrightarrow> ((\<lambda>x. c * f x) \<longlongrightarrow> c * x) F" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1536 | by (rule continuous_on_tendsto_compose[where g=f, OF ennreal_continuous_on_cmult, where s=UNIV]) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1537 | (auto simp: continuous_on_id) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1538 | |
| 67727 
ce3e87a51488
moved Lipschitz continuity from AFP/Ordinary_Differential_Equations and AFP/Gromov_Hyperbolicity; moved lemmas from AFP/Gromov_Hyperbolicity/Library_Complements
 immler parents: 
67719diff
changeset | 1539 | lemma tendsto_ennrealI[intro, simp, tendsto_intros]: | 
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1540 | "(f \<longlongrightarrow> x) F \<Longrightarrow> ((\<lambda>x. ennreal (f x)) \<longlongrightarrow> ennreal x) F" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1541 | by (auto simp: ennreal_def | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1542 | intro!: continuous_on_tendsto_compose[OF continuous_on_e2ennreal[of UNIV]] tendsto_max) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1543 | |
| 67727 
ce3e87a51488
moved Lipschitz continuity from AFP/Ordinary_Differential_Equations and AFP/Gromov_Hyperbolicity; moved lemmas from AFP/Gromov_Hyperbolicity/Library_Complements
 immler parents: 
67719diff
changeset | 1544 | lemma tendsto_enn2erealI [tendsto_intros]: | 
| 
ce3e87a51488
moved Lipschitz continuity from AFP/Ordinary_Differential_Equations and AFP/Gromov_Hyperbolicity; moved lemmas from AFP/Gromov_Hyperbolicity/Library_Complements
 immler parents: 
67719diff
changeset | 1545 | assumes "(f \<longlongrightarrow> l) F" | 
| 
ce3e87a51488
moved Lipschitz continuity from AFP/Ordinary_Differential_Equations and AFP/Gromov_Hyperbolicity; moved lemmas from AFP/Gromov_Hyperbolicity/Library_Complements
 immler parents: 
67719diff
changeset | 1546 | shows "((\<lambda>i. enn2ereal(f i)) \<longlongrightarrow> enn2ereal l) F" | 
| 
ce3e87a51488
moved Lipschitz continuity from AFP/Ordinary_Differential_Equations and AFP/Gromov_Hyperbolicity; moved lemmas from AFP/Gromov_Hyperbolicity/Library_Complements
 immler parents: 
67719diff
changeset | 1547 | using tendsto_enn2ereal_iff assms by auto | 
| 
ce3e87a51488
moved Lipschitz continuity from AFP/Ordinary_Differential_Equations and AFP/Gromov_Hyperbolicity; moved lemmas from AFP/Gromov_Hyperbolicity/Library_Complements
 immler parents: 
67719diff
changeset | 1548 | |
| 
ce3e87a51488
moved Lipschitz continuity from AFP/Ordinary_Differential_Equations and AFP/Gromov_Hyperbolicity; moved lemmas from AFP/Gromov_Hyperbolicity/Library_Complements
 immler parents: 
67719diff
changeset | 1549 | lemma tendsto_e2ennrealI [tendsto_intros]: | 
| 
ce3e87a51488
moved Lipschitz continuity from AFP/Ordinary_Differential_Equations and AFP/Gromov_Hyperbolicity; moved lemmas from AFP/Gromov_Hyperbolicity/Library_Complements
 immler parents: 
67719diff
changeset | 1550 | assumes "(f \<longlongrightarrow> l) F" | 
| 
ce3e87a51488
moved Lipschitz continuity from AFP/Ordinary_Differential_Equations and AFP/Gromov_Hyperbolicity; moved lemmas from AFP/Gromov_Hyperbolicity/Library_Complements
 immler parents: 
67719diff
changeset | 1551 | shows "((\<lambda>i. e2ennreal(f i)) \<longlongrightarrow> e2ennreal l) F" | 
| 
ce3e87a51488
moved Lipschitz continuity from AFP/Ordinary_Differential_Equations and AFP/Gromov_Hyperbolicity; moved lemmas from AFP/Gromov_Hyperbolicity/Library_Complements
 immler parents: 
67719diff
changeset | 1552 | proof - | 
| 
ce3e87a51488
moved Lipschitz continuity from AFP/Ordinary_Differential_Equations and AFP/Gromov_Hyperbolicity; moved lemmas from AFP/Gromov_Hyperbolicity/Library_Complements
 immler parents: 
67719diff
changeset | 1553 | have *: "e2ennreal (max x 0) = e2ennreal x" for x | 
| 
ce3e87a51488
moved Lipschitz continuity from AFP/Ordinary_Differential_Equations and AFP/Gromov_Hyperbolicity; moved lemmas from AFP/Gromov_Hyperbolicity/Library_Complements
 immler parents: 
67719diff
changeset | 1554 | by (simp add: e2ennreal_def max.commute) | 
| 
ce3e87a51488
moved Lipschitz continuity from AFP/Ordinary_Differential_Equations and AFP/Gromov_Hyperbolicity; moved lemmas from AFP/Gromov_Hyperbolicity/Library_Complements
 immler parents: 
67719diff
changeset | 1555 | have "((\<lambda>i. max (f i) 0) \<longlongrightarrow> max l 0) F" | 
| 
ce3e87a51488
moved Lipschitz continuity from AFP/Ordinary_Differential_Equations and AFP/Gromov_Hyperbolicity; moved lemmas from AFP/Gromov_Hyperbolicity/Library_Complements
 immler parents: 
67719diff
changeset | 1556 | apply (intro tendsto_intros) using assms by auto | 
| 
ce3e87a51488
moved Lipschitz continuity from AFP/Ordinary_Differential_Equations and AFP/Gromov_Hyperbolicity; moved lemmas from AFP/Gromov_Hyperbolicity/Library_Complements
 immler parents: 
67719diff
changeset | 1557 | then have "((\<lambda>i. enn2ereal(e2ennreal (max (f i) 0))) \<longlongrightarrow> enn2ereal (e2ennreal (max l 0))) F" | 
| 
ce3e87a51488
moved Lipschitz continuity from AFP/Ordinary_Differential_Equations and AFP/Gromov_Hyperbolicity; moved lemmas from AFP/Gromov_Hyperbolicity/Library_Complements
 immler parents: 
67719diff
changeset | 1558 | by (subst enn2ereal_e2ennreal, auto)+ | 
| 
ce3e87a51488
moved Lipschitz continuity from AFP/Ordinary_Differential_Equations and AFP/Gromov_Hyperbolicity; moved lemmas from AFP/Gromov_Hyperbolicity/Library_Complements
 immler parents: 
67719diff
changeset | 1559 | then have "((\<lambda>i. e2ennreal (max (f i) 0)) \<longlongrightarrow> e2ennreal (max l 0)) F" | 
| 
ce3e87a51488
moved Lipschitz continuity from AFP/Ordinary_Differential_Equations and AFP/Gromov_Hyperbolicity; moved lemmas from AFP/Gromov_Hyperbolicity/Library_Complements
 immler parents: 
67719diff
changeset | 1560 | using tendsto_enn2ereal_iff by auto | 
| 
ce3e87a51488
moved Lipschitz continuity from AFP/Ordinary_Differential_Equations and AFP/Gromov_Hyperbolicity; moved lemmas from AFP/Gromov_Hyperbolicity/Library_Complements
 immler parents: 
67719diff
changeset | 1561 | then show ?thesis | 
| 
ce3e87a51488
moved Lipschitz continuity from AFP/Ordinary_Differential_Equations and AFP/Gromov_Hyperbolicity; moved lemmas from AFP/Gromov_Hyperbolicity/Library_Complements
 immler parents: 
67719diff
changeset | 1562 | unfolding * by auto | 
| 
ce3e87a51488
moved Lipschitz continuity from AFP/Ordinary_Differential_Equations and AFP/Gromov_Hyperbolicity; moved lemmas from AFP/Gromov_Hyperbolicity/Library_Complements
 immler parents: 
67719diff
changeset | 1563 | qed | 
| 
ce3e87a51488
moved Lipschitz continuity from AFP/Ordinary_Differential_Equations and AFP/Gromov_Hyperbolicity; moved lemmas from AFP/Gromov_Hyperbolicity/Library_Complements
 immler parents: 
67719diff
changeset | 1564 | |
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1565 | lemma ennreal_suminf_minus: | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1566 | fixes f g :: "nat \<Rightarrow> ennreal" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1567 | shows "(\<And>i. g i \<le> f i) \<Longrightarrow> suminf f \<noteq> top \<Longrightarrow> suminf g \<noteq> top \<Longrightarrow> (\<Sum>i. f i - g i) = suminf f - suminf g" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1568 | by transfer | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1569 | (auto simp add: max.absorb2 ereal_diff_positive suminf_le_pos top_ereal_def intro!: suminf_ereal_minus) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1570 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1571 | lemma ennreal_Sup_countable_SUP: | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1572 |   "A \<noteq> {} \<Longrightarrow> \<exists>f::nat \<Rightarrow> ennreal. incseq f \<and> range f \<subseteq> A \<and> Sup A = (SUP i. f i)"
 | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1573 | unfolding incseq_def | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1574 | apply transfer | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1575 | subgoal for A | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1576 | using Sup_countable_SUP[of A] | 
| 72236 | 1577 | by (force simp add: incseq_def[symmetric] SUP_upper2 max.absorb2 image_subset_iff Sup_upper2 cong: conj_cong) | 
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1578 | done | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1579 | |
| 63940 
0d82c4c94014
prove HK-integrable implies Lebesgue measurable; prove HK-integral equals Lebesgue integral for nonneg functions
 hoelzl parents: 
63882diff
changeset | 1580 | lemma ennreal_Inf_countable_INF: | 
| 
0d82c4c94014
prove HK-integrable implies Lebesgue measurable; prove HK-integral equals Lebesgue integral for nonneg functions
 hoelzl parents: 
63882diff
changeset | 1581 |   "A \<noteq> {} \<Longrightarrow> \<exists>f::nat \<Rightarrow> ennreal. decseq f \<and> range f \<subseteq> A \<and> Inf A = (INF i. f i)"
 | 
| 
0d82c4c94014
prove HK-integrable implies Lebesgue measurable; prove HK-integral equals Lebesgue integral for nonneg functions
 hoelzl parents: 
63882diff
changeset | 1582 | unfolding decseq_def | 
| 
0d82c4c94014
prove HK-integrable implies Lebesgue measurable; prove HK-integral equals Lebesgue integral for nonneg functions
 hoelzl parents: 
63882diff
changeset | 1583 | apply transfer | 
| 
0d82c4c94014
prove HK-integrable implies Lebesgue measurable; prove HK-integral equals Lebesgue integral for nonneg functions
 hoelzl parents: 
63882diff
changeset | 1584 | subgoal for A | 
| 
0d82c4c94014
prove HK-integrable implies Lebesgue measurable; prove HK-integral equals Lebesgue integral for nonneg functions
 hoelzl parents: 
63882diff
changeset | 1585 | using Inf_countable_INF[of A] | 
| 68406 | 1586 | apply (clarsimp simp flip: decseq_def) | 
| 63940 
0d82c4c94014
prove HK-integrable implies Lebesgue measurable; prove HK-integral equals Lebesgue integral for nonneg functions
 hoelzl parents: 
63882diff
changeset | 1587 | subgoal for f | 
| 
0d82c4c94014
prove HK-integrable implies Lebesgue measurable; prove HK-integral equals Lebesgue integral for nonneg functions
 hoelzl parents: 
63882diff
changeset | 1588 | by (intro exI[of _ f]) auto | 
| 
0d82c4c94014
prove HK-integrable implies Lebesgue measurable; prove HK-integral equals Lebesgue integral for nonneg functions
 hoelzl parents: 
63882diff
changeset | 1589 | done | 
| 
0d82c4c94014
prove HK-integrable implies Lebesgue measurable; prove HK-integral equals Lebesgue integral for nonneg functions
 hoelzl parents: 
63882diff
changeset | 1590 | done | 
| 
0d82c4c94014
prove HK-integrable implies Lebesgue measurable; prove HK-integral equals Lebesgue integral for nonneg functions
 hoelzl parents: 
63882diff
changeset | 1591 | |
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1592 | lemma ennreal_SUP_countable_SUP: | 
| 69313 | 1593 |   "A \<noteq> {} \<Longrightarrow> \<exists>f::nat \<Rightarrow> ennreal. range f \<subseteq> g`A \<and> Sup (g ` A) = Sup (f ` UNIV)"
 | 
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1594 | using ennreal_Sup_countable_SUP [of "g`A"] by auto | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1595 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1596 | lemma of_nat_tendsto_top_ennreal: "(\<lambda>n::nat. of_nat n :: ennreal) \<longlonglongrightarrow> top" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1597 | using LIMSEQ_SUP[of "of_nat :: nat \<Rightarrow> ennreal"] | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1598 | by (simp add: ennreal_SUP_of_nat_eq_top incseq_def) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1599 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1600 | lemma SUP_sup_continuous_ennreal: | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1601 | fixes f :: "ennreal \<Rightarrow> 'a::complete_lattice" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1602 |   assumes f: "sup_continuous f" and "I \<noteq> {}"
 | 
| 69260 
0a9688695a1b
removed relics of ASCII syntax for indexed big operators
 haftmann parents: 
69064diff
changeset | 1603 | shows "(SUP i\<in>I. f (g i)) = f (SUP i\<in>I. g i)" | 
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1604 | proof (rule antisym) | 
| 69260 
0a9688695a1b
removed relics of ASCII syntax for indexed big operators
 haftmann parents: 
69064diff
changeset | 1605 | show "(SUP i\<in>I. f (g i)) \<le> f (SUP i\<in>I. g i)" | 
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1606 | by (rule mono_SUP[OF sup_continuous_mono[OF f]]) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1607 |   from ennreal_Sup_countable_SUP[of "g`I"] \<open>I \<noteq> {}\<close>
 | 
| 69260 
0a9688695a1b
removed relics of ASCII syntax for indexed big operators
 haftmann parents: 
69064diff
changeset | 1608 | obtain M :: "nat \<Rightarrow> ennreal" where "incseq M" and M: "range M \<subseteq> g ` I" and eq: "(SUP i \<in> I. g i) = (SUP i. M i)" | 
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1609 | by auto | 
| 69260 
0a9688695a1b
removed relics of ASCII syntax for indexed big operators
 haftmann parents: 
69064diff
changeset | 1610 | have "f (SUP i \<in> I. g i) = (SUP i \<in> range M. f i)" | 
| 69861 
62e47f06d22c
avoid context-sensitive simp rules whose context-free form (image_comp) is not simp by default
 haftmann parents: 
69661diff
changeset | 1611 | unfolding eq sup_continuousD[OF f \<open>mono M\<close>] by (simp add: image_comp) | 
| 69260 
0a9688695a1b
removed relics of ASCII syntax for indexed big operators
 haftmann parents: 
69064diff
changeset | 1612 | also have "\<dots> \<le> (SUP i \<in> I. f (g i))" | 
| 69861 
62e47f06d22c
avoid context-sensitive simp rules whose context-free form (image_comp) is not simp by default
 haftmann parents: 
69661diff
changeset | 1613 | by (insert M, drule SUP_subset_mono) (auto simp add: image_comp) | 
| 69260 
0a9688695a1b
removed relics of ASCII syntax for indexed big operators
 haftmann parents: 
69064diff
changeset | 1614 | finally show "f (SUP i \<in> I. g i) \<le> (SUP i \<in> I. f (g i))" . | 
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1615 | qed | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1616 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1617 | lemma ennreal_suminf_SUP_eq: | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1618 | fixes f :: "nat \<Rightarrow> nat \<Rightarrow> ennreal" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1619 | shows "(\<And>i. incseq (\<lambda>n. f n i)) \<Longrightarrow> (\<Sum>i. SUP n. f n i) = (SUP n. \<Sum>i. f n i)" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1620 | apply (rule ennreal_suminf_SUP_eq_directed) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1621 | subgoal for N n j | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1622 | by (auto simp: incseq_def intro!:exI[of _ "max n j"]) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1623 | done | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1624 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1625 | lemma ennreal_SUP_add_left: | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1626 | fixes c :: ennreal | 
| 69260 
0a9688695a1b
removed relics of ASCII syntax for indexed big operators
 haftmann parents: 
69064diff
changeset | 1627 |   shows "I \<noteq> {} \<Longrightarrow> (SUP i\<in>I. f i + c) = (SUP i\<in>I. f i) + c"
 | 
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1628 | apply transfer | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1629 | apply (simp add: SUP_ereal_add_left) | 
| 76137 | 1630 | by (metis SUP_upper all_not_in_conv ereal_le_add_mono1 max.absorb2 max.bounded_iff) | 
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1631 | |
| 72236 | 1632 | lemma ennreal_SUP_const_minus: | 
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1633 | fixes f :: "'a \<Rightarrow> ennreal" | 
| 69260 
0a9688695a1b
removed relics of ASCII syntax for indexed big operators
 haftmann parents: 
69064diff
changeset | 1634 |   shows "I \<noteq> {} \<Longrightarrow> c < top \<Longrightarrow> (INF x\<in>I. c - f x) = c - (SUP x\<in>I. f x)"
 | 
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1635 | apply (transfer fixing: I) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1636 | unfolding ex_in_conv[symmetric] | 
| 72236 | 1637 | apply (auto simp add: SUP_upper2 sup_absorb2 simp flip: sup_ereal_def) | 
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1638 | apply (subst INF_ereal_minus_right[symmetric]) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1639 | apply (auto simp del: sup_ereal_def simp add: sup_INF) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1640 | done | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1641 | |
| 74475 
409ca22dee4c
new notion of infinite sums in HOL-Analysis, ordering on complex numbers
 eberlm <eberlm@in.tum.de> parents: 
74325diff
changeset | 1642 | (* Contributed by Dominique Unruh *) | 
| 
409ca22dee4c
new notion of infinite sums in HOL-Analysis, ordering on complex numbers
 eberlm <eberlm@in.tum.de> parents: 
74325diff
changeset | 1643 | lemma isCont_ennreal[simp]: \<open>isCont ennreal x\<close> | 
| 
409ca22dee4c
new notion of infinite sums in HOL-Analysis, ordering on complex numbers
 eberlm <eberlm@in.tum.de> parents: 
74325diff
changeset | 1644 | apply (auto intro!: sequentially_imp_eventually_within simp: continuous_within tendsto_def) | 
| 
409ca22dee4c
new notion of infinite sums in HOL-Analysis, ordering on complex numbers
 eberlm <eberlm@in.tum.de> parents: 
74325diff
changeset | 1645 | by (metis tendsto_def tendsto_ennrealI) | 
| 
409ca22dee4c
new notion of infinite sums in HOL-Analysis, ordering on complex numbers
 eberlm <eberlm@in.tum.de> parents: 
74325diff
changeset | 1646 | |
| 
409ca22dee4c
new notion of infinite sums in HOL-Analysis, ordering on complex numbers
 eberlm <eberlm@in.tum.de> parents: 
74325diff
changeset | 1647 | (* Contributed by Dominique Unruh *) | 
| 
409ca22dee4c
new notion of infinite sums in HOL-Analysis, ordering on complex numbers
 eberlm <eberlm@in.tum.de> parents: 
74325diff
changeset | 1648 | lemma isCont_ennreal_of_enat[simp]: \<open>isCont ennreal_of_enat x\<close> | 
| 
409ca22dee4c
new notion of infinite sums in HOL-Analysis, ordering on complex numbers
 eberlm <eberlm@in.tum.de> parents: 
74325diff
changeset | 1649 | proof - | 
| 
409ca22dee4c
new notion of infinite sums in HOL-Analysis, ordering on complex numbers
 eberlm <eberlm@in.tum.de> parents: 
74325diff
changeset | 1650 | have continuous_at_open: | 
| 
409ca22dee4c
new notion of infinite sums in HOL-Analysis, ordering on complex numbers
 eberlm <eberlm@in.tum.de> parents: 
74325diff
changeset | 1651 | \<comment> \<open>Copied lemma from \<^session>\<open>HOL-Analysis\<close> to avoid dependency.\<close> | 
| 
409ca22dee4c
new notion of infinite sums in HOL-Analysis, ordering on complex numbers
 eberlm <eberlm@in.tum.de> parents: 
74325diff
changeset | 1652 | "continuous (at x) f \<longleftrightarrow> (\<forall>t. open t \<and> f x \<in> t --> (\<exists>s. open s \<and> x \<in> s \<and> (\<forall>x' \<in> s. (f x') \<in> t)))" for f :: \<open>enat \<Rightarrow> 'z::topological_space\<close> | 
| 
409ca22dee4c
new notion of infinite sums in HOL-Analysis, ordering on complex numbers
 eberlm <eberlm@in.tum.de> parents: 
74325diff
changeset | 1653 | unfolding continuous_within_topological [of x UNIV f] | 
| 
409ca22dee4c
new notion of infinite sums in HOL-Analysis, ordering on complex numbers
 eberlm <eberlm@in.tum.de> parents: 
74325diff
changeset | 1654 | unfolding imp_conjL | 
| 
409ca22dee4c
new notion of infinite sums in HOL-Analysis, ordering on complex numbers
 eberlm <eberlm@in.tum.de> parents: 
74325diff
changeset | 1655 | by (intro all_cong imp_cong ex_cong conj_cong refl) auto | 
| 
409ca22dee4c
new notion of infinite sums in HOL-Analysis, ordering on complex numbers
 eberlm <eberlm@in.tum.de> parents: 
74325diff
changeset | 1656 | show ?thesis | 
| 
409ca22dee4c
new notion of infinite sums in HOL-Analysis, ordering on complex numbers
 eberlm <eberlm@in.tum.de> parents: 
74325diff
changeset | 1657 | proof (subst continuous_at_open, intro allI impI, cases \<open>x = \<infinity>\<close>) | 
| 
409ca22dee4c
new notion of infinite sums in HOL-Analysis, ordering on complex numbers
 eberlm <eberlm@in.tum.de> parents: 
74325diff
changeset | 1658 | case True | 
| 
409ca22dee4c
new notion of infinite sums in HOL-Analysis, ordering on complex numbers
 eberlm <eberlm@in.tum.de> parents: 
74325diff
changeset | 1659 | |
| 
409ca22dee4c
new notion of infinite sums in HOL-Analysis, ordering on complex numbers
 eberlm <eberlm@in.tum.de> parents: 
74325diff
changeset | 1660 | fix t assume \<open>open t \<and> ennreal_of_enat x \<in> t\<close> | 
| 
409ca22dee4c
new notion of infinite sums in HOL-Analysis, ordering on complex numbers
 eberlm <eberlm@in.tum.de> parents: 
74325diff
changeset | 1661 |     then have \<open>\<exists>y<\<infinity>. {y <.. \<infinity>} \<subseteq> t\<close>
 | 
| 76137 | 1662 | by (rule_tac open_left[where y=0]) (auto simp: True) | 
| 74475 
409ca22dee4c
new notion of infinite sums in HOL-Analysis, ordering on complex numbers
 eberlm <eberlm@in.tum.de> parents: 
74325diff
changeset | 1663 |     then obtain y where \<open>{y<..} \<subseteq> t\<close> and \<open>y \<noteq> \<infinity>\<close>
 | 
| 76137 | 1664 | by fastforce | 
| 74475 
409ca22dee4c
new notion of infinite sums in HOL-Analysis, ordering on complex numbers
 eberlm <eberlm@in.tum.de> parents: 
74325diff
changeset | 1665 | from \<open>y \<noteq> \<infinity>\<close> | 
| 
409ca22dee4c
new notion of infinite sums in HOL-Analysis, ordering on complex numbers
 eberlm <eberlm@in.tum.de> parents: 
74325diff
changeset | 1666 | obtain x' where x'y: \<open>ennreal_of_enat x' > y\<close> and \<open>x' \<noteq> \<infinity>\<close> | 
| 
409ca22dee4c
new notion of infinite sums in HOL-Analysis, ordering on complex numbers
 eberlm <eberlm@in.tum.de> parents: 
74325diff
changeset | 1667 | by (metis enat.simps(3) ennreal_Ex_less_of_nat ennreal_of_enat_enat infinity_ennreal_def top.not_eq_extremum) | 
| 
409ca22dee4c
new notion of infinite sums in HOL-Analysis, ordering on complex numbers
 eberlm <eberlm@in.tum.de> parents: 
74325diff
changeset | 1668 |     define s where \<open>s = {x'<..}\<close>
 | 
| 
409ca22dee4c
new notion of infinite sums in HOL-Analysis, ordering on complex numbers
 eberlm <eberlm@in.tum.de> parents: 
74325diff
changeset | 1669 | have \<open>open s\<close> | 
| 
409ca22dee4c
new notion of infinite sums in HOL-Analysis, ordering on complex numbers
 eberlm <eberlm@in.tum.de> parents: 
74325diff
changeset | 1670 | by (simp add: s_def) | 
| 
409ca22dee4c
new notion of infinite sums in HOL-Analysis, ordering on complex numbers
 eberlm <eberlm@in.tum.de> parents: 
74325diff
changeset | 1671 | moreover have \<open>x \<in> s\<close> | 
| 
409ca22dee4c
new notion of infinite sums in HOL-Analysis, ordering on complex numbers
 eberlm <eberlm@in.tum.de> parents: 
74325diff
changeset | 1672 | by (simp add: \<open>x' \<noteq> \<infinity>\<close> s_def True) | 
| 
409ca22dee4c
new notion of infinite sums in HOL-Analysis, ordering on complex numbers
 eberlm <eberlm@in.tum.de> parents: 
74325diff
changeset | 1673 | moreover have \<open>ennreal_of_enat z \<in> t\<close> if \<open>z \<in> s\<close> for z | 
| 
409ca22dee4c
new notion of infinite sums in HOL-Analysis, ordering on complex numbers
 eberlm <eberlm@in.tum.de> parents: 
74325diff
changeset | 1674 |       by (metis x'y \<open>{y<..} \<subseteq> t\<close> ennreal_of_enat_le_iff greaterThan_iff le_less_trans less_imp_le not_less s_def subsetD that)
 | 
| 
409ca22dee4c
new notion of infinite sums in HOL-Analysis, ordering on complex numbers
 eberlm <eberlm@in.tum.de> parents: 
74325diff
changeset | 1675 | ultimately show \<open>\<exists>s. open s \<and> x \<in> s \<and> (\<forall>z\<in>s. ennreal_of_enat z \<in> t)\<close> | 
| 
409ca22dee4c
new notion of infinite sums in HOL-Analysis, ordering on complex numbers
 eberlm <eberlm@in.tum.de> parents: 
74325diff
changeset | 1676 | by auto | 
| 
409ca22dee4c
new notion of infinite sums in HOL-Analysis, ordering on complex numbers
 eberlm <eberlm@in.tum.de> parents: 
74325diff
changeset | 1677 | next | 
| 
409ca22dee4c
new notion of infinite sums in HOL-Analysis, ordering on complex numbers
 eberlm <eberlm@in.tum.de> parents: 
74325diff
changeset | 1678 | case False | 
| 
409ca22dee4c
new notion of infinite sums in HOL-Analysis, ordering on complex numbers
 eberlm <eberlm@in.tum.de> parents: 
74325diff
changeset | 1679 | fix t assume asm: \<open>open t \<and> ennreal_of_enat x \<in> t\<close> | 
| 
409ca22dee4c
new notion of infinite sums in HOL-Analysis, ordering on complex numbers
 eberlm <eberlm@in.tum.de> parents: 
74325diff
changeset | 1680 |     define s where \<open>s = {x}\<close>
 | 
| 
409ca22dee4c
new notion of infinite sums in HOL-Analysis, ordering on complex numbers
 eberlm <eberlm@in.tum.de> parents: 
74325diff
changeset | 1681 | have \<open>open s\<close> | 
| 
409ca22dee4c
new notion of infinite sums in HOL-Analysis, ordering on complex numbers
 eberlm <eberlm@in.tum.de> parents: 
74325diff
changeset | 1682 | using False open_enat_iff s_def by blast | 
| 
409ca22dee4c
new notion of infinite sums in HOL-Analysis, ordering on complex numbers
 eberlm <eberlm@in.tum.de> parents: 
74325diff
changeset | 1683 | moreover have \<open>x \<in> s\<close> | 
| 
409ca22dee4c
new notion of infinite sums in HOL-Analysis, ordering on complex numbers
 eberlm <eberlm@in.tum.de> parents: 
74325diff
changeset | 1684 | using s_def by auto | 
| 
409ca22dee4c
new notion of infinite sums in HOL-Analysis, ordering on complex numbers
 eberlm <eberlm@in.tum.de> parents: 
74325diff
changeset | 1685 | moreover have \<open>ennreal_of_enat z \<in> t\<close> if \<open>z \<in> s\<close> for z | 
| 
409ca22dee4c
new notion of infinite sums in HOL-Analysis, ordering on complex numbers
 eberlm <eberlm@in.tum.de> parents: 
74325diff
changeset | 1686 | using asm s_def that by blast | 
| 
409ca22dee4c
new notion of infinite sums in HOL-Analysis, ordering on complex numbers
 eberlm <eberlm@in.tum.de> parents: 
74325diff
changeset | 1687 | ultimately show \<open>\<exists>s. open s \<and> x \<in> s \<and> (\<forall>z\<in>s. ennreal_of_enat z \<in> t)\<close> | 
| 
409ca22dee4c
new notion of infinite sums in HOL-Analysis, ordering on complex numbers
 eberlm <eberlm@in.tum.de> parents: 
74325diff
changeset | 1688 | by auto | 
| 
409ca22dee4c
new notion of infinite sums in HOL-Analysis, ordering on complex numbers
 eberlm <eberlm@in.tum.de> parents: 
74325diff
changeset | 1689 | qed | 
| 
409ca22dee4c
new notion of infinite sums in HOL-Analysis, ordering on complex numbers
 eberlm <eberlm@in.tum.de> parents: 
74325diff
changeset | 1690 | qed | 
| 
409ca22dee4c
new notion of infinite sums in HOL-Analysis, ordering on complex numbers
 eberlm <eberlm@in.tum.de> parents: 
74325diff
changeset | 1691 | |
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1692 | subsection \<open>Approximation lemmas\<close> | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1693 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1694 | lemma INF_approx_ennreal: | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1695 | fixes x::ennreal and e::real | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1696 | assumes "e > 0" | 
| 69260 
0a9688695a1b
removed relics of ASCII syntax for indexed big operators
 haftmann parents: 
69064diff
changeset | 1697 | assumes INF: "x = (INF i \<in> A. f i)" | 
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1698 | assumes "x \<noteq> \<infinity>" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1699 | shows "\<exists>i \<in> A. f i < x + e" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1700 | proof - | 
| 69260 
0a9688695a1b
removed relics of ASCII syntax for indexed big operators
 haftmann parents: 
69064diff
changeset | 1701 | have "(INF i \<in> A. f i) < x + e" | 
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1702 | unfolding INF[symmetric] using \<open>0<e\<close> \<open>x \<noteq> \<infinity>\<close> by (cases x) auto | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1703 | then show ?thesis | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1704 | unfolding INF_less_iff . | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1705 | qed | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1706 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1707 | lemma SUP_approx_ennreal: | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1708 | fixes x::ennreal and e::real | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1709 |   assumes "e > 0" "A \<noteq> {}"
 | 
| 69260 
0a9688695a1b
removed relics of ASCII syntax for indexed big operators
 haftmann parents: 
69064diff
changeset | 1710 | assumes SUP: "x = (SUP i \<in> A. f i)" | 
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1711 | assumes "x \<noteq> \<infinity>" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1712 | shows "\<exists>i \<in> A. x < f i + e" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1713 | proof - | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1714 | have "x < x + e" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1715 | using \<open>0<e\<close> \<open>x \<noteq> \<infinity>\<close> by (cases x) auto | 
| 69260 
0a9688695a1b
removed relics of ASCII syntax for indexed big operators
 haftmann parents: 
69064diff
changeset | 1716 | also have "x + e = (SUP i \<in> A. f i + e)" | 
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1717 |     unfolding SUP ennreal_SUP_add_left[OF \<open>A \<noteq> {}\<close>] ..
 | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1718 | finally show ?thesis | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1719 | unfolding less_SUP_iff . | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1720 | qed | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1721 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1722 | lemma ennreal_approx_SUP: | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1723 | fixes x::ennreal | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1724 | assumes f_bound: "\<And>i. i \<in> A \<Longrightarrow> f i \<le> x" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1725 | assumes approx: "\<And>e. (e::real) > 0 \<Longrightarrow> \<exists>i \<in> A. x \<le> f i + e" | 
| 69260 
0a9688695a1b
removed relics of ASCII syntax for indexed big operators
 haftmann parents: 
69064diff
changeset | 1726 | shows "x = (SUP i \<in> A. f i)" | 
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1727 | proof (rule antisym) | 
| 69260 
0a9688695a1b
removed relics of ASCII syntax for indexed big operators
 haftmann parents: 
69064diff
changeset | 1728 | show "x \<le> (SUP i\<in>A. f i)" | 
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1729 | proof (rule ennreal_le_epsilon) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1730 | fix e :: real assume "0 < e" | 
| 74325 | 1731 | from approx[OF this] obtain i where "i \<in> A" and *: "x \<le> f i + ennreal e" | 
| 1732 | by blast | |
| 1733 | from * have "x \<le> f i + e" | |
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1734 | by simp | 
| 69260 
0a9688695a1b
removed relics of ASCII syntax for indexed big operators
 haftmann parents: 
69064diff
changeset | 1735 | also have "\<dots> \<le> (SUP i\<in>A. f i) + e" | 
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1736 | by (intro add_mono \<open>i \<in> A\<close> SUP_upper order_refl) | 
| 69260 
0a9688695a1b
removed relics of ASCII syntax for indexed big operators
 haftmann parents: 
69064diff
changeset | 1737 | finally show "x \<le> (SUP i\<in>A. f i) + e" . | 
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1738 | qed | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1739 | qed (intro SUP_least f_bound) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1740 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1741 | lemma ennreal_approx_INF: | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1742 | fixes x::ennreal | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1743 | assumes f_bound: "\<And>i. i \<in> A \<Longrightarrow> x \<le> f i" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1744 | assumes approx: "\<And>e. (e::real) > 0 \<Longrightarrow> \<exists>i \<in> A. f i \<le> x + e" | 
| 69260 
0a9688695a1b
removed relics of ASCII syntax for indexed big operators
 haftmann parents: 
69064diff
changeset | 1745 | shows "x = (INF i \<in> A. f i)" | 
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1746 | proof (rule antisym) | 
| 69260 
0a9688695a1b
removed relics of ASCII syntax for indexed big operators
 haftmann parents: 
69064diff
changeset | 1747 | show "(INF i\<in>A. f i) \<le> x" | 
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1748 | proof (rule ennreal_le_epsilon) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1749 | fix e :: real assume "0 < e" | 
| 74325 | 1750 | from approx[OF this] obtain i where "i\<in>A" "f i \<le> x + ennreal e" | 
| 1751 | by blast | |
| 69260 
0a9688695a1b
removed relics of ASCII syntax for indexed big operators
 haftmann parents: 
69064diff
changeset | 1752 | then have "(INF i\<in>A. f i) \<le> f i" | 
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1753 | by (intro INF_lower) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1754 | also have "\<dots> \<le> x + e" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1755 | by fact | 
| 69260 
0a9688695a1b
removed relics of ASCII syntax for indexed big operators
 haftmann parents: 
69064diff
changeset | 1756 | finally show "(INF i\<in>A. f i) \<le> x + e" . | 
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1757 | qed | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1758 | qed (intro INF_greatest f_bound) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1759 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1760 | lemma ennreal_approx_unit: | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1761 | "(\<And>a::ennreal. 0 < a \<Longrightarrow> a < 1 \<Longrightarrow> a * z \<le> y) \<Longrightarrow> z \<le> y" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1762 |   apply (subst SUP_mult_right_ennreal[of "\<lambda>x. x" "{0 <..< 1}" z, simplified])
 | 
| 72236 | 1763 | apply (auto intro: SUP_least) | 
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1764 | done | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1765 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1766 | lemma suminf_ennreal2: | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1767 | "(\<And>i. 0 \<le> f i) \<Longrightarrow> summable f \<Longrightarrow> (\<Sum>i. ennreal (f i)) = ennreal (\<Sum>i. f i)" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1768 | using suminf_ennreal_eq by blast | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1769 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1770 | lemma less_top_ennreal: "x < top \<longleftrightarrow> (\<exists>r\<ge>0. x = ennreal r)" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1771 | by (cases x) auto | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1772 | |
| 70381 
b151d1f00204
More results about measure and integration theory
 paulson <lp15@cam.ac.uk> parents: 
70380diff
changeset | 1773 | lemma enn2real_less_iff[simp]: "x < top \<Longrightarrow> enn2real x < c \<longleftrightarrow> x < c" | 
| 
b151d1f00204
More results about measure and integration theory
 paulson <lp15@cam.ac.uk> parents: 
70380diff
changeset | 1774 | using ennreal_less_iff less_top_ennreal by auto | 
| 
b151d1f00204
More results about measure and integration theory
 paulson <lp15@cam.ac.uk> parents: 
70380diff
changeset | 1775 | |
| 
b151d1f00204
More results about measure and integration theory
 paulson <lp15@cam.ac.uk> parents: 
70380diff
changeset | 1776 | lemma enn2real_le_iff[simp]: "\<lbrakk>x < top; c > 0\<rbrakk> \<Longrightarrow> enn2real x \<le> c \<longleftrightarrow> x \<le> c" | 
| 
b151d1f00204
More results about measure and integration theory
 paulson <lp15@cam.ac.uk> parents: 
70380diff
changeset | 1777 | by (cases x) auto | 
| 
b151d1f00204
More results about measure and integration theory
 paulson <lp15@cam.ac.uk> parents: 
70380diff
changeset | 1778 | |
| 
b151d1f00204
More results about measure and integration theory
 paulson <lp15@cam.ac.uk> parents: 
70380diff
changeset | 1779 | lemma enn2real_less: | 
| 
b151d1f00204
More results about measure and integration theory
 paulson <lp15@cam.ac.uk> parents: 
70380diff
changeset | 1780 | assumes "enn2real e < r" "e \<noteq> top" shows "e < ennreal r" | 
| 
b151d1f00204
More results about measure and integration theory
 paulson <lp15@cam.ac.uk> parents: 
70380diff
changeset | 1781 | using enn2real_less_iff assms top.not_eq_extremum by blast | 
| 
b151d1f00204
More results about measure and integration theory
 paulson <lp15@cam.ac.uk> parents: 
70380diff
changeset | 1782 | |
| 
b151d1f00204
More results about measure and integration theory
 paulson <lp15@cam.ac.uk> parents: 
70380diff
changeset | 1783 | lemma enn2real_le: | 
| 
b151d1f00204
More results about measure and integration theory
 paulson <lp15@cam.ac.uk> parents: 
70380diff
changeset | 1784 | assumes "enn2real e \<le> r" "e \<noteq> top" shows "e \<le> ennreal r" | 
| 
b151d1f00204
More results about measure and integration theory
 paulson <lp15@cam.ac.uk> parents: 
70380diff
changeset | 1785 | by (metis assms enn2real_less ennreal_enn2real_if eq_iff less_le) | 
| 
b151d1f00204
More results about measure and integration theory
 paulson <lp15@cam.ac.uk> parents: 
70380diff
changeset | 1786 | |
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1787 | lemma tendsto_top_iff_ennreal: | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1788 | fixes f :: "'a \<Rightarrow> ennreal" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1789 | shows "(f \<longlongrightarrow> top) F \<longleftrightarrow> (\<forall>l\<ge>0. eventually (\<lambda>x. ennreal l < f x) F)" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1790 | by (auto simp: less_top_ennreal order_tendsto_iff ) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1791 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1792 | lemma ennreal_tendsto_top_eq_at_top: | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1793 | "((\<lambda>z. ennreal (f z)) \<longlongrightarrow> top) F \<longleftrightarrow> (LIM z F. f z :> at_top)" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1794 | unfolding filterlim_at_top_dense tendsto_top_iff_ennreal | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1795 | apply (auto simp: ennreal_less_iff) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1796 | subgoal for y | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1797 | by (auto elim!: eventually_mono allE[of _ "max 0 y"]) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1798 | done | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1799 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1800 | lemma tendsto_0_if_Limsup_eq_0_ennreal: | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1801 | fixes f :: "_ \<Rightarrow> ennreal" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1802 | shows "Limsup F f = 0 \<Longrightarrow> (f \<longlongrightarrow> 0) F" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1803 | using Liminf_le_Limsup[of F f] tendsto_iff_Liminf_eq_Limsup[of F f 0] | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1804 | by (cases "F = bot") auto | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1805 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1806 | lemma diff_le_self_ennreal[simp]: "a - b \<le> (a::ennreal)" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1807 | by (cases a b rule: ennreal2_cases) (auto simp: ennreal_minus) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1808 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1809 | lemma ennreal_ineq_diff_add: "b \<le> a \<Longrightarrow> a = b + (a - b::ennreal)" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1810 | by transfer (auto simp: ereal_diff_positive max.absorb2 ereal_ineq_diff_add) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1811 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1812 | lemma ennreal_mult_strict_left_mono: "(a::ennreal) < c \<Longrightarrow> 0 < b \<Longrightarrow> b < top \<Longrightarrow> b * a < b * c" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1813 | by transfer (auto intro!: ereal_mult_strict_left_mono) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1814 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1815 | lemma ennreal_between: "0 < e \<Longrightarrow> 0 < x \<Longrightarrow> x < top \<Longrightarrow> x - e < (x::ennreal)" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1816 | by transfer (auto intro!: ereal_between) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1817 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1818 | lemma minus_less_iff_ennreal: "b < top \<Longrightarrow> b \<le> a \<Longrightarrow> a - b < c \<longleftrightarrow> a < c + (b::ennreal)" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1819 | by transfer | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1820 | (auto simp: top_ereal_def ereal_minus_less le_less) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1821 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1822 | lemma tendsto_zero_ennreal: | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1823 | assumes ev: "\<And>r. 0 < r \<Longrightarrow> \<forall>\<^sub>F x in F. f x < ennreal r" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1824 | shows "(f \<longlongrightarrow> 0) F" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1825 | proof (rule order_tendstoI) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1826 | fix e::ennreal assume "e > 0" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1827 | obtain e'::real where "e' > 0" "ennreal e' < e" | 
| 63145 | 1828 | using \<open>0 < e\<close> dense[of 0 "if e = top then 1 else (enn2real e)"] | 
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1829 | by (cases e) (auto simp: ennreal_less_iff) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1830 | from ev[OF \<open>e' > 0\<close>] show "\<forall>\<^sub>F x in F. f x < e" | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1831 | by eventually_elim (insert \<open>ennreal e' < e\<close>, auto) | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1832 | qed simp | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1833 | |
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1834 | lifting_update ennreal.lifting | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1835 | lifting_forget ennreal.lifting | 
| 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 1836 | |
| 63225 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1837 | |
| 69593 | 1838 | subsection \<open>\<^typ>\<open>ennreal\<close> theorems\<close> | 
| 63225 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1839 | |
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1840 | lemma neq_top_trans: fixes x y :: ennreal shows "\<lbrakk> y \<noteq> top; x \<le> y \<rbrakk> \<Longrightarrow> x \<noteq> top" | 
| 72236 | 1841 | by (auto simp: top_unique) | 
| 63225 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1842 | |
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1843 | lemma diff_diff_ennreal: fixes a b :: ennreal shows "a \<le> b \<Longrightarrow> b \<noteq> \<infinity> \<Longrightarrow> b - (b - a) = a" | 
| 68406 | 1844 | by (cases a b rule: ennreal2_cases) (auto simp: ennreal_minus top_unique) | 
| 63225 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1845 | |
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1846 | lemma ennreal_less_one_iff[simp]: "ennreal x < 1 \<longleftrightarrow> x < 1" | 
| 68406 | 1847 | by (cases "0 \<le> x") (auto simp: ennreal_neg ennreal_less_iff simp flip: ennreal_1) | 
| 63225 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1848 | |
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1849 | lemma SUP_const_minus_ennreal: | 
| 69260 
0a9688695a1b
removed relics of ASCII syntax for indexed big operators
 haftmann parents: 
69064diff
changeset | 1850 |   fixes f :: "'a \<Rightarrow> ennreal" shows "I \<noteq> {} \<Longrightarrow> (SUP x\<in>I. c - f x) = c - (INF x\<in>I. f x)"
 | 
| 63225 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1851 | including ennreal.lifting | 
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1852 | by (transfer fixing: I) | 
| 68406 | 1853 | (simp add: SUP_sup_distrib[symmetric] SUP_ereal_minus_right | 
| 1854 | flip: sup_ereal_def) | |
| 63225 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1855 | |
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1856 | lemma zero_minus_ennreal[simp]: "0 - (a::ennreal) = 0" | 
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1857 | including ennreal.lifting | 
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1858 | by transfer (simp split: split_max) | 
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1859 | |
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1860 | lemma diff_diff_commute_ennreal: | 
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1861 | fixes a b c :: ennreal shows "a - b - c = a - c - b" | 
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1862 | by (cases a b c rule: ennreal3_cases) (simp_all add: ennreal_minus field_simps) | 
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1863 | |
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1864 | lemma diff_gr0_ennreal: "b < (a::ennreal) \<Longrightarrow> 0 < a - b" | 
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1865 | including ennreal.lifting by transfer (auto simp: ereal_diff_gr0 ereal_diff_positive split: split_max) | 
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1866 | |
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1867 | lemma divide_le_posI_ennreal: | 
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1868 | fixes x y z :: ennreal | 
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1869 | shows "x > 0 \<Longrightarrow> z \<le> x * y \<Longrightarrow> z / x \<le> y" | 
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1870 | by (cases x y z rule: ennreal3_cases) | 
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1871 | (auto simp: divide_ennreal ennreal_mult[symmetric] field_simps top_unique) | 
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1872 | |
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1873 | lemma add_diff_eq_ennreal: | 
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1874 | fixes x y z :: ennreal | 
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1875 | shows "z \<le> y \<Longrightarrow> x + (y - z) = x + y - z" | 
| 76137 | 1876 | using ennreal_diff_add_assoc by auto | 
| 63225 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1877 | |
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1878 | lemma add_diff_inverse_ennreal: | 
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1879 | fixes x y :: ennreal shows "x \<le> y \<Longrightarrow> x + (y - x) = y" | 
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1880 | by (cases x) (simp_all add: top_unique add_diff_eq_ennreal) | 
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1881 | |
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1882 | lemma add_diff_eq_iff_ennreal[simp]: | 
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1883 | fixes x y :: ennreal shows "x + (y - x) = y \<longleftrightarrow> x \<le> y" | 
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1884 | proof | 
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1885 | assume *: "x + (y - x) = y" show "x \<le> y" | 
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1886 | by (subst *[symmetric]) simp | 
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1887 | qed (simp add: add_diff_inverse_ennreal) | 
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1888 | |
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1889 | lemma add_diff_le_ennreal: "a + b - c \<le> a + (b - c::ennreal)" | 
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1890 | apply (cases a b c rule: ennreal3_cases) | 
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1891 | subgoal for a' b' c' | 
| 68406 | 1892 | by (cases "0 \<le> b' - c'") (simp_all add: ennreal_minus top_add ennreal_neg flip: ennreal_plus) | 
| 1893 | apply (simp_all add: top_add flip: ennreal_plus) | |
| 63225 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1894 | done | 
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1895 | |
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1896 | lemma diff_eq_0_ennreal: "a < top \<Longrightarrow> a \<le> b \<Longrightarrow> a - b = (0::ennreal)" | 
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1897 | using ennreal_minus_pos_iff gr_zeroI not_less by blast | 
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1898 | |
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1899 | lemma diff_diff_ennreal': fixes x y z :: ennreal shows "z \<le> y \<Longrightarrow> y - z \<le> x \<Longrightarrow> x - (y - z) = x + z - y" | 
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1900 | by (cases x; cases y; cases z) | 
| 68406 | 1901 | (auto simp add: top_add add_top minus_top_ennreal ennreal_minus top_unique | 
| 1902 | simp flip: ennreal_plus) | |
| 63225 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1903 | |
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1904 | lemma diff_diff_ennreal'': fixes x y z :: ennreal | 
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1905 | shows "z \<le> y \<Longrightarrow> x - (y - z) = (if y - z \<le> x then x + z - y else 0)" | 
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1906 | by (cases x; cases y; cases z) | 
| 68406 | 1907 | (auto simp add: top_add add_top minus_top_ennreal ennreal_minus top_unique ennreal_neg | 
| 1908 | simp flip: ennreal_plus) | |
| 63225 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1909 | |
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1910 | lemma power_less_top_ennreal: fixes x :: ennreal shows "x ^ n < top \<longleftrightarrow> x < top \<or> n = 0" | 
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1911 | using power_eq_top_ennreal[of x n] by (auto simp: less_top) | 
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1912 | |
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1913 | lemma ennreal_divide_times: "(a / b) * c = a * (c / b :: ennreal)" | 
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1914 | by (simp add: mult.commute ennreal_times_divide) | 
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1915 | |
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1916 | lemma diff_less_top_ennreal: "a - b < top \<longleftrightarrow> a < (top :: ennreal)" | 
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1917 | by (cases a; cases b) (auto simp: ennreal_minus) | 
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1918 | |
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1919 | lemma divide_less_ennreal: "b \<noteq> 0 \<Longrightarrow> b < top \<Longrightarrow> a / b < c \<longleftrightarrow> a < (c * b :: ennreal)" | 
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1920 | by (cases a; cases b; cases c) | 
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1921 | (auto simp: divide_ennreal ennreal_mult[symmetric] ennreal_less_iff field_simps ennreal_top_mult ennreal_top_divide) | 
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1922 | |
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1923 | lemma one_less_numeral[simp]: "1 < (numeral n::ennreal) \<longleftrightarrow> (num.One < n)" | 
| 68406 | 1924 | by (simp flip: ennreal_1 ennreal_numeral add: ennreal_less_iff) | 
| 63225 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1925 | |
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1926 | lemma divide_eq_1_ennreal: "a / b = (1::ennreal) \<longleftrightarrow> (b \<noteq> top \<and> b \<noteq> 0 \<and> b = a)" | 
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1927 | by (cases a ; cases b; cases "b = 0") (auto simp: ennreal_top_divide divide_ennreal split: if_split_asm) | 
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1928 | |
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1929 | lemma ennreal_mult_cancel_left: "(a * b = a * c) = (a = top \<and> b \<noteq> 0 \<and> c \<noteq> 0 \<or> a = 0 \<or> b = (c::ennreal))" | 
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1930 | by (cases a; cases b; cases c) (auto simp: ennreal_mult[symmetric] ennreal_mult_top ennreal_top_mult) | 
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1931 | |
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1932 | lemma ennreal_minus_if: "ennreal a - ennreal b = ennreal (if 0 \<le> b then (if b \<le> a then a - b else 0) else a)" | 
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1933 | by (auto simp: ennreal_minus ennreal_neg) | 
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1934 | |
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1935 | lemma ennreal_plus_if: "ennreal a + ennreal b = ennreal (if 0 \<le> a then (if 0 \<le> b then a + b else a) else b)" | 
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1936 | by (auto simp: ennreal_neg) | 
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1937 | |
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1938 | lemma power_le_one_iff: "0 \<le> (a::real) \<Longrightarrow> a ^ n \<le> 1 \<longleftrightarrow> (n = 0 \<or> a \<le> 1)" | 
| 73932 
fd21b4a93043
added opaque_combs and renamed hide_lams to opaque_lifting
 desharna parents: 
73253diff
changeset | 1939 | by (metis (mono_tags, opaque_lifting) le_less neq0_conv not_le one_le_power power_0 power_eq_imp_eq_base power_le_one zero_le_one) | 
| 63225 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1940 | |
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1941 | lemma ennreal_diff_le_mono_left: "a \<le> b \<Longrightarrow> a - c \<le> (b::ennreal)" | 
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1942 | using ennreal_mono_minus[of 0 c a, THEN order_trans, of b] by simp | 
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1943 | |
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1944 | lemma ennreal_minus_le_iff: "a - b \<le> c \<longleftrightarrow> (a \<le> b + (c::ennreal) \<and> (a = top \<and> b = top \<longrightarrow> c = top))" | 
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1945 | by (cases a; cases b; cases c) | 
| 68406 | 1946 | (auto simp: top_unique top_add add_top ennreal_minus simp flip: ennreal_plus) | 
| 63225 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1947 | |
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1948 | lemma ennreal_le_minus_iff: "a \<le> b - c \<longleftrightarrow> (a + c \<le> (b::ennreal) \<or> (a = 0 \<and> b \<le> c))" | 
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1949 | by (cases a; cases b; cases c) | 
| 68406 | 1950 | (auto simp: top_unique top_add add_top ennreal_minus ennreal_le_iff2 | 
| 1951 | simp flip: ennreal_plus) | |
| 63225 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1952 | |
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1953 | lemma diff_add_eq_diff_diff_swap_ennreal: "x - (y + z :: ennreal) = x - y - z" | 
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1954 | by (cases x; cases y; cases z) | 
| 68406 | 1955 | (auto simp: ennreal_minus_if add_top top_add simp flip: ennreal_plus) | 
| 63225 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1956 | |
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1957 | lemma diff_add_assoc2_ennreal: "b \<le> a \<Longrightarrow> (a - b + c::ennreal) = a + c - b" | 
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1958 | by (cases a; cases b; cases c) | 
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1959 | (auto simp add: ennreal_minus_if ennreal_plus_if add_top top_add top_unique simp del: ennreal_plus) | 
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1960 | |
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1961 | lemma diff_gt_0_iff_gt_ennreal: "0 < a - b \<longleftrightarrow> (a = top \<and> b = top \<or> b < (a::ennreal))" | 
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1962 | by (cases a; cases b) (auto simp: ennreal_minus_if ennreal_less_iff) | 
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1963 | |
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1964 | lemma diff_eq_0_iff_ennreal: "(a - b::ennreal) = 0 \<longleftrightarrow> (a < top \<and> a \<le> b)" | 
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1965 | by (cases a) (auto simp: ennreal_minus_eq_0 diff_eq_0_ennreal) | 
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1966 | |
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1967 | lemma add_diff_self_ennreal: "a + (b - a::ennreal) = (if a \<le> b then b else a)" | 
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1968 | by (auto simp: diff_eq_0_iff_ennreal less_top) | 
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1969 | |
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1970 | lemma diff_add_self_ennreal: "(b - a + a::ennreal) = (if a \<le> b then b else a)" | 
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1971 | by (auto simp: diff_add_cancel_ennreal diff_eq_0_iff_ennreal less_top) | 
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1972 | |
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1973 | lemma ennreal_minus_cancel_iff: | 
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1974 | fixes a b c :: ennreal | 
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1975 | shows "a - b = a - c \<longleftrightarrow> (b = c \<or> (a \<le> b \<and> a \<le> c) \<or> a = top)" | 
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1976 | by (cases a; cases b; cases c) (auto simp: ennreal_minus_if) | 
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1977 | |
| 67727 
ce3e87a51488
moved Lipschitz continuity from AFP/Ordinary_Differential_Equations and AFP/Gromov_Hyperbolicity; moved lemmas from AFP/Gromov_Hyperbolicity/Library_Complements
 immler parents: 
67719diff
changeset | 1978 | text \<open>The next lemma is wrong for $a = top$, for $b = c = 1$ for instance.\<close> | 
| 
ce3e87a51488
moved Lipschitz continuity from AFP/Ordinary_Differential_Equations and AFP/Gromov_Hyperbolicity; moved lemmas from AFP/Gromov_Hyperbolicity/Library_Complements
 immler parents: 
67719diff
changeset | 1979 | |
| 
ce3e87a51488
moved Lipschitz continuity from AFP/Ordinary_Differential_Equations and AFP/Gromov_Hyperbolicity; moved lemmas from AFP/Gromov_Hyperbolicity/Library_Complements
 immler parents: 
67719diff
changeset | 1980 | lemma ennreal_right_diff_distrib: | 
| 70346 | 1981 | fixes a b c :: ennreal | 
| 67727 
ce3e87a51488
moved Lipschitz continuity from AFP/Ordinary_Differential_Equations and AFP/Gromov_Hyperbolicity; moved lemmas from AFP/Gromov_Hyperbolicity/Library_Complements
 immler parents: 
67719diff
changeset | 1982 | assumes "a \<noteq> top" | 
| 
ce3e87a51488
moved Lipschitz continuity from AFP/Ordinary_Differential_Equations and AFP/Gromov_Hyperbolicity; moved lemmas from AFP/Gromov_Hyperbolicity/Library_Complements
 immler parents: 
67719diff
changeset | 1983 | shows "a * (b - c) = a * b - a * c" | 
| 70346 | 1984 | apply (cases a; cases b; cases c) | 
| 1985 | apply (use assms in \<open>auto simp add: ennreal_mult_top ennreal_minus ennreal_mult' [symmetric]\<close>) | |
| 1986 | apply (simp add: algebra_simps) | |
| 67727 
ce3e87a51488
moved Lipschitz continuity from AFP/Ordinary_Differential_Equations and AFP/Gromov_Hyperbolicity; moved lemmas from AFP/Gromov_Hyperbolicity/Library_Complements
 immler parents: 
67719diff
changeset | 1987 | done | 
| 
ce3e87a51488
moved Lipschitz continuity from AFP/Ordinary_Differential_Equations and AFP/Gromov_Hyperbolicity; moved lemmas from AFP/Gromov_Hyperbolicity/Library_Complements
 immler parents: 
67719diff
changeset | 1988 | |
| 63225 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1989 | lemma SUP_diff_ennreal: | 
| 69260 
0a9688695a1b
removed relics of ASCII syntax for indexed big operators
 haftmann parents: 
69064diff
changeset | 1990 | "c < top \<Longrightarrow> (SUP i\<in>I. f i - c :: ennreal) = (SUP i\<in>I. f i) - c" | 
| 63225 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1991 | by (auto intro!: SUP_eqI ennreal_minus_mono SUP_least intro: SUP_upper | 
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1992 | simp: ennreal_minus_cancel_iff ennreal_minus_le_iff less_top[symmetric]) | 
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1993 | |
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1994 | lemma ennreal_SUP_add_right: | 
| 69260 
0a9688695a1b
removed relics of ASCII syntax for indexed big operators
 haftmann parents: 
69064diff
changeset | 1995 |   fixes c :: ennreal shows "I \<noteq> {} \<Longrightarrow> c + (SUP i\<in>I. f i) = (SUP i\<in>I. c + f i)"
 | 
| 63225 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1996 | using ennreal_SUP_add_left[of I f c] by (simp add: add.commute) | 
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1997 | |
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1998 | lemma SUP_add_directed_ennreal: | 
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 1999 | fixes f g :: "_ \<Rightarrow> ennreal" | 
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 2000 | assumes directed: "\<And>i j. i \<in> I \<Longrightarrow> j \<in> I \<Longrightarrow> \<exists>k\<in>I. f i + g j \<le> f k + g k" | 
| 69260 
0a9688695a1b
removed relics of ASCII syntax for indexed big operators
 haftmann parents: 
69064diff
changeset | 2001 | shows "(SUP i\<in>I. f i + g i) = (SUP i\<in>I. f i) + (SUP i\<in>I. g i)" | 
| 76137 | 2002 | proof (cases "I = {}")
 | 
| 2003 | case False | |
| 63225 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 2004 | show ?thesis | 
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 2005 | proof (rule antisym) | 
| 69260 
0a9688695a1b
removed relics of ASCII syntax for indexed big operators
 haftmann parents: 
69064diff
changeset | 2006 | show "(SUP i\<in>I. f i + g i) \<le> (SUP i\<in>I. f i) + (SUP i\<in>I. g i)" | 
| 63225 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 2007 | by (rule SUP_least; intro add_mono SUP_upper) | 
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 2008 | next | 
| 69260 
0a9688695a1b
removed relics of ASCII syntax for indexed big operators
 haftmann parents: 
69064diff
changeset | 2009 | have "(SUP i\<in>I. f i) + (SUP i\<in>I. g i) = (SUP i\<in>I. f i + (SUP i\<in>I. g i))" | 
| 63225 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 2010 |       by (intro ennreal_SUP_add_left[symmetric] \<open>I \<noteq> {}\<close>)
 | 
| 69260 
0a9688695a1b
removed relics of ASCII syntax for indexed big operators
 haftmann parents: 
69064diff
changeset | 2011 | also have "\<dots> = (SUP i\<in>I. (SUP j\<in>I. f i + g j))" | 
| 69661 | 2012 |       using \<open>I \<noteq> {}\<close> by (simp add: ennreal_SUP_add_right)
 | 
| 69260 
0a9688695a1b
removed relics of ASCII syntax for indexed big operators
 haftmann parents: 
69064diff
changeset | 2013 | also have "\<dots> \<le> (SUP i\<in>I. f i + g i)" | 
| 63225 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 2014 | using directed by (intro SUP_least) (blast intro: SUP_upper2) | 
| 69260 
0a9688695a1b
removed relics of ASCII syntax for indexed big operators
 haftmann parents: 
69064diff
changeset | 2015 | finally show "(SUP i\<in>I. f i) + (SUP i\<in>I. g i) \<le> (SUP i\<in>I. f i + g i)" . | 
| 63225 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 2016 | qed | 
| 76137 | 2017 | qed (simp add: bot_ereal_def) | 
| 2018 | ||
| 63225 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 2019 | |
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 2020 | lemma enn2real_eq_0_iff: "enn2real x = 0 \<longleftrightarrow> x = 0 \<or> x = top" | 
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 2021 | by (cases x) auto | 
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 2022 | |
| 67727 
ce3e87a51488
moved Lipschitz continuity from AFP/Ordinary_Differential_Equations and AFP/Gromov_Hyperbolicity; moved lemmas from AFP/Gromov_Hyperbolicity/Library_Complements
 immler parents: 
67719diff
changeset | 2023 | lemma continuous_on_diff_ennreal: | 
| 63225 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 2024 | "continuous_on A f \<Longrightarrow> continuous_on A g \<Longrightarrow> (\<And>x. x \<in> A \<Longrightarrow> f x \<noteq> top) \<Longrightarrow> (\<And>x. x \<in> A \<Longrightarrow> g x \<noteq> top) \<Longrightarrow> continuous_on A (\<lambda>z. f z - g z::ennreal)" | 
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 2025 | including ennreal.lifting | 
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 2026 | proof (transfer fixing: A, simp add: top_ereal_def) | 
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 2027 | fix f g :: "'a \<Rightarrow> ereal" assume "\<forall>x. 0 \<le> f x" "\<forall>x. 0 \<le> g x" "continuous_on A f" "continuous_on A g" | 
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 2028 | moreover assume "f x \<noteq> \<infinity>" "g x \<noteq> \<infinity>" if "x \<in> A" for x | 
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 2029 | ultimately show "continuous_on A (\<lambda>z. max 0 (f z - g z))" | 
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 2030 | by (intro continuous_on_max continuous_on_const continuous_on_diff_ereal) auto | 
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 2031 | qed | 
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 2032 | |
| 67727 
ce3e87a51488
moved Lipschitz continuity from AFP/Ordinary_Differential_Equations and AFP/Gromov_Hyperbolicity; moved lemmas from AFP/Gromov_Hyperbolicity/Library_Complements
 immler parents: 
67719diff
changeset | 2033 | lemma tendsto_diff_ennreal: | 
| 63225 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 2034 | "(f \<longlongrightarrow> x) F \<Longrightarrow> (g \<longlongrightarrow> y) F \<Longrightarrow> x \<noteq> top \<Longrightarrow> y \<noteq> top \<Longrightarrow> ((\<lambda>z. f z - g z::ennreal) \<longlongrightarrow> x - y) F" | 
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 2035 |   using continuous_on_tendsto_compose[where f="\<lambda>x. fst x - snd x::ennreal" and s="{(x, y). x \<noteq> top \<and> y \<noteq> top}" and g="\<lambda>x. (f x, g x)" and l="(x, y)" and F="F",
 | 
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 2036 | OF continuous_on_diff_ennreal] | 
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 2037 | by (auto simp: tendsto_Pair eventually_conj_iff less_top order_tendstoD continuous_on_fst continuous_on_snd continuous_on_id) | 
| 
19d2be0e5e9f
move ennreal and ereal theorems from MFMC_Countable
 hoelzl parents: 
63145diff
changeset | 2038 | |
| 67727 
ce3e87a51488
moved Lipschitz continuity from AFP/Ordinary_Differential_Equations and AFP/Gromov_Hyperbolicity; moved lemmas from AFP/Gromov_Hyperbolicity/Library_Complements
 immler parents: 
67719diff
changeset | 2039 | declare lim_real_of_ereal [tendsto_intros] | 
| 
ce3e87a51488
moved Lipschitz continuity from AFP/Ordinary_Differential_Equations and AFP/Gromov_Hyperbolicity; moved lemmas from AFP/Gromov_Hyperbolicity/Library_Complements
 immler parents: 
67719diff
changeset | 2040 | |
| 
ce3e87a51488
moved Lipschitz continuity from AFP/Ordinary_Differential_Equations and AFP/Gromov_Hyperbolicity; moved lemmas from AFP/Gromov_Hyperbolicity/Library_Complements
 immler parents: 
67719diff
changeset | 2041 | lemma tendsto_enn2real [tendsto_intros]: | 
| 
ce3e87a51488
moved Lipschitz continuity from AFP/Ordinary_Differential_Equations and AFP/Gromov_Hyperbolicity; moved lemmas from AFP/Gromov_Hyperbolicity/Library_Complements
 immler parents: 
67719diff
changeset | 2042 | assumes "(u \<longlongrightarrow> ennreal l) F" "l \<ge> 0" | 
| 
ce3e87a51488
moved Lipschitz continuity from AFP/Ordinary_Differential_Equations and AFP/Gromov_Hyperbolicity; moved lemmas from AFP/Gromov_Hyperbolicity/Library_Complements
 immler parents: 
67719diff
changeset | 2043 | shows "((\<lambda>n. enn2real (u n)) \<longlongrightarrow> l) F" | 
| 
ce3e87a51488
moved Lipschitz continuity from AFP/Ordinary_Differential_Equations and AFP/Gromov_Hyperbolicity; moved lemmas from AFP/Gromov_Hyperbolicity/Library_Complements
 immler parents: 
67719diff
changeset | 2044 | unfolding enn2real_def | 
| 72236 | 2045 | by (metis assms enn2ereal_ennreal lim_real_of_ereal tendsto_enn2erealI) | 
| 67727 
ce3e87a51488
moved Lipschitz continuity from AFP/Ordinary_Differential_Equations and AFP/Gromov_Hyperbolicity; moved lemmas from AFP/Gromov_Hyperbolicity/Library_Complements
 immler parents: 
67719diff
changeset | 2046 | |
| 62975 
1d066f6ab25d
Probability: move emeasure and nn_integral from ereal to ennreal
 hoelzl parents: 
62648diff
changeset | 2047 | end |