src/HOL/BNF/Tools/bnf_fp_n2m_sugar.ML
changeset 54740 91f54d386680
parent 54303 4f55054d197c
child 54899 7a01387c47d5
equal deleted inserted replaced
54739:d41099c829bf 54740:91f54d386680
    50   (map (morph_fp_sugar phi) fp_sugars,
    50   (map (morph_fp_sugar phi) fp_sugars,
    51    (Option.map (morph_lfp_sugar_thms phi) lfp_sugar_thms_opt,
    51    (Option.map (morph_lfp_sugar_thms phi) lfp_sugar_thms_opt,
    52     Option.map (morph_gfp_sugar_thms phi) gfp_sugar_thms_opt));
    52     Option.map (morph_gfp_sugar_thms phi) gfp_sugar_thms_opt));
    53 
    53 
    54 val transfer_n2m_sugar =
    54 val transfer_n2m_sugar =
    55   morph_n2m_sugar o Morphism.thm_morphism o Thm.transfer o Proof_Context.theory_of;
    55   morph_n2m_sugar o Morphism.transfer_morphism o Proof_Context.theory_of;
    56 
    56 
    57 fun n2m_sugar_of ctxt =
    57 fun n2m_sugar_of ctxt =
    58   Typtab.lookup (Data.get (Context.Proof ctxt))
    58   Typtab.lookup (Data.get (Context.Proof ctxt))
    59   #> Option.map (transfer_n2m_sugar ctxt);
    59   #> Option.map (transfer_n2m_sugar ctxt);
    60 
    60 
   125     val nn = length fpTs;
   125     val nn = length fpTs;
   126 
   126 
   127     fun target_ctr_sugar_of_fp_sugar fpT ({T, index, ctr_sugars, ...} : fp_sugar) =
   127     fun target_ctr_sugar_of_fp_sugar fpT ({T, index, ctr_sugars, ...} : fp_sugar) =
   128       let
   128       let
   129         val rho = Vartab.fold (cons o apsnd snd) (Sign.typ_match thy (T, fpT) Vartab.empty) [];
   129         val rho = Vartab.fold (cons o apsnd snd) (Sign.typ_match thy (T, fpT) Vartab.empty) [];
   130         val phi = Morphism.term_morphism (Term.subst_TVars rho);
   130         val phi = Morphism.term_morphism "BNF" (Term.subst_TVars rho);
   131       in
   131       in
   132         morph_ctr_sugar phi (nth ctr_sugars index)
   132         morph_ctr_sugar phi (nth ctr_sugars index)
   133       end;
   133       end;
   134 
   134 
   135     val ctr_defss = map (of_fp_sugar #ctr_defss) fp_sugars0;
   135     val ctr_defss = map (of_fp_sugar #ctr_defss) fp_sugars0;