src/Pure/pure_thy.ML
author wenzelm
Mon, 27 Oct 1997 15:57:50 +0100
changeset 4012 6adc18bd0009
parent 4002 6b8abfdf3ec4
child 4013 9ffb96bd2924
permissions -rw-r--r--
renamed put_* to store_*;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
3987
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
     1
(*  Title:      Pure/pure_thy.ML
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
     2
    ID:         $Id$
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
     3
    Author:     Markus Wenzel, TU Muenchen
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
     4
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
     5
Init 'theorems' data.  The Pure theories.
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
     6
*)
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
     7
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
     8
signature PURE_THY =
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
     9
sig
4012
6adc18bd0009 renamed put_* to store_*;
wenzelm
parents: 4002
diff changeset
    10
  val store_thms: (bstring * thm) list -> theory -> theory   	  (*DESTRUCTIVE*)
6adc18bd0009 renamed put_* to store_*;
wenzelm
parents: 4002
diff changeset
    11
  val store_thmss: (bstring * thm list) list -> theory -> theory  (*DESTRUCTIVE*)
6adc18bd0009 renamed put_* to store_*;
wenzelm
parents: 4002
diff changeset
    12
  val store_thm: theory -> (bstring * thm) -> thm                 (*DESTRUCTIVE*)
6adc18bd0009 renamed put_* to store_*;
wenzelm
parents: 4002
diff changeset
    13
  val smart_store_thm: (bstring * thm) -> thm                     (*DESTRUCTIVE*)
3987
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
    14
  val get_thm: theory -> xstring -> thm
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
    15
  val get_thms: theory -> xstring -> thm list
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
    16
  val proto_pure: theory
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
    17
  val pure: theory
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
    18
  val cpure: theory
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
    19
end;
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
    20
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
    21
structure PureThy: PURE_THY =
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
    22
struct
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
    23
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
    24
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
    25
(** init theorems data **)
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
    26
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
    27
(* data kind theorems *)
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
    28
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
    29
val theorems = "theorems";
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
    30
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
    31
exception Theorems of
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
    32
  {space: NameSpace.T, thms_tab: thm list Symtab.table} ref;
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
    33
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
    34
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
    35
(* methods *)
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
    36
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
    37
local
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
    38
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
    39
val empty =
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
    40
  Theorems (ref {space = NameSpace.empty, thms_tab = Symtab.null});
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
    41
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
    42
fun ext (Theorems (ref {space, ...})) =
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
    43
  Theorems (ref {space = space, thms_tab = Symtab.null});
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
    44
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
    45
fun merge (Theorems (ref {space = space1, ...}), Theorems (ref {space = space2, ...})) =
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
    46
  Theorems (ref {space = NameSpace.merge (space1, space2), thms_tab = Symtab.null});
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
    47
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
    48
fun print (Theorems (ref {space, thms_tab})) =
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
    49
  let
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
    50
    val prt_thm = Pretty.quote o pretty_thm;
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
    51
    fun prt_thms (name, [th]) =
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
    52
          Pretty.block [Pretty.str (name ^ ":"), Pretty.brk 1, (prt_thm th)]
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
    53
      | prt_thms (name, ths) = Pretty.big_list (name ^ ":") (map prt_thm ths);
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
    54
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
    55
    fun extrn name =
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
    56
      if ! long_names then name else NameSpace.extern space name;
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
    57
    val thmss = sort_wrt fst (map (apfst extrn) (Symtab.dest thms_tab));
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
    58
  in
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
    59
    Pretty.writeln (Pretty.strs ("theorem name space:" :: map quote (NameSpace.dest space)));
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
    60
    Pretty.writeln (Pretty.big_list "theorems:" (map prt_thms thmss))
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
    61
  end;
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
    62
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
    63
in
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
    64
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
    65
val theorems_methods = (empty, ext, merge, print);
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
    66
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
    67
end;
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
    68
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
    69
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
    70
(* get data record *)
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
    71
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
    72
fun get_theorems sg =
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
    73
  (case Sign.get_data sg theorems of
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
    74
    Theorems r => r
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
    75
  | _ => sys_error "get_theorems");
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
    76
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
    77
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
    78
(* retrieve theorems *)
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
    79
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
    80
fun lookup_thms theory full_name =
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
    81
  let
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
    82
    val tab_of = #thms_tab o ! o get_theorems o sign_of;
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
    83
    fun lookup [] = raise Match
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
    84
      | lookup (thy :: thys) =
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
    85
          (case Symtab.lookup (tab_of thy, full_name) of
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
    86
            Some thms => thms
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
    87
          | None => lookup (Theory.parents_of thy) handle Match => lookup thys)
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
    88
  in
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
    89
    lookup [theory] handle Match
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
    90
      => raise THEORY ("No theorems " ^ quote full_name ^ " stored in theory", [theory])
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
    91
  end;
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
    92
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
    93
fun get_thms thy name =
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
    94
  let
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
    95
    val ref {space, ...} = get_theorems (sign_of thy);
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
    96
    val full_name = NameSpace.intern space name;
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
    97
  in lookup_thms thy full_name end;
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
    98
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
    99
fun get_thm thy name =
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
   100
  (case get_thms thy name of
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
   101
    [thm] => thm
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
   102
  | _ => raise THEORY ("Singleton theorem list expected " ^ quote name, [thy]));
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
   103
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
   104
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
   105
(* store theorems *)                    (*DESTRUCTIVE*)
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
   106
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
   107
fun err_dup name =
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
   108
  error ("Duplicate theorems " ^ quote name);
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
   109
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
   110
