src/HOL/Library/Tree_Multiset.thy
author nipkow
Wed, 17 Jun 2015 20:22:01 +0200
changeset 60506 83231b558ce4
parent 60502 aa58872267ee
parent 60505 9e6584184315
child 60515 484559628038
permissions -rw-r--r--
merged
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
59928
b9b7f913a19a new theory Library/Tree_Multiset.thy
nipkow
parents:
diff changeset
     1
(* Author: Tobias Nipkow *)
b9b7f913a19a new theory Library/Tree_Multiset.thy
nipkow
parents:
diff changeset
     2
60500
903bb1495239 isabelle update_cartouches;
wenzelm
parents: 59928
diff changeset
     3
section \<open>Multiset of Elements of Binary Tree\<close>
59928
b9b7f913a19a new theory Library/Tree_Multiset.thy
nipkow
parents:
diff changeset
     4
b9b7f913a19a new theory Library/Tree_Multiset.thy
nipkow
parents:
diff changeset
     5
theory Tree_Multiset
b9b7f913a19a new theory Library/Tree_Multiset.thy
nipkow
parents:
diff changeset
     6
imports Multiset Tree
b9b7f913a19a new theory Library/Tree_Multiset.thy
nipkow
parents:
diff changeset
     7
begin
b9b7f913a19a new theory Library/Tree_Multiset.thy
nipkow
parents:
diff changeset
     8
60500
903bb1495239 isabelle update_cartouches;
wenzelm
parents: 59928
diff changeset
     9
text\<open>Kept separate from theory @{theory Tree} to avoid importing all of
59928
b9b7f913a19a new theory Library/Tree_Multiset.thy
nipkow
parents:
diff changeset
    10
theory @{theory Multiset} into @{theory Tree}. Should be merged if
60500
903bb1495239 isabelle update_cartouches;
wenzelm
parents: 59928
diff changeset
    11
@{theory Multiset} ever becomes part of @{theory Main}.\<close>
59928
b9b7f913a19a new theory Library/Tree_Multiset.thy
nipkow
parents:
diff changeset
    12
b9b7f913a19a new theory Library/Tree_Multiset.thy
nipkow
parents:
diff changeset
    13
fun mset_tree :: "'a tree \<Rightarrow> 'a multiset" where
b9b7f913a19a new theory Library/Tree_Multiset.thy
nipkow
parents:
diff changeset
    14
"mset_tree Leaf = {#}" |
b9b7f913a19a new theory Library/Tree_Multiset.thy
nipkow
parents:
diff changeset
    15
"mset_tree (Node l a r) = {#a#} + mset_tree l + mset_tree r"
b9b7f913a19a new theory Library/Tree_Multiset.thy
nipkow
parents:
diff changeset
    16
60495
d7ff0a1df90a renamed Multiset.set_of to the canonical set_mset
nipkow
parents: 59928
diff changeset
    17
lemma set_mset_tree[simp]: "set_mset (mset_tree t) = set_tree t"
59928
b9b7f913a19a new theory Library/Tree_Multiset.thy
nipkow
parents:
diff changeset
    18
by(induction t) auto
b9b7f913a19a new theory Library/Tree_Multiset.thy
nipkow
parents:
diff changeset
    19
b9b7f913a19a new theory Library/Tree_Multiset.thy
nipkow
parents:
diff changeset
    20
lemma size_mset_tree[simp]: "size(mset_tree t) = size t"
b9b7f913a19a new theory Library/Tree_Multiset.thy
nipkow
parents:
diff changeset
    21
by(induction t) auto
b9b7f913a19a new theory Library/Tree_Multiset.thy
nipkow
parents:
diff changeset
    22
b9b7f913a19a new theory Library/Tree_Multiset.thy
nipkow
parents:
diff changeset
    23
lemma mset_map_tree: "mset_tree (map_tree f t) = image_mset f (mset_tree t)"
b9b7f913a19a new theory Library/Tree_Multiset.thy
nipkow
parents:
diff changeset
    24
by (induction t) auto
b9b7f913a19a new theory Library/Tree_Multiset.thy
nipkow
parents:
diff changeset
    25
60505
9e6584184315 added funs and lemmas
nipkow
parents: 60495
diff changeset
    26
lemma mset_iff_set_tree: "x \<in># mset_tree t \<longleftrightarrow> x \<in> set_tree t"
9e6584184315 added funs and lemmas
nipkow
parents: 60495
diff changeset
    27
by(induction t arbitrary: x) auto
9e6584184315 added funs and lemmas
nipkow
parents: 60495
diff changeset
    28
59928
b9b7f913a19a new theory Library/Tree_Multiset.thy
nipkow
parents:
diff changeset
    29
lemma multiset_of_preorder[simp]: "multiset_of (preorder t) = mset_tree t"
b9b7f913a19a new theory Library/Tree_Multiset.thy
nipkow
parents:
diff changeset
    30
by (induction t) (auto simp: ac_simps)
b9b7f913a19a new theory Library/Tree_Multiset.thy
nipkow
parents:
diff changeset
    31
b9b7f913a19a new theory Library/Tree_Multiset.thy
nipkow
parents:
diff changeset
    32
lemma multiset_of_inorder[simp]: "multiset_of (inorder t) = mset_tree t"
b9b7f913a19a new theory Library/Tree_Multiset.thy
nipkow
parents:
diff changeset
    33
by (induction t) (auto simp: ac_simps)
b9b7f913a19a new theory Library/Tree_Multiset.thy
nipkow
parents:
diff changeset
    34
b9b7f913a19a new theory Library/Tree_Multiset.thy
nipkow
parents:
diff changeset
    35
lemma map_mirror: "mset_tree (mirror t) = mset_tree t"
b9b7f913a19a new theory Library/Tree_Multiset.thy
nipkow
parents:
diff changeset
    36
by (induction t) (simp_all add: ac_simps)
b9b7f913a19a new theory Library/Tree_Multiset.thy
nipkow
parents:
diff changeset
    37
b9b7f913a19a new theory Library/Tree_Multiset.thy
nipkow
parents:
diff changeset
    38
lemma del_rightmost_mset_tree:
b9b7f913a19a new theory Library/Tree_Multiset.thy
nipkow
parents:
diff changeset
    39
  "\<lbrakk> del_rightmost t = (t',x);  t \<noteq> \<langle>\<rangle> \<rbrakk> \<Longrightarrow> mset_tree t = {#x#} + mset_tree t'"
b9b7f913a19a new theory Library/Tree_Multiset.thy
nipkow
parents:
diff changeset
    40
apply(induction t arbitrary: t' rule: del_rightmost.induct)
b9b7f913a19a new theory Library/Tree_Multiset.thy
nipkow
parents:
diff changeset
    41
by (auto split: prod.splits) (auto simp: ac_simps)
b9b7f913a19a new theory Library/Tree_Multiset.thy
nipkow
parents:
diff changeset
    42
b9b7f913a19a new theory Library/Tree_Multiset.thy
nipkow
parents:
diff changeset
    43
end