src/HOL/thy_data.ML
author wenzelm
Wed, 20 May 1998 18:56:00 +0200
changeset 4950 226f2cde9f4d
parent 4876 1c502a82bcde
child 5001 9de7fda0a6df
permissions -rw-r--r--
tuned signature; added pretty_theory;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
4082
423d0d527cbc HOL theory data.
wenzelm
parents:
diff changeset
     1
(*  Title:      HOL/thy_data.ML
423d0d527cbc HOL theory data.
wenzelm
parents:
diff changeset
     2
    ID:         $Id$
423d0d527cbc HOL theory data.
wenzelm
parents:
diff changeset
     3
    Author:     Markus Wenzel, TU Muenchen
423d0d527cbc HOL theory data.
wenzelm
parents:
diff changeset
     4
4876
1c502a82bcde moved records data to Tools/record_package.ML;
wenzelm
parents: 4808
diff changeset
     5
HOL theory data: datatypes.
4082
423d0d527cbc HOL theory data.
wenzelm
parents:
diff changeset
     6
*)
423d0d527cbc HOL theory data.
wenzelm
parents:
diff changeset
     7
4127
e0382d653d62 tuned 'records' stuff;
wenzelm
parents: 4120
diff changeset
     8
(*for datatypes*)
4082
423d0d527cbc HOL theory data.
wenzelm
parents:
diff changeset
     9
type datatype_info =
423d0d527cbc HOL theory data.
wenzelm
parents:
diff changeset
    10
 {case_const: term,
423d0d527cbc HOL theory data.
wenzelm
parents:
diff changeset
    11
  case_rewrites: thm list,
423d0d527cbc HOL theory data.
wenzelm
parents:
diff changeset
    12
  constructors: term list,
423d0d527cbc HOL theory data.
wenzelm
parents:
diff changeset
    13
  induct_tac: string -> int -> tactic,
423d0d527cbc HOL theory data.
wenzelm
parents:
diff changeset
    14
  nchotomy: thm,
423d0d527cbc HOL theory data.
wenzelm
parents:
diff changeset
    15
  exhaustion: thm,
423d0d527cbc HOL theory data.
wenzelm
parents:
diff changeset
    16
  exhaust_tac: string -> int -> tactic,
423d0d527cbc HOL theory data.
wenzelm
parents:
diff changeset
    17
  case_cong: thm};
423d0d527cbc HOL theory data.
wenzelm
parents:
diff changeset
    18
4127
e0382d653d62 tuned 'records' stuff;
wenzelm
parents: 4120
diff changeset
    19
4082
423d0d527cbc HOL theory data.
wenzelm
parents:
diff changeset
    20
signature THY_DATA =
423d0d527cbc HOL theory data.
wenzelm
parents:
diff changeset
    21
sig
4105
b84e8dacae08 datatypes;
wenzelm
parents: 4082
diff changeset
    22
  val get_datatypes_sg: Sign.sg -> datatype_info Symtab.table
b84e8dacae08 datatypes;
wenzelm
parents: 4082
diff changeset
    23
  val get_datatypes: theory -> datatype_info Symtab.table
b84e8dacae08 datatypes;
wenzelm
parents: 4082
diff changeset
    24
  val put_datatypes: datatype_info Symtab.table -> theory -> theory
4876
1c502a82bcde moved records data to Tools/record_package.ML;
wenzelm
parents: 4808
diff changeset
    25
  val setup: (theory -> theory) list
4082
423d0d527cbc HOL theory data.
wenzelm
parents:
diff changeset
    26
end;
423d0d527cbc HOL theory data.
wenzelm
parents:
diff changeset
    27
423d0d527cbc HOL theory data.
wenzelm
parents:
diff changeset
    28
structure ThyData: THY_DATA =
423d0d527cbc HOL theory data.
wenzelm
parents:
diff changeset
    29
struct
423d0d527cbc HOL theory data.
wenzelm
parents:
diff changeset
    30
423d0d527cbc HOL theory data.
wenzelm
parents:
diff changeset
    31
4105
b84e8dacae08 datatypes;
wenzelm
parents: 4082
diff changeset
    32
(** datatypes **)
b84e8dacae08 datatypes;
wenzelm
parents: 4082
diff changeset
    33
b84e8dacae08 datatypes;
wenzelm
parents: 4082
diff changeset
    34
(* data kind 'datatypes' *)
4082
423d0d527cbc HOL theory data.
wenzelm
parents:
diff changeset
    35
4784
06556ca5036d tuned names;
wenzelm
parents: 4572
diff changeset
    36
val datatypesK = "HOL/datatypes";
4082
423d0d527cbc HOL theory data.
wenzelm
parents:
diff changeset
    37
exception DatatypeInfo of datatype_info Symtab.table;
423d0d527cbc HOL theory data.
wenzelm
parents:
diff changeset
    38
