sig
type logic_type =
LTvoid
| LTinteger
| LTreal
| LTint of Cil_types.ikind
| LTfloat of Cil_types.fkind
| LTarray of Logic_ptree.logic_type
| LTpointer of Logic_ptree.logic_type
| LTenum of string
| LTstruct of string
| LTunion of string
| LTnamed of string * Logic_ptree.logic_type list
type quantifiers = (Logic_ptree.logic_type * string) list
type constant =
IntConstant of string
| FloatConstant of string
| StringConstant of string
| WStringConstant of string
type relation = Lt | Gt | Le | Ge | Eq | Neq
type binop =
Badd
| Bsub
| Bmul
| Bdiv
| Bmod
| Bbw_and
| Bbw_or
| Bbw_xor
| Blshift
| Brshift
type unop = Uminus | Ustar | Uamp | Ubw_not
type lexpr = {
lexpr_node : Logic_ptree.lexpr_node;
lexpr_loc : Cil_types.location;
}
and lexpr_node =
PLvar of string
| PLapp of string * string list * Logic_ptree.lexpr list
| PLlambda of (Logic_ptree.logic_type * string) list * Logic_ptree.lexpr
| PLconstant of Logic_ptree.constant
| PLunop of Logic_ptree.unop * Logic_ptree.lexpr
| PLbinop of Logic_ptree.lexpr * Logic_ptree.binop * Logic_ptree.lexpr
| PLdot of Logic_ptree.lexpr * string
| PLarrow of Logic_ptree.lexpr * string
| PLarrget of Logic_ptree.lexpr * Logic_ptree.lexpr
| PLold of Logic_ptree.lexpr
| PLat of Logic_ptree.lexpr * string
| PLbase_addr of Logic_ptree.lexpr
| PLblock_length of Logic_ptree.lexpr
| PLresult
| PLnull
| PLcast of Logic_ptree.logic_type * Logic_ptree.lexpr
| PLrange of Logic_ptree.lexpr option * Logic_ptree.lexpr option
| PLsizeof of Logic_ptree.logic_type
| PLsizeofE of Logic_ptree.lexpr
| PLcoercion of Logic_ptree.lexpr * Logic_ptree.logic_type
| PLcoercionE of Logic_ptree.lexpr * Logic_ptree.lexpr
| PLupdate of Logic_ptree.lexpr * string * Logic_ptree.lexpr
| PLtypeof of Logic_ptree.lexpr
| PLtype of Logic_ptree.logic_type
| PLfalse
| PLtrue
| PLrel of Logic_ptree.lexpr * Logic_ptree.relation * Logic_ptree.lexpr
| PLand of Logic_ptree.lexpr * Logic_ptree.lexpr
| PLor of Logic_ptree.lexpr * Logic_ptree.lexpr
| PLxor of Logic_ptree.lexpr * Logic_ptree.lexpr
| PLimplies of Logic_ptree.lexpr * Logic_ptree.lexpr
| PLiff of Logic_ptree.lexpr * Logic_ptree.lexpr
| PLnot of Logic_ptree.lexpr
| PLif of Logic_ptree.lexpr * Logic_ptree.lexpr * Logic_ptree.lexpr
| PLforall of Logic_ptree.quantifiers * Logic_ptree.lexpr
| PLexists of Logic_ptree.quantifiers * Logic_ptree.lexpr
| PLvalid of Logic_ptree.lexpr
| PLvalid_index of Logic_ptree.lexpr * Logic_ptree.lexpr
| PLvalid_range of Logic_ptree.lexpr * Logic_ptree.lexpr *
Logic_ptree.lexpr
| PLseparated of Logic_ptree.lexpr list
| PLfresh of Logic_ptree.lexpr
| PLnamed of string * Logic_ptree.lexpr
| PLsubtype of Logic_ptree.lexpr * Logic_ptree.lexpr
| PLcomprehension of Logic_ptree.lexpr * Logic_ptree.quantifiers *
Logic_ptree.lexpr option
| PLunion of Logic_ptree.lexpr list
| PLinter of Logic_ptree.lexpr list
| PLempty
type type_annot = {
inv_name : string;
this_type : Logic_ptree.logic_type;
this_name : string;
inv : Logic_ptree.lexpr;
}
type decl =
LDlogic_def of string * string list * string list *
Logic_ptree.logic_type * (Logic_ptree.logic_type * string) list *
Logic_ptree.lexpr
| LDlogic_reads of string * string list * string list *
Logic_ptree.logic_type * (Logic_ptree.logic_type * string) list *
Logic_ptree.lexpr list
| LDtype of string * string list *
(string * Logic_ptree.logic_type list) list option
| LDpredicate_reads of string * string list * string list *
(Logic_ptree.logic_type * string) list * Logic_ptree.lexpr list
| LDpredicate_def of string * string list * string list *
(Logic_ptree.logic_type * string) list * Logic_ptree.lexpr
| LDinductive_def of string * string list * string list *
(Logic_ptree.logic_type * string) list *
(string * string list * string list * Logic_ptree.lexpr) list
| LDlemma of string * bool * string list * string list *
Logic_ptree.lexpr
| LDaxiomatic of string * Logic_ptree.decl list
| LDinvariant of string * Logic_ptree.lexpr
| LDtype_annot of Logic_ptree.type_annot
type spec =
(Logic_ptree.lexpr, Logic_ptree.lexpr, Logic_ptree.lexpr)
Cil_types.spec
type code_annot =
(Logic_ptree.lexpr, Logic_ptree.lexpr, Logic_ptree.lexpr,
Logic_ptree.lexpr)
Cil_types.code_annot
type assigns = Logic_ptree.lexpr Cil_types.assigns
type variant = Logic_ptree.lexpr Cil_types.variant
type annot =
Adecl of (Cil_types.location * Logic_ptree.decl) list
| Aspec
| Acode_annot of Cil_types.location * Logic_ptree.code_annot
| Aloop_annot of Cil_types.location * Logic_ptree.code_annot list
| Aattribute_annot of Cil_types.location * string
end