equal
deleted
inserted
replaced
63 | is_Type _ = false |
63 | is_Type _ = false |
64 |
64 |
65 fun bnf_only_type_ctr f bnf = if is_Type (T_of_bnf bnf) then f bnf else I |
65 fun bnf_only_type_ctr f bnf = if is_Type (T_of_bnf bnf) then f bnf else I |
66 |
66 |
67 fun bnf_of_fp_sugar (fp_sugar:fp_sugar) = nth (#bnfs (#fp_res fp_sugar)) (#fp_res_index fp_sugar) |
67 fun bnf_of_fp_sugar (fp_sugar:fp_sugar) = nth (#bnfs (#fp_res fp_sugar)) (#fp_res_index fp_sugar) |
|
68 |
|
69 fun fp_sugar_only_type_ctr f fp_sugars = |
|
70 (case filter (is_Type o T_of_bnf o bnf_of_fp_sugar) fp_sugars of |
|
71 [] => I |
|
72 | fp_sugars' => f fp_sugars') |
68 |
73 |
69 (* relation constraints - bi_total & co. *) |
74 (* relation constraints - bi_total & co. *) |
70 |
75 |
71 fun mk_relation_constraint name arg = |
76 fun mk_relation_constraint name arg = |
72 (Const (name, fastype_of arg --> HOLogic.boolT)) $ arg |
77 (Const (name, fastype_of arg --> HOLogic.boolT)) $ arg |
403 end |
408 end |
404 |
409 |
405 |
410 |
406 fun transfer_fp_sugars_interpretation fp_sugar lthy = |
411 fun transfer_fp_sugars_interpretation fp_sugar lthy = |
407 let |
412 let |
408 val lthy = lthy |> (is_Type o T_of_bnf o bnf_of_fp_sugar) fp_sugar ? pred_injects fp_sugar |
413 val lthy = pred_injects fp_sugar lthy |
409 val transfer_rules_notes = fp_sugar_transfer_rules fp_sugar |
414 val transfer_rules_notes = fp_sugar_transfer_rules fp_sugar |
410 in |
415 in |
411 lthy |
416 lthy |
412 |> Local_Theory.notes transfer_rules_notes |
417 |> Local_Theory.notes transfer_rules_notes |
413 |> snd |
418 |> snd |
414 end |
419 end |
415 |
420 |
416 val _ = |
421 val _ = |
417 Theory.setup (fp_sugars_interpretation transfer_plugin (fold transfer_fp_sugars_interpretation)) |
422 Theory.setup (fp_sugars_interpretation transfer_plugin |
|
423 (fp_sugar_only_type_ctr (fold transfer_fp_sugars_interpretation))) |
418 |
424 |
419 end |
425 end |