src/Pure/Isar/expression.ML
changeset 63395 734723445a8c
parent 63352 4eaf35781b23
child 63402 f199837304d7
equal deleted inserted replaced
63394:7faeff3156d5 63395:734723445a8c
   328       in
   328       in
   329         (case elem of
   329         (case elem of
   330           Assumes asms => Assumes (asms |> map (fn (a, propps) =>
   330           Assumes asms => Assumes (asms |> map (fn (a, propps) =>
   331             (a, map (fn (t, ps) => (close_frees t, no_binds ps)) propps)))
   331             (a, map (fn (t, ps) => (close_frees t, no_binds ps)) propps)))
   332         | Defines defs => Defines (defs |> map (fn ((name, atts), (t, ps)) =>
   332         | Defines defs => Defines (defs |> map (fn ((name, atts), (t, ps)) =>
   333             let val ((c, _), t') = Local_Defs.cert_def ctxt (close_frees t)
   333             let val ((c, _), t') = Local_Defs.cert_def ctxt (K []) (close_frees t)
   334             in ((Thm.def_binding_optional (Binding.name c) name, atts), (t', no_binds ps)) end))
   334             in ((Thm.def_binding_optional (Binding.name c) name, atts), (t', no_binds ps)) end))
   335         | e => e)
   335         | e => e)
   336       end;
   336       end;
   337 
   337 
   338 in
   338 in
   538 
   538 
   539 val norm_term = Envir.beta_norm oo Term.subst_atomic;
   539 val norm_term = Envir.beta_norm oo Term.subst_atomic;
   540 
   540 
   541 fun bind_def ctxt eq (xs, env, eqs) =
   541 fun bind_def ctxt eq (xs, env, eqs) =
   542   let
   542   let
   543     val _ = Local_Defs.cert_def ctxt eq;
   543     val _ = Local_Defs.cert_def ctxt (K []) eq;
   544     val ((y, T), b) = Local_Defs.abs_def eq;
   544     val ((y, T), b) = Local_Defs.abs_def eq;
   545     val b' = norm_term env b;
   545     val b' = norm_term env b;
   546     fun err msg = error (msg ^ ": " ^ quote y);
   546     fun err msg = error (msg ^ ": " ^ quote y);
   547   in
   547   in
   548     (case filter (fn (Free (y', _), _) => y = y' | _ => false) env of
   548     (case filter (fn (Free (y', _), _) => y = y' | _ => false) env of