src/HOL/Tools/Function/function_core.ML
changeset 63011 301e631666a0
parent 63005 d743bb1b6c23
child 63352 4eaf35781b23
--- a/src/HOL/Tools/Function/function_core.ML	Mon Apr 18 14:26:42 2016 +0200
+++ b/src/HOL/Tools/Function/function_core.ML	Mon Apr 18 14:30:24 2016 +0200
@@ -9,8 +9,8 @@
   val trace: bool Unsynchronized.ref
   val prepare_function : Function_Common.function_config
     -> binding (* defname *)
-    -> ((bstring * typ) * mixfix) list (* defined symbol *)
-    -> ((bstring * typ) list * term list * term * term) list (* specification *)
+    -> ((binding * typ) * mixfix) list (* defined symbol *)
+    -> ((string * typ) list * term list * term * term) list (* specification *)
     -> local_theory
     -> (term   (* f *)
         * thm  (* goalstate *)
@@ -499,7 +499,7 @@
       |> Syntax.check_term lthy
   in
     lthy |> Local_Theory.define
-      ((Binding.name (fname ^ "C") (* FIXME proper binding *), mixfix), ((f_def_binding, []), f_def))
+      ((Binding.map_name (suffix "C") fname, mixfix), ((f_def_binding, []), f_def))
   end
 
 fun define_recursion_relation (R_binding, R_type) qglrs clauses RCss lthy =
@@ -826,15 +826,15 @@
   let
     val FunctionConfig {domintros, default=default_opt, ...} = config
 
-    val default_str = the_default "%x. HOL.undefined" default_opt
-    val fvar = Free (fname, fT)
+    val default_str = the_default "%x. HOL.undefined" (* FIXME proper term!? *) default_opt
+    val fvar = (Binding.name_of fname, fT)
     val domT = domain_type fT
     val ranT = range_type fT
 
     val default = Syntax.parse_term lthy default_str
       |> Type.constraint fT |> Syntax.check_term lthy
 
-    val (globals, ctxt') = fix_globals domT ranT fvar lthy
+    val (globals, ctxt') = fix_globals domT ranT (Free fvar) lthy
 
     val Globals { x, h, ... } = globals
 
@@ -843,7 +843,7 @@
     val n = length abstract_qglrs
 
     fun build_tree (ClauseContext { ctxt, rhs, ...}) =
-       Function_Context_Tree.mk_tree (fname, fT) h ctxt rhs
+       Function_Context_Tree.mk_tree fvar h ctxt rhs
 
     val trees = map build_tree clauses
     val RCss = map find_calls trees
@@ -851,13 +851,14 @@
     val ((G, GIntro_thms, G_elim, G_induct), lthy) =
       PROFILE "def_graph"
         (define_graph
-          (derived_name_suffix defname "_graph", domT --> ranT --> boolT) fvar clauses RCss) lthy
+          (derived_name_suffix defname "_graph", domT --> ranT --> boolT) (Free fvar) clauses RCss)
+        lthy
 
     val ((f, (_, f_defthm)), lthy) =
       PROFILE "def_fun" (define_function defname (fname, mixfix) domT ranT G default) lthy
 
-    val RCss = map (map (inst_RC lthy fvar f)) RCss
-    val trees = map (Function_Context_Tree.inst_tree lthy fvar f) trees
+    val RCss = map (map (inst_RC lthy (Free fvar) f)) RCss
+    val trees = map (Function_Context_Tree.inst_tree lthy (Free fvar) f) trees
 
     val ((R, RIntro_thmss, R_elim), lthy) =
       PROFILE "def_rel"
@@ -867,7 +868,7 @@
     val dom = mk_acc domT R
     val (_, lthy) =
       Local_Theory.abbrev Syntax.mode_default
-        ((name_suffix defname "_dom", NoSyn), dom) lthy
+        ((derived_name_suffix defname "_dom", NoSyn), dom) lthy
 
     val newthy = Proof_Context.theory_of lthy
     val clauses = map (transfer_clause_ctx newthy) clauses
@@ -880,7 +881,7 @@
       mk_completeness globals clauses abstract_qglrs |> Thm.cterm_of lthy |> Thm.assume
 
     val compat =
-      mk_compat_proof_obligations domT ranT fvar f abstract_qglrs
+      mk_compat_proof_obligations domT ranT (Free fvar) f abstract_qglrs
       |> map (Thm.cterm_of lthy #> Thm.assume)
 
     val compat_store = store_compat_thms n compat
@@ -921,5 +922,4 @@
     ((f, goalstate, mk_partial_rules), lthy)
   end
 
-
 end