src/HOL/Tools/res_blacklist.ML
author wenzelm
Thu, 29 Oct 2009 16:06:15 +0100
changeset 33308 cf62d1690d04
child 33316 6a72af4e84b8
permissions -rw-r--r--
separate ResBlacklist, based on scalable persistent data -- avoids inefficient hashing later on;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
33308
cf62d1690d04 separate ResBlacklist, based on scalable persistent data -- avoids inefficient hashing later on;
wenzelm
parents:
diff changeset
     1
(*  Title:      HOL/Tools/res_blacklist.ML
cf62d1690d04 separate ResBlacklist, based on scalable persistent data -- avoids inefficient hashing later on;
wenzelm
parents:
diff changeset
     2
    Author:     Lawrence C Paulson, Cambridge University Computer Laboratory
cf62d1690d04 separate ResBlacklist, based on scalable persistent data -- avoids inefficient hashing later on;
wenzelm
parents:
diff changeset
     3
    Author:     Makarius
cf62d1690d04 separate ResBlacklist, based on scalable persistent data -- avoids inefficient hashing later on;
wenzelm
parents:
diff changeset
     4
cf62d1690d04 separate ResBlacklist, based on scalable persistent data -- avoids inefficient hashing later on;
wenzelm
parents:
diff changeset
     5
Theorems blacklisted to sledgehammer.  These theorems typically
cf62d1690d04 separate ResBlacklist, based on scalable persistent data -- avoids inefficient hashing later on;
wenzelm
parents:
diff changeset
     6
produce clauses that are prolific (match too many equality or
cf62d1690d04 separate ResBlacklist, based on scalable persistent data -- avoids inefficient hashing later on;
wenzelm
parents:
diff changeset
     7
membership literals) and relate to seldom-used facts.  Some duplicate
cf62d1690d04 separate ResBlacklist, based on scalable persistent data -- avoids inefficient hashing later on;
wenzelm
parents:
diff changeset
     8
other rules.
cf62d1690d04 separate ResBlacklist, based on scalable persistent data -- avoids inefficient hashing later on;
wenzelm
parents:
diff changeset
     9
*)
cf62d1690d04 separate ResBlacklist, based on scalable persistent data -- avoids inefficient hashing later on;
wenzelm
parents:
diff changeset
    10
cf62d1690d04 separate ResBlacklist, based on scalable persistent data -- avoids inefficient hashing later on;
wenzelm
parents:
diff changeset
    11
signature RES_BLACKLIST =
cf62d1690d04 separate ResBlacklist, based on scalable persistent data -- avoids inefficient hashing later on;
wenzelm
parents:
diff changeset
    12
sig
cf62d1690d04 separate ResBlacklist, based on scalable persistent data -- avoids inefficient hashing later on;
wenzelm
parents:
diff changeset
    13
  val setup: theory -> theory
cf62d1690d04 separate ResBlacklist, based on scalable persistent data -- avoids inefficient hashing later on;
wenzelm
parents:
diff changeset
    14
  val blacklisted: Proof.context -> thm -> bool
cf62d1690d04 separate ResBlacklist, based on scalable persistent data -- avoids inefficient hashing later on;
wenzelm
parents:
diff changeset
    15
  val add: attribute
cf62d1690d04 separate ResBlacklist, based on scalable persistent data -- avoids inefficient hashing later on;
wenzelm
parents:
diff changeset
    16
  val del: attribute
cf62d1690d04 separate ResBlacklist, based on scalable persistent data -- avoids inefficient hashing later on;
wenzelm
parents:
diff changeset
    17
end;
cf62d1690d04 separate ResBlacklist, based on scalable persistent data -- avoids inefficient hashing later on;
wenzelm
parents:
diff changeset
    18
cf62d1690d04 separate ResBlacklist, based on scalable persistent data -- avoids inefficient hashing later on;
wenzelm
parents:
diff changeset
    19
structure ResBlacklist: RES_BLACKLIST =
cf62d1690d04 separate ResBlacklist, based on scalable persistent data -- avoids inefficient hashing later on;
wenzelm
parents:
diff changeset
    20
struct
cf62d1690d04 separate ResBlacklist, based on scalable persistent data -- avoids inefficient hashing later on;
wenzelm
parents:
diff changeset
    21
