Theory Lookup2

(* Author: Tobias Nipkow *)

section ‹Function \textit{lookup} for Tree2›

theory Lookup2
imports
  Tree2
  Cmp
  Map_Specs
begin

fun lookup :: "(('a::linorder * 'b) * 'c) tree  'a  'b option" where
"lookup Leaf x = None" |
"lookup (Node l ((a,b), _) r) x =
  (case cmp x a of LT  lookup l x | GT  lookup r x | EQ  Some b)"

lemma lookup_map_of:
  "sorted1(inorder t)  lookup t x = map_of (inorder t) x"
by(induction t rule: tree2_induct) (auto simp: map_of_simps split: option.split)

end