Subst/AList.ML
changeset 194 b93cc55cb7ab
parent 171 16c4ea954511
equal deleted inserted replaced
193:61f39dcc1685 194:b93cc55cb7ab
     5 For AList.thy.
     5 For AList.thy.
     6 *)
     6 *)
     7 
     7 
     8 open AList;
     8 open AList;
     9 
     9 
    10 (*********)
       
    11 
       
    12 val al_defs = [alist_rec_def,assoc_def];
       
    13 
       
    14 val alist_ss = prod_ss addsimps [Nil_not_Cons,Cons_not_Nil,Cons_Cons_eq,
       
    15                                 list_rec_Nil,list_rec_Cons];
       
    16 
       
    17 val al_rews = 
    10 val al_rews = 
    18   let fun mk_thm s = prove_goalw AList.thy al_defs s 
    11   let fun mk_thm s = prove_goalw AList.thy [alist_rec_def,assoc_def] s 
    19                             (fn _ => [simp_tac alist_ss 1])
    12                             (fn _ => [simp_tac list_ss 1])
    20   in map mk_thm 
    13   in map mk_thm 
    21      ["alist_rec(Nil,c,d) = c",
    14      ["alist_rec([],c,d) = c",
    22       "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))",
    23       "assoc(v,d,Nil) = d",
    16       "assoc(v,d,[]) = d",
    24       "assoc(v,d,<a,b>#al) = if(v=a,b,assoc(v,d,al))"] end;
    17       "assoc(v,d,<a,b>#al) = if(v=a,b,assoc(v,d,al))"] end;
    25 
    18 
    26 (*********)
       
    27 
       
    28 val prems = goal AList.thy
    19 val prems = goal AList.thy
    29     "[| P(Nil);   \
    20     "[| P([]);   \
    30 \       !!x y xs. P(xs) ==> P(<x,y>#xs) |]  ==> P(l)";
    21 \       !!x y xs. P(xs) ==> P(<x,y>#xs) |]  ==> P(l)";
    31 by (list_ind_tac "l" 1);
    22 by (list.induct_tac "l" 1);
    32 by (resolve_tac prems 1);
    23 by (resolve_tac prems 1);
    33 by (rtac PairE 1);
    24 by (rtac PairE 1);
    34 by (etac ssubst 1);
    25 by (etac ssubst 1);
    35 by (resolve_tac prems 1);
    26 by (resolve_tac prems 1);
    36 by (assume_tac 1);
    27 by (assume_tac 1);
    38 
    29 
    39 (*Perform induction on xs. *)
    30 (*Perform induction on xs. *)
    40 fun alist_ind_tac a M = 
    31 fun alist_ind_tac a M = 
    41     EVERY [res_inst_tac [("l",a)] alist_induct M,
    32     EVERY [res_inst_tac [("l",a)] alist_induct M,
    42 	   rename_last_tac a ["1"] (M+1)];
    33 	   rename_last_tac a ["1"] (M+1)];
    43 
       
    44 (*
       
    45 val prems = goal AList.thy
       
    46     "[| P(Nil);  !! x y xs. P(xs) --> P(<x,y>#xs) |] ==> P(a)";
       
    47 by (alist_ind_tac "a" 1);
       
    48 by (ALLGOALS (cut_facts_tac prems THEN' fast_tac HOL_cs));
       
    49 qed "alist_induct2";
       
    50 
       
    51 add_inds alist_induct2;
       
    52 *)