src/HOLCF/fixrec_package.ML
changeset 18358 0a733e11021a
parent 17985 d5d576b72371
child 18377 0e1d025d57b3
equal deleted inserted replaced
18357:c5030cdbf8da 18358:0a733e11021a
    99       | defs (l::[]) r = [one_def l r]
    99       | defs (l::[]) r = [one_def l r]
   100       | defs (l::ls) r = one_def l (%%:"Cprod.cfst"`r) :: defs ls (%%:"Cprod.csnd"`r);
   100       | defs (l::ls) r = one_def l (%%:"Cprod.cfst"`r) :: defs ls (%%:"Cprod.csnd"`r);
   101     val (names, pre_fixdefs) = ListPair.unzip (defs lhss fixpoint);
   101     val (names, pre_fixdefs) = ListPair.unzip (defs lhss fixpoint);
   102     
   102     
   103     val fixdefs = map (inferT_axm thy) pre_fixdefs;
   103     val fixdefs = map (inferT_axm thy) pre_fixdefs;
   104     val (thy', fixdef_thms) =
   104     val (fixdef_thms, thy') =
   105       PureThy.add_defs_i false (map Thm.no_attributes fixdefs) thy;
   105       PureThy.add_defs_i false (map Thm.no_attributes fixdefs) thy;
   106     val ctuple_fixdef_thm = foldr1 (fn (x,y) => cpair_equalI OF [x,y]) fixdef_thms;
   106     val ctuple_fixdef_thm = foldr1 (fn (x,y) => cpair_equalI OF [x,y]) fixdef_thms;
   107     
   107     
   108     val ctuple_unfold = infer thy' (mk_trp (mk_ctuple lhss === mk_ctuple rhss));
   108     val ctuple_unfold = infer thy' (mk_trp (mk_ctuple lhss === mk_ctuple rhss));
   109     val ctuple_unfold_thm = standard (Goal.prove thy' [] [] ctuple_unfold
   109     val ctuple_unfold_thm = standard (Goal.prove thy' [] [] ctuple_unfold