Subst/AList.ML
changeset 48 21291189b51e
parent 0 7949f97df77a
child 106 d27056ec0a5a
equal deleted inserted replaced
47:69d815b0e1eb 48:21291189b51e
    17 val al_rews = 
    17 val al_rews = 
    18   let fun mk_thm s = prove_goalw AList.thy al_defs s 
    18   let fun mk_thm s = prove_goalw AList.thy al_defs s 
    19                             (fn _ => [simp_tac alist_ss 1])
    19                             (fn _ => [simp_tac alist_ss 1])
    20   in map mk_thm 
    20   in map mk_thm 
    21      ["alist_rec(Nil,c,d) = c",
    21      ["alist_rec(Nil,c,d) = c",
    22       "alist_rec(Cons(<a,b>,al),c,d) = d(a,b,al,alist_rec(al,c,d))",
    22       "alist_rec(<a,b>#al,c,d) = d(a,b,al,alist_rec(al,c,d))",
    23       "assoc(v,d,Nil) = d",
    23       "assoc(v,d,Nil) = d",
    24       "assoc(v,d,Cons(<a,b>,al)) = if(v=a,b,assoc(v,d,al))"] end;
    24       "assoc(v,d,<a,b>#al) = if(v=a,b,assoc(v,d,al))"] end;
    25 
    25 
    26 (*********)
    26 (*********)
    27 
    27 
    28 val prems = goal AList.thy
    28 val prems = goal AList.thy
    29     "[| P(Nil);   \
    29     "[| P(Nil);   \
    30 \       !!x y xs. P(xs) ==> P(Cons(<x,y>,xs)) |]  ==> P(l)";
    30 \       !!x y xs. P(xs) ==> P(<x,y>#xs) |]  ==> P(l)";
    31 by (list_ind_tac "l" 1);
    31 by (list_ind_tac "l" 1);
    32 by (resolve_tac prems 1);
    32 by (resolve_tac prems 1);
    33 by (rtac PairE 1);
    33 by (rtac PairE 1);
    34 by (etac ssubst 1);
    34 by (etac ssubst 1);
    35 by (resolve_tac prems 1);
    35 by (resolve_tac prems 1);
    41     EVERY [res_inst_tac [("l",a)] alist_induct M,
    41     EVERY [res_inst_tac [("l",a)] alist_induct M,
    42 	   rename_last_tac a ["1"] (M+1)];
    42 	   rename_last_tac a ["1"] (M+1)];
    43 
    43 
    44 (*
    44 (*
    45 val prems = goal AList.thy
    45 val prems = goal AList.thy
    46     "[| P(Nil);  !! x y xs. P(xs) --> P(Cons(<x,y>,xs)) |] ==> P(a)";
    46     "[| P(Nil);  !! x y xs. P(xs) --> P(<x,y>#xs) |] ==> P(a)";
    47 by (alist_ind_tac "a" 1);
    47 by (alist_ind_tac "a" 1);
    48 by (ALLGOALS (cut_facts_tac prems THEN' fast_tac HOL_cs));
    48 by (ALLGOALS (cut_facts_tac prems THEN' fast_tac HOL_cs));
    49 val alist_induct2 = result();
    49 val alist_induct2 = result();
    50 
    50 
    51 add_inds alist_induct2;
    51 add_inds alist_induct2;