4105
b84e8dacae08 datatypes;
wenzelm
parents: 4082
diff changeset
    39
local
4491
34a53d0c8e8d Symtab.empty;
wenzelm
parents: 4458
diff changeset
    40
  val empty = DatatypeInfo Symtab.empty;
4105
b84e8dacae08 datatypes;
wenzelm
parents: 4082
diff changeset
    41
b84e8dacae08 datatypes;
wenzelm
parents: 4082
diff changeset
    42
  fun prep_ext (x as DatatypeInfo _) = x;
b84e8dacae08 datatypes;
wenzelm
parents: 4082
diff changeset
    43
b84e8dacae08 datatypes;
wenzelm
parents: 4082
diff changeset
    44
  fun merge (DatatypeInfo tab1, DatatypeInfo tab2) =
b84e8dacae08 datatypes;
wenzelm
parents: 4082
diff changeset
    45
    DatatypeInfo (Symtab.merge (K true) (tab1, tab2));
b84e8dacae08 datatypes;
wenzelm
parents: 4082
diff changeset
    46
4259
adbe3f4e7caf adapted print methods;
wenzelm
parents: 4150
diff changeset
    47
  fun print sg (DatatypeInfo tab) =
adbe3f4e7caf adapted print methods;
wenzelm
parents: 4150
diff changeset
    48
    Pretty.writeln (Pretty.strs ("datatypes:" ::
adbe3f4e7caf adapted print methods;
wenzelm
parents: 4150
diff changeset
    49
      map (Sign.cond_extern sg Sign.typeK o fst) (Symtab.dest tab)));
4105
b84e8dacae08 datatypes;
wenzelm
parents: 4082
diff changeset
    50
in
b84e8dacae08 datatypes;
wenzelm
parents: 4082
diff changeset
    51
  val datatypes_thy_data = (datatypesK, (empty, prep_ext, merge, print));
4127
e0382d653d62 tuned 'records' stuff;
wenzelm
parents: 4120
diff changeset
    52
end;
e0382d653d62 tuned 'records' stuff;
wenzelm
parents: 4120
diff changeset
    53
e0382d653d62 tuned 'records' stuff;
wenzelm
parents: 4120
diff changeset
    54
e0382d653d62 tuned 'records' stuff;
wenzelm
parents: 4120
diff changeset
    55
(* get and put datatypes *)
4120
57c1e7d70960 data kinds 'datatypes', data kinds 'records' added
narasche
parents: 4105
diff changeset
    56
4127
e0382d653d62 tuned 'records' stuff;
wenzelm
parents: 4120
diff changeset
    57
fun get_datatypes_sg sg =
e0382d653d62 tuned 'records' stuff;
wenzelm
parents: 4120
diff changeset
    58
  (case Sign.get_data sg datatypesK of
e0382d653d62 tuned 'records' stuff;
wenzelm
parents: 4120
diff changeset
    59
    DatatypeInfo tab => tab
4796
e70ae8578792 type_error;
wenzelm
parents: 4784
diff changeset
    60
  | _ => type_error datatypesK);
4120
57c1e7d70960 data kinds 'datatypes', data kinds 'records' added
narasche
parents: 4105
diff changeset
    61
4127
e0382d653d62 tuned 'records' stuff;
wenzelm
parents: 4120
diff changeset
    62
val get_datatypes = get_datatypes_sg o sign_of;
4120
57c1e7d70960 data kinds 'datatypes', data kinds 'records' added
narasche
parents: 4105
diff changeset
    63
4127
e0382d653d62 tuned 'records' stuff;
wenzelm
parents: 4120
diff changeset
    64
fun put_datatypes tab thy =
e0382d653d62 tuned 'records' stuff;
wenzelm
parents: 4120
diff changeset
    65
  Theory.put_data (datatypesK, DatatypeInfo tab) thy;
e0382d653d62 tuned 'records' stuff;
wenzelm
parents: 4120
diff changeset
    66
4082
423d0d527cbc HOL theory data.
wenzelm
parents:
diff changeset
    67
423d0d527cbc HOL theory data.
wenzelm
parents:
diff changeset
    68
4796
e70ae8578792 type_error;
wenzelm
parents: 4784
diff changeset
    69
(** theory data setup **)
4082
423d0d527cbc HOL theory data.
wenzelm
parents:
diff changeset
    70
4876
1c502a82bcde moved records data to Tools/record_package.ML;
wenzelm
parents: 4808
diff changeset
    71
val setup = [Theory.init_data [datatypes_thy_data]];
4127
e0382d653d62 tuned 'records' stuff;
wenzelm
parents: 4120
diff changeset
    72
4082
423d0d527cbc HOL theory data.
wenzelm
parents:
diff changeset
    73
423d0d527cbc HOL theory data.
wenzelm
parents:
diff changeset
    74
end;