sig
  type navigation_param = Optimization_walker.sub_expr_kind * int
  type algop_test_function = Algebra_type.algop_expr -> bool
  type 'a state_update_function = Algebra_type.algop_expr -> '-> 'a
  type 'a test_and_apply = Algebra_type.algop_expr -> '-> bool * 'a
  type 'a pattern_matcher_pattern_element =
      Code_util_pattern_matcher.navigation_param *
      'Code_util_pattern_matcher.test_and_apply
  type 'a pattern_matcher_pattern =
      'Code_util_pattern_matcher.pattern_matcher_pattern_element list
  val mk_dep_child_param : int -> Code_util_pattern_matcher.navigation_param
  val mk_indep_child_param :
    int -> Code_util_pattern_matcher.navigation_param
  val dep_zero : Code_util_pattern_matcher.navigation_param
  val indep_zero : Code_util_pattern_matcher.navigation_param
  val extract_term :
    Code_util_pattern_matcher.algop_test_function ->
    'Code_util_pattern_matcher.state_update_function ->
    Algebra_type.algop_expr -> '-> bool * 'a
  val no_extraction :
    Code_util_pattern_matcher.algop_test_function ->
    Algebra_type.algop_expr -> '-> bool * 'a
  val walk_patterns :
    '->
    'Code_util_pattern_matcher.pattern_matcher_pattern list ->
    Algebra_type.algop_expr -> bool * 'a
end