src/Pure/proofterm.ML
changeset 16940 d14ec6f2d29b
parent 16880 411d91d104c4
child 16983 c895701d55ea
equal deleted inserted replaced
16939:87fc64d2409f 16940:d14ec6f2d29b
   534   let
   534   let
   535     val fs = add_term_tfrees (t, []) \\ fixed;
   535     val fs = add_term_tfrees (t, []) \\ fixed;
   536     val ixns = add_term_tvar_ixns (t, []);
   536     val ixns = add_term_tvar_ixns (t, []);
   537     val fmap = fs ~~ variantlist (map fst fs, map #1 ixns)
   537     val fmap = fs ~~ variantlist (map fst fs, map #1 ixns)
   538     fun thaw (f as (a, S)) =
   538     fun thaw (f as (a, S)) =
   539       (case assoc (fmap, f) of
   539       (case gen_assoc (op =) (fmap, f) of
   540         NONE => TFree f
   540         NONE => TFree f
   541       | SOME b => TVar ((b, 0), S));
   541       | SOME b => TVar ((b, 0), S));
   542   in map_proof_terms (map_term_types (map_type_tfree thaw)) (map_type_tfree thaw) prf
   542   in map_proof_terms (map_term_types (map_type_tfree thaw)) (map_type_tfree thaw) prf
   543   end;
   543   end;
   544 
   544 
  1083           | NONE => NONE)
  1083           | NONE => NONE)
  1084       | rew2 _ _ _ = NONE
  1084       | rew2 _ _ _ = NONE
  1085 
  1085 
  1086   in getOpt (rew1 [] skel0 prf, prf) end;
  1086   in getOpt (rew1 [] skel0 prf, prf) end;
  1087 
  1087 
  1088 fun rewrite_proof tsig = rewrite_prf (fn (tab, f) =>
  1088 fun rewrite_proof tsig = rewrite_prf (fn (tyenv, f) =>
  1089   Type.typ_match tsig (tab, f ()) handle Type.TYPE_MATCH => raise PMatch);
  1089   Type.typ_match tsig (f ()) tyenv handle Type.TYPE_MATCH => raise PMatch);
  1090 
  1090 
  1091 fun rewrite_proof_notypes rews = rewrite_prf fst rews;
  1091 fun rewrite_proof_notypes rews = rewrite_prf fst rews;
  1092 
  1092 
       
  1093 
  1093 (**** theory data ****)
  1094 (**** theory data ****)
  1094 
       
  1095 (* data kind 'Pure/proof' *)
       
  1096 
  1095 
  1097 structure ProofData = TheoryDataFun
  1096 structure ProofData = TheoryDataFun
  1098 (struct
  1097 (struct
  1099   val name = "Pure/proof";
  1098   val name = "Pure/proof";
  1100   type T = ((proof * proof) list *
  1099   type T = ((proof * proof) list *