src/Pure/thm.ML
changeset 7921 56a84b4d04b1
parent 7642 40d912f78db8
child 8066 54d37e491ac2
equal deleted inserted replaced
7920:1ee85d4205b2 7921:56a84b4d04b1
   168   val set_mk_rews       : meta_simpset * (thm -> thm list) -> meta_simpset
   168   val set_mk_rews       : meta_simpset * (thm -> thm list) -> meta_simpset
   169   val set_mk_sym        : meta_simpset * (thm -> thm option) -> meta_simpset
   169   val set_mk_sym        : meta_simpset * (thm -> thm option) -> meta_simpset
   170   val set_mk_eq_True    : meta_simpset * (thm -> thm option) -> meta_simpset
   170   val set_mk_eq_True    : meta_simpset * (thm -> thm option) -> meta_simpset
   171   val set_termless      : meta_simpset * (term * term -> bool) -> meta_simpset
   171   val set_termless      : meta_simpset * (term * term -> bool) -> meta_simpset
   172   val trace_simp        : bool ref
   172   val trace_simp        : bool ref
       
   173   val debug_simp        : bool ref
   173   val rewrite_cterm     : bool * bool * bool -> meta_simpset ->
   174   val rewrite_cterm     : bool * bool * bool -> meta_simpset ->
   174                           (meta_simpset -> thm -> thm option) -> cterm -> thm
   175                           (meta_simpset -> thm -> thm option) -> cterm -> thm
   175 
   176 
   176   val invoke_oracle     : theory -> xstring -> Sign.sg * Object.T -> thm
   177   val invoke_oracle     : theory -> xstring -> Sign.sg * Object.T -> thm
   177 end;
   178 end;
  1517 
  1518 
  1518 fun prthm warn a (thm as Thm{sign_ref, prop, ...}) =
  1519 fun prthm warn a (thm as Thm{sign_ref, prop, ...}) =
  1519   (prtm warn a (Sign.deref sign_ref) prop);
  1520   (prtm warn a (Sign.deref sign_ref) prop);
  1520 
  1521 
  1521 val trace_simp = ref false;
  1522 val trace_simp = ref false;
       
  1523 val debug_simp = ref false;
  1522 
  1524 
  1523 fun trace warn a = if !trace_simp then prnt warn a else ();
  1525 fun trace warn a = if !trace_simp then prnt warn a else ();
  1524 
  1526 fun debug warn a = if !debug_simp then prnt warn a else ();
  1525 fun trace_term warn a sign t =
  1527 
  1526   if !trace_simp then prtm warn a sign t else ();
  1528 fun trace_term warn a sign t = if !trace_simp then prtm warn a sign t else ();
       
  1529 fun debug_term warn a sign t = if !debug_simp then prtm warn a sign t else ();
  1527 
  1530 
  1528 fun trace_thm warn a (thm as Thm{sign_ref, prop, ...}) =
  1531 fun trace_thm warn a (thm as Thm{sign_ref, prop, ...}) =
  1529   (trace_term warn a (Sign.deref sign_ref) prop);
  1532   (trace_term warn a (Sign.deref sign_ref) prop);
  1530 
  1533 
  1531 
  1534 
  2083     in sort rrs ([],[]) end
  2086     in sort rrs ([],[]) end
  2084 
  2087 
  2085     fun proc_rews ([]:simproc list) = None
  2088     fun proc_rews ([]:simproc list) = None
  2086       | proc_rews ({name, proc, lhs = Cterm {t = plhs, ...}, ...} :: ps) =
  2089       | proc_rews ({name, proc, lhs = Cterm {t = plhs, ...}, ...} :: ps) =
  2087           if Pattern.matches tsigt (plhs, t) then
  2090           if Pattern.matches tsigt (plhs, t) then
  2088             (trace_term false ("Trying procedure " ^ quote name ^ " on:") signt eta_t;
  2091             (debug_term false ("Trying procedure " ^ quote name ^ " on:") signt eta_t;
  2089              case proc signt prems eta_t of
  2092              case proc signt prems eta_t of
  2090                None => (trace false "FAILED"; proc_rews ps)
  2093                None => (debug false "FAILED"; proc_rews ps)
  2091              | Some raw_thm =>
  2094              | Some raw_thm =>
  2092                  (trace_thm false ("Procedure " ^ quote name ^ " produced rewrite rule:") raw_thm;
  2095                  (trace_thm false ("Procedure " ^ quote name ^ " produced rewrite rule:") raw_thm;
  2093                   (case rews (mk_procrule raw_thm) of
  2096                   (case rews (mk_procrule raw_thm) of
  2094                     None => (trace false "IGNORED"; proc_rews ps)
  2097                     None => (trace false "IGNORED"; proc_rews ps)
  2095                   | some => some)))
  2098                   | some => some)))