src/Pure/Isar/proof_data.ML
author wenzelm
Thu, 29 Nov 2001 01:51:06 +0100
changeset 12325 4966dae8fa62
parent 8807 0046be1769f9
child 13379 a21e132c3304
permissions -rw-r--r--
RuleContext.intro_query_local;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
5821
262ce90e4736 Type-safe interface for proof context data.
wenzelm
parents:
diff changeset
     1
(*  Title:      Pure/Isar/proof_data.ML
262ce90e4736 Type-safe interface for proof context data.
wenzelm
parents:
diff changeset
     2
    ID:         $Id$
262ce90e4736 Type-safe interface for proof context data.
wenzelm
parents:
diff changeset
     3
    Author:     Markus Wenzel, TU Muenchen
8807
wenzelm
parents: 8143
diff changeset
     4
    License:    GPL (GNU GENERAL PUBLIC LICENSE)
5821
262ce90e4736 Type-safe interface for proof context data.
wenzelm
parents:
diff changeset
     5
262ce90e4736 Type-safe interface for proof context data.
wenzelm
parents:
diff changeset
     6
Type-safe interface for proof context data.
262ce90e4736 Type-safe interface for proof context data.
wenzelm
parents:
diff changeset
     7
*)
262ce90e4736 Type-safe interface for proof context data.
wenzelm
parents:
diff changeset
     8
262ce90e4736 Type-safe interface for proof context data.
wenzelm
parents:
diff changeset
     9
signature PROOF_DATA_ARGS =
262ce90e4736 Type-safe interface for proof context data.
wenzelm
parents:
diff changeset
    10
sig
262ce90e4736 Type-safe interface for proof context data.
wenzelm
parents:
diff changeset
    11
  val name: string
262ce90e4736 Type-safe interface for proof context data.
wenzelm
parents:
diff changeset
    12
  type T
262ce90e4736 Type-safe interface for proof context data.
wenzelm
parents:
diff changeset
    13
  val init: theory -> T
262ce90e4736 Type-safe interface for proof context data.
wenzelm
parents:
diff changeset
    14
  val print: Proof.context -> T -> unit
262ce90e4736 Type-safe interface for proof context data.
wenzelm
parents:
diff changeset
    15
end;
262ce90e4736 Type-safe interface for proof context data.
wenzelm
parents:
diff changeset
    16
262ce90e4736 Type-safe interface for proof context data.
wenzelm
parents:
diff changeset
    17
signature PROOF_DATA =
262ce90e4736 Type-safe interface for proof context data.
wenzelm
parents:
diff changeset
    18
sig
262ce90e4736 Type-safe interface for proof context data.
wenzelm
parents:
diff changeset
    19
  type T
262ce90e4736 Type-safe interface for proof context data.
wenzelm
parents:
diff changeset
    20
  val init: theory -> theory
262ce90e4736 Type-safe interface for proof context data.
wenzelm
parents:
diff changeset
    21
  val print: Proof.context -> unit
262ce90e4736 Type-safe interface for proof context data.
wenzelm
parents:
diff changeset
    22
  val get: Proof.context -> T
262ce90e4736 Type-safe interface for proof context data.
wenzelm
parents:
diff changeset
    23
  val put: T -> Proof.context -> Proof.context
8143
b0e44ab73631 added map, map_st;
wenzelm
parents: 6788
diff changeset
    24
  val map: (T -> T) -> Proof.context -> Proof.context
6788
6eaf6856ee4a added get_st;
wenzelm
parents: 6777
diff changeset
    25
  val get_st: Proof.state -> T
6777
175ff298ac0e added put_st;
wenzelm
parents: 5821
diff changeset
    26
  val put_st: T -> Proof.state -> Proof.state
8143
b0e44ab73631 added map, map_st;
wenzelm
parents: 6788
diff changeset
    27
  val map_st: (T -> T) -> Proof.state -> Proof.state
