sig
  type state_number = int
  type state = Optimization_rules_sbdo_automaton.state_number * (int * int)
  type action_needed = Nothing | Docorder | Distinct | DistinctDocorder
  type axis_number = int
  val axis_child : Optimization_rules_sbdo_automaton.axis_number
  val axis_descendant : Optimization_rules_sbdo_automaton.axis_number
  val axis_descendant_or_self : Optimization_rules_sbdo_automaton.axis_number
  val axis_following : Optimization_rules_sbdo_automaton.axis_number
  val axis_following_sibling : Optimization_rules_sbdo_automaton.axis_number
  val axis_parent : Optimization_rules_sbdo_automaton.axis_number
  val axis_ancestor : Optimization_rules_sbdo_automaton.axis_number
  val axis_ancestor_or_self : Optimization_rules_sbdo_automaton.axis_number
  val axis_preceding : Optimization_rules_sbdo_automaton.axis_number
  val axis_preceding_sibling : Optimization_rules_sbdo_automaton.axis_number
  val axis_self : Optimization_rules_sbdo_automaton.axis_number
  val axis_adapter :
    Xquery_common_ast.axis -> Optimization_rules_sbdo_automaton.axis_number
  val do_transition :
    Processing_context.sbdo_kind ->
    Optimization_rules_sbdo_automaton.state ->
    Optimization_rules_sbdo_automaton.axis_number ->
    bool ->
    Optimization_rules_sbdo_automaton.state *
    Optimization_rules_sbdo_automaton.action_needed
  val init_state :
    Processing_context.sbdo_kind -> Optimization_rules_sbdo_automaton.state
  val sink_state :
    Processing_context.sbdo_kind -> Optimization_rules_sbdo_automaton.state
  val undefined_state :
    Processing_context.sbdo_kind -> Optimization_rules_sbdo_automaton.state
  val needs_sorting : Optimization_rules_sbdo_automaton.action_needed -> bool
  val needs_dupelim : Optimization_rules_sbdo_automaton.action_needed -> bool
  val print_action :
    Optimization_rules_sbdo_automaton.action_needed -> string
  val print_state : Optimization_rules_sbdo_automaton.state -> string
end