### new entry Laws_of_Large_Numbers

parent b4869ef2d1ca
 ... ... @@ -10080,3 +10080,29 @@ abstract = modeling the behavior of perfect logicians and formalize a solution of the puzzle. [Laws_of_Large_Numbers] title = The Laws of Large Numbers author = Manuel Eberl topic = Mathematics/Probability theory date = 2021-02-10 notify = eberlm@in.tum.de abstract =

The Law of Large Numbers states that, informally, if one performs a random experiment $X$ many times and takes the average of the results, that average will be very close to the expected value $E[X]$.

More formally, let $(X_i)_{i\in\mathbb{N}}$ be a sequence of independently identically distributed random variables whose expected value $E[X_1]$ exists. Denote the running average of $X_1, \ldots, X_n$ as $\overline{X}_n$. Then:

• The Weak Law of Large Numbers states that $\overline{X}_{n} \longrightarrow E[X_1]$ in probability for $n\to\infty$, i.e. $\mathcal{P}(|\overline{X}_{n} - E[X_1]| > \varepsilon) \longrightarrow 0$ as $n\to\infty$ for any $\varepsilon > 0$.
• The Strong Law of Large Numbers states that $\overline{X}_{n} \longrightarrow E[X_1]$ almost surely for $n\to\infty$, i.e. $\mathcal{P}(\overline{X}_{n} \longrightarrow E[X_1]) = 1$.

