401 val ctxt4 = init_body ctxt3; |
401 val ctxt4 = init_body ctxt3; |
402 val (elems, ctxt5) = fold_map prep_elem raw_elems ctxt4; |
402 val (elems, ctxt5) = fold_map prep_elem raw_elems ctxt4; |
403 val (insts, elems', concl, ctxt6) = prep_concl raw_concl (insts', elems, ctxt5); |
403 val (insts, elems', concl, ctxt6) = prep_concl raw_concl (insts', elems, ctxt5); |
404 |
404 |
405 (* Retrieve parameter types *) |
405 (* Retrieve parameter types *) |
406 val xs = fold (fn Fixes fixes => (fn ps => ps @ map (Variable.check_name o #1) fixes) |
406 val xs = maps (fn Fixes fixes => map (Variable.check_name o #1) fixes | _ => []) |
407 | _ => fn ps => ps) (Fixes fors :: elems') []; |
407 (Fixes fors :: elems'); |
408 val (Ts, ctxt7) = fold_map Proof_Context.inferred_param xs ctxt6; |
408 val (Ts, ctxt7) = fold_map Proof_Context.inferred_param xs ctxt6; |
409 val parms = xs ~~ Ts; (* params from expression and elements *) |
409 val parms = xs ~~ Ts; (* params from expression and elements *) |
410 |
410 |
411 val fors' = finish_fixes parms fors; |
411 val fors' = finish_fixes parms fors; |
412 val fixed = map (fn (b, SOME T, mx) => ((Binding.name_of b, T), mx)) fors'; |
412 val fixed = map (fn (b, SOME T, mx) => ((Binding.name_of b, T), mx)) fors'; |