sig
  type agent_name = int
  type site_name = int
  type internal_state = int
  type binding_type = Instantiation.agent_name * Instantiation.site_name
  type abstract = Matching.Agent.t
  type concrete = Agent.t
  type 'a site = 'a * Instantiation.site_name
  type 'a test =
      Is_Here of 'a
    | Has_Internal of 'Instantiation.site * Instantiation.internal_state
    | Is_Free of 'Instantiation.site
    | Is_Bound of 'Instantiation.site
    | Has_Binding_type of 'Instantiation.site * Instantiation.binding_type
    | Is_Bound_to of 'Instantiation.site * 'Instantiation.site
  type 'a action =
      Create of 'a *
        (Instantiation.site_name * Instantiation.internal_state option) list
    | Mod_internal of 'Instantiation.site * Instantiation.internal_state
    | Bind of 'Instantiation.site * 'Instantiation.site
    | Bind_to of 'Instantiation.site * 'Instantiation.site
    | Free of 'Instantiation.site
    | Remove of 'a
  type 'a binding_state =
      ANY
    | FREE
    | BOUND
    | BOUND_TYPE of Instantiation.binding_type
    | BOUND_to of 'Instantiation.site
  type 'a event = {
    tests : 'Instantiation.test list list;
    actions : 'Instantiation.action list;
    side_effects_src :
      ('Instantiation.site * 'Instantiation.binding_state) list;
    side_effects_dst : 'Instantiation.site list;
    connectivity_tests : 'Instantiation.test list;
  }
  val empty_event : 'Instantiation.event
  val rename_abstract_test :
    int ->
    Renaming.t ->
    Instantiation.abstract Instantiation.test ->
    Instantiation.abstract Instantiation.test
  val rename_abstract_action :
    int ->
    Renaming.t ->
    Instantiation.abstract Instantiation.action ->
    Instantiation.abstract Instantiation.action
  val rename_abstract_event :
    int ->
    Renaming.t ->
    Instantiation.abstract Instantiation.event ->
    Instantiation.abstract Instantiation.event
  val rename_abstract_side_effect :
    int ->
    Renaming.t ->
    (Matching.Agent.t * 'a) * Matching.Agent.t Instantiation.binding_state ->
    (Matching.Agent.t * 'a) * Matching.Agent.t Instantiation.binding_state
  val concretize_test :
    Matching.t * int Mods.IntMap.t ->
    Instantiation.abstract Instantiation.test ->
    Instantiation.concrete Instantiation.test
  val concretize_action :
    Matching.t * int Mods.IntMap.t ->
    Instantiation.abstract Instantiation.action ->
    Instantiation.concrete Instantiation.action
  val try_concretize_action :
    Matching.t * int Mods.IntMap.t ->
    Instantiation.abstract Instantiation.action ->
    Instantiation.concrete Instantiation.action option
  val concretize_event :
    Matching.t * int Mods.IntMap.t ->
    Instantiation.abstract Instantiation.event ->
    Instantiation.concrete Instantiation.event
  val matching_abstract_concrete :
    Instantiation.abstract Instantiation.event ->
    Instantiation.concrete Instantiation.event -> Renaming.t option
  val subst_map_agent_in_concrete_test :
    (int -> int) ->
    Instantiation.concrete Instantiation.test ->
    Instantiation.concrete Instantiation.test
  val subst_agent_in_concrete_test :
    int ->
    int ->
    Instantiation.concrete Instantiation.test ->
    Instantiation.concrete Instantiation.test
  val subst_map_agent_in_concrete_action :
    (int -> int) ->
    Instantiation.concrete Instantiation.action ->
    Instantiation.concrete Instantiation.action
  val subst_agent_in_concrete_action :
    int ->
    int ->
    Instantiation.concrete Instantiation.action ->
    Instantiation.concrete Instantiation.action
  val subst_map_agent_in_concrete_side_effect :
    (int -> int) ->
    Instantiation.concrete Instantiation.site *
    Instantiation.concrete Instantiation.binding_state ->
    Instantiation.concrete Instantiation.site *
    Instantiation.concrete Instantiation.binding_state
  val subst_agent_in_concrete_side_effect :
    int ->
    int ->
    Instantiation.concrete Instantiation.site *
    Instantiation.concrete Instantiation.binding_state ->
    Instantiation.concrete Instantiation.site *
    Instantiation.concrete Instantiation.binding_state
  val subst_map_agent_in_concrete_event :
    (int -> int) ->
    Instantiation.concrete Instantiation.event ->
    Instantiation.concrete Instantiation.event
  val subst_map2_agent_in_concrete_event :
    (int -> int) ->
    (int -> int) ->
    Instantiation.concrete Instantiation.event ->
    Instantiation.concrete Instantiation.event
  val subst_agent_in_concrete_event :
    int ->
    int ->
    Instantiation.concrete Instantiation.event ->
    Instantiation.concrete Instantiation.event
  val print_concrete_test :
    ?sigs:Signature.s ->
    Format.formatter -> Instantiation.concrete Instantiation.test -> unit
  val print_concrete_action :
    ?sigs:Signature.s ->
    Format.formatter -> Instantiation.concrete Instantiation.action -> unit
  val print_concrete_binding_state :
    ?sigs:Signature.s ->
    Format.formatter ->
    Instantiation.concrete Instantiation.binding_state -> unit
  val test_to_json :
    ('-> Yojson.Basic.json) -> 'Instantiation.test -> Yojson.Basic.json
  val test_of_json :
    (Yojson.Basic.json -> 'a) -> Yojson.Basic.json -> 'Instantiation.test
  val action_to_json :
    ('-> Yojson.Basic.json) -> 'Instantiation.action -> Yojson.Basic.json
  val action_of_json :
    (Yojson.Basic.json -> 'a) -> Yojson.Basic.json -> 'Instantiation.action
  val event_to_json :
    ('-> Yojson.Basic.json) -> 'Instantiation.event -> Yojson.Basic.json
  val event_of_json :
    (Yojson.Basic.json -> 'a) -> Yojson.Basic.json -> 'Instantiation.event
end