In this entry, I formally prove the strong law and from it the weak law. The approach used for the proof of the strong law is a particularly quick and slick one based on ergodic theory, which was formalised by Gouëzel in another AFP entry.

 (* File: Laws_of_Large_Numbers.thy Author: Manuel Eberl, TU München *) section \The Laws of Large Numbers\ theory Laws_of_Large_Numbers imports Ergodic_Theory.Ergodicity Shift_Operator begin text \ We prove the strong law of large numbers in the following form: Let $(X_i)_{i\in\mathbb{N}}$ be a sequence of i.i.d. random variables over a probability space \M\. Further assume that the expected value $E[X_0]$ of $X_0$ exists. Then the sequence of random variables $\overline{X}_n = \frac{1}{n} \sum_{i=0}^n X_i$ of running averages almost surely converges to $E[X_0]$. This means that $\mathcal{P}[\overline{X}_n \longrightarrow E[X_0]] = 1\ .$ We start with the strong law. \ subsection \The strong law\ text \ The proof uses Birkhoff's Theorem from Gouëzel's formalisation of ergodic theory~\cite{gouezel} and the fact that the shift operator $T(x_1, x_2, x_3, \ldots) = (x_2, x_3, \ldots)$ is ergodic. This proof can be found in various textbooks on probability theory/ergodic theory, e.g. the ones by Krengel~\cite[p.~24]{krengel} and Simmonet~\cite[Chapter 15, pp.~311--325]{Simonnet1996}. \ theorem (in prob_space) strong_law_of_large_numbers_iid: fixes X :: "nat \ 'a \ real" assumes indep: "indep_vars (\_. borel) X UNIV" assumes distr: "\i. distr M borel (X i) = distr M borel (X 0)" assumes L1: "integrable M (X 0)" shows "AE x in M. (\n. (\i expectation (X 0)" proof - text \ We adopt a more explicit view of \<^term>\M\ as a countably infinite product of i.i.d. random variables, indexed by the natural numbers: \ define M' :: "(nat \ real) measure" where "M' = Pi\<^sub>M UNIV (\i. distr M borel (X i))" have [measurable]: "random_variable borel (X i)" for i using indep by (auto simp: indep_vars_def) have M'_eq: "M' = distr M (Pi\<^sub>M UNIV (\i. borel)) (\x. \i\UNIV. X i x)" using indep unfolding M'_def by (subst (asm) indep_vars_iff_distr_eq_PiM) auto have space_M': "space M' = UNIV" by (simp add: M'_def space_PiM) have sets_M' [measurable_cong]: "sets M' = sets (Pi\<^sub>M UNIV (\i. borel))" by (simp add: M'_eq) interpret M': prob_space M' unfolding M'_eq by (intro prob_space_distr) auto text \We introduce a shift operator that forgets the first variable in the sequence.\ define T :: "(nat \ real) \ (nat \ real)" where "T = (\f. f \ Suc)" have funpow_T: "(T ^^ i) = (\f. f \ (\n. n + i))" for i by (induction i) (auto simp: T_def) interpret T: shift_operator_ergodic "distr M borel (X 0)" T M' proof - interpret X0: prob_space "distr M borel (X 0)" by (rule prob_space_distr) auto show "shift_operator_ergodic (distr M borel (X 0))" by unfold_locales show "M' \ Pi\<^sub>M UNIV (\_. distr M borel (X 0)) " unfolding M'_def by (subst distr) qed (simp_all add: T_def) have [intro]: "integrable M' (\f. f 0)" unfolding M'_eq by (subst integrable_distr_eq) (use L1 in auto) have "AE f in M'. (\n. T.birkhoff_sum (\f. f 0) n f / real n) \ real_cond_exp M' T.Invariants (\f. f 0) f" by (rule T.birkhoff_theorem_AE_nonergodic) auto moreover have "AE x in M'. real_cond_exp M' T.Invariants (\f. f 0) x = M'.expectation (\f. f 0) / M'.prob (space M')" by (intro T.Invariants_cond_exp_is_integral_fmpt) auto ultimately have "AE f in M'. (\n. T.birkhoff_sum (\f. f 0) n f / real n) \ M'.expectation (\f. f 0)" by eventually_elim (simp_all add: M'.prob_space) also have "M'.expectation (\f. f 0) = expectation (X 0)" unfolding M'_eq by (subst integral_distr) simp_all also have "T.birkhoff_sum (\f. f 0) = (\n f. sum f {..The weak law\ text \ To go from the strong law to the weak one, we need the fact that almost sure convergence implies convergence in probability. We prove this for sequences of random variables here. \ lemma (in prob_space) AE_convergence_imp_convergence_in_prob: assumes [measurable]: "\i. random_variable borel (X i)" "random_variable borel Y" assumes AE: "AE x in M. (\i. X i x) \ Y x" assumes "\ > (0 :: real)" shows "(\i. prob {x\space M. \X i x - Y x\ > \}) \ 0" proof - define A where "A = (\i. {x\space M. \X i x - Y x\ > \})" define B where "B = (\n. (\i\{n..}. A i))" have [measurable]: "A i \ sets M" "B i \ sets M" for i unfolding A_def B_def by measurable have "AE x in M. x \ (\i. B i)" using AE unfolding B_def A_def by eventually_elim (use \\ > 0\ in \fastforce simp: tendsto_iff dist_norm eventually_at_top_linorder\) hence "(\i. B i) \ null_sets M" by (subst AE_iff_null_sets) auto show "(\i. prob (A i)) \ 0" proof (rule Lim_null_comparison) have "(\i. prob (B i)) \ prob (\i. B i)" proof (rule finite_Lim_measure_decseq) show "decseq B" by (rule decseq_SucI) (force simp: B_def) qed auto also have "prob (\i. B i) = 0" using $$\i. B i) \ null_sets M\ by (simp add: measure_eq_0_null_sets) finally show "(\i. prob (B i)) \ 0" . next have "prob (A n) \ prob (B n)" for n unfolding B_def by (intro finite_measure_mono) auto thus "\\<^sub>F n in at_top. norm (prob (A n)) \ prob (B n)" by (intro always_eventually) auto qed qed text \ The weak law is now a simple corollary: we again have the same setting as before. The weak law now states that \overline{X}_n converges to E[X_0] in probability. This means that for any \\ > 0\, the probability that |\overline{X}_n - X_0| > \varepsilon vanishes as \n \ \\. \ corollary (in prob_space) weak_law_of_large_numbers_iid: fixes X :: "nat \ 'a \ real" and \ :: real assumes indep: "indep_vars (\_. borel) X UNIV" assumes distr: "\i. distr M borel (X i) = distr M borel (X 0)" assumes L1: "integrable M (X 0)" assumes "\ > 0" shows "(\n. prob {x\space M. \(\i > \}) \ 0" proof (rule AE_convergence_imp_convergence_in_prob) show "AE x in M. (\n. (\i expectation (X 0)" by (rule strong_law_of_large_numbers_iid) fact+ next have [measurable]: "random_variable borel (X i)" for i using indep by (auto simp: indep_vars_def) show "random_variable borel (\x. (\i\ > 0\ in simp_all) end \ No newline at end of file  (* File: Laws_of_Large_Numbers.thy Author: Manuel Eberl, TU München *) subsection \Example\ theory Laws_of_Large_Numbers_Example imports Laws_of_Large_Numbers begin text \ As an example, we apply the strong law to the proportion of successes in an independent sequence of coin flips with success probability \p\. We will show that proportion of successful coin flips among the first \n\ attempts almost surely converges to \p\ as \n \ \\. \ (* TODO: Move *) lemma (in prob_space) indep_vars_iff_distr_eq_PiM': fixes I :: "'i set" and X :: "'i \ 'a \ 'b" assumes "I \ {}" assumes rv: "\i. i \ I \ random_variable (M' i) (X i)" shows "indep_vars M' X I \ distr M (\\<^sub>M i\I. M' i) (\x. \i\I. X i x) = (\\<^sub>M i\I. distr M (M' i) (X i))" proof - from assms obtain j where j: "j \ I" by auto define N' where "N' = (\i. if i \ I then M' i else M' j)" define Y where "Y = (\i. if i \ I then X i else X j)" have rv: "random_variable (N' i) (Y i)" for i using j by (auto simp: N'_def Y_def intro: assms) have "indep_vars M' X I = indep_vars N' Y I" by (intro indep_vars_cong) (auto simp: N'_def Y_def) also have "\ \ distr M (\\<^sub>M i\I. N' i) (\x. \i\I. Y i x) = (\\<^sub>M i\I. distr M (N' i) (Y i))" by (intro indep_vars_iff_distr_eq_PiM rv assms) also have "(\\<^sub>M i\I. N' i) = (\\<^sub>M i\I. M' i)" by (intro PiM_cong) (simp_all add: N'_def) also have "(\x. \i\I. Y i x) = (\x. \i\I. X i x)" by (simp_all add: Y_def fun_eq_iff) also have "(\\<^sub>M i\I. distr M (N' i) (Y i)) = (\\<^sub>M i\I. distr M (M' i) (X i))" by (intro PiM_cong distr_cong) (simp_all add: N'_def Y_def) finally show ?thesis . qed (* TODO: Move *) lemma indep_vars_PiM_components: assumes "\i. i \ A \ prob_space (M i)" shows "prob_space.indep_vars (PiM A M) M (\i f. f i) A" proof (cases "A = {}") case False have "distr (Pi\<^sub>M A M) (Pi\<^sub>M A M) (\x. restrict x A) = distr (Pi\<^sub>M A M) (Pi\<^sub>M A M) (\x. x)" by (intro distr_cong) (auto simp: restrict_def space_PiM PiE_def extensional_def Pi_def) also have "\ = Pi\<^sub>M A M" by simp also have "\ = Pi\<^sub>M A (\i. distr (Pi\<^sub>M A M) (M i) (\f. f i))" by (intro PiM_cong refl, subst distr_PiM_component) (auto simp: assms) finally show ?thesis by (subst prob_space.indep_vars_iff_distr_eq_PiM') (simp_all add: prob_space_PiM assms False) next case True interpret prob_space "PiM A M" by (intro prob_space_PiM assms) show ?thesis unfolding indep_vars_def indep_sets_def by (auto simp: True) qed (* TODO: Move *) lemma indep_vars_PiM_components': assumes "\i. i \ A \ prob_space (M i)" assumes "\i. i \ A \ g i \ M i \\<^sub>M N i" shows "prob_space.indep_vars (PiM A M) N (\i f. g i (f i)) A" by (rule prob_space.indep_vars_compose2[OF prob_space_PiM indep_vars_PiM_components]) (use assms in simp_all) (* TODO: Move *) lemma integrable_bernoulli_pmf [intro]: fixes f :: "bool \ 'a :: {banach, second_countable_topology}" shows "integrable (bernoulli_pmf p) f" by (rule integrable_measure_pmf_finite) auto (* TODO: Move *) lemma expectation_bernoulli_pmf: fixes f :: "bool \ 'a :: {banach, second_countable_topology}" assumes p: "p \ {0..1}" shows "measure_pmf.expectation (bernoulli_pmf p) f = p *\<^sub>R f True + (1 - p) *\<^sub>R f False" using p by (subst integral_measure_pmf[of UNIV]) (auto simp: UNIV_bool) experiment fixes p :: real assumes p: "p \ {0..1}" begin definition M :: "(nat \ bool) measure" where "M = (\\<^sub>M i\(UNIV :: nat set). measure_pmf (bernoulli_pmf p))" definition X :: "nat \ (nat \ bool) \ real" where "X = (\i f. if f i then 1 else 0)" interpretation prob_space M unfolding M_def by (intro prob_space_PiM measure_pmf.prob_space_axioms) lemma random_variable_component: "random_variable (count_space UNIV) (\f. f i)" unfolding X_def M_def by measurable lemma random_variable_X [measurable]: "random_variable borel (X i)" unfolding X_def M_def by measurable lemma distr_M_component: "distr M (count_space UNIV) (\f. f i) = measure_pmf (bernoulli_pmf p)" proof - have "distr M (count_space UNIV) (\f. f i) = distr M (measure_pmf (bernoulli_pmf p)) (\f. f i)" by (rule distr_cong) auto also have "\ = measure_pmf (bernoulli_pmf p)" unfolding M_def by (subst distr_PiM_component) (simp_all add: measure_pmf.prob_space_axioms) finally show ?thesis . qed lemma distr_M_X: "distr M borel (X i) = distr (measure_pmf (bernoulli_pmf p)) borel (\b. if b then 1 else 0)" proof - have "distr M borel (X i) = distr (distr M (count_space UNIV) (\f. f i)) borel (\b. if b then 1 else 0 :: real)" by (subst distr_distr) (auto simp: M_def X_def o_def) also note distr_M_component[of i] finally show ?thesis by simp qed lemma X_has_expectation: "integrable M (X 0)" proof - have "integrable (bernoulli_pmf p) (\b. if b then 1 else 0 :: real)" by auto also have "measure_pmf (bernoulli_pmf p) = distr M (count_space UNIV) (\f. f 0)" by (simp add: distr_M_component) also have "integrable \ (\b. if b then 1 else 0 :: real) = integrable M (X 0)" unfolding X_def using random_variable_component by (subst integrable_distr_eq) auto finally show ?thesis . qed lemma indep: "indep_vars (\_. borel) X UNIV" unfolding M_def X_def by (rule indep_vars_PiM_components') (simp_all add: measure_pmf.prob_space_axioms) lemma expectation_X: "expectation (X i) = p" proof - have "expectation (X i) = lebesgue_integral (distr M (count_space UNIV) (\f. f i)) (\b. if b then 1 else 0 :: real)" by (subst integral_distr) (simp_all add: random_variable_component X_def) also have "distr M (count_space UNIV) (\x. x i) = measure_pmf (bernoulli_pmf p)" by (rule distr_M_component) also have "measure_pmf.expectation (bernoulli_pmf p) (\b. if b then 1 else 0 :: real) = p" using p by (subst integral_bernoulli_pmf) auto finally show ?thesis . qed theorem "AE f in M. (\n. card {i. i < n \ f i} / n) \ p" proof - have "AE f in M. (\n. (\i expectation (X 0)" by (rule strong_law_of_large_numbers_iid) (use indep X_has_expectation in \simp_all add: distr_M_X$$ also have "expectation (X 0) = p" by (simp add: expectation_X) also have "(\x n. \ix n. \i\{i\{.. = (\x n. real (card {i. i < n \ x i}))" by simp finally show ?thesis . qed end end \ No newline at end of file
 (* File: ME_Library_Complement.thy Author: Manuel Eberl, TU München *) section \Auxiliary Material\ theory ME_Library_Complement imports "HOL-Analysis.Analysis" begin (* TODO: this file is redundent for AFP 2021 since it is then already in Ergodic_Theory *) subsection \The trivial measurable space\ text \ The trivial measurable space is the smallest possible \\\-algebra, i.e. only the empty set and everything. \ definition trivial_measure :: "'a set \ 'a measure" where "trivial_measure X = sigma X {{}, X}" lemma space_trivial_measure [simp]: "space (trivial_measure X) = X" by (simp add: trivial_measure_def) lemma sets_trivial_measure: "sets (trivial_measure X) = {{}, X}" by (simp add: trivial_measure_def sigma_algebra_trivial sigma_algebra.sigma_sets_eq) lemma measurable_trivial_measure: assumes "f \ space M \ X" and "f - X \ space M \ sets M" shows "f \ M \\<^sub>M trivial_measure X" using assms unfolding measurable_def by (auto simp: sets_trivial_measure) lemma measurable_trivial_measure_iff: "f \ M \\<^sub>M trivial_measure X \ f \ space M \ X \ f - X \ space M \ sets M" unfolding measurable_def by (auto simp: sets_trivial_measure) subsection \Pullback algebras\ text \ The pullback algebra $f^{-1}(\Sigma)$ of a \\\-algebra $(\Omega, \Sigma)$ is the smallest \\\-algebra such that $f$ is $f^{-1}(\Sigma)$--$\Sigma$-measurable. \ definition (in sigma_algebra) pullback_algebra :: "('b \ 'a) \ 'b set \ 'b set set" where "pullback_algebra f \' = sigma_sets \' {f - A \ \' |A. A \ M}" lemma pullback_algebra_minimal: assumes "f \ M \\<^sub>M N" shows "sets.pullback_algebra N f (space M) \ sets M" proof fix X assume "X \ sets.pullback_algebra N f (space M)" thus "X \ sets M" unfolding sets.pullback_algebra_def by induction (use assms in \auto simp: measurable_def\) qed lemma (in sigma_algebra) sigma_algebra_pullback: "sigma_algebra \' (pullback_algebra f \')" unfolding pullback_algebra_def by (rule sigma_algebra_sigma_sets) auto lemma (in sigma_algebra) in_pullback_algebra: "A \ M \ f - A \ \' \ pullback_algebra f \'" unfolding pullback_algebra_def by (rule sigma_sets.Basic) auto end \ No newline at end of file
 chapter AFP session "Laws_of_Large_Numbers" (AFP) = "Ergodic_Theory" + options [timeout = 600] theories Laws_of_Large_Numbers Laws_of_Large_Numbers_Example document_files "root.tex" "root.bib"
 (* File: Shift_Operator.thy Author: Manuel Eberl, TU München *) section \The shift operator on an infinite product measure\ theory Shift_Operator imports Ergodic_Theory.Ergodicity ME_Library_Complement begin text \ Let \P\ be an an infinite product of i.i.d. instances of the distribution \M\. Then the shift operator is the map $T(x_0, x_1, x_2, \ldots) = T(x_1, x_2, \ldots)\ .$ In this section, we define this operator and show that it is ergodic using Kolmogorov's 0--1 law. \ locale shift_operator_ergodic = prob_space + fixes T :: "(nat \ 'a) \ (nat \ 'a)" and P :: "(nat \ 'a) measure" defines "T \ (\f. f \ Suc)" defines "P \ PiM (UNIV :: nat set) (\_. M)" begin sublocale P: product_prob_space "\_. M" UNIV by unfold_locales sublocale P: prob_space P by (simp add: prob_space_PiM prob_space_axioms P_def) lemma measurable_T [measurable]: "T \ P \\<^sub>M P" unfolding P_def T_def o_def by (rule measurable_abs_UNIV[OF measurable_compose[OF measurable_component_singleton]]) auto text \ The \n\-th tail algebra $\mathcal{T}_n$ is, in some sense, the algebra in which we forget all information about all $x_i$ with \i < n\. We simply change the product algebra of \P\ by replacing the algebra for each \i < n\ with the trivial algebra that contains only the empty set and the entire space. \ definition tail_algebra :: "nat \ (nat \ 'a) measure" where "tail_algebra n = PiM UNIV (\i. if i < n then trivial_measure (space M) else M)" lemma tail_algebra_0 [simp]: "tail_algebra 0 = P" by (simp add: tail_algebra_def P_def) lemma space_tail_algebra [simp]: "space (tail_algebra n) = PiE UNIV (\_. space M)" by (simp add: tail_algebra_def space_PiM PiE_def Pi_def) lemma measurable_P_component [measurable]: "P.random_variable M (\f. f i)" unfolding P_def by measurable lemma P_component [simp]: "distr P M (\f. f i) = M" unfolding P_def by (subst P.PiM_component) auto lemma indep_vars: "P.indep_vars (\_. M) (\i f. f i) UNIV" by (subst P.indep_vars_iff_distr_eq_PiM) (simp_all add: restrict_def distr_id2 P.PiM_component P_def) text \ The shift operator takes us from $\mathcal{T}_n$ to $\mathcal{T}_{n+1}$ (it forgets the information about one more variable): \ lemma measurable_T_tail: "T \ tail_algebra (Suc n) \\<^sub>M tail_algebra n" unfolding T_def tail_algebra_def o_def by (rule measurable_abs_UNIV[OF measurable_compose[OF measurable_component_singleton]]) simp_all lemma measurable_funpow_T: "T ^^ n \ tail_algebra (m + n) \\<^sub>M tail_algebra m" proof (induction n) case (Suc n) have "(T ^^ n) \ T \ tail_algebra (m + Suc n) \\<^sub>M tail_algebra m" by (rule measurable_comp[OF _ Suc]) (simp_all add: measurable_T_tail) thus ?case by (simp add: o_def funpow_swap1) qed auto lemma measurable_funpow_T': "T ^^ n \ tail_algebra n \\<^sub>M P" using measurable_funpow_T[of n 0] by simp text \ The shift operator is clearly measure-preserving: \ lemma measure_preserving: "T \ measure_preserving P P" proof fix A :: "(nat \ 'a) set" assume "A \ P.events" hence "emeasure P (T - A \ space P) = emeasure (distr P P T) A" by (subst emeasure_distr) simp_all also have "distr P P T = P" unfolding P_def T_def o_def using distr_PiM_reindex[of UNIV "\_. M" Suc UNIV] by (simp add: prob_space_axioms restrict_def) finally show "emeasure P (T - A \ space P) = emeasure P A" . qed auto sublocale fmpt P T by unfold_locales (use measure_preserving in \blast intro: measure_preserving_is_quasi_measure_preserving\)+ text \ Related to the tail algebra, we define the algebra induced by the \i\-th variable (i.e. the algebra that contains only information about the \i\-th variable): \ sublocale X: sigma_algebra "space P" "sets.pullback_algebra M (\f. f i) (space P)" by (rule sets.sigma_algebra_pullback) lemma indep_sets_pullback_algebra: "P.indep_sets (\i. sets.pullback_algebra M (\f. f i) (space P)) UNIV" using indep_vars unfolding P.indep_vars_def sets.pullback_algebra_def by blast text \ We can now show that the tail algebra $\mathcal{T}_n$ is a subalgebra of the algebra generated by the algebras induced by all the variables \x\<^sub>i\ with \i \ n\: \ lemma tail_algebra_subset: "sets (tail_algebra n) \ sigma_sets (space P) (\i\{n..}. sets.pullback_algebra M (\f. f i) (space P))" proof - have "sets (tail_algebra n) = sigma_sets (space P) (prod_algebra UNIV (\i. if i < n then trivial_measure (space M) else M))" by (simp add: tail_algebra_def sets_PiM PiE_def Pi_def P_def space_PiM) also have "\ \ sigma_sets (space P) (\i\{n..}. sets.pullback_algebra M (\f. f i) (space P))" proof (intro sigma_sets_mono subsetI) fix C assume "C \ prod_algebra UNIV (\i. if i < n then trivial_measure (space M) else M)" then obtain C' where C': "C = Pi\<^sub>E UNIV C'" "C' \ (\ i\UNIV. sets (if i < n then trivial_measure (space M) else M))" by (elim prod_algebraE_all) have C'_1: "C' i \ {{}, space M}" if "i < n" for i using C'(2) that by (auto simp: Pi_def sets_trivial_measure split: if_splits) have C'_2: "C' i \ sets M" if "i \ n" for i proof - from that have "\(i < n)" by auto with C'(2) show ?thesis by (force simp: Pi_def sets_trivial_measure split: if_splits) qed have "C' i \ events" for i using C'_1[of i] C'_2[of i] by (cases "i \ n") auto hence "C \ sets P" unfolding P_def C'(1) by (intro sets_PiM_I_countable) auto hence "C \ space P" using sets.sets_into_space by blast show "C \ sigma_sets (space P) (\i\{n..}. sets.pullback_algebra M (\f. f i) (space P))" proof (cases "C = {}") case False have "C = (\i\{n..}. (\f. f i) - C' i) \ space P" proof (intro equalityI subsetI, goal_cases) case (1 f) hence "f \ space P" using 1 \C \ space P\ by blast thus ?case using C' 1 by (auto simp: Pi_def sets_trivial_measure split: if_splits) next case (2 f) hence f: "f i \ C' i" if "i \ n" for i using that by auto have "f i \ C' i" for i proof (cases "i \ n") case True thus ?thesis using C'_2[of i] f[of i] by auto next case False thus ?thesis using C'_1[of i] C'(1) \C \ {}\ 2 by (auto simp: P_def space_PiM) qed thus "f \ C" using C' by auto qed also have "(\i\{n..}. (\f. f i) - C' i) \ space P = (\i\{n..}. (\f. f i) - C' i \ space P)" by blast also have "\ \ sigma_sets (space P) (\i\{n..}. sets.pullback_algebra M (\f. f i) (space P))" (is "_ \ ?rhs") proof (intro sigma_sets_INTER, goal_cases) fix i show "(\f. f i) - C' i \ space P \ ?rhs" proof (cases "i \ n") case False hence "C' i = {} \ C' i = space M" using C'_1[of i] by auto thus ?thesis proof assume [simp]: "C' i = space M"