src/HOL/Tools/record.ML
changeset 33522 737589bb9bb8
parent 33385 fb2358edcfb6
child 33595 7264824baf66
equal deleted inserted replaced
33521:a4c54218be62 33522:737589bb9bb8
    79       | NONE => raise THM ("named_cterm_instantiate: " ^ name, 0, [thm]));
    79       | NONE => raise THM ("named_cterm_instantiate: " ^ name, 0, [thm]));
    80   in
    80   in
    81     cterm_instantiate (map (apfst getvar) values) thm
    81     cterm_instantiate (map (apfst getvar) values) thm
    82   end;
    82   end;
    83 
    83 
    84 structure IsTupleThms = TheoryDataFun
    84 structure IsTupleThms = Theory_Data
    85 (
    85 (
    86   type T = thm Symtab.table;
    86   type T = thm Symtab.table;
    87   val empty = Symtab.make [tuple_istuple];
    87   val empty = Symtab.make [tuple_istuple];
    88   val copy = I;
       
    89   val extend = I;
    88   val extend = I;
    90   fun merge _ = Symtab.merge Thm.eq_thm_prop;
    89   fun merge data = Symtab.merge Thm.eq_thm_prop data;   (* FIXME handle Symtab.DUP ?? *)
    91 );
    90 );
    92 
    91 
    93 fun do_typedef name repT alphas thy =
    92 fun do_typedef name repT alphas thy =
    94   let
    93   let
    95     fun get_thms thy name =
    94     fun get_thms thy name =
   379     records sel_upd equalities extinjects extsplit splits extfields fieldext =
   378     records sel_upd equalities extinjects extsplit splits extfields fieldext =
   380  {records = records, sel_upd = sel_upd,
   379  {records = records, sel_upd = sel_upd,
   381   equalities = equalities, extinjects=extinjects, extsplit = extsplit, splits = splits,
   380   equalities = equalities, extinjects=extinjects, extsplit = extsplit, splits = splits,
   382   extfields = extfields, fieldext = fieldext }: record_data;
   381   extfields = extfields, fieldext = fieldext }: record_data;
   383 
   382 
   384 structure RecordsData = TheoryDataFun
   383 structure RecordsData = Theory_Data
   385 (
   384 (
   386   type T = record_data;
   385   type T = record_data;
   387   val empty =
   386   val empty =
   388     make_record_data Symtab.empty
   387     make_record_data Symtab.empty
   389       {selectors = Symtab.empty, updates = Symtab.empty,
   388       {selectors = Symtab.empty, updates = Symtab.empty,
   390           simpset = HOL_basic_ss, defset = HOL_basic_ss,
   389           simpset = HOL_basic_ss, defset = HOL_basic_ss,
   391           foldcong = HOL_basic_ss, unfoldcong = HOL_basic_ss}
   390           foldcong = HOL_basic_ss, unfoldcong = HOL_basic_ss}
   392        Symtab.empty [] Symtab.empty Symtab.empty Symtab.empty Symtab.empty;
   391        Symtab.empty [] Symtab.empty Symtab.empty Symtab.empty Symtab.empty;
   393 
       
   394   val copy = I;
       
   395   val extend = I;
   392   val extend = I;
   396   fun merge _
   393   fun merge
   397    ({records = recs1,
   394    ({records = recs1,
   398      sel_upd =
   395      sel_upd =
   399       {selectors = sels1, updates = upds1,
   396       {selectors = sels1, updates = upds1,
   400        simpset = ss1, defset = ds1,
   397        simpset = ss1, defset = ds1,
   401        foldcong = fc1, unfoldcong = uc1},
   398        foldcong = fc1, unfoldcong = uc1},
   423         simpset = Simplifier.merge_ss (ss1, ss2),
   420         simpset = Simplifier.merge_ss (ss1, ss2),
   424         defset = Simplifier.merge_ss (ds1, ds2),
   421         defset = Simplifier.merge_ss (ds1, ds2),
   425         foldcong = Simplifier.merge_ss (fc1, fc2),
   422         foldcong = Simplifier.merge_ss (fc1, fc2),
   426         unfoldcong = Simplifier.merge_ss (uc1, uc2)}
   423         unfoldcong = Simplifier.merge_ss (uc1, uc2)}
   427       (Symtab.merge Thm.eq_thm_prop (equalities1, equalities2))
   424       (Symtab.merge Thm.eq_thm_prop (equalities1, equalities2))
   428       (Library.merge Thm.eq_thm_prop (extinjects1, extinjects2))
   425       (Thm.merge_thms (extinjects1, extinjects2))
   429       (Symtab.merge Thm.eq_thm_prop (extsplit1, extsplit2))
   426       (Symtab.merge Thm.eq_thm_prop (extsplit1, extsplit2))
   430       (Symtab.merge (fn ((a, b, c, d), (w, x, y, z)) =>
   427       (Symtab.merge (fn ((a, b, c, d), (w, x, y, z)) =>
   431           Thm.eq_thm (a, w) andalso Thm.eq_thm (b, x) andalso
   428           Thm.eq_thm (a, w) andalso Thm.eq_thm (b, x) andalso
   432           Thm.eq_thm (c, y) andalso Thm.eq_thm (d, z)) (splits1, splits2))
   429           Thm.eq_thm (c, y) andalso Thm.eq_thm (d, z)) (splits1, splits2))
   433       (Symtab.merge (K true) (extfields1, extfields2))
   430       (Symtab.merge (K true) (extfields1, extfields2))