97 (*convert all Vars in a theorem to Frees -- export??*) |
97 (*convert all Vars in a theorem to Frees -- export??*) |
98 fun freeze th = |
98 fun freeze th = |
99 let val fth = freezeT th |
99 let val fth = freezeT th |
100 val {prop,sign,...} = rep_thm fth |
100 val {prop,sign,...} = rep_thm fth |
101 fun mk_inst (Var(v,T)) = |
101 fun mk_inst (Var(v,T)) = |
102 (Sign.cterm_of sign (Var(v,T)), |
102 (cterm_of sign (Var(v,T)), |
103 Sign.cterm_of sign (Free(string_of v, T))) |
103 cterm_of sign (Free(string_of v, T))) |
104 val insts = map mk_inst (term_vars prop) |
104 val insts = map mk_inst (term_vars prop) |
105 in instantiate ([],insts) fth end; |
105 in instantiate ([],insts) fth end; |
106 |
106 |
107 (*Makes a rule by applying a tactic to an existing rule*) |
107 (*Makes a rule by applying a tactic to an existing rule*) |
108 fun rule_by_tactic (Tactic tf) rl = |
108 fun rule_by_tactic (Tactic tf) rl = |
182 fun liftvar (Var ((a,j), T)) = Var((a, j+inc), paramTs---> incr_tvar inc T) |
182 fun liftvar (Var ((a,j), T)) = Var((a, j+inc), paramTs---> incr_tvar inc T) |
183 | liftvar t = raise TERM("Variable expected", [t]); |
183 | liftvar t = raise TERM("Variable expected", [t]); |
184 fun liftterm t = list_abs_free (params, |
184 fun liftterm t = list_abs_free (params, |
185 Logic.incr_indexes(paramTs,inc) t) |
185 Logic.incr_indexes(paramTs,inc) t) |
186 (*Lifts instantiation pair over params*) |
186 (*Lifts instantiation pair over params*) |
187 fun liftpair (cv,ct) = (Sign.cfun liftvar cv, Sign.cfun liftterm ct) |
187 fun liftpair (cv,ct) = (cterm_fun liftvar cv, cterm_fun liftterm ct) |
188 fun lifttvar((a,i),ctyp) = |
188 fun lifttvar((a,i),ctyp) = |
189 let val {T,sign} = Sign.rep_ctyp ctyp |
189 let val {T,sign} = rep_ctyp ctyp |
190 in ((a,i+inc), Sign.ctyp_of sign (incr_tvar inc T)) end |
190 in ((a,i+inc), ctyp_of sign (incr_tvar inc T)) end |
191 val rts = types_sorts rule and (types,sorts) = types_sorts state |
191 val rts = types_sorts rule and (types,sorts) = types_sorts state |
192 fun types'(a,~1) = (case assoc(params,a) of None => types(a,~1) | sm => sm) |
192 fun types'(a,~1) = (case assoc(params,a) of None => types(a,~1) | sm => sm) |
193 | types'(ixn) = types ixn; |
193 | types'(ixn) = types ixn; |
194 val (Tinsts,insts) = Sign.read_insts sign rts (types',sorts) sinsts |
194 val (Tinsts,insts) = read_insts sign rts (types',sorts) sinsts |
195 in instantiate (map lifttvar Tinsts, map liftpair insts) |
195 in instantiate (map lifttvar Tinsts, map liftpair insts) |
196 (lift_rule (state,i) rule) |
196 (lift_rule (state,i) rule) |
197 end; |
197 end; |
198 |
198 |
199 |
199 |