fun warn_overwrite name =
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
   111
  warning ("Replaced old copy of theorems " ^ quote name);
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
   112
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
   113
fun warn_same name =
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
   114
  warning ("Theorem database already contains a copy of " ^ quote name);
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
   115
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
   116
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
   117
fun enter_thms sg single (raw_name, thms) =
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
   118
  let
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
   119
    val len = length thms;
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
   120
    val name = Sign.full_name sg raw_name;
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
   121
    val names =
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
   122
      if single then replicate len name
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
   123
      else map (fn i => name ^ "_" ^ string_of_int i) (0 upto (len - 1));
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
   124
    val named_thms = ListPair.map Thm.name_thm (names, thms);
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
   125
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
   126
    val eq_thms = ListPair.all Thm.eq_thm;
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
   127
    val r as ref {space, thms_tab = tab} = get_theorems sg;
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
   128
  in
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
   129
    (case Symtab.lookup (tab, name) of
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
   130
      None =>
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
   131
        if NameSpace.declared space name then err_dup name else ()
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
   132
    | Some thms' =>
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
   133
        if length thms' = len andalso eq_thms (thms', named_thms) then
4002
6b8abfdf3ec4 oops, swap warnings;
wenzelm
parents: 3987
diff changeset
   134
          warn_same name
6b8abfdf3ec4 oops, swap warnings;
wenzelm
parents: 3987
diff changeset
   135
        else warn_overwrite name);
3987
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
   136
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
   137
    r :=
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
   138
     {space = NameSpace.extend ([name], space),
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
   139
      thms_tab = Symtab.update ((name, named_thms), tab)};
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
   140
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
   141
    named_thms
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
   142
  end;
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
   143
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
   144
fun do_enter_thms sg single name_thms =
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
   145
  (enter_thms sg single name_thms; ());
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
   146
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
   147
4012
6adc18bd0009 renamed put_* to store_*;
wenzelm
parents: 4002
diff changeset
   148
fun store_thmss thmss thy =
3987
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
   149
  (seq (do_enter_thms (sign_of thy) false) thmss; thy);
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
   150
4012
6adc18bd0009 renamed put_* to store_*;
wenzelm
parents: 4002
diff changeset
   151
fun store_thms thms thy =
3987
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
   152
  (seq (do_enter_thms (sign_of thy) true) (map (apsnd (fn th => [th])) thms); thy);
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
   153
4012
6adc18bd0009 renamed put_* to store_*;
wenzelm
parents: 4002
diff changeset
   154
fun smart_store_thm (name, thm) =
3987
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
   155
  let val [named_thm] = enter_thms (Thm.sign_of_thm thm) true (name, [thm])
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
   156
  in named_thm end;
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
   157
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
   158
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
   159
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
   160
(** the Pure theories **)
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
   161
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
   162
val proto_pure =
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
   163
  Theory.pre_pure
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
   164
  |> Theory.init_data theorems theorems_methods
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
   165
  |> Theory.add_types
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
   166
   (("fun", 2, NoSyn) ::
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
   167
    ("prop", 0, NoSyn) ::
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
   168
    ("itself", 1, NoSyn) ::
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
   169
    Syntax.pure_types)
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
   170
  |> Theory.add_classes_i [(logicC, [])]
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
   171
  |> Theory.add_defsort_i logicS
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
   172
  |> Theory.add_arities_i
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
   173
   [("fun", [logicS, logicS], logicS),
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
   174
    ("prop", [], logicS),
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
   175
    ("itself", [logicS], logicS)]
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
   176
  |> Theory.add_syntax Syntax.pure_syntax
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
   177
  |> Theory.add_modesyntax ("symbols", true) Syntax.pure_sym_syntax
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
   178
  |> Theory.add_trfuns Syntax.pure_trfuns
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
   179
  |> Theory.add_trfunsT Syntax.pure_trfunsT
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
   180
  |> Theory.add_syntax
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
   181
   [("==>", "[prop, prop] => prop", Delimfix "op ==>")]
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
   182
  |> Theory.add_consts
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
   183
   [("==", "['a::{}, 'a] => prop", InfixrName ("==", 2)),
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
   184
    ("=?=", "['a::{}, 'a] => prop", InfixrName ("=?=", 2)),
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
   185
    ("==>", "[prop, prop] => prop", Mixfix ("(_/ ==> _)", [2, 1], 1)),
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
   186
    ("all", "('a => prop) => prop", Binder ("!!", 0, 0)),
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
   187
    ("TYPE", "'a itself", NoSyn)]
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
   188
  |> Theory.add_defs [("flexpair_def", "(t =?= u) == (t == u::'a::{})")]
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
   189
  |> Theory.add_name "ProtoPure";
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
   190
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
   191
val pure = proto_pure
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
   192
  |> Theory.add_syntax Syntax.pure_appl_syntax
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
   193
  |> Theory.add_name "Pure";
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
   194
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
   195
val cpure = proto_pure
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
   196
  |> Theory.add_syntax Syntax.pure_applC_syntax
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
   197
  |> Theory.add_name "CPure";
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
   198
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
   199
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
   200
end;
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
   201
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
   202
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
   203
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
   204
(** theory structures **)
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
   205
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
   206
structure ProtoPure =
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
   207
struct
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
   208
  val thy = PureThy.proto_pure;
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
   209
  val flexpair_def = get_axiom thy "flexpair_def";
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
   210
end;
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
   211
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
   212
structure Pure = struct val thy = PureThy.pure end;
22f5291012df Init 'theorems' data. The Pure theories.
wenzelm
parents:
diff changeset
   213
structure CPure = struct val thy = PureThy.cpure end;