src/HOL/Tools/record_package.ML
changeset 16281 de9815628d33
parent 16124 8340f7ca96d0
child 16330 934219e919e4
equal deleted inserted replaced
16280:d7f8c48d5acb 16281:de9815628d33
   234   equalities = equalities, extinjects=extinjects, extsplit = extsplit, splits = splits, 
   234   equalities = equalities, extinjects=extinjects, extsplit = extsplit, splits = splits, 
   235   extfields = extfields, fieldext = fieldext }: record_data;
   235   extfields = extfields, fieldext = fieldext }: record_data;
   236 
   236 
   237 structure RecordsArgs =
   237 structure RecordsArgs =
   238 struct
   238 struct
   239   val name = "HOL/records";      
   239   val name = "HOL/records";       
   240   type T = record_data;
   240   type T = record_data;
   241 
   241 
   242   val empty =
   242   val empty =
   243     make_record_data Symtab.empty
   243     make_record_data Symtab.empty
   244       {selectors = Symtab.empty, updates = Symtab.empty, simpset = HOL_basic_ss}
   244       {selectors = Symtab.empty, updates = Symtab.empty, simpset = HOL_basic_ss}
   627       gen_adv_record_type_scheme_tr "_field_types" "_field_type" ext_typeN;
   627       gen_adv_record_type_scheme_tr "_field_types" "_field_type" ext_typeN;
   628 
   628 
   629 
   629 
   630 val parse_translation =
   630 val parse_translation =
   631  [("_record_update", record_update_tr),
   631  [("_record_update", record_update_tr),
   632   ("_update_name", update_name_tr)];
   632   ("_update_name", update_name_tr)]; 
   633 
   633 
   634 val adv_parse_translation = 
   634 val adv_parse_translation = 
   635  [("_record",adv_record_tr),
   635  [("_record",adv_record_tr),
   636   ("_record_scheme",adv_record_scheme_tr),
   636   ("_record_scheme",adv_record_scheme_tr),
   637   ("_record_type",adv_record_type_tr),
   637   ("_record_type",adv_record_type_tr),
   638   ("_record_type_scheme",adv_record_type_scheme_tr)];
   638   ("_record_type_scheme",adv_record_type_scheme_tr)]; 
   639 
   639 
   640 (* print translations *)
   640 (* print translations *)
   641 
   641 
   642 val print_record_type_abbr = ref true;
   642 val print_record_type_abbr = ref true;
   643 val print_record_type_as_fields = ref true;
   643 val print_record_type_as_fields = ref true;
   727       val T = fixT (Sign.intern_typ sg 
   727       val T = fixT (Sign.intern_typ sg 
   728                       (Syntax.typ_of_term (get_sort (Syntax.raw_term_sorts tm)) I tm)); 
   728                       (Syntax.typ_of_term (get_sort (Syntax.raw_term_sorts tm)) I tm)); 
   729       val tsig = Sign.tsig_of sg
   729       val tsig = Sign.tsig_of sg
   730 
   730 
   731       fun mk_type_abbr subst name alphas = 
   731       fun mk_type_abbr subst name alphas = 
   732           let val abbrT = Type (name, map (fn a => TVar ((a, 0), [])) alphas);
   732           let val abbrT = Type (name, map (fn a => TVar ((a, 0), Sign.defaultS sg)) alphas);
   733           in Syntax.term_of_typ (! Syntax.show_sorts) (Envir.norm_type subst abbrT) end;    
   733           in Syntax.term_of_typ (! Syntax.show_sorts) (Envir.norm_type subst abbrT) end;    
   734 
   734 
   735       fun unify rT T = fst (Type.unify tsig (Vartab.empty,0) (Type.varifyT rT,T));
   735       fun unify rT T = fst (Type.unify tsig (Vartab.empty,0) (Type.varifyT rT,T));
   736 
   736 
   737    in if !print_record_type_abbr
   737    in if !print_record_type_abbr
   738       then (case last_extT T of
   738       then (case last_extT T of
   739              SOME (name,_) 
   739              SOME (name,_) 
   740               => if name = lastExt 
   740               => if name = lastExt 
   741                  then
   741                  then
   742 		  (let 
   742 		  (let
   743                        val subst = unify schemeT T 
   743                      val subst = unify schemeT T 
   744                    in 
   744                    in 
   745                     if HOLogic.is_unitT (Envir.norm_type subst (TVar((zeta,0),Sign.defaultS sg)))
   745                     if HOLogic.is_unitT (Envir.norm_type subst (TVar((zeta,0),Sign.defaultS sg)))
   746                     then mk_type_abbr subst abbr alphas
   746                     then mk_type_abbr subst abbr alphas
   747                     else mk_type_abbr subst (suffix schemeN abbr) (alphas@[zeta])
   747                     else mk_type_abbr subst (suffix schemeN abbr) (alphas@[zeta])
   748 		   end handle TUNIFY => default_tr' sg tm)
   748 		   end handle TUNIFY => default_tr' sg tm)
  2141 
  2141 
  2142 end;
  2142 end;
  2143 
  2143 
  2144 
  2144 
  2145 structure BasicRecordPackage: BASIC_RECORD_PACKAGE = RecordPackage;
  2145 structure BasicRecordPackage: BASIC_RECORD_PACKAGE = RecordPackage;
  2146 open BasicRecordPackage;
  2146 open BasicRecordPackage;