src/HOL/Data_Structures/Tree_Map.thy
changeset 61534 a88e07c8d0d5
parent 61231 cc6969542f8d
child 61581 00d9682e8dd7
equal deleted inserted replaced
61532:e3984606b4b6 61534:a88e07c8d0d5
    12 "lookup Leaf x = None" |
    12 "lookup Leaf x = None" |
    13 "lookup (Node l (a,b) r) x = (if x < a then lookup l x else
    13 "lookup (Node l (a,b) r) x = (if x < a then lookup l x else
    14   if x > a then lookup r x else Some b)"
    14   if x > a then lookup r x else Some b)"
    15 
    15 
    16 fun update :: "'a::linorder \<Rightarrow> 'b \<Rightarrow> ('a*'b) tree \<Rightarrow> ('a*'b) tree" where
    16 fun update :: "'a::linorder \<Rightarrow> 'b \<Rightarrow> ('a*'b) tree \<Rightarrow> ('a*'b) tree" where
    17 "update a b Leaf = Node Leaf (a,b) Leaf" |
    17 "update x y Leaf = Node Leaf (x,y) Leaf" |
    18 "update a b (Node l (x,y) r) =
    18 "update x y (Node l (a,b) r) =
    19    (if a < x then Node (update a b l) (x,y) r
    19    (if x < a then Node (update x y l) (a,b) r
    20     else if a=x then Node l (a,b) r
    20     else if x = a then Node l (x,y) r
    21     else Node l (x,y) (update a b r))"
    21     else Node l (a,b) (update x y r))"
    22 
    22 
    23 fun delete :: "'a::linorder \<Rightarrow> ('a*'b) tree \<Rightarrow> ('a*'b) tree" where
    23 fun delete :: "'a::linorder \<Rightarrow> ('a*'b) tree \<Rightarrow> ('a*'b) tree" where
    24 "delete k Leaf = Leaf" |
    24 "delete x Leaf = Leaf" |
    25 "delete k (Node l (a,b) r) = (if k<a then Node (delete k l) (a,b) r else
    25 "delete x (Node l (a,b) r) = (if x < a then Node (delete x l) (a,b) r else
    26   if k > a then Node l (a,b) (delete k r) else
    26   if x > a then Node l (a,b) (delete x r) else
    27   if r = Leaf then l else let (ab',r') = del_min r in Node l ab' r')"
    27   if r = Leaf then l else let (ab',r') = del_min r in Node l ab' r')"
    28 
    28 
    29 
    29 
    30 subsection "Functional Correctness Proofs"
    30 subsection "Functional Correctness Proofs"
    31 
    31