src/HOL/Analysis/Measure_Space.thy
changeset 67982 7643b005b29a
parent 67962 0acdcd8f4ba1
child 67989 706f86afff43
--- a/src/HOL/Analysis/Measure_Space.thy	Sat Apr 14 20:19:52 2018 +0100
+++ b/src/HOL/Analysis/Measure_Space.thy	Sun Apr 15 13:57:00 2018 +0100
@@ -1534,6 +1534,9 @@
 lemma measure_nonneg[simp]: "0 \<le> measure M A"
   unfolding measure_def by auto
 
+lemma measure_nonneg' [simp]: "\<not> measure M A < 0"
+  using measure_nonneg not_le by blast
+
 lemma zero_less_measure_iff: "0 < measure M A \<longleftrightarrow> measure M A \<noteq> 0"
   using measure_nonneg[of M A] by (auto simp add: le_less)
 
@@ -1686,7 +1689,7 @@
   moreover have "ennreal (measure M (A i)) = emeasure M (A i)" for i
     using assms emeasure_mono[of "A _" "\<Union>i. A i" M]
     by (intro emeasure_eq_ennreal_measure[symmetric]) (auto simp: less_top UN_upper intro: le_less_trans)
-  ultimately show "(\<lambda>x. ennreal (Sigma_Algebra.measure M (A x))) \<longlonglongrightarrow> ennreal (Sigma_Algebra.measure M (\<Union>i. A i))"
+  ultimately show "(\<lambda>x. ennreal (measure M (A x))) \<longlonglongrightarrow> ennreal (measure M (\<Union>i. A i))"
     using A by (auto intro!: Lim_emeasure_incseq)
 qed auto
 
@@ -1699,7 +1702,7 @@
     by (auto intro!: emeasure_eq_ennreal_measure[symmetric] simp: INT_lower less_top intro: le_less_trans)
   moreover have "ennreal (measure M (A i)) = emeasure M (A i)" for i
     using A fin[of i] by (intro emeasure_eq_ennreal_measure[symmetric]) auto
-  ultimately show "(\<lambda>x. ennreal (Sigma_Algebra.measure M (A x))) \<longlonglongrightarrow> ennreal (Sigma_Algebra.measure M (\<Inter>i. A i))"
+  ultimately show "(\<lambda>x. ennreal (measure M (A x))) \<longlonglongrightarrow> ennreal (measure M (\<Inter>i. A i))"
     using fin A by (auto intro!: Lim_emeasure_decseq)
 qed auto
 
@@ -1772,6 +1775,32 @@
     using assms by (intro sets.countable_INT') auto
 qed
 
+lemma measurable_measure_Diff:
+  assumes "A \<in> fmeasurable M" "B \<in> sets M" "B \<subseteq> A"
+  shows "measure M (A - B) = measure M A - measure M B"
+  by (simp add: assms fmeasurableD fmeasurableD2 measure_Diff)
+
+lemma measurable_Un_null_set:
+  assumes "B \<in> null_sets M"
+  shows "(A \<union> B \<in> fmeasurable M \<and> A \<in> sets M) \<longleftrightarrow> A \<in> fmeasurable M"
+  using assms  by (fastforce simp add: fmeasurable.Un fmeasurableI_null_sets intro: fmeasurableI2)
+
+lemma measurable_Diff_null_set:
+  assumes "B \<in> null_sets M"
+  shows "(A - B) \<in> fmeasurable M \<and> A \<in> sets M \<longleftrightarrow> A \<in> fmeasurable M"
+  using assms
+  by (metis Un_Diff_cancel2 fmeasurable.Diff fmeasurableD fmeasurableI_null_sets measurable_Un_null_set)
+
+lemma fmeasurable_Diff_D:
+    assumes m: "T - S \<in> fmeasurable M" "S \<in> fmeasurable M" and sub: "S \<subseteq> T"
+    shows "T \<in> fmeasurable M"
+proof -
+  have "T = S \<union> (T - S)"
+    using assms by blast
+  then show ?thesis
+    by (metis m fmeasurable.Un)
+qed
+
 lemma measure_Un2:
   "A \<in> fmeasurable M \<Longrightarrow> B \<in> fmeasurable M \<Longrightarrow> measure M (A \<union> B) = measure M A + measure M (B - A)"
   using measure_Union[of M A "B - A"] by (auto simp: fmeasurableD2 fmeasurable.Diff)
@@ -1801,12 +1830,13 @@
     measure M (\<Union>i\<in>I. F i) = (\<Sum>i\<in>I. measure M (F i))"
   unfolding AE_pairwise[OF countable_finite, OF I]
   using I
-  apply (induction I rule: finite_induct)
-   apply simp
-  apply (simp add: pairwise_insert)
-  apply (subst measure_Un_AE)
-  apply auto
-  done
+proof (induction I rule: finite_induct)
+  case (insert x I)
+  have "measure M (F x \<union> UNION I F) = measure M (F x) + measure M (UNION I F)"
+    by (rule measure_Un_AE) (use insert in \<open>auto simp: pairwise_insert\<close>)
+    with insert show ?case
+      by (simp add: pairwise_insert )
+qed simp
 
 lemma measure_UNION':
   "finite I \<Longrightarrow> (\<And>i. i \<in> I \<Longrightarrow> F i \<in> fmeasurable M) \<Longrightarrow> pairwise (\<lambda>i j. disjnt (F i) (F j)) I \<Longrightarrow>
@@ -1888,6 +1918,18 @@
   then show ?fm ?m by auto
 qed
 
+lemma measure_diff_le_measure_setdiff:
+  assumes "S \<in> fmeasurable M" "T \<in> fmeasurable M"
+  shows "measure M S - measure M T \<le> measure M (S - T)"
+proof -
+  have "measure M S \<le> measure M ((S - T) \<union> T)"
+    by (simp add: assms fmeasurable.Un fmeasurableD measure_mono_fmeasurable)
+  also have "\<dots> \<le> measure M (S - T) + measure M T"
+    using assms by (blast intro: measure_Un_le)
+  finally show ?thesis
+    by (simp add: algebra_simps)
+qed
+
 lemma suminf_exist_split2:
   fixes f :: "nat \<Rightarrow> 'a::real_normed_vector"
   assumes "summable f"