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
58
59
60
61
62
63
64
65
66
67
68
69
70
open Containers
module Map = Name.Map
type t = Tuple_set.t Map.t
let empty = Map.empty
let mem = Map.mem
let add name rel ts =
assert (not @@ Map.mem name ts);
Map.add name rel ts
let get_exn = Map.find
let get = Map.get
let to_list = Map.to_list
let of_list = Map.of_list
let to_map x = x
let pp out rels =
let open Fmtc in
(styled `Bold pf) out "inst@ ";
pf
out
" %a"
( vbox
@@ Map.pp
~pp_sep:(const string " ")
~pp_arrow:(const string " = ")
~pp_start:(const string "")
~pp_stop:(const string "")
(styled `Cyan Name.pp)
Tuple_set.pp )
rels
let rename atom_renaming name_renaming inst =
to_list inst
|> List.map (fun (name, ts) ->
( List.assoc ~eq:Name.equal name name_renaming
, Tuple_set.rename atom_renaming ts ))
|> of_list
module P = Intf.Print.Mixin (struct
type nonrec t = t
let pp = pp
end)
include P