src/Pure/Thy/thm_database.ML
author wenzelm
Sun, 21 Jan 2007 16:43:42 +0100
changeset 22144 c33450acd873
parent 22095 07875394618e
child 23921 947152add153
permissions -rw-r--r--
use_text: added name argument;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1132
dfb29abcf3c2 added theorem database which contains axioms and theorems indexed by the
clasohm
parents:
diff changeset
     1
(*  Title:      Pure/Thy/thm_database.ML
dfb29abcf3c2 added theorem database which contains axioms and theorems indexed by the
clasohm
parents:
diff changeset
     2
    ID:         $Id$
11895
73b2c277974f moved goal related stuff to goals.ML;
wenzelm
parents: 11769
diff changeset
     3
    Author:     Markus Wenzel, TU Muenchen
1132
dfb29abcf3c2 added theorem database which contains axioms and theorems indexed by the
clasohm
parents:
diff changeset
     4
17170
cbe14eb12729 added (use_)legacy_bindings;
wenzelm
parents: 15836
diff changeset
     5
ML toplevel interface to the theorem database.
4023
a9dc0484c903 restructured -- uses PureThy storage facilities;
wenzelm
parents: 3999
diff changeset
     6
*)
1262
8f40ff1299d8 added removal of theorems if theory is to be reloaded; changed functions for
clasohm
parents: 1245
diff changeset
     7
6204
c7ad5b27894f open BasicThmDatabase;
wenzelm
parents: 5744
diff changeset
     8
signature BASIC_THM_DATABASE =
4023
a9dc0484c903 restructured -- uses PureThy storage facilities;
wenzelm
parents: 3999
diff changeset
     9
sig
a9dc0484c903 restructured -- uses PureThy storage facilities;
wenzelm
parents: 3999
diff changeset
    10
  val store_thm: string * thm -> thm
7410
7369a35fb3c2 added store/bind_thms;
wenzelm
parents: 7182
diff changeset
    11
  val store_thms: string * thm list -> thm list
17170
cbe14eb12729 added (use_)legacy_bindings;
wenzelm
parents: 15836
diff changeset
    12
  val legacy_bindings: theory -> string
cbe14eb12729 added (use_)legacy_bindings;
wenzelm
parents: 15836
diff changeset
    13
  val use_legacy_bindings: theory -> unit
4023
a9dc0484c903 restructured -- uses PureThy storage facilities;
wenzelm
parents: 3999
diff changeset
    14
end;
1132
dfb29abcf3c2 added theorem database which contains axioms and theorems indexed by the
clasohm
parents:
diff changeset
    15
6204
c7ad5b27894f open BasicThmDatabase;
wenzelm
parents: 5744
diff changeset
    16
signature THM_DATABASE =
c7ad5b27894f open BasicThmDatabase;
wenzelm
parents: 5744
diff changeset
    17
sig
c7ad5b27894f open BasicThmDatabase;
wenzelm
parents: 5744
diff changeset
    18
  include BASIC_THM_DATABASE
7410
7369a35fb3c2 added store/bind_thms;
wenzelm
parents: 7182
diff changeset
    19
  val qed_thms: thm list ref
6204
c7ad5b27894f open BasicThmDatabase;
wenzelm
parents: 5744
diff changeset
    20
  val ml_store_thm: string * thm -> unit
7410
7369a35fb3c2 added store/bind_thms;
wenzelm
parents: 7182
diff changeset
    21
  val ml_store_thms: string * thm list -> unit
6204
c7ad5b27894f open BasicThmDatabase;
wenzelm
parents: 5744
diff changeset
    22
end;
c7ad5b27894f open BasicThmDatabase;
wenzelm
parents: 5744
diff changeset
    23
3627
3d0d5f2a2e33 tuned names;
wenzelm
parents: 3601
diff changeset
    24
structure ThmDatabase: THM_DATABASE =
1221
19dde7bfcd07 Added findI, findEs, and findE.
nipkow
parents: 1141
diff changeset
    25
struct
1132
dfb29abcf3c2 added theorem database which contains axioms and theorems indexed by the
clasohm
parents:
diff changeset
    26
4023
a9dc0484c903 restructured -- uses PureThy storage facilities;
wenzelm
parents: 3999
diff changeset
    27
