equal
deleted
inserted
replaced
232 ^ " " ^ Sign.string_of_term (sign_of thy) eq); |
232 ^ " " ^ Sign.string_of_term (sign_of thy) eq); |
233 in ( name1, ls1 |
233 in ( name1, ls1 |
234 , check_and_sort (length cs, trans_recs' [] (eq1::eqs))) |
234 , check_and_sort (length cs, trans_recs' [] (eq1::eqs))) |
235 end ; |
235 end ; |
236 |
236 |
237 |
|
238 fun instantiate_types thy t = |
|
239 let val sg = sign_of thy |
|
240 val rsg = Sign.rep_sg sg |
|
241 in fst(Type.infer_types(#tsig rsg, Sign.const_type sg, K None, K None, |
|
242 TVar(("",0),[]), t)) |
|
243 end; |
|
244 |
|
245 in |
237 in |
246 fun add_datatype (typevars, tname, cons_list') thy = |
238 fun add_datatype (typevars, tname, cons_list') thy = |
247 let (*search for free type variables and convert recursive *) |
239 let (*search for free type variables and convert recursive *) |
248 fun analyse_types (cons, typlist, syn) = |
240 fun analyse_types (cons, typlist, syn) = |
249 let fun analyse(t as dtVar v) = |
241 let fun analyse(t as dtVar v) = |
528 list_abs_free |
520 list_abs_free |
529 (ls @ [(tname,dummyT)] |
521 (ls @ [(tname,dummyT)] |
530 ,list_comb(rec_comb |
522 ,list_comb(rec_comb |
531 , fns @ map Bound (0 ::(length ls downto 1)))); |
523 , fns @ map Bound (0 ::(length ls downto 1)))); |
532 val sg = sign_of thy; |
524 val sg = sign_of thy; |
533 val (defname,def) = mk_defpair (Const(fname,dummyT),rhs) |
525 val defpair as (defname,_) = mk_defpair (Const(fname,dummyT),rhs) |
534 val tdef as ( _ $ Const(_,T) $ _ ) = instantiate_types thy def; |
526 val (_,tdef as ( _ $ Const(_,T) $ _ )) = inferT_axm sg defpair; |
535 val varT = Type.varifyT T; |
527 val varT = Type.varifyT T; |
536 val Some(ftyp) = Sign.const_type sg fname; |
528 val Some(ftyp) = Sign.const_type sg fname; |
537 in |
529 in |
538 if Type.typ_instance (#tsig(Sign.rep_sg sg), ftyp, varT) |
530 if Type.typ_instance (#tsig(Sign.rep_sg sg), ftyp, varT) |
539 then add_defs_i [(defname,tdef)] thy |
531 then add_defs_i [(defname,tdef)] thy |