sig
  type t = (Lang.var * (Lang.expr option * Lang.expr)) list
  val to_string : Lang.Env.t -> string
  val empty : Lang.Env.t
  val typ : Lang.Env.t -> Lang.var -> Lang.expr
  val value : Lang.Env.t -> Lang.var -> Lang.expr option
  val add :
    Lang.Env.t -> Lang.var -> ?value:Lang.expr -> Lang.expr -> Lang.Env.t
  val add_ps : Lang.Env.t -> (Lang.var * Lang.expr) list -> Lang.Env.t
end