(** store theorems **)
1132
dfb29abcf3c2 added theorem database which contains axioms and theorems indexed by the
clasohm
parents:
diff changeset
    28
13279
8a722689a1c9 removed thms_containing (see pure_thy.ML and proof_context.ML);
wenzelm
parents: 11895
diff changeset
    29
(* store in theory and perform presentation *)
1136
3910c96551d1 fixed bug in thms_containing; changed error/warning messages;
clasohm
parents: 1134
diff changeset
    30
4023
a9dc0484c903 restructured -- uses PureThy storage facilities;
wenzelm
parents: 3999
diff changeset
    31
fun store_thm (name, thm) =
7410
7369a35fb3c2 added store/bind_thms;
wenzelm
parents: 7182
diff changeset
    32
  let val thm' = hd (PureThy.smart_store_thms (name, [thm]))
6327
c6abb5884fed Present.theorem;
wenzelm
parents: 6204
diff changeset
    33
  in Present.theorem name thm'; thm' end;
1132
dfb29abcf3c2 added theorem database which contains axioms and theorems indexed by the
clasohm
parents:
diff changeset
    34
7410
7369a35fb3c2 added store/bind_thms;
wenzelm
parents: 7182
diff changeset
    35
fun store_thms (name, thms) =
7369a35fb3c2 added store/bind_thms;
wenzelm
parents: 7182
diff changeset
    36
  let val thms' = PureThy.smart_store_thms (name, thms)
7369a35fb3c2 added store/bind_thms;
wenzelm
parents: 7182
diff changeset
    37
  in Present.theorems name thms'; thms' end;
7369a35fb3c2 added store/bind_thms;
wenzelm
parents: 7182
diff changeset
    38
1262
8f40ff1299d8 added removal of theorems if theory is to be reloaded; changed functions for
clasohm
parents: 1245
diff changeset
    39
4023
a9dc0484c903 restructured -- uses PureThy storage facilities;
wenzelm
parents: 3999
diff changeset
    40
(* store on ML toplevel *)
a9dc0484c903 restructured -- uses PureThy storage facilities;
wenzelm
parents: 3999
diff changeset
    41
7410
7369a35fb3c2 added store/bind_thms;
wenzelm
parents: 7182
diff changeset
    42
val qed_thms: thm list ref = ref [];
1262
8f40ff1299d8 added removal of theorems if theory is to be reloaded; changed functions for
clasohm
parents: 1245
diff changeset
    43
7410
7369a35fb3c2 added store/bind_thms;
wenzelm
parents: 7182
diff changeset
    44
fun warn_ml name =
21482
7bb5de80917f moved ML identifiers to structure ML_Syntax;
wenzelm
parents: 20926
diff changeset
    45
  if ML_Syntax.is_identifier name then false
7573
aa87cf5a15f5 ml_store_thm: no warning for "";
wenzelm
parents: 7446
diff changeset
    46
  else if name = "" then true
7410
7369a35fb3c2 added store/bind_thms;
wenzelm
parents: 7182
diff changeset
    47
  else (warning ("Cannot bind theorem(s) " ^ quote name ^ " as ML value"); true);
7369a35fb3c2 added store/bind_thms;
wenzelm
parents: 7182
diff changeset
    48
22144
c33450acd873 use_text: added name argument;
wenzelm
parents: 22095
diff changeset
    49
val use_text_verbose = use_text "" Output.ml_output true;
7854
fe7b7e3c3ddc use_text_verbose;
wenzelm
parents: 7738
diff changeset
    50
4023
a9dc0484c903 restructured -- uses PureThy storage facilities;
wenzelm
parents: 3999
diff changeset
    51
fun ml_store_thm (name, thm) =
a9dc0484c903 restructured -- uses PureThy storage facilities;
wenzelm
parents: 3999
diff changeset
    52
  let val thm' = store_thm (name, thm) in
7410
7369a35fb3c2 added store/bind_thms;
wenzelm
parents: 7182
diff changeset
    53
    if warn_ml name then ()
