sig
  type aelement_test =
      ASchemaElementTest of Namespace_symbols.relem_symbol
    | AElementTest of
        (Namespace_symbols.relem_symbol *
         Namespace_symbols.rtype_symbol option)
        option
  type aattribute_test =
      ASchemaAttributeTest of Namespace_symbols.rattr_symbol
    | AAttributeTest of
        (Namespace_symbols.rattr_symbol *
         Namespace_symbols.rtype_symbol option)
        option
  type akind_test =
      ADocumentKind of Xquery_algebra_ast.aelement_test option
    | AElementKind of Xquery_algebra_ast.aelement_test
    | AAttributeKind of Xquery_algebra_ast.aattribute_test
    | APIKind of string option
    | ACommentKind
    | ATextKind
    | AAnyKind
  type aitemtype =
      AITKindTest of Xquery_algebra_ast.akind_test
    | AITTypeRef of Namespace_symbols.rtype_symbol
    | AITItem
    | AITNumeric
    | AITAnyString
    | AITAtomic of Namespace_symbols.rtype_symbol
    | AITEmpty
  type var_kind = Immutable | Mutable
  type asequencetype_desc =
      Xquery_algebra_ast.aitemtype * Occurrence.occurrence_indicator option
  type asequencetype = {
    pasequencetype_desc : Xquery_algebra_ast.asequencetype_desc;
    pasequencetype_loc : Finfo.finfo;
  }
  type anode_test =
      APNameTest of Namespace_symbols.anon_symbol
    | APNodeKindTest of Xquery_algebra_ast.akind_test
  type apattern = {
    papattern_desc : Xquery_algebra_ast.apattern_desc;
    papattern_loc : Finfo.finfo;
  }
  and apattern_desc = ACase of Xquery_algebra_ast.asequencetype | ADefault
  type predicate_desc =
      SimpleConjunct of int * int
    | ComplexConjunct of Xquery_algebra_ast.predicate_desc *
        Xquery_algebra_ast.predicate_desc
    | Disjunct of Xquery_algebra_ast.predicate_desc *
        Xquery_algebra_ast.predicate_desc
  type afunction_signature =
      Xquery_algebra_ast.asequencetype list *
      Xquery_algebra_ast.asequencetype
  type aoverloaded_signature_table =
      (Xquery_common_ast.cfname * Xquery_algebra_ast.afunction_signature *
       Xquery_common_ast.updating_modifier)
      list
  type algop_insert_location =
      AOUAsLastInto
    | AOUAsFirstInto
    | AOUInto
    | AOUAfter
    | AOUBefore
  type seq_group_name = Xquery_common_ast.cvname
  type group_desc = {
    group_by_names : Xquery_algebra_ast.seq_group_name list;
    induced_groups : Xquery_algebra_ast.seq_group_name list;
    must_be_valid : Xquery_algebra_ast.seq_group_name list;
    aggregate_name :
      Xquery_algebra_ast.asequencetype option * Xquery_common_ast.cvname;
  }
  type twig_node = {
    node_test : Xquery_algebra_ast.anode_test option;
    mutable out : Xquery_common_ast.crname option;
    mutable restore_out : bool;
    mutable child_twig : (Xquery_common_ast.axis * int) option;
    mutable pred_twigs : (Xquery_common_ast.axis * int) list;
    mutable requires_sbdo : bool * bool;
  }
  type twig_pattern = Xquery_algebra_ast.twig_node array
  type algop_expr_name =
      AOEIf
    | AOEWhile
    | AOELetvar of
        (Xquery_algebra_ast.asequencetype option * Xquery_common_ast.cvname)
    | AOETypeswitch of
        (Xquery_algebra_ast.apattern * Xquery_common_ast.cvname option) array
    | AOEVar of Xquery_common_ast.cvname
    | AOEScalar of Xquery_common_ast.literal
    | AOESeq
    | AOEEmpty
    | AOEDocument
    | AOEPI of Namespace_names.ncname * string
    | AOEPIComputed
    | AOEComment of string
    | AOECommentComputed
    | AOEText of string
    | AOECharRef of int
    | AOETextComputed
    | AOEElem of Namespace_symbols.relem_symbol * Namespace_context.nsenv
    | AOEAnyElem of Namespace_context.nsenv * Namespace_context.nsenv
    | AOEAttr of Namespace_symbols.rattr_symbol
    | AOEAnyAttr of Namespace_context.nsenv
    | AOEError
    | AOETreat of Xquery_algebra_ast.asequencetype
    | AOEValidate of Xquery_common_ast.validation_mode
    | AOECast of Namespace_context.nsenv * Xquery_algebra_ast.asequencetype
    | AOECastable of Namespace_context.nsenv *
        Xquery_algebra_ast.asequencetype
    | AOESome of Xquery_algebra_ast.asequencetype option *
        Xquery_common_ast.cvname
    | AOEEvery of Xquery_algebra_ast.asequencetype option *
        Xquery_common_ast.cvname
    | AOEInputTuple
    | AOECallBuiltIn of (Xquery_common_ast.cfname * int) *
        Xquery_algebra_ast.asequencetype option array *
        Xquery_algebra_ast.asequencetype *
        Xquery_common_ast.updating_modifier
    | AOECallOverloaded of (Xquery_common_ast.cfname * int) *
        Xquery_algebra_ast.aoverloaded_signature_table
    | AOECallUserDefined of (Xquery_common_ast.cfname * int) *
        Xquery_algebra_ast.asequencetype option array *
        Xquery_algebra_ast.asequencetype *
        Xquery_common_ast.updating_modifier * bool
    | AOEConvertSimple of Datatypes.atomic_type
    | AOEPromoteNumeric of Datatypes.atomic_type
    | AOEPromoteAnyString
    | AOEUnsafePromoteNumeric of Datatypes.atomic_type
    | AOEServerImplements of Namespace_names.ncname * string
    | AOEExecute of Namespace_names.ncname * string
    | AOEASyncExecute of Namespace_names.ncname * string
    | AOEForServerClose of Namespace_names.ncname * string
    | AOEEvalClosure
    | AOECreateTuple of
        (Xquery_algebra_ast.asequencetype option * Xquery_common_ast.crname)
        array
    | AOEAccessTuple of Xquery_common_ast.crname
    | AOEConcatTuples
    | AOEProject of Xquery_common_ast.crname array
    | AOEMapFromItem of Xquery_common_ast.crname
    | AOEMapToItem
    | AOEMap
    | AOENullMap of Xquery_common_ast.crname
    | AOEMapIndex of Xquery_common_ast.crname
    | AOEMapIndexStep of Xquery_common_ast.crname
    | AOEMapConcat
    | AOEOuterMapConcat of Xquery_common_ast.crname
    | AOEProduct
    | AOESelect of Xquery_algebra_ast.predicate_desc
    | AOEJoin of Xquery_algebra_ast.predicate_desc
    | AOELeftOuterJoin of
        (Xquery_common_ast.crname * Xquery_algebra_ast.predicate_desc)
    | AOEGroupBy of Xquery_algebra_ast.group_desc list
    | AOEOrderBy of Xquery_common_ast.stablekind *
        (Xquery_common_ast.sortkind * Xquery_common_ast.emptysortkind) list *
        Xquery_algebra_ast.aoverloaded_signature_table
    | AOECopy
    | AOEDelete
    | AOEInsert of Xquery_algebra_ast.algop_insert_location
    | AOERename of Namespace_context.nsenv
    | AOEReplace of Xquery_common_ast.value_of_flag
    | AOESnap of Xquery_common_ast.snap_modifier
    | AOESet of Xquery_common_ast.cvname
    | AOEImperativeSeq
    | AOEParse of string
    | AOETreeJoin of Xquery_common_ast.axis * Xquery_algebra_ast.anode_test
    | AOETupleTreePattern of Xquery_common_ast.crname *
        Xquery_algebra_ast.twig_pattern
  type input_signature =
      NoInput
    | OneInput of Xquery_physical_type_ast.physical_type
    | TwoInput of
        (Xquery_physical_type_ast.physical_type *
         Xquery_physical_type_ast.physical_type)
    | ManyInput of Xquery_physical_type_ast.physical_type array
  type tuple_fields = Xquery_common_ast.cvname list
  type variable_usage = Never | Once | Many | Redefined
  type variable_use_count =
      Xquery_common_ast.cvname * (int * Xquery_algebra_ast.variable_usage)
  type tuple_field_use_count = Xquery_algebra_ast.variable_use_count
  type table_cardinality = COne | CMany
  type cardinality = NoTable | Table of Xquery_algebra_ast.table_cardinality
  type treejoin_path =
      Empty
    | Variable of Xquery_common_ast.cvname
    | Step of Xquery_common_ast.axis * Xquery_algebra_ast.anode_test
    | JoinChild of Xquery_algebra_ast.treejoin_path *
        Xquery_algebra_ast.treejoin_path
    | Union of Xquery_algebra_ast.treejoin_path *
        Xquery_algebra_ast.treejoin_path
  type free_variable_desc = {
    mutable use_counts : Xquery_algebra_ast.variable_use_count list;
    mutable bound_usage_counts : Xquery_algebra_ast.variable_use_count list;
    mutable accessed_fields : Xquery_algebra_ast.tuple_fields;
    mutable returned_fields : Xquery_algebra_ast.tuple_fields;
    mutable tuple_field_use_counts :
      Xquery_algebra_ast.tuple_field_use_count list *
      Xquery_algebra_ast.tuple_fields * Xquery_algebra_ast.cardinality;
    mutable returned_path : Xquery_algebra_ast.treejoin_path;
    mutable accessed_path : Xquery_algebra_ast.treejoin_path;
    mutable updated_path : Xquery_algebra_ast.treejoin_path;
  }
  type expr_eval_sig =
      Xquery_physical_algebra_ast.physop_expr_name *
      Xquery_algebra_ast.input_signature *
      Xquery_physical_type_ast.physical_type
  type ('a, 'b) aalgop_sub_exprs =
      NoSub
    | OneSub of ('a, 'b) Xquery_algebra_ast.aalgop_expr
    | TwoSub of ('a, 'b) Xquery_algebra_ast.aalgop_expr *
        ('a, 'b) Xquery_algebra_ast.aalgop_expr
    | ManySub of ('a, 'b) Xquery_algebra_ast.aalgop_expr array
  and ('a, 'b) aalgop_expr = {
    mutable palgop_expr_name : Xquery_algebra_ast.algop_expr_name;
    mutable psub_expression : ('a, 'b) Xquery_algebra_ast.aalgop_sub_exprs;
    mutable pdep_sub_expression :
      ('a, 'b) Xquery_algebra_ast.aalgop_sub_exprs;
    palgop_expr_eval : 'Pervasives.ref;
    mutable palgop_expr_eval_sig : Xquery_algebra_ast.expr_eval_sig option;
    annotation : 'b;
    mutable compile_annotations :
      Xquery_algebra_ast.free_variable_desc option;
    palgop_expr_origin : Xquery_ast.expr_handle;
    palgop_expr_loc : Finfo.finfo;
  }
  type algop_decl_name =
      AOEVarDecl of
        (Xquery_algebra_ast.asequencetype option * Xquery_common_ast.cvname)
    | AOEVarDeclExternal of
        (Xquery_algebra_ast.asequencetype option * Xquery_common_ast.cvname)
    | AOEVarDeclImported of
        (Xquery_algebra_ast.asequencetype option * Xquery_common_ast.cvname)
    | AOEValueIndexDecl of string
    | AOENameIndexDecl of Namespace_symbols.relem_symbol
  type ('a, 'b, 'c) aalgop_decl = {
    alg_decl_name : Xquery_algebra_ast.algop_decl_name;
    alg_decl_eval : 'Pervasives.ref;
    mutable alg_decl_indep : ('a, 'b) Xquery_algebra_ast.aalgop_sub_exprs;
    mutable alg_decl_dep : ('a, 'b) Xquery_algebra_ast.aalgop_sub_exprs;
    alg_decl_annotation : 'b;
    alg_decl_loc : Finfo.finfo;
  }
  type ('a, 'b) aalgop_function_plan =
      AOEFunctionImported
    | AOEFunctionUser of ('a, 'b) Xquery_algebra_ast.aalgop_expr
  type ('a, 'b) aalgop_function_body = {
    palgop_func_formal_args : Xquery_common_ast.cvname array;
    palgop_func_output_type : Xquery_algebra_ast.asequencetype option;
    palgop_func_optimized_logical_plan :
      ('a, 'b) Xquery_algebra_ast.aalgop_function_plan Pervasives.ref;
    palgop_func_physical_plan :
      ('a, 'b) Xquery_algebra_ast.aalgop_expr option Pervasives.ref;
  }
  type ('a, 'b) aalgop_function_decl = {
    palgop_function_decl_desc :
      ('a, 'b) Xquery_algebra_ast.aalgop_function_decl_desc;
    palgop_function_decl_loc : Finfo.finfo;
  }
  and ('a, 'b) aalgop_function_decl_desc =
      (Xquery_common_ast.cfname * int) *
      Xquery_algebra_ast.afunction_signature *
      ('a, 'b) Xquery_algebra_ast.aalgop_function_body *
      Xquery_common_ast.updating_modifier
  type ('a, 'b, 'c) aalgop_prolog = {
    palgop_prolog_functions :
      ('a, 'b) Xquery_algebra_ast.aalgop_function_decl list;
    palgop_prolog_vars : ('a, 'b, 'c) Xquery_algebra_ast.aalgop_decl list;
    palgop_prolog_indices : ('a, 'b, 'c) Xquery_algebra_ast.aalgop_decl list;
  }
  type ('a, 'b, 'c) aalgop_xmodule = {
    palgop_module_prolog : ('a, 'b, 'c) Xquery_algebra_ast.aalgop_prolog;
    palgop_module_statements : ('a, 'b) Xquery_algebra_ast.aalgop_expr list;
  }
end