src/Pure/proofterm.ML
changeset 74200 17090e27aae9
parent 74159 c6bce3633c53
child 74220 c49134ee16c1
equal deleted inserted replaced
74198:f54b061c2c22 74200:17090e27aae9
   111   val forall_intr_proof': term -> proof -> proof
   111   val forall_intr_proof': term -> proof -> proof
   112   val varify_proof: term -> (string * sort) list -> proof -> proof
   112   val varify_proof: term -> (string * sort) list -> proof -> proof
   113   val legacy_freezeT: term -> proof -> proof
   113   val legacy_freezeT: term -> proof -> proof
   114   val rotate_proof: term list -> term -> (string * typ) list -> term list -> int -> proof -> proof
   114   val rotate_proof: term list -> term -> (string * typ) list -> term list -> int -> proof -> proof
   115   val permute_prems_proof: term list -> int -> int -> proof -> proof
   115   val permute_prems_proof: term list -> int -> int -> proof -> proof
   116   val generalize_proof: string list * string list -> int -> term -> proof -> proof
   116   val generalize_proof: Symtab.set * Symtab.set -> int -> term -> proof -> proof
   117   val instantiate: ((indexname * sort) * typ) list * ((indexname * typ) * term) list
   117   val instantiate: ((indexname * sort) * typ) list * ((indexname * typ) * term) list
   118     -> proof -> proof
   118     -> proof -> proof
   119   val lift_proof: term -> int -> term -> proof -> proof
   119   val lift_proof: term -> int -> term -> proof -> proof
   120   val incr_indexes: int -> proof -> proof
   120   val incr_indexes: int -> proof -> proof
   121   val assumption_proof: term list -> term -> int -> proof -> proof
   121   val assumption_proof: term list -> term -> int -> proof -> proof
   947 (* generalization *)
   947 (* generalization *)
   948 
   948 
   949 fun generalize_proof (tfrees, frees) idx prop prf =
   949 fun generalize_proof (tfrees, frees) idx prop prf =
   950   let
   950   let
   951     val gen =
   951     val gen =
   952       if null frees then []
   952       if Symtab.is_empty frees then []
   953       else
   953       else
   954         fold_aterms (fn Free (x, T) => member (op =) frees x ? insert (op =) (x, T) | _ => I)
   954         fold_aterms (fn Free (x, T) => Symtab.defined frees x ? insert (op =) (x, T) | _ => I)
   955           (Term_Subst.generalize (tfrees, []) idx prop) [];
   955           (Term_Subst.generalize (tfrees, Symtab.empty) idx prop) [];
   956   in
   956   in
   957     prf
   957     prf
   958     |> Same.commit (map_proof_terms_same
   958     |> Same.commit (map_proof_terms_same
   959         (Term_Subst.generalize_same (tfrees, []) idx)
   959         (Term_Subst.generalize_same (tfrees, Symtab.empty) idx)
   960         (Term_Subst.generalizeT_same tfrees idx))
   960         (Term_Subst.generalizeT_same tfrees idx))
   961     |> fold (fn (x, T) => forall_intr_proof (x, Free (x, T)) NONE) gen
   961     |> fold (fn (x, T) => forall_intr_proof (x, Free (x, T)) NONE) gen
   962     |> fold_rev (fn (x, T) => fn prf' => prf' %> Var (Name.clean_index (x, idx), T)) gen
   962     |> fold_rev (fn (x, T) => fn prf' => prf' %> Var (Name.clean_index (x, idx), T)) gen
   963   end;
   963   end;
   964 
   964