cf62d1690d04 separate ResBlacklist, based on scalable persistent data -- avoids inefficient hashing later on;
wenzelm
parents:
diff changeset
    22
structure Data = GenericDataFun
cf62d1690d04 separate ResBlacklist, based on scalable persistent data -- avoids inefficient hashing later on;
wenzelm
parents:
diff changeset
    23
(
cf62d1690d04 separate ResBlacklist, based on scalable persistent data -- avoids inefficient hashing later on;
wenzelm
parents:
diff changeset
    24
  type T = thm Termtab.table;
cf62d1690d04 separate ResBlacklist, based on scalable persistent data -- avoids inefficient hashing later on;
wenzelm
parents:
diff changeset
    25
  val empty = Termtab.empty;
cf62d1690d04 separate ResBlacklist, based on scalable persistent data -- avoids inefficient hashing later on;
wenzelm
parents:
diff changeset
    26
  val extend = I;
cf62d1690d04 separate ResBlacklist, based on scalable persistent data -- avoids inefficient hashing later on;
wenzelm
parents:
diff changeset
    27
  fun merge _ tabs = Termtab.merge (K true) tabs;
cf62d1690d04 separate ResBlacklist, based on scalable persistent data -- avoids inefficient hashing later on;
wenzelm
parents:
diff changeset
    28
);
cf62d1690d04 separate ResBlacklist, based on scalable persistent data -- avoids inefficient hashing later on;
wenzelm
parents:
diff changeset
    29
cf62d1690d04 separate ResBlacklist, based on scalable persistent data -- avoids inefficient hashing later on;
wenzelm
parents:
diff changeset
    30
fun blacklisted ctxt th =
cf62d1690d04 separate ResBlacklist, based on scalable persistent data -- avoids inefficient hashing later on;
wenzelm
parents:
diff changeset
    31
  Termtab.defined (Data.get (Context.Proof ctxt)) (Thm.full_prop_of th);
cf62d1690d04 separate ResBlacklist, based on scalable persistent data -- avoids inefficient hashing later on;
wenzelm
parents:
diff changeset
    32
cf62d1690d04 separate ResBlacklist, based on scalable persistent data -- avoids inefficient hashing later on;
wenzelm
parents:
diff changeset
    33
fun add_thm th = Data.map (Termtab.update (Thm.full_prop_of th, th));
cf62d1690d04 separate ResBlacklist, based on scalable persistent data -- avoids inefficient hashing later on;
wenzelm
parents:
diff changeset
    34
fun del_thm th = Data.map (Termtab.delete_safe (Thm.full_prop_of th));
cf62d1690d04 separate ResBlacklist, based on scalable persistent data -- avoids inefficient hashing later on;
wenzelm
parents:
diff changeset
    35
cf62d1690d04 separate ResBlacklist, based on scalable persistent data -- avoids inefficient hashing later on;
wenzelm
parents:
diff changeset
    36
val add = Thm.declaration_attribute add_thm;
cf62d1690d04 separate ResBlacklist, based on scalable persistent data -- avoids inefficient hashing later on;
wenzelm
parents:
diff changeset
    37
val del = Thm.declaration_attribute del_thm;
cf62d1690d04 separate ResBlacklist, based on scalable persistent data -- avoids inefficient hashing later on;
wenzelm
parents:
diff changeset
    38
cf62d1690d04 separate ResBlacklist, based on scalable persistent data -- avoids inefficient hashing later on;
wenzelm
parents:
diff changeset
    39
val setup =
cf62d1690d04 separate ResBlacklist, based on scalable persistent data -- avoids inefficient hashing later on;
wenzelm
parents:
diff changeset
    40
  Attrib.setup @{binding noatp} (Attrib.add_del add del) "sledgehammer blacklisting" #>
cf62d1690d04 separate ResBlacklist, based on scalable persistent data -- avoids inefficient hashing later on;
wenzelm
parents:
diff changeset
    41
  PureThy.add_thms_dynamic (@{binding noatp}, map #2 o Termtab.dest o Data.get);
cf62d1690d04 separate ResBlacklist, based on scalable persistent data -- avoids inefficient hashing later on;
wenzelm
parents:
diff changeset
    42
cf62d1690d04 separate ResBlacklist, based on scalable persistent data -- avoids inefficient hashing later on;
wenzelm
parents:
diff changeset
    43
end;