src/HOL/Tools/Transfer/transfer_bnf.ML
changeset 61768 99f1eaf70c3d
parent 61761 164eeb2ab675
child 62324 ae44f16dcea5
equal deleted inserted replaced
61767:f58d75535f66 61768:99f1eaf70c3d
    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