equal
deleted
inserted
replaced
10 val al_rews = |
10 val al_rews = |
11 let fun mk_thm s = prove_goalw AList.thy [alist_rec_def,assoc_def] s |
11 let fun mk_thm s = prove_goalw AList.thy [alist_rec_def,assoc_def] s |
12 (fn _ => [simp_tac list_ss 1]) |
12 (fn _ => [simp_tac list_ss 1]) |
13 in map mk_thm |
13 in map mk_thm |
14 ["alist_rec [] c d = c", |
14 ["alist_rec [] c d = c", |
15 "alist_rec (<a,b>#al) c d = d a b al (alist_rec al c d)", |
15 "alist_rec ((a,b)#al) c d = d a b al (alist_rec al c d)", |
16 "assoc v d [] = d", |
16 "assoc v d [] = d", |
17 "assoc v d (<a,b>#al) = (if v=a then b else assoc v d al)"] end; |
17 "assoc v d ((a,b)#al) = (if v=a then b else assoc v d al)"] end; |
18 |
18 |
19 val prems = goal AList.thy |
19 val prems = goal AList.thy |
20 "[| P([]); \ |
20 "[| P([]); \ |
21 \ !!x y xs. P(xs) ==> P(<x,y>#xs) |] ==> P(l)"; |
21 \ !!x y xs. P(xs) ==> P((x,y)#xs) |] ==> P(l)"; |
22 by (list.induct_tac "l" 1); |
22 by (list.induct_tac "l" 1); |
23 by (resolve_tac prems 1); |
23 by (resolve_tac prems 1); |
24 by (rtac PairE 1); |
24 by (rtac PairE 1); |
25 by (etac ssubst 1); |
25 by (etac ssubst 1); |
26 by (resolve_tac prems 1); |
26 by (resolve_tac prems 1); |