src/HOL/Tools/record_package.ML
changeset 20484 3d3d24186352
parent 20350 54fe257afd4f
child 20951 868120282837
equal deleted inserted replaced
20483:04aa552a83bc 20484:3d3d24186352
  1289                 i st)) (st,((length params) - 1) downto 0))
  1289                 i st)) (st,((length params) - 1) downto 0))
  1290   end;
  1290   end;
  1291 
  1291 
  1292 fun extension_typedef name repT alphas thy =
  1292 fun extension_typedef name repT alphas thy =
  1293   let
  1293   let
  1294     val UNIV = HOLogic.mk_UNIV repT;
  1294     fun get_thms thy name =
  1295 
  1295       let
  1296     val ({set_def=SOME def, Abs_induct = abs_induct,
  1296         val SOME { Abs_induct = abs_induct,
  1297                Abs_inject=abs_inject, Abs_inverse = abs_inverse,...}, thy') =
  1297           Abs_inject=abs_inject, Abs_inverse = abs_inverse, ...} = TypedefPackage.get_info thy name;
  1298         thy
  1298         val rewrite_rule = Tactic.rewrite_rule [rec_UNIV_I, rec_True_simp];
  1299         |> setmp TypedefPackage.quiet_mode true
  1299       in map rewrite_rule [abs_inject, abs_inverse, abs_induct] end;
  1300            (TypedefPackage.add_typedef_i true NONE
  1300   in
  1301              (suffix ext_typeN (Sign.base_name name), alphas, Syntax.NoSyn) UNIV NONE
  1301     thy
  1302              (Tactic.rtac UNIV_witness 1))
  1302     |> TypecopyPackage.add_typecopy (suffix ext_typeN (Sign.base_name name), alphas) repT NONE
  1303     val rewrite_rule = Tactic.rewrite_rule [def, rec_UNIV_I, rec_True_simp];
  1303     |-> (fn (name, _) => `(fn thy => get_thms thy name))
  1304   in (map rewrite_rule [abs_inject, abs_inverse, abs_induct], thy')
       
  1305   end;
  1304   end;
  1306 
  1305 
  1307 fun mixit convs refls =
  1306 fun mixit convs refls =
  1308   let fun f ((res,lhs,rhs),refl) = ((refl,List.revAppend (lhs,refl::tl rhs))::res,hd rhs::lhs,tl rhs);
  1307   let fun f ((res,lhs,rhs),refl) = ((refl,List.revAppend (lhs,refl::tl rhs))::res,hd rhs::lhs,tl rhs);
  1309   in #1 (Library.foldl f (([],[],convs),refls)) end;
  1308   in #1 (Library.foldl f (([],[],convs),refls)) end;