sig
  type path_defined_in =
      LHS of (Ckappa_sig.c_rule_id * Cckappa_sig.enriched_rule)
    | RHS of (Ckappa_sig.c_rule_id * Cckappa_sig.enriched_rule)
    | Pattern
  type event =
      Dummy
    | Check_rule of Ckappa_sig.c_rule_id
    | See_a_new_bond of
        ((Ckappa_sig.c_agent_name * Ckappa_sig.c_site_name *
          Ckappa_sig.c_state) *
         (Ckappa_sig.c_agent_name * Ckappa_sig.c_site_name *
          Ckappa_sig.c_state))
    | Modified_sites of (Ckappa_sig.c_agent_name * Ckappa_sig.c_site_name)
  type step = {
    site_out : Ckappa_sig.c_site_name;
    site_in : Ckappa_sig.c_site_name;
    agent_type_in : Ckappa_sig.c_agent_name;
  }
  type path = {
    agent_id : Ckappa_sig.c_agent_id;
    relative_address : Communication.step list;
    site : Ckappa_sig.c_site_name;
  }
  type path_in_pattern = {
    defined_in : Communication.path_defined_in;
    path : Communication.path;
  }
  type output =
      Cannot_exist
    | May_exist of Communication.path
    | Located of Ckappa_sig.c_agent_id
  val get_defined_in :
    Communication.path_in_pattern -> Communication.path_defined_in
  val get_agent_id : Communication.path_in_pattern -> Ckappa_sig.c_agent_id
  val get_site : Communication.path_in_pattern -> Ckappa_sig.c_site_name
  val get_relative_address :
    Communication.path_in_pattern -> Communication.step list
  module type PathMap =
    sig
      type 'a t
      val empty : '-> 'Communication.PathMap.t
      val add :
        Communication.path ->
        '-> 'Communication.PathMap.t -> 'Communication.PathMap.t
      val find :
        Communication.path -> 'Communication.PathMap.t -> 'a option
    end
  module PathMap : PathMap
  type precondition
  type 'a fold =
      Remanent_parameters_sig.parameters ->
      Exception.method_handler ->
      Ckappa_sig.c_agent_name ->
      Ckappa_sig.c_site_name ->
      Exception.method_handler *
      ((Remanent_parameters_sig.parameters ->
        Ckappa_sig.c_state ->
        Ckappa_sig.c_agent_name * Ckappa_sig.c_site_name * Ckappa_sig.c_state ->
        Exception.method_handler * '-> Exception.method_handler * 'a) ->
       Exception.method_handler -> '-> Exception.method_handler * 'a)
      Usual_domains.flat_lattice
  val dummy_precondition : Communication.precondition
  val is_the_rule_applied_for_the_first_time :
    Communication.precondition -> Usual_domains.maybe_bool
  val the_rule_is_applied_for_the_first_time :
    Remanent_parameters_sig.parameters ->
    Exception.method_handler ->
    Communication.precondition ->
    Exception.method_handler * Communication.precondition
  val the_rule_is_not_applied_for_the_first_time :
    Remanent_parameters_sig.parameters ->
    Exception.method_handler ->
    Communication.precondition ->
    Exception.method_handler * Communication.precondition
  type prefold = { fold : 'a. 'Communication.fold; }
  val refine_information_about_state_of_sites_in_precondition :
    Communication.precondition ->
    (Remanent_parameters_sig.parameters ->
     Exception.method_handler ->
     Analyzer_headers.global_dynamic_information ->
     Communication.path ->
     Ckappa_sig.c_state list Usual_domains.flat_lattice ->
     Exception.method_handler * Analyzer_headers.global_dynamic_information *
     Ckappa_sig.c_state list Usual_domains.flat_lattice) ->
    Communication.precondition
  val get_potential_partner :
    Communication.precondition ->
    Exception.method_handler ->
    Ckappa_sig.c_agent_name ->
    Ckappa_sig.c_site_name ->
    Ckappa_sig.c_state ->
    Exception.method_handler * Communication.precondition *
    (Ckappa_sig.c_agent_name * Ckappa_sig.c_site_name * Ckappa_sig.c_state)
    Usual_domains.flat_lattice
  val fold_over_potential_partners :
    Remanent_parameters_sig.parameters ->
    Exception.method_handler ->
    Communication.precondition ->
    Ckappa_sig.c_agent_name ->
    Ckappa_sig.c_site_name ->
    (Remanent_parameters_sig.parameters ->
     Ckappa_sig.c_state ->
     Ckappa_sig.c_agent_name * Ckappa_sig.c_site_name * Ckappa_sig.c_state ->
     Exception.method_handler * '-> Exception.method_handler * 'a) ->
    '->
    Exception.method_handler * Communication.precondition *
    'Usual_domains.top_or_not
  val overwrite_potential_partners_map :
    Remanent_parameters_sig.parameters ->
    Exception.method_handler ->
    Communication.precondition ->
    (Exception.method_handler ->
     Ckappa_sig.c_agent_name ->
     Ckappa_sig.c_site_name ->
     Ckappa_sig.c_state ->
     Exception.method_handler *
     (Ckappa_sig.c_agent_name * Ckappa_sig.c_site_name * Ckappa_sig.c_state)
     Usual_domains.flat_lattice) ->
    Communication.prefold ->
    Exception.method_handler * Communication.precondition
  val get_state_of_site :
    Exception.method_handler ->
    Communication.precondition ->
    Analyzer_headers.global_static_information ->
    Analyzer_headers.global_dynamic_information ->
    Communication.path_in_pattern ->
    Exception.method_handler * Analyzer_headers.global_dynamic_information *
    Communication.precondition *
    Ckappa_sig.c_state list Usual_domains.flat_lattice
  val follow_path_inside_cc :
    Remanent_parameters_sig.parameters ->
    Exception.method_handler ->
    Cckappa_sig.kappa_handler ->
    Cckappa_sig.mixture ->
    Communication.path -> Exception.method_handler * Communication.output
  val get_state_of_site_in_precondition :
    ('static -> Analyzer_headers.global_static_information) ->
    ('dynamic -> Analyzer_headers.global_dynamic_information) ->
    (Analyzer_headers.global_dynamic_information -> 'dynamic -> 'c) ->
    Exception.method_handler ->
    'static ->
    'dynamic ->
    Ckappa_sig.c_rule_id * Cckappa_sig.enriched_rule ->
    Ckappa_sig.c_agent_id ->
    Ckappa_sig.c_site_name ->
    Communication.precondition ->
    Exception.method_handler * 'c * Communication.precondition *
    Ckappa_sig.c_state list
  val get_state_of_site_in_postcondition :
    ('static -> Analyzer_headers.global_static_information) ->
    ('dynamic -> Analyzer_headers.global_dynamic_information) ->
    (Analyzer_headers.global_dynamic_information -> 'dynamic -> 'b) ->
    Exception.method_handler ->
    'static ->
    'dynamic ->
    Ckappa_sig.c_rule_id * Cckappa_sig.enriched_rule ->
    Ckappa_sig.c_agent_id ->
    Ckappa_sig.c_site_name ->
    Communication.precondition ->
    Exception.method_handler * 'b * Communication.precondition *
    Ckappa_sig.c_state list
  val add_rule :
    ?local_trace:bool ->
    Remanent_parameters_sig.parameters ->
    Cckappa_sig.compil ->
    Cckappa_sig.kappa_handler ->
    Exception.method_handler ->
    Ckappa_sig.c_rule_id ->
    Communication.event list ->
    Exception.method_handler * Communication.event list
  type site_working_list
  val init_sites_working_list :
    Remanent_parameters_sig.parameters ->
    Exception.method_handler ->
    Exception.method_handler * Communication.site_working_list
  val clear_sites_working_list :
    Remanent_parameters_sig.parameters ->
    Exception.method_handler ->
    Communication.site_working_list ->
    Exception.method_handler * Communication.site_working_list
  val add_site :
    Remanent_parameters_sig.parameters ->
    Exception.method_handler ->
    Ckappa_sig.c_agent_name ->
    Ckappa_sig.c_site_name ->
    Communication.site_working_list ->
    Exception.method_handler * Communication.site_working_list
  val fold_sites :
    ((Ckappa_sig.c_agent_name * Ckappa_sig.c_site_name, unit, 'a, 'a)
     Int_storage.ternary, Communication.site_working_list, 'a, 'a)
    Int_storage.ternary
end