221 let |
221 let |
222 val thy = ProofContext.theory_of ctxt; |
222 val thy = ProofContext.theory_of ctxt; |
223 val cert = Thm.cterm_of thy; |
223 val cert = Thm.cterm_of thy; |
224 |
224 |
225 val th = MetaSimplifier.norm_hhf raw_th; |
225 val th = MetaSimplifier.norm_hhf raw_th; |
226 val is_elim = ObjectLogic.is_elim th; |
226 val is_elim = Object_Logic.is_elim th; |
227 |
227 |
228 val ((_, [th']), ctxt') = Variable.import true [th] (Variable.set_body false ctxt); |
228 val ((_, [th']), ctxt') = Variable.import true [th] (Variable.set_body false ctxt); |
229 val prop = Thm.prop_of th'; |
229 val prop = Thm.prop_of th'; |
230 val (prems, concl) = Logic.strip_horn prop; |
230 val (prems, concl) = Logic.strip_horn prop; |
231 val concl_term = ObjectLogic.drop_judgment thy concl; |
231 val concl_term = Object_Logic.drop_judgment thy concl; |
232 |
232 |
233 val fixes = fold_aterms (fn v as Free (x, T) => |
233 val fixes = fold_aterms (fn v as Free (x, T) => |
234 if Variable.newly_fixed ctxt' ctxt x andalso not (v aconv concl_term) |
234 if Variable.newly_fixed ctxt' ctxt x andalso not (v aconv concl_term) |
235 then insert (op =) (x, T) else I | _ => I) prop [] |> rev; |
235 then insert (op =) (x, T) else I | _ => I) prop [] |> rev; |
236 val (assumes, cases) = take_suffix (fn prem => |
236 val (assumes, cases) = take_suffix (fn prem => |