equal
deleted
inserted
replaced
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); |