src/Pure/Isar/obtain.ML
changeset 20085 c5d60752587f
parent 20004 e6d3f2b031e6
child 20201 24b49cbd438b
equal deleted inserted replaced
20084:aa320957f00c 20085:c5d60752587f
   118     val asms = map fst (Attrib.map_specs (prep_att thy) raw_asms) ~~ proppss;
   118     val asms = map fst (Attrib.map_specs (prep_att thy) raw_asms) ~~ proppss;
   119 
   119 
   120     val _ = Variable.warn_extra_tfrees fix_ctxt asms_ctxt;
   120     val _ = Variable.warn_extra_tfrees fix_ctxt asms_ctxt;
   121 
   121 
   122     (*obtain statements*)
   122     (*obtain statements*)
   123     val thesisN = Term.variant xs AutoBind.thesisN;
   123     val thesisN = Name.variant xs AutoBind.thesisN;
   124     val (thesis_var, thesis) = bind_judgment fix_ctxt thesisN;
   124     val (thesis_var, thesis) = bind_judgment fix_ctxt thesisN;
   125 
   125 
   126     fun occs_var x = Library.get_first (fn t =>
   126     fun occs_var x = Library.get_first (fn t =>
   127       Term.find_free t (ProofContext.get_skolem fix_ctxt x)) asm_props;
   127       Term.find_free t (ProofContext.get_skolem fix_ctxt x)) asm_props;
   128     val parms =
   128     val parms =
   194       (Vartab.empty, Int.max (maxidx, Thm.maxidx_of rule));
   194       (Vartab.empty, Int.max (maxidx, Thm.maxidx_of rule));
   195     val norm_type = Envir.norm_type tyenv;
   195     val norm_type = Envir.norm_type tyenv;
   196 
   196 
   197     val xs = map (apsnd norm_type o fst) vars;
   197     val xs = map (apsnd norm_type o fst) vars;
   198     val ys = map (apsnd norm_type) (Library.drop (m, params));
   198     val ys = map (apsnd norm_type) (Library.drop (m, params));
   199     val ys' = map Term.internal (Term.variantlist (map fst ys, map fst xs)) ~~ map #2 ys;
   199     val ys' = map Name.internal (Name.variant_list (map fst xs) (map fst ys)) ~~ map #2 ys;
   200     val terms = map (Drule.mk_term o cert o Free) (xs @ ys');
   200     val terms = map (Drule.mk_term o cert o Free) (xs @ ys');
   201 
   201 
   202     val instT =
   202     val instT =
   203       fold (Term.add_tvarsT o #2) params []
   203       fold (Term.add_tvarsT o #2) params []
   204       |> map (TVar #> (fn T => (certT T, certT (norm_type T))));
   204       |> map (TVar #> (fn T => (certT T, certT (norm_type T))));