src/HOL/BNF/Tools/bnf_def.ML
changeset 54425 adbcad187fcf
parent 54421 632be352a5a3
child 54426 edb87aac9cca
equal deleted inserted replaced
54424:72ec50a85f3b 54425:adbcad187fcf
   657   let
   657   let
   658     val fact_policy = mk_fact_policy no_defs_lthy;
   658     val fact_policy = mk_fact_policy no_defs_lthy;
   659     val bnf_b = qualify raw_bnf_b;
   659     val bnf_b = qualify raw_bnf_b;
   660     val live = length raw_sets;
   660     val live = length raw_sets;
   661 
   661 
   662     val bnf_rhs_T = prep_typ no_defs_lthy raw_bnf_T;
   662     val T_rhs = prep_typ no_defs_lthy raw_bnf_T;
   663     val map_rhs = prep_term no_defs_lthy raw_map;
   663     val map_rhs = prep_term no_defs_lthy raw_map;
   664     val set_rhss = map (prep_term no_defs_lthy) raw_sets;
   664     val set_rhss = map (prep_term no_defs_lthy) raw_sets;
   665     val bd_rhs = prep_term no_defs_lthy raw_bd;
   665     val bd_rhs = prep_term no_defs_lthy raw_bd;
   666 
   666 
   667     fun err T =
   667     fun err T =
   668       error ("Trying to register the type " ^ quote (Syntax.string_of_typ no_defs_lthy T) ^
   668       error ("Trying to register the type " ^ quote (Syntax.string_of_typ no_defs_lthy T) ^
   669         " as unnamed BNF");
   669         " as unnamed BNF");
   670 
   670 
   671     val (bnf_b, key) =
   671     val (bnf_b, key) =
   672       if Binding.eq_name (bnf_b, Binding.empty) then
   672       if Binding.eq_name (bnf_b, Binding.empty) then
   673         (case bnf_rhs_T of
   673         (case T_rhs of
   674           Type (C, Ts) => if forall (can dest_TFree) Ts
   674           Type (C, Ts) => if forall (can dest_TFree) Ts
   675             then (Binding.qualified_name C, C) else err bnf_rhs_T
   675             then (Binding.qualified_name C, C) else err T_rhs
   676         | T => err T)
   676         | T => err T)
   677       else (bnf_b, Local_Theory.full_name no_defs_lthy bnf_b);
   677       else (bnf_b, Local_Theory.full_name no_defs_lthy bnf_b);
   678 
   678 
   679     val def_qualify = Binding.conceal o Binding.qualify false (Binding.name_of bnf_b);
   679     val def_qualify = Binding.conceal o Binding.qualify false (Binding.name_of bnf_b);
   680 
   680 
   743       handle TYPE _ => error "Bad map function";
   743       handle TYPE _ => error "Bad map function";
   744 
   744 
   745     val CA_params = map TVar (Term.add_tvarsT CA []);
   745     val CA_params = map TVar (Term.add_tvarsT CA []);
   746 
   746 
   747     val bnf_sets = map2 (normalize_set CA_params) alphas (map (Morphism.term phi) bnf_set_terms);
   747     val bnf_sets = map2 (normalize_set CA_params) alphas (map (Morphism.term phi) bnf_set_terms);
   748     val bnf_T = Morphism.typ phi bnf_rhs_T;
   748     val bnf_T = Morphism.typ phi T_rhs;
   749     val bnf_bd =
   749     val bnf_bd =
   750       Term.subst_TVars (Term.add_tvar_namesT bnf_T [] ~~ CA_params) (Morphism.term phi bnf_bd_term);
   750       Term.subst_TVars (Term.add_tvar_namesT bnf_T [] ~~ CA_params) (Morphism.term phi bnf_bd_term);
   751 
   751 
   752     (*TODO: assert Ds = (TVars of bnf_map) \ (alphas @ betas) as sets*)
   752     (*TODO: assert Ds = (TVars of bnf_map) \ (alphas @ betas) as sets*)
   753     val deads = (case Ds_opt of
   753     val deads = (case Ds_opt of