src/Pure/Isar/expression.ML
changeset 42494 eef1a23c9077
parent 42482 42c7ef050bc3
child 43543 eb8b4851b039
equal deleted inserted replaced
42493:01430341fc79 42494:eef1a23c9077
   126       in (ps', is') end;
   126       in (ps', is') end;
   127 
   127 
   128     val (implicit, expr') = params_expr expr;
   128     val (implicit, expr') = params_expr expr;
   129 
   129 
   130     val implicit' = map #1 implicit;
   130     val implicit' = map #1 implicit;
   131     val fixed' = map (Variable.name o #1) fixed;
   131     val fixed' = map (Variable.check_name o #1) fixed;
   132     val _ = reject_dups "Duplicate fixed parameter(s): " fixed';
   132     val _ = reject_dups "Duplicate fixed parameter(s): " fixed';
   133     val implicit'' =
   133     val implicit'' =
   134       if strict then []
   134       if strict then []
   135       else
   135       else
   136         let val _ = reject_dups
   136         let val _ = reject_dups
   391     val ctxt4 = init_body ctxt3;
   391     val ctxt4 = init_body ctxt3;
   392     val (elems, ctxt5) = fold (prep_elem insts') raw_elems ([], ctxt4);
   392     val (elems, ctxt5) = fold (prep_elem insts') raw_elems ([], ctxt4);
   393     val (insts, elems', concl, ctxt6) = prep_concl raw_concl (insts', elems, ctxt5);
   393     val (insts, elems', concl, ctxt6) = prep_concl raw_concl (insts', elems, ctxt5);
   394 
   394 
   395     (* Retrieve parameter types *)
   395     (* Retrieve parameter types *)
   396     val xs = fold (fn Fixes fixes => (fn ps => ps @ map (Variable.name o #1) fixes)
   396     val xs = fold (fn Fixes fixes => (fn ps => ps @ map (Variable.check_name o #1) fixes)
   397       | _ => fn ps => ps) (Fixes fors :: elems') [];
   397       | _ => fn ps => ps) (Fixes fors :: elems') [];
   398     val (Ts, ctxt7) = fold_map Proof_Context.inferred_param xs ctxt6;
   398     val (Ts, ctxt7) = fold_map Proof_Context.inferred_param xs ctxt6;
   399     val parms = xs ~~ Ts;  (* params from expression and elements *)
   399     val parms = xs ~~ Ts;  (* params from expression and elements *)
   400 
   400 
   401     val Fixes fors' = finish_primitive parms I (Fixes fors);
   401     val Fixes fors' = finish_primitive parms I (Fixes fors);