13279
8a722689a1c9 removed thms_containing (see pure_thy.ML and proof_context.ML);
wenzelm
parents: 11895
diff changeset
    54
    else (qed_thms := [thm'];
8a722689a1c9 removed thms_containing (see pure_thy.ML and proof_context.ML);
wenzelm
parents: 11895
diff changeset
    55
      use_text_verbose ("val " ^ name ^ " = hd (! ThmDatabase.qed_thms);"))
7410
7369a35fb3c2 added store/bind_thms;
wenzelm
parents: 7182
diff changeset
    56
  end;
7369a35fb3c2 added store/bind_thms;
wenzelm
parents: 7182
diff changeset
    57
7369a35fb3c2 added store/bind_thms;
wenzelm
parents: 7182
diff changeset
    58
fun ml_store_thms (name, thms) =
7369a35fb3c2 added store/bind_thms;
wenzelm
parents: 7182
diff changeset
    59
  let val thms' = store_thms (name, thms) in
7369a35fb3c2 added store/bind_thms;
wenzelm
parents: 7182
diff changeset
    60
    if warn_ml name then ()
7854
fe7b7e3c3ddc use_text_verbose;
wenzelm
parents: 7738
diff changeset
    61
    else (qed_thms := thms'; use_text_verbose ("val " ^ name ^ " = ! ThmDatabase.qed_thms;"))
1262
8f40ff1299d8 added removal of theorems if theory is to be reloaded; changed functions for
clasohm
parents: 1245
diff changeset
    62
  end;
8f40ff1299d8 added removal of theorems if theory is to be reloaded; changed functions for
clasohm
parents: 1245
diff changeset
    63
4023
a9dc0484c903 restructured -- uses PureThy storage facilities;
wenzelm
parents: 3999
diff changeset
    64
17170
cbe14eb12729 added (use_)legacy_bindings;
wenzelm
parents: 15836
diff changeset
    65
(* legacy bindings *)
cbe14eb12729 added (use_)legacy_bindings;
wenzelm
parents: 15836
diff changeset
    66
cbe14eb12729 added (use_)legacy_bindings;
wenzelm
parents: 15836
diff changeset
    67
fun legacy_bindings thy =
cbe14eb12729 added (use_)legacy_bindings;
wenzelm
parents: 15836
diff changeset
    68
  let
cbe14eb12729 added (use_)legacy_bindings;
wenzelm
parents: 15836
diff changeset
    69
    val thy_name = Context.theory_name thy;
cbe14eb12729 added (use_)legacy_bindings;
wenzelm
parents: 15836
diff changeset
    70
    val (space, thms) = PureThy.theorems_of thy;
cbe14eb12729 added (use_)legacy_bindings;
wenzelm
parents: 15836
diff changeset
    71
cbe14eb12729 added (use_)legacy_bindings;
wenzelm
parents: 15836
diff changeset
    72
    fun prune name =
cbe14eb12729 added (use_)legacy_bindings;
wenzelm
parents: 15836
diff changeset
    73
      let
cbe14eb12729 added (use_)legacy_bindings;
wenzelm
parents: 15836
diff changeset
    74
        val xname = NameSpace.extern space name;
cbe14eb12729 added (use_)legacy_bindings;
wenzelm
parents: 15836
diff changeset
    75
        fun result prfx bname =
21482
7bb5de80917f moved ML identifiers to structure ML_Syntax;
wenzelm
parents: 20926
diff changeset
    76
          if (prfx = "" orelse ML_Syntax.is_identifier prfx) andalso
7bb5de80917f moved ML identifiers to structure ML_Syntax;
wenzelm
parents: 20926
diff changeset
    77
              ML_Syntax.is_identifier bname andalso
17170
cbe14eb12729 added (use_)legacy_bindings;
wenzelm
parents: 15836
diff changeset
    78
              NameSpace.intern space xname = name then
17412
e26cb20ef0cc TableFun/Symtab: curried lookup and update;
wenzelm
parents: 17221
diff changeset
    79
            SOME (prfx, (bname, xname, length (the (Symtab.lookup thms name)) = 1))
17170
cbe14eb12729 added (use_)legacy_bindings;
wenzelm
parents: 15836
diff changeset
    80
          else NONE;
21858
05f57309170c avoid conflict with Alice keywords: renamed pack -> implode, unpack -> explode, any -> many, avoided assert;
wenzelm
parents: 21482
diff changeset
    81
        val names = NameSpace.explode name;
17170
cbe14eb12729 added (use_)legacy_bindings;
wenzelm
parents: 15836
diff changeset
    82
      in
19012
wenzelm
parents: 18931
diff changeset
    83
        (case #2 (chop (length names - 2) names) of
17170
cbe14eb12729 added (use_)legacy_bindings;
wenzelm
parents: 15836
diff changeset
    84
          [bname] => result "" bname
cbe14eb12729 added (use_)legacy_bindings;
wenzelm
parents: 15836
diff changeset
    85
        | [prfx, bname] => result (if prfx = thy_name then "" else prfx) bname
cbe14eb12729 added (use_)legacy_bindings;
wenzelm
parents: 15836
diff changeset
    86
        | _ => NONE)
cbe14eb12729 added (use_)legacy_bindings;
wenzelm
parents: 15836
diff changeset
    87
      end;
cbe14eb12729 added (use_)legacy_bindings;
wenzelm
parents: 15836
diff changeset
    88
cbe14eb12729 added (use_)legacy_bindings;
wenzelm
parents: 15836
diff changeset
    89
    fun mk_struct "" = I
cbe14eb12729 added (use_)legacy_bindings;
wenzelm
parents: 15836
diff changeset
    90
      | mk_struct prfx = enclose ("structure " ^ prfx ^ " =\nstruct\n") "\nend\n";
cbe14eb12729 added (use_)legacy_bindings;
wenzelm
parents: 15836
diff changeset
    91
cbe14eb12729 added (use_)legacy_bindings;
wenzelm
parents: 15836
diff changeset
    92
    fun mk_thm (bname, xname, singleton) =
cbe14eb12729 added (use_)legacy_bindings;
wenzelm
parents: 15836
diff changeset
    93
      "val " ^ bname ^ " = thm" ^ (if singleton then "" else "s") ^ " " ^ quote xname;
cbe14eb12729 added (use_)legacy_bindings;
wenzelm
parents: 15836
diff changeset
    94
  in
19482
9f11af8f7ef9 tuned basic list operators (flat, maps, map_filter);
wenzelm
parents: 19012
diff changeset
    95
    Symtab.keys thms |> map_filter prune
18931
427df66052a1 TableFun: renamed xxx_multi to xxx_list;
wenzelm
parents: 17412
diff changeset
    96
    |> Symtab.make_list |> Symtab.dest |> sort_wrt #1
17170
cbe14eb12729 added (use_)legacy_bindings;
wenzelm
parents: 15836
diff changeset
    97
    |> map (fn (prfx, entries) =>
cbe14eb12729 added (use_)legacy_bindings;
wenzelm
parents: 15836
diff changeset
    98
      entries |> sort_wrt #1 |> map mk_thm |> cat_lines |> mk_struct prfx)
cbe14eb12729 added (use_)legacy_bindings;
wenzelm
parents: 15836
diff changeset
    99
    |> cat_lines
cbe14eb12729 added (use_)legacy_bindings;
wenzelm
parents: 15836
diff changeset
   100
  end;
cbe14eb12729 added (use_)legacy_bindings;
wenzelm
parents: 15836
diff changeset
   101
22086
cf6019fece63 adapted ML context operations;
wenzelm
parents: 21858
diff changeset
   102
fun use_legacy_bindings thy =
22095
07875394618e moved ML context stuff to from Context to ML_Context;
wenzelm
parents: 22086
diff changeset
   103
  ML_Context.use_mltext (legacy_bindings thy) true (SOME (Context.Theory thy));
17170
cbe14eb12729 added (use_)legacy_bindings;
wenzelm
parents: 15836
diff changeset
   104
1132
dfb29abcf3c2 added theorem database which contains axioms and theorems indexed by the
clasohm
parents:
diff changeset
   105
end;
6204
c7ad5b27894f open BasicThmDatabase;
wenzelm
parents: 5744
diff changeset
   106
c7ad5b27894f open BasicThmDatabase;
wenzelm
parents: 5744
diff changeset
   107
structure BasicThmDatabase: BASIC_THM_DATABASE = ThmDatabase;
c7ad5b27894f open BasicThmDatabase;
wenzelm
parents: 5744
diff changeset
   108
open BasicThmDatabase;