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