123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265(* This file is free software, part of dolmen. See file "LICENSE" for more information *)(** Interfaces for Types
This module defines Interfaces that implementation of types must
respect in order to be used to instantiate functors. *)(** {2 Signature for Typecheked types} *)(** Signature required by types for typing first-order
polymorphic terms. *)moduletypeTff=sigtypet(** The type of types. *)type'atag(** A type for tags to attach to arbitrary types. *)(** A module for variables that occur in types. *)moduleVar:sigtypet(** The type of variables the can occur in types *)valcompare:t->t->int(** Comparison function on variables. *)valmk:string->t(** Create a new type variable with the given name. *)end(** A module for constant symbols the occur in types. *)moduleConst:sigtypet(** The type of constant symbols the can occur in types *)valcompare:t->t->int(** Comparison function on type constants. *)valarity:t->int(** Return the arity of the given symbol. *)valmk:string->int->t(** Create a type constant with the given arity. *)valtag:t->'atag->'a->unit(** Tag a variable. *)endvalprop:t(** The type of propositions *)valof_var:Var.t->t(** Create a type from a variable. *)valapply:Const.t->tlist->t(** Application for types. *)valwildcard:unit->t(** Create a fresh type wildcard. *)valtag:t->'atag->'a->unit(** Annotate the given type with the given tag and value. *)end(** Signature required by types for typing ae *)moduletypeAe_Base=sigtypet(** The type of types. *)valbool:t(** The type of booleans *)valunit:t(** Unit type *)end(** Signature required by types for typing tptp *)moduletypeAe_Arith=sigtypet(** The type of types. *)valint:t(** The type of integers. *)end(** Signature required by types for typing tptp *)moduletypeTptp_Base=sigtypet(** The type of types *)valprop:t(** The type of propositions. *)valbase:t(** An arbitrary base type. *)end(** Signature required by types for typing tptp *)moduletypeTptp_Arith=sigtypet(** The type of types *)valint:t(** The type of integers *)valrat:t(** The type of rationals *)valreal:t(** The type of reals *)valequal:t->t->bool(** Equality on types. *)end(** Signature required by types for typing smtlib core theory *)moduletypeSmtlib_Base=sigtypet(** The type of type constants (i.e. type constructors) *)valprop:t(** The type constructor of propositions. *)end(** Signature required by types for typing smtlib integer arithmetic *)moduletypeSmtlib_Int=sigtypet(** The type of types *)valint:t(** The type for integer expressions. *)end(** Signature required by types for typing smtlib real arithmetic *)moduletypeSmtlib_Real=sigtypet(** The type of types *)valreal:t(** The type for integer expressions. *)end(** Signature required for types for typing smtlib real_int arithmetic. *)moduletypeSmtlib_Real_Int=sigincludeSmtlib_IntincludeSmtlib_Realwithtypet:=ttypeview=private[>|`Int|`Real](** Partial view for types. These are used by the Reals_Ints theory
to perform type-based dispatch, and automatic conversion of Ints
to Reals when specified by the specification. *)valview:t->view(** Partial view of a type. *)end(** Signature required for types for typing smtlib arrays *)moduletypeSmtlib_Array=sigtypet(** The type of types *)valarray:t->t->t(** The type of functionnal arrays from one type to another. *)typeview=private[>|`Int|`Real|`Bitvofint|`Arrayoft*t](** Partial views for types. These are used in the Array theory
to enforce some restrictions logics impose on the types of
arrays that cna occur. *)valview:t->view(** Partial view of a type. *)end(** Signature required for types for typing smtlib bitvectors *)moduletypeSmtlib_Bitv=sigtypet(** The type of types *)valbitv:int->t(** Create a fixed size bitvector type. *)end(** Signature required for types for typing smtlib bitvectors *)moduletypeSmtlib_Float=sigtypet(** The type of types *)valbitv:int->t(** Create a fixed size bitvector type. *)valfloat:int->int->t(** Create a float type with fixed exponent size in bits and fixed significand,
including the hidden bit. *)valroundingMode:t(** Type of the rounding modes *)typeview=private[>|`Real|`Bitvofint|`Floatofint*int](** Partial views for types. These are used in the Float theory to
perform type-base dispatch for some conversion functions. *)valview:t->view(** Partial view of a type. *)end(* Signature required for types for typing the smtlib string theory *)moduletypeSmtlib_String=sigtypet(** The type of types *)valint:t(** The type of ints *)valstring:t(** The type of strings *)valstring_reg_lang:t(** The type of regular languages over strings *)end