Legend:
Page
Library
Module
Module type
Parameter
Class
Class type
Source
Source file ast.ml
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235(* This file is free software, part of dolmen. See file "LICENSE" for more information *)moduletypeId=sigtypet(** The type of identifiers *)typenamespace(** The type for namespaces. *)valvar:namespace(** Used for type variables. *)valterm:namespace(** Usual namespace, used for terms and propositions. *)valsort:namespace(** Usual namespace, used for types. *)valdecl:namespace(** Names used to refer to top-level declarations. *)valtrack:namespace(** Namespace used to tag and identify sub-terms occuring in files. *)valmk:namespace->string->t(** Make an identifier *)valtracked:track:t->namespace->string->t(** Make an identifier with an additional name. *)endmoduletypeTerm=sigtypet(** The type of terms. *)typeid(** The type of identifiers *)typelocation(** The type of locations attached to terms. *)valprop:?loc:location->unit->tvalbool:?loc:location->unit->tvalty_unit:?loc:location->unit->tvalty_int:?loc:location->unit->tvalty_real:?loc:location->unit->tvalty_bitv:?loc:location->int->t(** Builtin types. *)valvoid:?loc:location->unit->tvaltrue_:?loc:location->unit->tvalfalse_:?loc:location->unit->t(** Builtin constants. *)valnot_:?loc:location->t->tvaland_:?loc:location->tlist->tvalor_:?loc:location->tlist->tvalxor:?loc:location->t->t->tvalimply:?loc:location->t->t->tvalequiv:?loc:location->t->t->t(** Propositional builtins. *)valint:?loc:location->string->tvalreal:?loc:location->string->tvalhexa:?loc:location->string->t(** Numerical constant creation. *)valuminus:?loc:location->t->tvaladd:?loc:location->t->t->tvalsub:?loc:location->t->t->tvalmult:?loc:location->t->t->tvaldiv:?loc:location->t->t->tvalmod_:?loc:location->t->t->tvalint_pow:?loc:location->t->t->tvalreal_pow:?loc:location->t->t->tvallt:?loc:location->t->t->tvalleq:?loc:location->t->t->tvalgt:?loc:location->t->t->tvalgeq:?loc:location->t->t->t(** Arithmetic builtins. *)valeq:?loc:location->t->t->tvalneq:?loc:location->tlist->t(** Equality and disequality. *)valarray_get:?loc:location->t->t->tvalarray_set:?loc:location->t->t->t->t(** Array primitives. *)valbitv:?loc:location->string->t(** Bitvector litteral. *)valbitv_extract:?loc:location->t->int->int->t(** Bitvoector extraction.
TODO: document meaning of the itnegers indexes. *)valbitv_concat:?loc:location->t->t->t(** Bitvector concatenation. *)valconst:?loc:location->id->t(** Constants, i.e non predefined symbols. This includes both constants
defined by theories, defined locally in a problem, and also quantified variables. *)valcolon:?loc:location->t->t->t(** Juxtaposition of terms, used to annotate terms with their type. *)valapply:?loc:location->t->tlist->t(** Application of terms (as well as types). *)valarrow:?loc:location->t->t->t(** Create a function type. *)valite:?loc:location->t->t->t->t(** Conditional terms. *)valforall:?loc:location->tlist->t->tvalexists:?loc:location->tlist->t->t(** Universal and existential quantifications. *)valletin:?loc:location->tlist->t->t(** Let-binding. *)valmatch_:?loc:location->t->(t*t)list->t(** Pattern matching. The first term is the term to match,
and each tuple in the list is a match case, which is a pair
of a pattern and a match branch. *)valrecord:?loc:location->tlist->t(** Create a record expression, with a list of equalities of the form
"label = expr". *)valrecord_with:?loc:location->t->tlist->t(** Record update, of the form "s with [label = expr, ...]". *)valrecord_access:?loc:location->t->id->t(** Record access for the field given by the identifier. *)valadt_check:?loc:location->t->id->t(** Create a check agains the given adt constructor. *)valadt_project:?loc:location->t->id->t(** Create a projection for the given field of an adt constructor. *)valcheck:?loc:location->t->t(** Create a term to "check" a formula.
TODO: ask @iguernlala about this. *)valcut:?loc:location->t->t(** Create a cut.
TODO: ask @iguernlala about this. *)valin_interval:?loc:location->t->(t*bool)->(t*bool)->t(** Create a trigger for the given term/variable being inside
of a given interval, which is given as a lower bound, and an upper bound.
Each bound contains an expression for the bound value, as well as a boolean
indicating whether the bound is strict or not. *)valmaps_to:?loc:location->id->t->t(** Used in trigger creation. *)valtrigger:?loc:location->tlist->t(** Create a (multi) trigger. *)valtriggers:?loc:location->t->tlist->t(** Annotate a term (generally a quantified formula), with a list of triggers. *)valfilters:?loc:location->t->tlist->t(** Annotate a term (genrally a quantified formula) with a list of filters. *)valtracked:?loc:location->id->t->t(** Annotate a term with an id for tracking purposes. *)endmoduletypeStatement=sigtypet(** The type of statements. *)typeid(** The type of identifiers *)typeterm(** The type of terms used in statements. *)typelocation(** The type of locations attached to statements. *)vallogic:?loc:location->ac:bool->idlist->term->t(** Function declaration. *)valrecord_type:?loc:location->id->termlist->(id*term)list->t(** Record type definition. *)valfun_def:?loc:location->id->termlist->termlist->term->term->t(** Function definition. *)valpred_def:?loc:location->id->termlist->termlist->term->t(** Predicate definition. *)valdefs:?loc:location->?attrs:termlist->tlist->t(** Pack a list of mutually recursive definitions into a single statement. *)valabstract_type:?loc:location->id->termlist->t(** Create a new abstract type, quantified over the given type variables. *)valalgebraic_type:?loc:location->id->termlist->(id*termlist)list->t(** An algebraic datatype definition. *)valrec_types:?loc:location->tlist->t(** Pack a list of mutually recursive algebraic datatypes together. *)valaxiom:?loc:location->id->term->t(** Create an axiom. *)valcase_split:?loc:location->id->term->t(** Create a case split. *)valtheory:?loc:location->id->id->tlist->t(** Create a theory, extending another, with the given list of declarations. *)valrewriting:?loc:location->id->termlist->t(** Create a (set of ?) rewriting rule(s). *)valprove_goal:?loc:location->id->term->t(** Goal declaration. *)valprove_sat:?loc:location->name:id->termlist->t(** Check-sat declaration. *)end