(* ID: $Id$ Author: Martin Coen, Cambridge University Computer Laboratory Copyright 1993 University of Cambridge *) header{*Association Lists*} theory AList imports Main begin consts alist_rec :: "[('a*'b)list, 'c, ['a, 'b, ('a*'b)list, 'c]=>'c] => 'c" primrec "alist_rec [] c d = c" "alist_rec (p # al) c d = d (fst p) (snd p) al (alist_rec al c d)" consts assoc :: "['a,'b,('a*'b) list] => 'b" primrec "assoc v d [] = d" "assoc v d (p # al) = (if v = fst p then snd p else assoc v d al)" lemma alist_induct: "[| P([]); !!x y xs. P(xs) ==> P((x,y)#xs) |] ==> P(l)" by (induct l) auto end