src/HOL/Tools/inductive_codegen.ML
changeset 20071 8f3e1ddb50e6
parent 19861 620d90091788
child 20897 3f8d2834b2c4
equal deleted inserted replaced
20070:3f31fb81b83a 20071:8f3e1ddb50e6
   341     else ps
   341     else ps
   342   end;
   342   end;
   343 
   343 
   344 fun mk_v ((names, vs), s) = (case AList.lookup (op =) vs s of
   344 fun mk_v ((names, vs), s) = (case AList.lookup (op =) vs s of
   345       NONE => ((names, (s, [s])::vs), s)
   345       NONE => ((names, (s, [s])::vs), s)
   346     | SOME xs => let val s' = variant names s in
   346     | SOME xs => let val s' = Name.variant names s in
   347         ((s'::names, AList.update (op =) (s, s'::xs) vs), s') end);
   347         ((s'::names, AList.update (op =) (s, s'::xs) vs), s') end);
   348 
   348 
   349 fun distinct_v (nvs, Var ((s, 0), T)) =
   349 fun distinct_v (nvs, Var ((s, 0), T)) =
   350       apsnd (Var o rpair T o rpair 0) (mk_v (nvs, s))
   350       apsnd (Var o rpair T o rpair 0) (mk_v (nvs, s))
   351   | distinct_v (nvs, t $ u) =
   351   | distinct_v (nvs, t $ u) =
   405       (fn (_, NONE) => NONE | (v, SOME js) => SOME (v, [([], js)]))
   405       (fn (_, NONE) => NONE | (v, SOME js) => SOME (v, [([], js)]))
   406         (arg_vs ~~ iss);
   406         (arg_vs ~~ iss);
   407 
   407 
   408     fun check_constrt ((names, eqs), t) =
   408     fun check_constrt ((names, eqs), t) =
   409       if is_constrt thy t then ((names, eqs), t) else
   409       if is_constrt thy t then ((names, eqs), t) else
   410         let val s = variant names "x";
   410         let val s = Name.variant names "x";
   411         in ((s::names, (s, t)::eqs), Var ((s, 0), fastype_of t)) end;
   411         in ((s::names, (s, t)::eqs), Var ((s, 0), fastype_of t)) end;
   412 
   412 
   413     fun compile_eq (gr, (s, t)) =
   413     fun compile_eq (gr, (s, t)) =
   414       apsnd (Pretty.block o cons (Pretty.str (s ^ " = ")) o single)
   414       apsnd (Pretty.block o cons (Pretty.str (s ^ " = ")) o single)
   415         (invoke_codegen thy defs dep module false (gr, t));
   415         (invoke_codegen thy defs dep module false (gr, t));