sig
  type t
  type matching = Matching.t
  val empty : Matching.t
  val debug_print : Format.formatter -> Matching.t -> unit
  val get : Agent.t * int -> Matching.t -> int
  val reconstruct_renaming :
    Pattern.Env.t -> Edges.t -> Pattern.id -> int -> Renaming.t
  val reconstruct :
    Pattern.Env.t ->
    Edges.t -> Matching.t -> int -> Pattern.id -> int -> Matching.t option
  val add_cc : Matching.t -> int -> Renaming.t -> Matching.t option
  val is_root_of : Pattern.Env.t -> Edges.t -> Agent.t -> Pattern.id -> bool
  val roots_of : Pattern.Env.t -> Edges.t -> Pattern.id -> IntCollection.t
  val elements_with_types :
    Pattern.Env.t -> Pattern.id array -> Matching.t -> Agent.t list array
  type cache
  val empty_cache : Matching.cache
  val observables_from_agent :
    Pattern.Env.t ->
    Edges.t ->
    ((Pattern.id * (int * int)) list * Operator.DepSet.t) * Matching.cache ->
    Agent.t ->
    ((Pattern.id * (int * int)) list * Operator.DepSet.t) * Matching.cache
  val observables_from_free :
    Pattern.Env.t ->
    Edges.t ->
    ((Pattern.id * (int * int)) list * Operator.DepSet.t) * Matching.cache ->
    Agent.t ->
    int ->
    ((Pattern.id * (int * int)) list * Operator.DepSet.t) * Matching.cache
  val observables_from_internal :
    Pattern.Env.t ->
    Edges.t ->
    ((Pattern.id * (int * int)) list * Operator.DepSet.t) * Matching.cache ->
    Agent.t ->
    int ->
    int ->
    ((Pattern.id * (int * int)) list * Operator.DepSet.t) * Matching.cache
  val observables_from_link :
    Pattern.Env.t ->
    Edges.t ->
    ((Pattern.id * (int * int)) list * Operator.DepSet.t) * Matching.cache ->
    Agent.t ->
    int ->
    Agent.t ->
    int ->
    ((Pattern.id * (int * int)) list * Operator.DepSet.t) * Matching.cache
  module Agent :
    sig
      type t = Existing of Agent.t * int | Fresh of int * int
      val rename : int -> Renaming.t -> Matching.Agent.t -> Matching.Agent.t
      val concretize :
        Matching.matching * int Mods.IntMap.t ->
        Matching.Agent.t -> int * int
      val get_type : Matching.Agent.t -> int
      val get_id : Matching.Agent.t -> int
      val same_connected_component :
        Matching.Agent.t -> Matching.Agent.t -> bool
      val is_fresh : Matching.Agent.t -> bool
      val print :
        ?sigs:Signature.s -> Format.formatter -> Matching.Agent.t -> unit
      val print_site :
        ?sigs:Signature.s ->
        Matching.Agent.t -> Format.formatter -> int -> unit
      val print_internal :
        ?sigs:Signature.s ->
        Matching.Agent.t -> int -> Format.formatter -> int -> unit
      val to_yojson : Matching.Agent.t -> Yojson.Basic.json
      val of_yojson : Yojson.Basic.json -> Matching.Agent.t
    end
end