sig
  type op_expr_type =
      RegularOp of Algebra_type.algop_expr
    | Fs_untyped_to_any
    | Invalid_Predicate_Branch
  type predicate_branch
  val mk_predicate_branch :
    Algebra_type.algop_expr option ->
    Code_util_predicates.op_expr_type ->
    (Physical_value.xml_value -> unit) option ->
    Code_util_predicates.predicate_branch
  val invalid_predicate_branch : Code_util_predicates.predicate_branch
  val is_fs_untyped_to_any_predicate_branch :
    Code_util_predicates.predicate_branch -> bool
  val eval_predicate_desc :
    Algebra_type.eval_fun ->
    Execution_context.algebra_context ->
    Algebra_type.algop_expr array ->
    Xquery_algebra_ast.predicate_desc -> bool
  val eval_predicate_desc_to_rid_list :
    ('-> Code_util_ridlist.rid_list) ->
    'a array ->
    Xquery_algebra_ast.predicate_desc -> Code_util_ridlist.rid_list
  val evaluate_predicate_branch :
    Code_util_predicates.predicate_branch ->
    Algebra_type.eval_fun ->
    Execution_context.algebra_context ->
    Namespace_context.nsenv -> Dm_atomic.atomicValue list
  type supported_predicates
  type supported_scans =
      Value_Equality
    | Greater_Than
    | Greater_Than_or_Equal
    | Less_Than
    | Less_Than_or_Equal
    | Invalid_Scan
  val switch_predicate :
    Code_util_predicates.supported_predicates ->
    Code_util_predicates.supported_predicates
  val supported_predicate_supported_scans :
    Code_util_predicates.supported_predicates ->
    Code_util_predicates.supported_scans
  val predicate_type :
    Algebra_type.algop_expr -> Code_util_predicates.supported_predicates
  val needed_types :
    Algebra_type.algop_expr ->
    Code_util_predicates.supported_predicates -> Datatypes.atomic_type list
  val predicate_invalid : Code_util_predicates.supported_predicates
  type predicate_functions =
      (Code_util_predicates.predicate_branch *
       Code_util_predicates.predicate_branch *
       Code_util_predicates.supported_scans)
      array
end