135 val (Ts, env') = |
135 val (Ts, env') = |
136 (case opTs of |
136 (case opTs of |
137 NONE => fold_map mk_tvar (map snd tvars @ map snd tfrees) env |
137 NONE => fold_map mk_tvar (map snd tvars @ map snd tfrees) env |
138 | SOME Ts => (Ts, env)); |
138 | SOME Ts => (Ts, env)); |
139 val prop' = subst_atomic_types (map TVar tvars @ map TFree tfrees ~~ Ts) |
139 val prop' = subst_atomic_types (map TVar tvars @ map TFree tfrees ~~ Ts) |
140 (forall_intr_vfs prop) handle Library.UnequalLengths => |
140 (forall_intr_vfs prop) handle ListPair.UnequalLengths => |
141 error ("Wrong number of type arguments for " ^ quote (Proofterm.guess_name prf)) |
141 error ("Wrong number of type arguments for " ^ quote (Proofterm.guess_name prf)) |
142 in (prop', Proofterm.change_type (SOME Ts) prf, [], env', vTs) end; |
142 in (prop', Proofterm.change_type (SOME Ts) prf, [], env', vTs) end; |
143 |
143 |
144 fun head_norm (prop, prf, cnstrts, env, vTs) = |
144 fun head_norm (prop, prf, cnstrts, env, vTs) = |
145 (Envir.head_norm env prop, prf, cnstrts, env, vTs); |
145 (Envir.head_norm env prop, prf, cnstrts, env, vTs); |