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