let rec pp fmt s =
  Name.pp_map pp_entry fmt s
 
and pp_entry fmt e =
  let pr = Format.fprintf fmt in
  match e with
    | Def(Term(x)) -> pr "@[def("Term.pp fmt x; pr ")@]"
    | Def(Prop(x)) -> pr "@[def("Prop.pp fmt x; pr ")@]"
    | Arity(a) -> pr "@[sig("Format.fprintf fmt "%d" a; pr ")@]"
    | Type(c) -> pr "@[type("Dom.pp fmt c; pr ")@]"
    | State(s) -> 
        pr "@[state(";
        Pretty.set Atom.pp fmt (Atom.Set.elements (Context.ctxt_of s));
        pr ")@]"