equal
deleted
inserted
replaced
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; |