Engine.Wands
module Subst = Gillian.Symbolic.Subst
module L = Logging
type wand = {
lhs : string * Gillian.Gil_syntax.Expr.t list;
rhs : string * Gillian.Gil_syntax.Expr.t list;
}
val wand_to_yojson : wand -> Yojson.Safe.t
val wand_of_yojson : Yojson.Safe.t -> wand Ppx_deriving_yojson_runtime.error_or
type query = {
lname : string;
rname : string;
largs : Gillian.Gil_syntax.Expr.t list;
r_ins : Gillian.Gil_syntax.Expr.t list;
r_outs : Gillian.Gil_syntax.Expr.t option list;
}
val query_ins_outs :
query ->
Gillian.Gil_syntax.Expr.t list * Gillian.Gil_syntax.Expr.t option list
val make_query :
pred_defs:MP.preds_tbl_t ->
subst:(Gillian.Gil_syntax.Expr.t -> Gillian.Gil_syntax.Expr.t option) ->
wand ->
query option
The in-parameters of a magic wand of the form P(_) -* Q(_)
are:
val pp_query : Stdlib.Format.formatter -> query -> unit
type t = wand list Stdlib.ref
val to_yojson : t -> Yojson.Safe.t
val of_yojson : Yojson.Safe.t -> t Ppx_deriving_yojson_runtime.error_or
val _ : Yojson.Safe.t -> t Ppx_deriving_yojson_runtime.error_or
val pp_wand : Stdlib.Format.formatter -> wand -> unit
val pp : Stdlib.Format.formatter -> wand list Stdlib.ref -> unit
val get_lvars : wand list Stdlib.ref -> Utils.Prelude.SS.t
val get_alocs : wand list Stdlib.ref -> Utils.Prelude.SS.t
val to_assertions : t -> Gillian.Gil_syntax.Asrt.t list
val wand_ins_outs :
pred_defs:MP.preds_tbl_t ->
wand ->
Gillian.Gil_syntax.Expr.t list * Gillian.Gil_syntax.Expr.t list
module Consume_wand : sig ... end
val consume_wand :
pred_defs:MP.preds_tbl_t ->
semantic_eq:(Gillian.Gil_syntax.Expr.t -> Gillian.Gil_syntax.Expr.t -> bool) ->
t ->
query ->
wand option