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 |