# HG changeset patch # User immler # Date 1374060861 -7200 # Node ID 8cc7f76b827af0eceda2b2d9bd2a4469a2d99e54 # Parent c16f35e5a5aa3861a5f94dc1230d8859363de879 tuned definition of seqseq; clarified usage of diagseq via diagseq_holds diff -r c16f35e5a5aa -r 8cc7f76b827a src/HOL/Library/Diagonal_Subsequence.thy --- a/src/HOL/Library/Diagonal_Subsequence.thy Tue Jul 16 23:34:33 2013 +0200 +++ b/src/HOL/Library/Diagonal_Subsequence.thy Wed Jul 17 13:34:21 2013 +0200 @@ -11,66 +11,61 @@ assumes ex_subseq: "\n s. subseq s \ \r'. subseq r' \ P n (s o r')" begin +definition reduce where "reduce s n = (SOME r'. subseq r' \ P n (s o r'))" + +lemma subseq_reduce[intro, simp]: + "subseq s \ subseq (reduce s n)" + unfolding reduce_def by (rule someI2_ex[OF ex_subseq]) auto + +lemma reduce_holds: + "subseq s \ P n (s o reduce s n)" + unfolding reduce_def by (rule someI2_ex[OF ex_subseq]) (auto simp: o_def) + primrec seqseq where "seqseq 0 = id" -| "seqseq (Suc n) = seqseq n o (SOME r'. subseq r' \ P n (seqseq n o r'))" +| "seqseq (Suc n) = seqseq n o reduce (seqseq n) n" -lemma seqseq_ex: - shows "subseq (seqseq n) \ - (\r'. seqseq (Suc n) = seqseq n o r' \ subseq r' \ P n (seqseq n o r'))" +lemma subseq_seqseq[intro, simp]: "subseq (seqseq n)" proof (induct n) - case 0 - let ?P = "\r'. subseq r' \ P 0 r'" - let ?r = "Eps ?P" - have "?P ?r" using ex_subseq[of id 0] by (intro someI_ex[of ?P]) (auto simp: subseq_def) - thus ?case by (auto simp: subseq_def) -next - case (Suc n) - then obtain r' where - Suc': "seqseq (Suc n) = seqseq n \ r'" "subseq (seqseq n)" "subseq r'" - "P n (seqseq n o r')" - by blast - let ?P = "\r'a. subseq (r'a ) \ P (Suc n) (seqseq n o r' o r'a)" - let ?r = "Eps ?P" - have "?P ?r" using ex_subseq[of "seqseq n o r'" "Suc n"] Suc' - by (intro someI_ex[of ?P]) (auto intro: subseq_o simp: o_assoc) - moreover have "seqseq (Suc (Suc n)) = seqseq n \ r' \ ?r" - by (subst seqseq.simps) (simp only: Suc' o_assoc) - moreover note subseq_o[OF `subseq (seqseq n)` `subseq r'`] - ultimately show ?case unfolding Suc' by (auto simp: o_def) + case (Suc n) thus ?case by (subst seqseq.simps) (auto simp: subseq_reduce intro!: subseq_o) +qed (simp add: subseq_def) + +lemma seqseq_holds: + "P n (seqseq (Suc n))" +proof - + have "P n (seqseq n o reduce (seqseq n) n)" + by (intro reduce_holds subseq_seqseq) + thus ?thesis by simp qed -lemma subseq_seqseq: - shows "subseq (seqseq n)" using seqseq_ex[OF assms] by auto - -definition reducer where "reducer n = (SOME r'. subseq r' \ P n (seqseq n o r'))" - -lemma subseq_reducer: "subseq (reducer n)" and reducer_reduces: "P n (seqseq n o reducer n)" - unfolding atomize_conj unfolding reducer_def using subseq_seqseq - by (rule someI_ex[OF ex_subseq]) - -lemma seqseq_reducer[simp]: - "seqseq (Suc n) = seqseq n o reducer n" - by (simp add: reducer_def) - -declare seqseq.simps(2)[simp del] - definition diagseq where "diagseq i = seqseq i i" +lemma subseq_mono: "subseq f \ a \ b \ f a \ f b" + by (metis le_eq_less_or_eq subseq_mono) + +lemma subseq_strict_mono: "subseq f \ a < b \ f a < f b" + by (simp add: subseq_def) + lemma diagseq_mono: "diagseq n < diagseq (Suc n)" - unfolding diagseq_def seqseq_reducer o_def - by (metis subseq_mono[OF subseq_seqseq] less_le_trans lessI seq_suble subseq_reducer) +proof - + have "diagseq n < seqseq n (Suc n)" + using subseq_seqseq[of n] by (simp add: diagseq_def subseq_def) + also have "\ \ seqseq n (reduce (seqseq n) n (Suc n))" + by (auto intro: subseq_mono seq_suble) + also have "\ = diagseq (Suc n)" by (simp add: diagseq_def) + finally show ?thesis . +qed lemma subseq_diagseq: "subseq diagseq" using diagseq_mono by (simp add: subseq_Suc_iff diagseq_def) primrec fold_reduce where "fold_reduce n 0 = id" -| "fold_reduce n (Suc k) = fold_reduce n k o reducer (n + k)" +| "fold_reduce n (Suc k) = fold_reduce n k o reduce (seqseq (n + k)) (n + k)" -lemma subseq_fold_reduce: "subseq (fold_reduce n k)" +lemma subseq_fold_reduce[intro, simp]: "subseq (fold_reduce n k)" proof (induct k) - case (Suc k) from subseq_o[OF this subseq_reducer] show ?case by (simp add: o_def) + case (Suc k) from subseq_o[OF this subseq_reduce] show ?case by (simp add: o_def) qed (simp add: subseq_def) lemma ex_subseq_reduce_index: "seqseq (n + k) = seqseq n o fold_reduce n k" @@ -100,12 +95,23 @@ lemma subseq_diagonal_rest: "subseq (\x. fold_reduce k x (k + x))" unfolding subseq_Suc_iff fold_reduce.simps o_def - by (metis subseq_mono[OF subseq_fold_reduce] less_le_trans lessI add_Suc_right seq_suble - subseq_reducer) +proof + fix n + have "fold_reduce k n (k + n) < fold_reduce k n (k + Suc n)" (is "?lhs < _") + by (auto intro: subseq_strict_mono) + also have "\ \ fold_reduce k n (reduce (seqseq (k + n)) (k + n) (k + Suc n))" + by (rule subseq_mono) (auto intro!: seq_suble subseq_mono) + finally show "?lhs < \" . +qed lemma diagseq_seqseq: "diagseq o (op + k) = (seqseq k o (\x. fold_reduce k x (k + x)))" by (auto simp: o_def diagseq_add) +lemma diagseq_holds: + assumes subseq_stable: "\r s n. subseq r \ P n s \ P n (s o r)" + shows "P k (diagseq o (op + (Suc k)))" + unfolding diagseq_seqseq by (intro subseq_stable subseq_diagonal_rest seqseq_holds) + end end diff -r c16f35e5a5aa -r 8cc7f76b827a src/HOL/Probability/Projective_Limit.thy --- a/src/HOL/Probability/Projective_Limit.thy Tue Jul 16 23:34:33 2013 +0200 +++ b/src/HOL/Probability/Projective_Limit.thy Wed Jul 17 13:34:21 2013 +0200 @@ -77,25 +77,20 @@ lemma (in finmap_seqs_into_compact) diagonal_tendsto: "\l. (\i. (f (diagseq i))\<^isub>F n) ----> l" proof - - have "\i n0. (f o seqseq i) i = f (diagseq i)" unfolding diagseq_def by simp - from reducer_reduces obtain l where l: "(\i. ((f \ seqseq (Suc n)) i)\<^isub>F n) ----> l" - unfolding seqseq_reducer - by auto - have "(\i. (f (diagseq (i + Suc n)))\<^isub>F n) = - (\i. ((f o (diagseq o (op + (Suc n)))) i)\<^isub>F n)" by (simp add: add_commute) - also have "\ = - (\i. ((f o ((seqseq (Suc n) o (\x. fold_reduce (Suc n) x (Suc n + x))))) i)\<^isub>F n)" - unfolding diagseq_seqseq by simp - also have "\ = (\i. ((f o ((seqseq (Suc n)))) i)\<^isub>F n) o (\x. fold_reduce (Suc n) x (Suc n + x))" - by (simp add: o_def) - also have "\ ----> l" - proof (rule LIMSEQ_subseq_LIMSEQ[OF _ subseq_diagonal_rest], rule tendstoI) - fix e::real assume "0 < e" - from tendstoD[OF l `0 < e`] - show "eventually (\x. dist (((f \ seqseq (Suc n)) x)\<^isub>F n) l < e) - sequentially" . + obtain l where "(\i. ((f o (diagseq o op + (Suc n))) i)\<^isub>F n) ----> l" + proof (atomize_elim, rule diagseq_holds) + fix r s n + assume "subseq r" + assume "\l. (\i. ((f \ s) i)\<^isub>F n) ----> l" + then obtain l where "((\i. (f i)\<^isub>F n) o s) ----> l" + by (auto simp: o_def) + hence "((\i. (f i)\<^isub>F n) o s o r) ----> l" using `subseq r` + by (rule LIMSEQ_subseq_LIMSEQ) + thus "\l. (\i. ((f \ (s \ r)) i)\<^isub>F n) ----> l" by (auto simp add: o_def) qed - finally show ?thesis by (intro exI) (rule LIMSEQ_offset) + hence "(\i. ((f (diagseq (i + Suc n))))\<^isub>F n) ----> l" by (simp add: ac_simps) + hence "(\i. (f (diagseq i))\<^isub>F n) ----> l" by (rule LIMSEQ_offset) + thus ?thesis .. qed subsection {* Daniell-Kolmogorov Theorem *}