# HG changeset patch # User eberlm # Date 1497026185 -7200 # Node ID 3804a9640088520c0e781dc1a1f1aae016a640c0 # Parent d20d5a3bf6cfc7fe67a22e8347e8355b5f7b296d Cleaned up and extended Probability/Tree_Space diff -r d20d5a3bf6cf -r 3804a9640088 src/HOL/Probability/Tree_Space.thy --- a/src/HOL/Probability/Tree_Space.thy Fri Jun 09 10:10:08 2017 -0400 +++ b/src/HOL/Probability/Tree_Space.thy Fri Jun 09 18:36:25 2017 +0200 @@ -32,11 +32,6 @@ "right (Node l v r) = r" | "right Leaf = Leaf" -primrec val :: "'a tree \ 'a" -where - "val (Node l v r) = v" -| "val Leaf = undefined" - inductive_set trees :: "'a set \ 'a tree set" for S :: "'a set" where [intro!]: "Leaf \ trees S" | "l \ trees S \ r \ trees S \ v \ S \ Node l v r \ trees S" @@ -59,17 +54,19 @@ qed lemma countable_trees: "countable A \ countable (trees A)" - apply (rule countable_subset[OF trees_sub_lfp]) - apply (rule countable_lfp) - subgoal by auto - apply (intro sup_continuous_sup sup_continuous_const) - subgoal by (simp add: sup_continuous_def) - subgoal apply (auto simp add: sup_continuous_def) - subgoal premises prems for M x c a y d - using prems(3,5) prems(2)[THEN incseqD, of x "max x y"] prems(2)[THEN incseqD, of y "max x y"] - by (intro exI[of _ "max x y"]) auto - done - done +proof (intro countable_subset[OF trees_sub_lfp] countable_lfp + sup_continuous_sup sup_continuous_const sup_continuous_id) + show "sup_continuous (\T. (\l\T. \v\A. \r\T. {\l, v, r\}))" + unfolding sup_continuous_def + proof (intro allI impI equalityI subsetI, goal_cases) + case (1 M t) + then obtain i j :: nat and l x r where "t = Node l x r" "x \ A" "l \ M i" "r \ M j" + by auto + hence "l \ M (max i j)" "r \ M (max i j)" + using incseqD[OF \incseq M\, of i "max i j"] incseqD[OF \incseq M\, of j "max i j"] by auto + with \t = Node l x r\ and \x \ A\ show ?case by auto + qed auto +qed auto lemma trees_UNIV[simp]: "trees UNIV = UNIV" proof - @@ -175,21 +172,16 @@ by auto qed (insert 4, auto simp: space_pair_measure space_tree_sigma set_eq_iff) also have "\ = sigma_sets (space M \ trees (space M) \ trees (space M)) - {A \ trees_cyl B \ trees_cyl C | A B C. A \ sets M \ B \ trees (sets M) \ C \ trees (sets M) }" - apply (subst sets_measure_of) - subgoal - using sets.space_closed[of M] trees_cyl_sets_in_space[of M] - by (clarsimp simp: space_pair_measure space_tree_sigma) blast - apply (rule arg_cong2[where f=sigma_sets]) - apply (auto simp: space_pair_measure space_tree_sigma) - subgoal premises prems for A B C - apply (rule exI conjI refl prems)+ - using trees_cyl_sets_in_space[of M] prems - by auto - done + {A \ BC |A BC. A \ sets M \ BC \ {A \ B |A B. + A \ trees_cyl ` trees (sets M) \ B \ trees_cyl ` trees (sets M)}}" + (is "_ = sigma_sets ?X ?Y") using sets.space_closed[of M] trees_cyl_sub_trees[of _ "sets M" "space M"] + by (subst sets_measure_of) + (auto simp: space_pair_measure space_tree_sigma) + also have "?Y = {A \ trees_cyl B \ trees_cyl C | A B C. A \ sets M \ + B \ trees (sets M) \ C \ trees (sets M)}" by blast finally have "X \ sigma_sets (space M \ trees (space M) \ trees (space M)) {A \ trees_cyl B \ trees_cyl C | A B C. A \ sets M \ B \ trees (sets M) \ C \ trees (sets M) }" - using assms by auto + using assms by blast then show ?thesis proof induction case (Basic A') @@ -206,10 +198,7 @@ case (Compl A) have "{Node l v r |l v r. (v, l, r) \ space M \ trees (space M) \ trees (space M) - A} = (space (tree_sigma M) - {Node l v r |l v r. (v, l, r) \ A}) - {Leaf}" - apply (auto simp: space_tree_sigma) - subgoal for t - by (cases t) auto - done + by (auto simp: space_tree_sigma elim: trees.cases) also have "\ \ sets (tree_sigma M)" by (intro sets.Diff Compl) auto finally show ?case . @@ -249,18 +238,18 @@ unfolding * using A by (intro sets.Un Node_in_tree_sigma pair_measureI) auto qed -lemma measurable_val': "val \ restrict_space (tree_sigma M) (-{Leaf}) \\<^sub>M M" +lemma measurable_root_val': "root_val \ restrict_space (tree_sigma M) (-{Leaf}) \\<^sub>M M" proof (rule measurableI) - show "t \ space (restrict_space (tree_sigma M) (- {Leaf})) \ val t \ space M" for t + show "t \ space (restrict_space (tree_sigma M) (- {Leaf})) \ root_val t \ space M" for t by (cases t) (auto simp: space_restrict_space space_tree_sigma) fix A assume A: "A \ sets M" from sets.sets_into_space[OF this] - have "val -` A \ space (restrict_space (tree_sigma M) (- {Leaf})) = + have "root_val -` A \ space (restrict_space (tree_sigma M) (- {Leaf})) = {Node l a r | l a r. (a, l, r) \ A \ space (tree_sigma M) \ space (tree_sigma M)}" by (auto simp: space_tree_sigma space_restrict_space elim: trees.cases) also have "\ \ sets (tree_sigma M)" using A by (intro sets.Un Node_in_tree_sigma pair_measureI) auto - finally show "val -` A \ space (restrict_space (tree_sigma M) (- {Leaf})) \ + finally show "root_val -` A \ space (restrict_space (tree_sigma M) (- {Leaf})) \ sets (restrict_space (tree_sigma M) (- {Leaf}))" by (auto simp: sets_restrict_space_iff space_restrict_space) qed @@ -271,13 +260,16 @@ by (rule measurable_compose[OF measurable_restrict_space3 f]) (insert \B \ A\, auto) -(* -lemma measurable_val[measurable (raw)]: + +lemma measurable_root_val[measurable (raw)]: assumes "f \ X \\<^sub>M tree_sigma M" and "\x. x \ space X \ f x \ Leaf" - shows "(\\. val (f \)) \ X \\<^sub>M M" - sorry -*) + shows "(\\. root_val (f \)) \ X \\<^sub>M M" +proof - + from assms have "f \ X \\<^sub>M restrict_space (tree_sigma M) (- {Leaf})" + by (intro measurable_restrict_space2) auto + from this and measurable_root_val' show ?thesis by (rule measurable_compose) +qed lemma measurable_rec_tree[measurable (raw)]: assumes t: "t \ B \\<^sub>M tree_sigma M" @@ -315,7 +307,7 @@ qed next case (Node ls u rs) - let ?F = "\\. ?N (\, left (t \), val (t \), right (t \), + let ?F = "\\. ?N (\, left (t \), root_val (t \), right (t \), rec_tree (l \) (n \) (left (t \)), rec_tree (l \) (n \) (right (t \)))" show ?case proof (rule measurable_cong[THEN iffD2]) @@ -337,7 +329,7 @@ by (rule measurable_restrict_space1) (rule measurable_compose[OF Node(3) measurable_right]) subgoal - apply (rule measurable_compose[OF _ measurable_val']) + apply (rule measurable_compose[OF _ measurable_root_val']) apply (rule measurable_restrict_space3[OF Node(3)]) by auto subgoal @@ -348,7 +340,36 @@ qed qed -hide_const (open) val +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 + hide_const (open) left hide_const (open) right