5821
262ce90e4736 Type-safe interface for proof context data.
wenzelm
parents:
diff changeset
    28
end;
262ce90e4736 Type-safe interface for proof context data.
wenzelm
parents:
diff changeset
    29
262ce90e4736 Type-safe interface for proof context data.
wenzelm
parents:
diff changeset
    30
functor ProofDataFun(Args: PROOF_DATA_ARGS): PROOF_DATA =
262ce90e4736 Type-safe interface for proof context data.
wenzelm
parents:
diff changeset
    31
struct
262ce90e4736 Type-safe interface for proof context data.
wenzelm
parents:
diff changeset
    32
262ce90e4736 Type-safe interface for proof context data.
wenzelm
parents:
diff changeset
    33
(*object kind kept private!*)
262ce90e4736 Type-safe interface for proof context data.
wenzelm
parents:
diff changeset
    34
val kind = Object.kind Args.name;
262ce90e4736 Type-safe interface for proof context data.
wenzelm
parents:
diff changeset
    35
262ce90e4736 Type-safe interface for proof context data.
wenzelm
parents:
diff changeset
    36
type T = Args.T;
262ce90e4736 Type-safe interface for proof context data.
wenzelm
parents:
diff changeset
    37
exception Data of T;
262ce90e4736 Type-safe interface for proof context data.
wenzelm
parents:
diff changeset
    38
262ce90e4736 Type-safe interface for proof context data.
wenzelm
parents:
diff changeset
    39
val init =
262ce90e4736 Type-safe interface for proof context data.
wenzelm
parents:
diff changeset
    40
  ProofContext.init_data kind
262ce90e4736 Type-safe interface for proof context data.
wenzelm
parents:
diff changeset
    41
    (Data o Args.init, fn ctxt => fn (Data x) => Args.print ctxt x);
262ce90e4736 Type-safe interface for proof context data.
wenzelm
parents:
diff changeset
    42
262ce90e4736 Type-safe interface for proof context data.
wenzelm
parents:
diff changeset
    43
val print = ProofContext.print_data kind;
262ce90e4736 Type-safe interface for proof context data.
wenzelm
parents:
diff changeset
    44
val get = ProofContext.get_data kind (fn Data x => x);
262ce90e4736 Type-safe interface for proof context data.
wenzelm
parents:
diff changeset
    45
val put = ProofContext.put_data kind Data;
8143
b0e44ab73631 added map, map_st;
wenzelm
parents: 6788
diff changeset
    46
fun map f ctxt = put (f (get ctxt)) ctxt;
b0e44ab73631 added map, map_st;
wenzelm
parents: 6788
diff changeset
    47
6788
6eaf6856ee4a added get_st;
wenzelm
parents: 6777
diff changeset
    48
val get_st = get o Proof.context_of;
6777
175ff298ac0e added put_st;
wenzelm
parents: 5821
diff changeset
    49
val put_st = Proof.put_data kind Data;
8143
b0e44ab73631 added map, map_st;
wenzelm
parents: 6788
diff changeset
    50
fun map_st f st = put_st (f (get_st st)) st;
5821
262ce90e4736 Type-safe interface for proof context data.
wenzelm
parents:
diff changeset
    51
262ce90e4736 Type-safe interface for proof context data.
wenzelm
parents:
diff changeset
    52
end;
262ce90e4736 Type-safe interface for proof context data.
wenzelm
parents:
diff changeset
    53
262ce90e4736 Type-safe interface for proof context data.
wenzelm
parents:
diff changeset
    54
262ce90e4736 Type-safe interface for proof context data.
wenzelm
parents:
diff changeset
    55
(*hide private data access functions*)
262ce90e4736 Type-safe interface for proof context data.
wenzelm
parents:
diff changeset
    56
structure ProofContext: PROOF_CONTEXT = ProofContext;
262ce90e4736 Type-safe interface for proof context data.
wenzelm
parents:
diff changeset
    57
structure Proof: PROOF = Proof;