sig
  type t
  val empty : G.t
  val is_empty : G.t -> bool
  val copy : G.t -> G.t
  val eq : G.t -> G.t -> bool
  val pp : G.t Pretty.printer
  val replace : Fact.Equal.t -> G.t -> unit
  val get : G.t -> Fact.t
  val put : Fact.t -> G.t -> unit
  val get_clause : G.t -> Clause.t
  val put_clause : Clause.t -> G.t -> unit
end