# HG changeset patch # User eberlm # Date 1497099296 -7200 # Node ID 5a6b67e42c4aa162f72df118f4accfa33a1bc0cf # Parent 637b26fd3349f5760ba2b5dd150625172701f905 More rules for Probability/Tree_Space diff -r 637b26fd3349 -r 5a6b67e42c4a src/HOL/Probability/Tree_Space.thy --- a/src/HOL/Probability/Tree_Space.thy Fri Jun 09 22:55:18 2017 +0200 +++ b/src/HOL/Probability/Tree_Space.thy Sat Jun 10 14:54:56 2017 +0200 @@ -115,7 +115,10 @@ lemma sets_tree_sigma_eq: "sets (tree_sigma M) = sigma_sets (trees (space M)) (trees_cyl ` trees (sets M))" unfolding tree_sigma_def by (rule sets_measure_of) (rule trees_cyl_sets_in_space) -lemma Leaf_in_tree_sigma[measurable]: "{Leaf} \ sets (tree_sigma M)" +lemma Leaf_in_space_tree_sigma [measurable, simp, intro]: "Leaf \ space (tree_sigma M)" + by (auto simp: space_tree_sigma) + +lemma Leaf_in_tree_sigma [measurable, simp, intro]: "{Leaf} \ sets (tree_sigma M)" unfolding sets_tree_sigma_eq by (rule sigma_sets.Basic) (auto intro: trees.intros(2) image_eqI[where x=Leaf]) @@ -271,6 +274,50 @@ from this and measurable_root_val' show ?thesis by (rule measurable_compose) qed + +lemma measurable_Node [measurable]: + "(\(l,x,r). Node l x r) \ tree_sigma M \\<^sub>M M \\<^sub>M tree_sigma M \\<^sub>M tree_sigma M" +proof (rule measurable_sigma_sets) + show "sets (tree_sigma M) = sigma_sets (trees (space M)) (trees_cyl ` trees (sets M))" + by (simp add: sets_tree_sigma_eq) + show "trees_cyl ` trees (sets M) \ Pow (trees (space M))" + by (rule trees_cyl_sets_in_space) + show "(\(l, x, r). \l, x, r\) \ space (tree_sigma M \\<^sub>M M \\<^sub>M tree_sigma M) \ trees (space M)" + by (auto simp: space_pair_measure space_tree_sigma) + fix A assume t: "A \ trees_cyl ` trees (sets M)" + then obtain t where t: "t \ trees (sets M)" "A = trees_cyl t" by auto + show "(\(l, x, r). \l, x, r\) -` A \ + space (tree_sigma M \\<^sub>M M \\<^sub>M tree_sigma M) + \ sets (tree_sigma M \\<^sub>M M \\<^sub>M tree_sigma M)" + proof (cases t) + case Leaf + have "(\(l, x, r). \l, x, r\) -` {Leaf :: 'a tree} = {}" by auto + with Leaf show ?thesis using t by simp + next + case (Node l B r) + hence "(\(l, x, r). \l, x, r\) -` A \ space (tree_sigma M \\<^sub>M M \\<^sub>M tree_sigma M) = + trees_cyl l \ B \ trees_cyl r" + using t and Node and trees_cyl_sub_trees[of _ "sets M" "space M"] + by (auto simp: space_pair_measure space_tree_sigma + dest: sets.sets_into_space[of _ M]) + thus ?thesis using t and Node + by (auto intro!: pair_measureI simp: sets_tree_sigma_eq) + qed +qed + +lemma measurable_Node' [measurable (raw)]: + assumes [measurable]: "l \ B \\<^sub>M tree_sigma A" + assumes [measurable]: "x \ B \\<^sub>M A" + assumes [measurable]: "r \ B \\<^sub>M tree_sigma A" + shows "(\y. Node (l y) (x y) (r y)) \ B \\<^sub>M tree_sigma A" +proof - + have "(\y. Node (l y) (x y) (r y)) = (\(a,b,c). Node a b c) \ (\y. (l y, x y, r y))" + by (simp add: o_def) + also have "\ \ B \\<^sub>M tree_sigma A" + by (intro measurable_comp[OF _ measurable_Node]) simp_all + finally show ?thesis . +qed + lemma measurable_rec_tree[measurable (raw)]: assumes t: "t \ B \\<^sub>M tree_sigma M" assumes l: "l \ B \\<^sub>M A" @@ -340,34 +387,26 @@ qed qed -lemma measurable_Node [measurable]: - "(\(l,x,r). Node l x r) \ tree_sigma M \\<^sub>M M \\<^sub>M tree_sigma M \\<^sub>M tree_sigma M" -proof (rule measurable_sigma_sets) - show "sets (tree_sigma M) = sigma_sets (trees (space M)) (trees_cyl ` trees (sets M))" - by (simp add: sets_tree_sigma_eq) - show "trees_cyl ` trees (sets M) \ Pow (trees (space M))" - by (rule trees_cyl_sets_in_space) - show "(\(l, x, r). \l, x, r\) \ space (tree_sigma M \\<^sub>M M \\<^sub>M tree_sigma M) \ trees (space M)" - by (auto simp: space_pair_measure space_tree_sigma) - fix A assume t: "A \ trees_cyl ` trees (sets M)" - then obtain t where t: "t \ trees (sets M)" "A = trees_cyl t" by auto - show "(\(l, x, r). \l, x, r\) -` A \ - space (tree_sigma M \\<^sub>M M \\<^sub>M tree_sigma M) - \ sets (tree_sigma M \\<^sub>M M \\<^sub>M tree_sigma M)" - proof (cases t) - case Leaf - have "(\(l, x, r). \l, x, r\) -` {Leaf :: 'a tree} = {}" by auto - with Leaf show ?thesis using t by simp - next - case (Node l B r) - hence "(\(l, x, r). \l, x, r\) -` A \ space (tree_sigma M \\<^sub>M M \\<^sub>M tree_sigma M) = - trees_cyl l \ B \ trees_cyl r" - using t and Node and trees_cyl_sub_trees[of _ "sets M" "space M"] - by (auto simp: space_pair_measure space_tree_sigma - dest: sets.sets_into_space[of _ M]) - thus ?thesis using t and Node - by (auto intro!: pair_measureI simp: sets_tree_sigma_eq) - qed +lemma measurable_case_tree [measurable (raw)]: + assumes "t \ B \\<^sub>M tree_sigma M" + assumes "l \ B \\<^sub>M A" + assumes "(\(x, l, v, r). n x l v r) + \ B \\<^sub>M tree_sigma M \\<^sub>M M \\<^sub>M tree_sigma M \\<^sub>M A" + shows "(\x. case_tree (l x) (n x) (t x)) \ B \\<^sub>M (A :: 'a measure)" +proof - + define n' where "n' = (\x l v r (_::'a) (_::'a). n x l v r)" + have "(\x. case_tree (l x) (n x) (t x)) = (\x. rec_tree (l x) (n' x) (t x))" + (is "_ = (\x. rec_tree _ (?n' x) _)") by (rule ext) (auto split: tree.splits simp: n'_def) + also have "\ \ B \\<^sub>M A" + proof (rule measurable_rec_tree) + have "(\(x, l, v, r, al, ar). n' x l v r al ar) = + (\(x,l,v,r). n x l v r) \ (\(x,l,v,r,al,ar). (x,l,v,r))" + by (simp add: n'_def o_def case_prod_unfold) + also have "\ \ B \\<^sub>M tree_sigma M \\<^sub>M M \\<^sub>M tree_sigma M \\<^sub>M A \\<^sub>M A \\<^sub>M A" + using assms(3) by measurable + finally show "(\(x, l, v, r, al, ar). n' x l v r al ar) \ \" . + qed (insert assms, simp_all) + finally show ?thesis . qed hide_const (open) left