summaryrefslogtreecommitdiff
path: root/contrib/correctness/prename.mli
blob: 88b49d2c290ea97c918d1913312e8badfbab0f2a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
(************************************************************************)
(*  v      *   The Coq Proof Assistant  /  The Coq Development Team     *)
(* <O___,, * CNRS-Ecole Polytechnique-INRIA Futurs-Universite Paris Sud *)
(*   \VV/  **************************************************************)
(*    //   *      This file is distributed under the terms of the       *)
(*         *       GNU Lesser General Public License Version 2.1        *)
(************************************************************************)

(* Certification of Imperative Programs / Jean-Christophe Filliâtre *)

(* $Id: prename.mli,v 1.1.16.1 2004/07/16 19:30:05 herbelin Exp $ *)

open Names

(* Abstract type for renamings 
 * 
 * Records the names of the mutables objets (ref, arrays) at the different
 * moments of the evaluation, called dates
 *)

type t

type date = string


val empty_ren : t
val update    : t -> date -> identifier list -> t
    (* assign new names for the given variables, associated to a new date *)
val next      : t -> identifier list -> t
    (* assign new names for the given variables, associated to a new
     * date which is generated from an internal counter *)
val push_date : t -> date -> t
    (* put a new date on top of the stack *)

val valid_date   : date -> t -> bool
val current_date : t -> date
val all_dates    : t -> date list

val current_var  : t -> identifier      -> identifier
val current_vars : t -> identifier list -> (identifier * identifier) list
    (* gives the current names of some variables *)

val avoid : t -> identifier list -> t
val fresh : t -> identifier list -> (identifier * identifier) list
    (* introduces new names to avoid and renames some given variables *)

val var_at_date  : t -> date -> identifier -> identifier
    (* gives the name of a variable at a given date *)
val vars_at_date : t -> date -> identifier list
                 -> (identifier * identifier) list
    (* idem for a list of variables *)  

(* pretty-printers *)

val pp : t -> Pp.std_ppcmds
val ppr : t -> unit