src/HOL/Tools/Function/mutual.ML
changeset 63004 f507e6fe1d77
parent 62093 bd73a2279fcd
child 63011 301e631666a0
equal deleted inserted replaced
63003:bf5fcc65586b 63004:f507e6fe1d77
     5 *)
     5 *)
     6 
     6 
     7 signature FUNCTION_MUTUAL =
     7 signature FUNCTION_MUTUAL =
     8 sig
     8 sig
     9   val prepare_function_mutual : Function_Common.function_config
     9   val prepare_function_mutual : Function_Common.function_config
    10     -> string (* defname *)
    10     -> binding (* defname *)
    11     -> ((string * typ) * mixfix) list
    11     -> ((string * typ) * mixfix) list
    12     -> term list
    12     -> term list
    13     -> local_theory
    13     -> local_theory
    14     -> ((thm (* goalstate *)
    14     -> ((thm (* goalstate *)
    15         * (Proof.context -> thm -> Function_Common.function_result) (* proof continuation *)
    15         * (Proof.context -> thm -> Function_Common.function_result) (* proof continuation *)
    88     val RST = Balanced_Tree.make (uncurry Sum_Tree.mk_sumT) dresultTs
    88     val RST = Balanced_Tree.make (uncurry Sum_Tree.mk_sumT) dresultTs
    89     val ST = Balanced_Tree.make (uncurry Sum_Tree.mk_sumT) argTs
    89     val ST = Balanced_Tree.make (uncurry Sum_Tree.mk_sumT) argTs
    90 
    90 
    91     val fsum_type = ST --> RST
    91     val fsum_type = ST --> RST
    92 
    92 
    93     val ([fsum_var_name], _) = Variable.add_fixes [ defname ^ "_sum" ] ctxt
    93     val ([fsum_var_name], _) =
       
    94       Variable.add_fixes_binding [Binding.map_name (suffix "_sum") defname] ctxt
    94     val fsum_var = (fsum_var_name, fsum_type)
    95     val fsum_var = (fsum_var_name, fsum_type)
    95 
    96 
    96     fun define (fvar as (n, _)) caTs resultT i =
    97     fun define (fvar as (n, _)) caTs resultT i =
    97       let
    98       let
    98         val vars = map_index (fn (j,T) => Free ("x" ^ string_of_int j, T)) caTs (* FIXME: Bind xs properly *)
    99         val vars = map_index (fn (j,T) => Free ("x" ^ string_of_int j, T)) caTs (* FIXME: Bind xs properly *)