src/Pure/tactic.ML
changeset 952 9e10962866b0
parent 949 83c588d6fee9
child 1077 c2df11ae8b55
equal deleted inserted replaced
951:682139612060 952:9e10962866b0
   218 
   218 
   219 (*"Resolve" version.  Note: res_inst_tac cannot behave sensibly if the
   219 (*"Resolve" version.  Note: res_inst_tac cannot behave sensibly if the
   220   terms that are substituted contain (term or type) unknowns from the
   220   terms that are substituted contain (term or type) unknowns from the
   221   goal, because it is unable to instantiate goal unknowns at the same time.
   221   goal, because it is unable to instantiate goal unknowns at the same time.
   222 
   222 
   223   The type checker freezes all flexible type vars that were introduced during
   223   The type checker is instructed not to freezes flexible type vars that
   224   type inference and still remain in the term at the end.  This avoids the
   224   were introduced during type inference and still remain in the term at the
   225   introduction of flexible type vars in goals and other places where they
   225   end.  This increases flexibility but can introduce schematic type vars in
   226   could cause complications.  If you really want a flexible type var, you
   226   goals.
   227   have to put it in yourself as a constraint.
       
   228 
       
   229   This policy breaks down when a list of substitutions is type checked: later
       
   230   pairs may force type instantiations in earlier pairs, which is impossible,
       
   231   because the type vars in the earlier pairs are already frozen.
       
   232 *)
   227 *)
   233 fun res_inst_tac sinsts rule i =
   228 fun res_inst_tac sinsts rule i =
   234     compose_inst_tac sinsts (false, rule, nprems_of rule) i;
   229     compose_inst_tac sinsts (false, rule, nprems_of rule) i;
   235 
   230 
   236 (*eresolve (elimination) version*)
   231 (*eresolve (elimination) version*)