diff -r b63e5e4598d7 -r 7beee08eb163 src/HOL/Data_Structures/Set2_Join.thy --- a/src/HOL/Data_Structures/Set2_Join.thy Mon Aug 19 18:41:03 2019 +0200 +++ b/src/HOL/Data_Structures/Set2_Join.thy Tue Aug 20 09:26:22 2019 +0200 @@ -23,12 +23,10 @@ fixes join :: "('a::linorder,'b) tree \ 'a \ ('a,'b) tree \ ('a,'b) tree" fixes inv :: "('a,'b) tree \ bool" assumes set_join: "set_tree (join l a r) = set_tree l \ {a} \ set_tree r" -assumes bst_join: - "\ bst l; bst r; \x \ set_tree l. x < a; \y \ set_tree r. a < y \ - \ bst (join l a r)" +assumes bst_join: "bst (Node l a b r) \ bst (join l a r)" assumes inv_Leaf: "inv \\" assumes inv_join: "\ inv l; inv r \ \ inv (join l a r)" -assumes inv_Node: "\ inv (Node l a h r) \ \ inv l \ inv r" +assumes inv_Node: "\ inv (Node l a b r) \ \ inv l \ inv r" begin declare set_join [simp] @@ -40,7 +38,7 @@ (if l = Leaf then (a,r) else let (m,l') = split_min l in (m, join l' a r))" lemma split_min_set: - "\ split_min t = (m,t'); t \ Leaf \ \ m \ set_tree t \ set_tree t = Set.insert m (set_tree t')" + "\ split_min t = (m,t'); t \ Leaf \ \ m \ set_tree t \ set_tree t = {m} \ set_tree t'" proof(induction t arbitrary: t') case Node thus ?case by(auto split: prod.splits if_splits dest: inv_Node) next @@ -115,7 +113,7 @@ definition insert :: "'a \ ('a,'b) tree \ ('a,'b) tree" where "insert x t = (let (l,_,r) = split t x in join l x r)" -lemma set_tree_insert: "bst t \ set_tree (insert x t) = Set.insert x (set_tree t)" +lemma set_tree_insert: "bst t \ set_tree (insert x t) = {x} \ set_tree t" by(auto simp add: insert_def split split: prod.split) lemma bst_insert: "bst t \ bst (insert x t)"