src/Pure/Proof/proof_rewrite_rules.ML
changeset 70826 63c60df79187
parent 70493 a9053fa30909
child 70836 44efbf252525
equal deleted inserted replaced
70825:3c215bdf4ab6 70826:63c60df79187
   253 fun elim_defs thy r defs prf =
   253 fun elim_defs thy r defs prf =
   254   let
   254   let
   255     val defs' = map (Logic.dest_equals o
   255     val defs' = map (Logic.dest_equals o
   256       map_types Type.strip_sorts o Thm.prop_of o Drule.abs_def) defs;
   256       map_types Type.strip_sorts o Thm.prop_of o Drule.abs_def) defs;
   257     val defnames = map Thm.derivation_name defs;
   257     val defnames = map Thm.derivation_name defs;
   258     val f = if not r then I else
   258     val prf' =
   259       let
   259       if r then
   260         val cnames = map (fst o dest_Const o fst) defs';
   260         let
   261         val thms = Proofterm.fold_proof_atoms true
   261           val cnames = map (fst o dest_Const o fst) defs';
   262           (fn PThm ({name, prop, ...}, _) =>
   262           val thms = Proofterm.fold_proof_atoms true
   263               if member (op =) defnames name orelse
   263             (fn PThm ({name, prop, ...}, _) =>
   264                 not (exists_Const (member (op =) cnames o #1) prop)
   264                 if member (op =) defnames name orelse
   265               then I
   265                   not (exists_Const (member (op =) cnames o #1) prop)
   266               else cons (name, SOME prop)
   266                 then I
   267             | _ => I) [prf] [];
   267                 else cons (name, SOME prop)
   268       in Proofterm.expand_proof thy thms end;
   268               | _ => I) [prf] [];
       
   269         in Proofterm.expand_proof thy thms prf end
       
   270       else prf;
   269   in
   271   in
   270     rewrite_terms (Pattern.rewrite_term thy defs' [])
   272     rewrite_terms (Pattern.rewrite_term thy defs' [])
   271       (fst (insert_refl defnames [] (f prf)))
   273       (fst (insert_refl defnames [] prf'))
   272   end;
   274   end;
   273 
   275 
   274 
   276 
   275 (**** eliminate all variables that don't occur in the proposition ****)
   277 (**** eliminate all variables that don't occur in the proposition ****)
   276 
   278