This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.
This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.
<!DOCTYPE html>
<htmlxmlns="http://www.w3.org/1999/xhtml"><head><title>Prop (infer.Biabduction.Prop)</title><linkrel="stylesheet"href="../../../odoc.css"/><metacharset="utf-8"/><metaname="generator"content="odoc 1.5.1"/><metaname="viewport"content="width=device-width,initial-scale=1.0"/><scriptsrc="../../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><divclass="content"><header><nav><ahref="../index.html">Up</a>–<ahref="../../index.html">infer</a>»<ahref="../index.html">Biabduction</a>» Prop</nav><h1>Module <code>Biabduction.Prop</code></h1><navclass="toc"><ul><li><ahref="#basic-functions-for-propositions">Basic Functions for propositions</a></li><li><ahref="#normalization">Normalization</a></li><li><ahref="#compaction">Compaction</a></li><li><ahref="#queries-about-propositions">Queries about propositions</a></li><li><ahref="#functions-for-changing-and-generating-propositions">Functions for changing and generating propositions</a></li><li><ahref="#functions-for-existentially-quantifying-and-unquantifying-variables">Functions for existentially quantifying and unquantifying variables</a></li><li><ahref="#prop-iterators">Prop iterators</a></li><li><ahref="#internal-modules">Internal modules</a></li></ul></nav></header><aside><p>Functions for Propositions (i.e., Symbolic Heaps)</p></aside><dl><dtclass="spec type"id="type-normal"><ahref="#type-normal"class="anchor"></a><code><spanclass="keyword">type</span> normal</code></dt><dd><p>kind for normal props, i.e. normalized</p></dd></dl><dl><dtclass="spec type"id="type-exposed"><ahref="#type-exposed"class="anchor"></a><code><spanclass="keyword">type</span> exposed</code></dt><dd><p>kind for exposed props</p></dd></dl><dl><dtclass="spec type"id="type-sorted"><ahref="#type-sorted"class="anchor"></a><code><spanclass="keyword">type</span> sorted</code></dt><dd><p>kind for sorted props</p></dd></dl><aside><p>Proposition.</p></aside><dl><dtclass="spec type"id="type-pi"><ahref="#type-pi"class="anchor"></a><code><spanclass="keyword">type</span> pi</code><code> = <span><ahref="../Predicates/index.html#type-atom">Predicates.atom</a> list</span></code></dt><dtclass="spec type"id="type-sigma"><ahref="#type-sigma"class="anchor"></a><code><spanclass="keyword">type</span> sigma</code><code> = <span><ahref="../Predicates/index.html#type-hpred">Predicates.hpred</a> list</span></code></dt><dtclass="spec type"id="type-t"><ahref="#type-t"class="anchor"></a><code><spanclass="keyword">type</span><span>'a t</span></code><code> = <spanclass="keyword">private</span></code><code>{</code><tableclass="record"><trid="type-t.sigma"class="anchored"><tdclass="def field"><ahref="#type-t.sigma"class="anchor"></a><code>sigma : <ahref="index.html#type-sigma">sigma</a>;</code></td><tdclass="doc"><p>spatial part</p></td></tr><trid="type-t.sub"class="anchored"><tdclass="def field"><ahref="#type-t.sub"class="anchor"></a><code>sub : <ahref="../Predicates/index.html#type-subst">Predicates.subst</a>;</code></td><tdclass="doc"><p>substitution</p></td></tr><trid="type-t.pi"class="anchored"><tdclass="def field"><ahref="#type-t.pi"class="anchor"></a><code>pi : <ahref="index.html#type-pi">pi</a>;</code></td><tdclass="doc"><p>pure part</p></td></tr><trid="type-t.sigma_fp"class="anchored"><tdclass="def field"><ahref="#type-t.sigma_fp"class="anchor"></a><code>sigma_fp : <ahref="index.html#type-sigma">sigma</a>;</code></td><tdclass="doc"><p>abduced spatial part</p></td></tr><trid="type-t.pi_fp"class="anchored"><tdclass="def field"><ahref="#type-t.pi_fp"class="anchor"></a><code>pi_fp : <ahref="index.html#type-pi">pi</a>;</code></td><tdclass="doc"><p>abduced pure part</p></td></tr></table><code>}</code></dt><dd><p>the kind 'a should range over <code>normal</code> and <code>exposed</code></p></dd></dl><div><divclass="spec include"><divclass="doc"><dl><dtclass="spec value"id="val-compare"><ahref="#val-compare"class="anchor"></a><code><spanclass="keyword">val</span> compare : <span>(<spanclass="type-var">'a</span><span>-></span><spanclass="type-var">'a</span><span>-></span> int)</span><span>-></span><span><spanclass="type-var">'a</span><ahref="index.html#type-t">t</a></span><span>-></span><span><spanclass="type-var">'a</span><ahref="index.html#type-t">t</a></span><span>-></span> int</code></dt></dl></div></div></div><dl><dtclass="spec type"id="type-struct_init_mode"><ahref="#type-struct_init_mode"class="anchor"></a><code><spanclass="keyword">type</span> struct_init_mode</code><code> = </code><tableclass="variant"><trid="type-struct_init_mode.No_init"class="anchored"><tdclass="def constructor"><ahref="#type-struct_init_mode.No_init"class="anchor"></a><code>| </code><code><spanclass="constructor">No_init</span></code></td></tr><trid="type-struct_init_mode.Fld_init"class="anchored"><tdclass="def constructor"><ahref="#type-struct_init_mode.Fld_init"class="anchor"></a><code>| </code><code><spanclass="constructor">Fld_init</span></code></td></tr></table></dt><dd><p>type to describe different strategies for initializing fields of a structure. <code>No_init</code> does not initialize any fields of the struct. <code>Fld_init</code> initializes the fields of the struct with fresh variables (C) or default values (Java).</p></dd></dl><section><header><h3id="basic-functions-for-propositions"><ahref="#basic-functions-for-propositions"class="anchor"></a>Basic Functions for propositions</h3></header><dl><dtclass="spec value"id="val-has_footprint"><ahref="#val-has_footprint"class="anchor"></a><code><spanclass="keyword">val</span> has_footprint : <span><spanclass="type-var">'a</span><ahref="index.html#type-t">t</a></span><span>-></span> bool</code></dt><dd><p>sigma_fp is nonempty or pi_fp is nonempty</p></dd></dl><dl><dtclass="spec value"id="val-compare_prop"><ahref="#val-compare_prop"class="anchor"></a><code><spanclass="keyword">val</span> compare_prop : <span><spanclass="type-var">'a</span><ahref="index.html#type-t">t</a></span><span>-></span><span><spanclass="type-var">'a</span><ahref="index.html#type-t">t</a></span><span>-></span> int</code></dt><dd><p>Compare propositions</p></dd></dl><dl><dtclass="spec value"id="val-equal_sigma"><ahref="#val-equal_sigma"class="anchor"></a><code><spanclass="keyword">val</span> equal_sigma : <ahref="index.html#type-sigma">sigma</a><span>-></span><ahref="index.html#type-sigma">sigma</a><span>-></span> bool</code></dt><dd><p>Check the equality of two sigma's</p></dd></dl><dl><dtclass="spec value"id="val-d_sub"><ahref="#val-d_sub"class="anchor"></a><code><spanclass="keyword">val</span> d_sub : <ahref="../Predicates/index.html#type-subst">Predicates.subst</a><span>-></span> unit</code></dt><dd><p>Dump a substitution.</p></dd></dl><dl><dtclass="spec value"id="val-pp_pi"><ahref="#val-pp_pi"class="anchor"></a><code><spanclass="keyword">val</span> pp_pi : <ahref="../../IStdlib/Pp/index.html#type-env">IStdlib.Pp.env</a><span>-></span> Stdlib.Format.formatter <span>-></span><ahref="index.html#type-pi">pi</a><span>-></span> unit</code></dt><dd><p>Pretty print a pi.</p></dd></dl><dl><dtclass="spec value"id="val-d_pi"><ahref="#val-d_pi"class="anchor"></a><code><spanclass="keyword">val</span> d_pi : <ahref="index.html#type-pi">pi</a><span>-></span> unit</code></dt><dd><p>Dump a pi.</p></dd></dl><dl><dtclass="spec value"id="val-d_sigma"><ahref="#val-d_sigma"class="anchor"></a><code><spanclass="keyword">val</span> d_sigma : <ahref="index.html#type-sigma">sigma</a><span>-></span> unit</code></dt><dd><p>Dump a sigma.</p></dd></dl><dl><dtclass="spec value"id="val-d_pi_sigma"><ahref="#val-d_pi_sigma"class="anchor"></a><code><spanclass="keyword">val</span> d_pi_sigma : <ahref="index.html#type-pi">pi</a><span>-></span><ahref="index.html#type-sigma">sigma</a><span>-></span> unit</code></dt><dd><p>Dump a pi and a sigma</p></dd></dl><dl><dtclass="spec value"id="val-sigma_get_stack_nonstack"><ahref="#val-sigma_get_stack_nonstack"class="anchor"></a><code><spanclass="keyword">val</span> sigma_get_stack_nonstack : bool <span>-></span><ahref="index.html#type-sigma">sigma</a><span>-></span><ahref="index.html#type-sigma">sigma</a> * <ahref="index.html#type-sigma">sigma</a></code></dt><dd><p>Split sigma into stack and nonstack parts. The boolean indicates whether the stack should only include local variales.</p></dd></dl><dl><dtclass="spec value"id="val-prop_update_obj_sub"><ahref="#val-prop_update_obj_sub"class="anchor"></a><code><spanclass="keyword">val</span> prop_update_obj_sub : <ahref="../../IStdlib/Pp/index.html#type-env">IStdlib.Pp.env</a><span>-></span><span><spanclass="type-var">'a</span><ahref="index.html#type-t">t</a></span><span>-></span><ahref="../../IStdlib/Pp/index.html#type-env">IStdlib.Pp.env</a></code></dt><dd><p>Update the object substitution given the stack variables in the prop</p></dd></dl><dl><dtclass="spec value"id="val-pp_prop"><ahref="#val-pp_prop"class="anchor"></a><code><spanclass="keyword">val</span> pp_prop : <ahref="../../IStdlib/Pp/index.html#type-env">IStdlib.Pp.env</a><span>-></span> Stdlib.Format.formatter <span>-></span><span><spanclass="type-var">'a</span><ahref="index.html#type-t">t</a></span><span>-></span> unit</code></dt><dd><p>Pretty print a proposition.</p></dd></dl><dl><dtclass="spec value"id="val-prop_pred_env"><ahref="#val-prop_pred_env"class="anchor"></a><code><spanclass="keyword">val</span> prop_pred_env : <span><spanclass="type-var">'a</span><ahref="index.html#type-t">t</a></span><span>-></span><ahref="../Predicates/Env/index.html#type-t">Predicates.Env.t</a></code></dt><dd><p>Create a predicate environment for a prop</p></dd></dl><dl><dtclass="spec value"id="val-d_prop"><ahref="#val-d_prop"class="anchor"></a><code><spanclass="keyword">val</span> d_prop : <span><spanclass="type-var">'a</span><ahref="index.html#type-t">t</a></span><span>-></span> unit</code></dt><dd><p>Dump a proposition.</p></dd></dl><dl><dtclass="spec value"id="val-d_proplist_with_typ"><ahref="#val-d_proplist_with_typ"class="anchor"></a><code><spanclass="keyword">val</span> d_proplist_with_typ : <span><span><spanclass="type-var">'a</span><ahref="index.html#type-t">t</a></span> list</span><span>-></span> unit</code></dt><dtclass="spec value"id="val-max_stamp"><ahref="#val-max_stamp"class="anchor"></a><code><spanclass="keyword">val</span> max_stamp : <span>?⁠f:<span>(<ahref="../../IR/Ident/index.html#type-t">IR.Ident.t</a><span>-></span> bool)</span></span><span>-></span><span><ahref="index.html#type-normal">normal</a><ahref="index.html#type-t">t</a></span><span>-></span> int</code></dt><dtclass="spec value"id="val-pi_free_vars"><ahref="#val-pi_free_vars"class="anchor"></a><code><spanclass="keyword">val</span> pi_free_vars : <ahref="index.html#type-pi">pi</a><span>-></span><span><ahref="../../IR/Ident/index.html#type-t">IR.Ident.t</a><ahref="../../IStdlib/index.html#module-IStd">IStdlib.IStd</a>.Sequence.t</span></code></dt><dtclass="spec value"id="val-sigma_free_vars"><ahref="#val-sigma_free_vars"class="anchor"></a><code><spanclass="keyword">val</span> sigma_free_vars : <ahref="index.html#type-sigma">sigma</a><span>-></span><span><ahref="../../IR/Ident/index.html#type-t">IR.Ident.t</a><ahref="../../IStdlib/index.html#module-IStd">IStdlib.IStd</a>.Sequence.t</span></code></dt><dtclass="spec value"id="val-free_vars"><ahref="#val-free_vars"class="anchor"></a><code><spanclass="keyword">val</span> free_vars : <span><ahref="index.html#type-normal">normal</a><ahref="index.html#type-t">t</a></span><span>-></span><span><ahref="../../IR/Ident/index.html#type-t">IR.Ident.t</a><ahref="../../IStdlib/index.html#module-IStd">IStdlib.IStd</a>.Sequence.t</span></code></dt><dtclass="spec value"id="val-gen_free_vars"><ahref="#val-gen_free_vars"class="anchor"></a><code><spanclass="keyword">val</span> gen_free_vars : <span><ahref="index.html#type-normal">normal</a><ahref="index.html#type-t">t</a></span><span>-></span><span><span>(unit,<ahref="../../IR/Ident/index.html#type-t">IR.Ident.t</a>)</span><ahref="../../IStdlib/index.html#module-IStd">IStdlib.IStd</a>.Sequence.Generator.t</span></code></dt><dtclass="spec value"id="val-sorted_gen_free_vars"><ahref="#val-sorted_gen_free_vars"class="anchor"></a><code><spanclass="keyword">val</span> sorted_gen_free_vars : <span><ahref="index.html#type-sorted">sorted</a><ahref="index.html#type-t">t</a></span><span>-></span><span><span>(unit,<ahref="../../IR/Ident/index.html#type-t">IR.Ident.t</a>)</span><ahref="../../IStdlib/index.html#module-IStd">IStdlib.IStd</a>.Sequence.Generator.t</span></code></dt><dtclass="spec value"id="val-non_pure_free_vars"><ahref="#val-non_pure_free_vars"class="anchor"></a><code><spanclass="keyword">val</span> non_pure_free_vars : <span><ahref="index.html#type-normal">normal</a><ahref="index.html#type-t">t</a></span><span>-></span><span><ahref="../../IR/Ident/index.html#type-t">IR.Ident.t</a><ahref="../../IStdlib/index.html#module-IStd">IStdlib.IStd</a>.Sequence.t</span></code></dt><dtclass="spec value"id="val-dfs_sort"><ahref="#val-dfs_sort"class="anchor"></a><code><spanclass="keyword">val</span> dfs_sort : <ahref="../../IR/Tenv/index.html#type-t">IR.Tenv.t</a><span>-></span><span><ahref="index.html#type-normal">normal</a><ahref="index.html#type-t">t</a></span><span>-></span><span><ahref="index.html#type-sorted">sorted</a><ahref="index.html#type-t">t</a></span></code></dt><dtclass="spec value"id="val-pi_sub"><ahref="#val-pi_sub"class="anchor"></a><code><spanclass="keyword">val</span> pi_sub : <ahref="../Predicates/index.html#type-subst">Predicates.subst</a><span>-></span><span><ahref="../Predicates/index.html#type-atom">Predicates.atom</a> list</span><span>-></span><span><ahref="../Predicates/index.html#type-atom">Predicates.atom</a> list</span></code></dt><dd><p>Apply substitution for pi</p></dd></dl><dl><dtclass="spec value"id="val-sigma_sub"><ahref="#val-sigma_sub"class="anchor"></a><code><spanclass="keyword">val</span> sigma_sub : <ahref="../Predicates/index.html#type-subst">Predicates.subst</a><span>-></span><span><ahref="../Predicates/index.html#type-hpred">Predicates.hpred</a> list</span><span>-></span><span><ahref="../Predicates/index.html#type-hpred">Predicates.hpred</a> list</span></code></dt><dd><p>Apply subsitution for sigma</p></dd></dl><dl><dtclass="spec value"id="val-prop_sub"><ahref="#val-prop_sub"class="anchor"></a><code><spanclass="keyword">val</span> prop_sub : <ahref="../Predicates/index.html#type-subst">Predicates.subst</a><span>-></span><span><spanclass="type-var">'a</span><ahref="index.html#type-t">t</a></span><span>-></span><span><ahref="index.html#type-exposed">exposed</a><ahref="index.html#type-t">t</a></span></code></dt><dd><p>Apply subsitution to prop. Result is not normalized.</p></dd></dl><dl><dtclass="spec value"id="val-prop_expmap"><ahref="#val-prop_expmap"class="anchor"></a><code><spanclass="keyword">val</span> prop_expmap : <span>(<ahref="../../IR/Exp/index.html#type-t">IR.Exp.t</a><span>-></span><ahref="../../IR/Exp/index.html#type-t">IR.Exp.t</a>)</span><span>-></span><span><spanclass="type-var">'a</span><ahref="index.html#type-t">t</a></span><span>-></span><span><ahref="index.html#type-exposed">exposed</a><ahref="index.html#type-t">t</a></span></code></dt><dd><p>Apply the substitution to all the expressions in the prop.</p></dd></dl><dl><dtclass="spec value"id="val-sigma_replace_exp"><ahref="#val-sigma_replace_exp"class="anchor"></a><code><spanclass="keyword">val</span> sigma_replace_exp : <ahref="../../IR/Tenv/index.html#type-t">IR.Tenv.t</a><span>-></span><span><span>(<ahref="../../IR/Exp/index.html#type-t">IR.Exp.t</a> * <ahref="../../IR/Exp/index.html#type-t">IR.Exp.t</a>)</span> list</span><span>-></span><span><ahref="../Predicates/index.html#type-hpred">Predicates.hpred</a> list</span><span>-></span><span><ahref="../Predicates/index.html#type-hpred">Predicates.hpred</a> list</span></code></dt><dd><p>Relaces all expressions in the <code>hpred list</code> using the first argument. Assume that the first parameter defines a partial function. No expressions inside hpara are replaced.</p></dd></dl></section><section><header><h3id="normalization"><ahref="#normalization"class="anchor"></a>Normalization</h3></header><dl><dtclass="spec value"id="val-mk_inequality"><ahref="#val-mk_inequality"class="anchor"></a><code><spanclass="keyword">val</span> mk_inequality : <ahref="../../IR/Tenv/index.html#type-t">IR.Tenv.t</a><span>-></span><ahref="../../IR/Exp/index.html#type-t">IR.Exp.t</a><span>-></span><ahref="../Predicates/index.html#type-atom">Predicates.atom</a></code></dt><dd><p>Turn an inequality expression into an atom</p></dd></dl><dl><dtclass="spec value"id="val-atom_is_inequality"><ahref="#val-atom_is_inequality"class="anchor"></a><code><spanclass="keyword">val</span> atom_is_inequality : <ahref="../Predicates/index.html#type-atom">Predicates.atom</a><span>-></span> bool</code></dt><dd><p>Return <code>true</code> if the atom is an inequality</p></dd></dl><dl><dtclass="spec value"id="val-atom_exp_le_const"><ahref="#val-atom_exp_le_const"class="anchor"></a><code><spanclass="keyword">val</span> atom_exp_le_const : <ahref="../Predicates/index.html#type-atom">Predicates.atom</a><span>-></span><span><span>(<ahref="../../IR/Exp/index.html#type-t">IR.Exp.t</a> * <ahref="../../IR/IntLit/index.html#type-t">IR.IntLit.t</a>)</span> option</span></code></dt><dd><p>If the atom is <code>e<=n</code> return <code>e,n</code></p></dd></dl><dl><dtclass="spec value"id="val-atom_const_lt_exp"><ahref="#val-atom_const_lt_exp"class="anchor"></a><code><spanclass="keyword">val</span> atom_const_lt_exp : <ahref="../Predicates/index.html#type-atom">Predicates.atom</a><span>-></span><span><span>(<ahref="../../IR/IntLit/index.html#type-t">IR.IntLit.t</a> * <ahref="../../IR/Exp/index.html#type-t">IR.Exp.t</a>)</span> option</span></code></dt><dd><p>If the atom is <code>n<e</code> return <code>n,e</code></p></dd></dl><dl><dtclass="spec value"id="val-exp_normalize_prop"><ahref="#val-exp_normalize_prop"class="anchor"></a><code><spanclass="keyword">val</span> exp_normalize_prop : <span>?⁠destructive:bool</span><span>-></span><ahref="../../IR/Tenv/index.html#type-t">IR.Tenv.t</a><span>-></span><span><spanclass="type-var">'a</span><ahref="index.html#type-t">t</a></span><span>-></span><ahref="../../IR/Exp/index.html#type-t">IR.Exp.t</a><span>-></span><ahref="../../IR/Exp/index.html#type-t">IR.Exp.t</a></code></dt><dd><p>Normalize <code>exp</code> using the pure part of <code>prop</code>. Later, we should change this such that the normalization exposes offsets of <code>exp</code> as much as possible.</p><p>If <code>destructive</code> is true then normalize more aggressively, which may lose some useful structure or types.</p></dd></dl><dl><dtclass="spec value"id="val-exp_normalize_noabs"><ahref="#val-exp_normalize_noabs"class="anchor"></a><code><spanclass="keyword">val</span> exp_normalize_noabs : <ahref="../../IR/Tenv/index.html#type-t">IR.Tenv.t</a><span>-></span><ahref="../Predicates/index.html#type-subst">Predicates.subst</a><span>-></span><ahref="../../IR/Exp/index.html#type-t">IR.Exp.t</a><span>-></span><ahref="../../IR/Exp/index.html#type-t">IR.Exp.t</a></code></dt><dd><p>Normalize the expression without abstracting complex subexpressions</p></dd></dl><dl><dtclass="spec value"id="val-exp_collapse_consecutive_indices_prop"><ahref="#val-exp_collapse_consecutive_indices_prop"class="anchor"></a><code><spanclass="keyword">val</span> exp_collapse_consecutive_indices_prop : <ahref="../../IR/Typ/index.html#type-t">IR.Typ.t</a><span>-></span><ahref="../../IR/Exp/index.html#type-t">IR.Exp.t</a><span>-></span><ahref="../../IR/Exp/index.html#type-t">IR.Exp.t</a></code></dt><dd><p>Collapse consecutive indices that should be added. For instance, this function reduces <code>x[1][1]</code> to <code>x[2]</code>. The <code>typ</code> argument is used to ensure the soundness of this collapsing.</p></dd></dl><dl><dtclass="spec value"id="val-lexp_normalize_prop"><ahref="#val-lexp_normalize_prop"class="anchor"></a><code><spanclass="keyword">val</span> lexp_normalize_prop : <ahref="../../IR/Tenv/index.html#type-t">IR.Tenv.t</a><span>-></span><span><spanclass="type-var">'a</span><ahref="index.html#type-t">t</a></span><span>-></span><ahref="../../IR/Exp/index.html#type-t">IR.Exp.t</a><span>-></span><ahref="../../IR/Exp/index.html#type-t">IR.Exp.t</a></code></dt><dd><p>Normalize <code>exp</code> used for the address of a heap cell. This normalization does not combine two offsets inside <code>exp</code>.</p></dd></dl><dl><dtclass="spec value"id="val-atom_normalize_prop"><ahref="#val-atom_normalize_prop"class="anchor"></a><code><spanclass="keyword">val</span> atom_normalize_prop : <ahref="../../IR/Tenv/index.html#type-t">IR.Tenv.t</a><span>-></span><span><spanclass="type-var">'a</span><ahref="index.html#type-t">t</a></span><span>-></span><ahref="../Predicates/index.html#type-atom">Predicates.atom</a><span>-></span><ahref="../Predicates/index.html#type-atom">Predicates.atom</a></code></dt><dtclass="spec value"id="val-sigma_normalize_prop"><ahref="#val-sigma_normalize_prop"class="anchor"></a><code><spanclass="keyword">val</span> sigma_normalize_prop : <ahref="../../IR/Tenv/index.html#type-t">IR.Tenv.t</a><span>-></span><span><spanclass="type-var">'a</span><ahref="index.html#type-t">t</a></span><span>-></span><span><ahref="../Predicates/index.html#type-hpred">Predicates.hpred</a> list</span><span>-></span><span><ahref="../Predicates/index.html#type-hpred">Predicates.hpred</a> list</span></code></dt><dtclass="spec value"id="val-normalize"><ahref="#val-normalize"class="anchor"></a><code><spanclass="keyword">val</span> normalize : <ahref="../../IR/Tenv/index.html#type-t">IR.Tenv.t</a><span>-></span><span><ahref="index.html#type-exposed">exposed</a><ahref="index.html#type-t">t</a></span><span>-></span><span><ahref="index.html#type-normal">normal</a><ahref="index.html#type-t">t</a></span></code></dt><dd><p>normalize a prop</p></dd></dl><dl><dtclass="spec value"id="val-expose"><ahref="#val-expose"class="anchor"></a><code><spanclass="keyword">val</span> expose : <span><spanclass="type-var">_</span><ahref="index.html#type-t">t</a></span><span>-></span><span><ahref="index.html#type-exposed">exposed</a><ahref="index.html#type-t">t</a></span></code></dt><dd><p>expose a prop, no-op used to instantiate the sub-type relation</p></dd></dl></section><section><header><h3id="compaction"><ahref="#compaction"class="anchor"></a>Compaction</h3></header><dl><dtclass="spec value"id="val-prop_compact"><ahref="#val-prop_compact"class="anchor"></a><code><spanclass="keyword">val</span> prop_compact : <ahref="../Predicates/index.html#type-sharing_env">Predicates.sharing_env</a><span>-></span><span><ahref="index.html#type-normal">normal</a><ahref="index.html#type-t">t</a></span><span>-></span><span><ahref="index.html#type-normal">normal</a><ahref="index.html#type-t">t</a></span></code></dt><dd><p>Return a compact representation of the prop</p></dd></dl></section><section><header><h3id="queries-about-propositions"><ahref="#queries-about-propositions"class="anchor"></a>Queries about propositions</h3></header><dl><dtclass="spec value"id="val-prop_is_emp"><ahref="#val-prop_is_emp"class="anchor"></a><code><spanclass="keyword">val</span> prop_is_emp : <span><spanclass="type-var">'a</span><ahref="index.html#type-t">t</a></span><span>-></span> bool</code></dt><dd><p>Check if the sigma part of the proposition is emp</p></dd></dl></section><section><header><h3id="functions-for-changing-and-generating-propositions"><ahref="#functions-for-changing-and-generating-propositions"class="anchor"></a>Functions for changing and generating propositions</h3></header><dl><dtclass="spec value"id="val-mk_neq"><ahref="#val-mk_neq"class="anchor"></a><code><spanclass="keyword">val</span> mk_neq : <ahref="../../IR/Tenv/index.html#type-t">IR.Tenv.t</a><span>-></span><ahref="../../IR/Exp/index.html#type-t">IR.Exp.t</a><span>-></span><ahref="../../IR/Exp/index.html#type-t">IR.Exp.t</a><span>-></span><ahref="../Predicates/index.html#type-atom">Predicates.atom</a></code></dt><dd><p>Construct a disequality.</p></dd></dl><dl><dtclass="spec value"id="val-mk_eq"><ahref="#val-mk_eq"class="anchor"></a><code><spanclass="keyword">val</span> mk_eq : <ahref="../../IR/Tenv/index.html#type-t">IR.Tenv.t</a><span>-></span><ahref="../../IR/Exp/index.html#type-t">IR.Exp.t</a><span>-></span><ahref="../../IR/Exp/index.html#type-t">IR.Exp.t</a><span>-></span><ahref="../Predicates/index.html#type-atom">Predicates.atom</a></code></dt><dd><p>Construct an equality.</p></dd></dl><dl><dtclass="spec value"id="val-mk_pred"><ahref="#val-mk_pred"class="anchor"></a><code><spanclass="keyword">val</span> mk_pred : <ahref="../../IR/Tenv/index.html#type-t">IR.Tenv.t</a><span>-></span><ahref="../../IR/PredSymb/index.html#type-t">IR.PredSymb.t</a><span>-></span><span><ahref="../../IR/Exp/index.html#type-t">IR.Exp.t</a> list</span><span>-></span><ahref="../Predicates/index.html#type-atom">Predicates.atom</a></code></dt><dd><p>Construct a positive pred.</p></dd></dl><dl><dtclass="spec value"id="val-mk_npred"><ahref="#val-mk_npred"class="anchor"></a><code><spanclass="keyword">val</span> mk_npred : <ahref="../../IR/Tenv/index.html#type-t">IR.Tenv.t</a><span>-></span><ahref="../../IR/PredSymb/index.html#type-t">IR.PredSymb.t</a><span>-></span><span><ahref="../../IR/Exp/index.html#type-t">IR.Exp.t</a> list</span><span>-></span><ahref="../Predicates/index.html#type-atom">Predicates.atom</a></code></dt><dd><p>Construct a negative pred.</p></dd></dl><dl><dtclass="spec value"id="val-create_strexp_of_type"><ahref="#val-create_strexp_of_type"class="anchor"></a><code><spanclass="keyword">val</span> create_strexp_of_type : <ahref="../../IR/Tenv/index.html#type-t">IR.Tenv.t</a><span>-></span><ahref="index.html#type-struct_init_mode">struct_init_mode</a><span>-></span><ahref="../../IR/Typ/index.html#type-t">IR.Typ.t</a><span>-></span><span><ahref="../../IR/Exp/index.html#type-t">IR.Exp.t</a> option</span><span>-></span><ahref="../Predicates/index.html#type-inst">Predicates.inst</a><span>-></span><ahref="../Predicates/index.html#type-strexp">Predicates.strexp</a></code></dt><dd><p>create a strexp of the given type, populating the structures if <code>expand_structs</code> is true</p></dd></dl><dl><dtclass="spec value"id="val-mk_ptsto"><ahref="#val-mk_ptsto"class="anchor"></a><code><spanclass="keyword">val</span> mk_ptsto : <ahref="../../IR/Tenv/index.html#type-t">IR.Tenv.t</a><span>-></span><ahref="../../IR/Exp/index.html#type-t">IR.Exp.t</a><span>-></span><ahref="../Predicates/index.html#type-strexp">Predicates.strexp</a><span>-></span><ahref="../../IR/Exp/index.html#type-t">IR.Exp.t</a><span>-></span><ahref="../Predicates/index.html#type-hpred">Predicates.hpred</a></code></dt><dd><p>Construct a pointsto.</p></dd></dl><dl><dtclass="spec value"id="val-mk_ptsto_exp"><ahref="#val-mk_ptsto_exp"class="anchor"></a><code><spanclass="keyword">val</span> mk_ptsto_exp : <ahref="../../IR/Tenv/index.html#type-t">IR.Tenv.t</a><span>-></span><ahref="index.html#type-struct_init_mode">struct_init_mode</a><span>-></span><span>(<ahref="../../IR/Exp/index.html#type-t">IR.Exp.t</a> * <ahref="../../IR/Exp/index.html#type-t">IR.Exp.t</a> * <span><ahref="../../IR/Exp/index.html#type-t">IR.Exp.t</a> option</span>)</span><span>-></span><ahref="../Predicates/index.html#type-inst">Predicates.inst</a><span>-></span><ahref="../Predicates/index.html#type-hpred">Predicates.hpred</a></code></dt><dd><p>Construct a points-to predicate for an expression using either the provided expression <code>name</code> as base for fresh identifiers.</p></dd></dl><dl><dtclass="spec value"id="val-mk_ptsto_lvar"><ahref="#val-mk_ptsto_lvar"class="anchor"></a><code><spanclass="keyword">val</span> mk_ptsto_lvar : <ahref="../../IR/Tenv/index.html#type-t">IR.Tenv.t</a><span>-></span><ahref="index.html#type-struct_init_mode">struct_init_mode</a><span>-></span><ahref="../Predicates/index.html#type-inst">Predicates.inst</a><span>-></span><span>(<ahref="../../IR/Pvar/index.html#type-t">IR.Pvar.t</a> * <ahref="../../IR/Exp/index.html#type-t">IR.Exp.t</a> * <span><ahref="../../IR/Exp/index.html#type-t">IR.Exp.t</a> option</span>)</span><span>-></span><ahref="../Predicates/index.html#type-hpred">Predicates.hpred</a></code></dt><dd><p>Construct a points-to predicate for a single program variable. If <code>expand_structs</code> is true, initialize the fields of structs with fresh variables.</p></dd></dl><dl><dtclass="spec value"id="val-mk_lseg"><ahref="#val-mk_lseg"class="anchor"></a><code><spanclass="keyword">val</span> mk_lseg : <ahref="../../IR/Tenv/index.html#type-t">IR.Tenv.t</a><span>-></span><ahref="../Predicates/index.html#type-lseg_kind">Predicates.lseg_kind</a><span>-></span><ahref="../Predicates/index.html#type-hpara">Predicates.hpara</a><span>-></span><ahref="../../IR/Exp/index.html#type-t">IR.Exp.t</a><span>-></span><ahref="../../IR/Exp/index.html#type-t">IR.Exp.t</a><span>-></span><span><ahref="../../IR/Exp/index.html#type-t">IR.Exp.t</a> list</span><span>-></span><ahref="../Predicates/index.html#type-hpred">Predicates.hpred</a></code></dt><dd><p>Construct a lseg predicate</p></dd></dl><dl><dtclass="spec value"id="val-mk_dllseg"><ahref="#val-mk_dllseg"class="anchor"></a><code><spanclass="keyword">val</span> mk_dllseg : <ahref="../../IR/Tenv/index.html#type-t">IR.Tenv.t</a><span>-></span><ahref="../Predicates/index.html#type-lseg_kind">Predicates.lseg_kind</a><span>-></span><ahref="../Predicates/index.html#type-hpara_dll">Predicates.hpara_dll</a><span>-></span><ahref="../../IR/Exp/index.html#type-t">IR.Exp.t</a><span>-></span><ahref="../../IR/Exp/index.html#type-t">IR.Exp.t</a><span>-></span><ahref="../../IR/Exp/index.html#type-t">IR.Exp.t</a><span>-></span><ahref="../../IR/Exp/index.html#type-t">IR.Exp.t</a><span>-></span><span><ahref="../../IR/Exp/index.html#type-t">IR.Exp.t</a> list</span><span>-></span><ahref="../Predicates/index.html#type-hpred">Predicates.hpred</a></code></dt><dd><p>Construct a dllseg predicate</p></dd></dl><dl><dtclass="spec value"id="val-prop_emp"><ahref="#val-prop_emp"class="anchor"></a><code><spanclass="keyword">val</span> prop_emp : <span><ahref="index.html#type-normal">normal</a><ahref="index.html#type-t">t</a></span></code></dt><dd><p>Proposition <code>true /\ emp</code>.</p></dd></dl><dl><dtclass="spec value"id="val-prop_reset_inst"><ahref="#val-prop_reset_inst"class="anchor"></a><code><spanclass="keyword">val</span> prop_reset_inst : <span>(<ahref="../Predicates/index.html#type-inst">Predicates.inst</a><span>-></span><ahref="../Predicates/index.html#type-inst">Predicates.inst</a>)</span><span>-></span><span><spanclass="type-var">'a</span><ahref="index.html#type-t">t</a></span><span>-></span><span><ahref="index.html#type-exposed">exposed</a><ahref="index.html#type-t">t</a></span></code></dt><dd><p>Reset every inst in the prop using the given map</p></dd></dl><dl><dtclass="spec value"id="val-prop_hpred_star"><ahref="#val-prop_hpred_star"class="anchor"></a><code><spanclass="keyword">val</span> prop_hpred_star : <span><spanclass="type-var">'a</span><ahref="index.html#type-t">t</a></span><span>-></span><ahref="../Predicates/index.html#type-hpred">Predicates.hpred</a><span>-></span><span><ahref="index.html#type-exposed">exposed</a><ahref="index.html#type-t">t</a></span></code></dt><dd><p>Conjoin a heap predicate by separating conjunction.</p></dd></dl><dl><dtclass="spec value"id="val-prop_sigma_star"><ahref="#val-prop_sigma_star"class="anchor"></a><code><spanclass="keyword">val</span> prop_sigma_star : <span><spanclass="type-var">'a</span><ahref="index.html#type-t">t</a></span><span>-></span><span><ahref="../Predicates/index.html#type-hpred">Predicates.hpred</a> list</span><span>-></span><span><ahref="index.html#type-exposed">exposed</a><ahref="index.html#type-t">t</a></span></code></dt><dd><p>Conjoin a list of heap predicates by separating conjunction</p></dd></dl><dl><dtclass="spec value"id="val-prop_atom_and"><ahref="#val-prop_atom_and"class="anchor"></a><code><spanclass="keyword">val</span> prop_atom_and : <ahref="../../IR/Tenv/index.html#type-t">IR.Tenv.t</a><span>-></span><span>?⁠footprint:bool</span><span>-></span><span><ahref="index.html#type-normal">normal</a><ahref="index.html#type-t">t</a></span><span>-></span><ahref="../Predicates/index.html#type-atom">Predicates.atom</a><span>-></span><span><ahref="index.html#type-normal">normal</a><ahref="index.html#type-t">t</a></span></code></dt><dd><p>Conjoin a pure atomic predicate by normal conjunction.</p></dd></dl><dl><dtclass="spec value"id="val-conjoin_eq"><ahref="#val-conjoin_eq"class="anchor"></a><code><spanclass="keyword">val</span> conjoin_eq : <ahref="../../IR/Tenv/index.html#type-t">IR.Tenv.t</a><span>-></span><span>?⁠footprint:bool</span><span>-></span><ahref="../../IR/Exp/index.html#type-t">IR.Exp.t</a><span>-></span><ahref="../../IR/Exp/index.html#type-t">IR.Exp.t</a><span>-></span><span><ahref="index.html#type-normal">normal</a><ahref="index.html#type-t">t</a></span><span>-></span><span><ahref="index.html#type-normal">normal</a><ahref="index.html#type-t">t</a></span></code></dt><dd><p>Conjoin <code>exp1</code>=<code>exp2</code> with a symbolic heap <code>prop</code>.</p></dd></dl><dl><dtclass="spec value"id="val-conjoin_neq"><ahref="#val-conjoin_neq"class="anchor"></a><code><spanclass="keyword">val</span> conjoin_neq : <ahref="../../IR/Tenv/index.html#type-t">IR.Tenv.t</a><span>-></span><span>?⁠footprint:bool</span><span>-></span><ahref="../../IR/Exp/index.html#type-t">IR.Exp.t</a><span>-></span><ahref="../../IR/Exp/index.html#type-t">IR.Exp.t</a><span>-></span><span><ahref="index.html#type-normal">normal</a><ahref="index.html#type-t">t</a></span><span>-></span><span><ahref="index.html#type-normal">normal</a><ahref="index.html#type-t">t</a></span></code></dt><dd><p>Conjoin <code>exp1</code>!=<code>exp2</code> with a symbolic heap <code>prop</code>.</p></dd></dl><dl><dtclass="spec value"id="val-get_pure"><ahref="#val-get_pure"class="anchor"></a><code><spanclass="keyword">val</span> get_pure : <span><spanclass="type-var">'a</span><ahref="index.html#type-t">t</a></span><span>-></span><span><ahref="../Predicates/index.html#type-atom">Predicates.atom</a> list</span></code></dt><dd><p>Return the pure part of <code>prop</code>.</p></dd></dl><dl><dtclass="spec value"id="val-prop_rename_primed_footprint_vars"><ahref="#val-prop_rename_primed_footprint_vars"class="anchor"></a><code><spanclass="keyword">val</span> prop_rename_primed_footprint_vars : <ahref="../../IR/Tenv/index.html#type-t">IR.Tenv.t</a><span>-></span><span><ahref="index.html#type-normal">normal</a><ahref="index.html#type-t">t</a></span><span>-></span><span><ahref="index.html#type-normal">normal</a><ahref="index.html#type-t">t</a></span></code></dt><dd><p>Canonicalize the names of primed variables.</p></dd></dl><dl><dtclass="spec value"id="val-extract_footprint"><ahref="#val-extract_footprint"class="anchor"></a><code><spanclass="keyword">val</span> extract_footprint : <span><spanclass="type-var">'a</span><ahref="index.html#type-t">t</a></span><span>-></span><span><ahref="index.html#type-exposed">exposed</a><ahref="index.html#type-t">t</a></span></code></dt><dd><p>Extract the footprint and return it as a prop</p></dd></dl><dl><dtclass="spec value"id="val-extract_spec"><ahref="#val-extract_spec"class="anchor"></a><code><spanclass="keyword">val</span> extract_spec : <span><ahref="index.html#type-normal">normal</a><ahref="index.html#type-t">t</a></span><span>-></span><span><ahref="index.html#type-normal">normal</a><ahref="index.html#type-t">t</a></span> * <span><ahref="index.html#type-normal">normal</a><ahref="index.html#type-t">t</a></span></code></dt><dd><p>Extract the (footprint,current) pair</p></dd></dl><dl><dtclass="spec value"id="val-prop_expand"><ahref="#val-prop_expand"class="anchor"></a><code><spanclass="keyword">val</span> prop_expand : <ahref="../../IR/Tenv/index.html#type-t">IR.Tenv.t</a><span>-></span><span><ahref="index.html#type-normal">normal</a><ahref="index.html#type-t">t</a></span><span>-></span><span><span><ahref="index.html#type-normal">normal</a><ahref="index.html#type-t">t</a></span> list</span></code></dt><dd><p>Expand PE listsegs if the flag is on.</p></dd></dl></section><section><header><h3id="functions-for-existentially-quantifying-and-unquantifying-variables"><ahref="#functions-for-existentially-quantifying-and-unquantifying-variables"class="anchor"></a>Functions for existentially quantifying and unquantifying variables</h3></header><dl><dtclass="spec value"id="val-exist_quantify"><ahref="#val-exist_quantify"class="anchor"></a><code><spanclass="keyword">val</span> exist_quantify : <ahref="../../IR/Tenv/index.html#type-t">IR.Tenv.t</a><span>-></span><span>?⁠ids_queue:<span>unit <ahref="../../IR__Ident/index.html#module-HashQueue">IR.Ident.HashQueue</a>.t</span></span><span>-></span><span><ahref="../../IR/Ident/index.html#type-t">IR.Ident.t</a> list</span><span>-></span><span><ahref="index.html#type-normal">normal</a><ahref="index.html#type-t">t</a></span><span>-></span><span><ahref="index.html#type-normal">normal</a><ahref="index.html#type-t">t</a></span></code></dt><dd><p>Existentially quantify the <code>ids</code> in <code>prop</code>.</p></dd></dl><dl><dtclass="spec value"id="val-prop_normal_vars_to_primed_vars"><ahref="#val-prop_normal_vars_to_primed_vars"class="anchor"></a><code><spanclass="keyword">val</span> prop_normal_vars_to_primed_vars : <ahref="../../IR/Tenv/index.html#type-t">IR.Tenv.t</a><span>-></span><span><ahref="index.html#type-normal">normal</a><ahref="index.html#type-t">t</a></span><span>-></span><span><ahref="index.html#type-normal">normal</a><ahref="index.html#type-t">t</a></span></code></dt><dd><p>convert the footprint vars to primed vars.</p></dd></dl><dl><dtclass="spec value"id="val-prop_primed_vars_to_normal_vars"><ahref="#val-prop_primed_vars_to_normal_vars"class="anchor"></a><code><spanclass="keyword">val</span> prop_primed_vars_to_normal_vars : <ahref="../../IR/Tenv/index.html#type-t">IR.Tenv.t</a><span>-></span><span><ahref="index.html#type-normal">normal</a><ahref="index.html#type-t">t</a></span><span>-></span><span><ahref="index.html#type-normal">normal</a><ahref="index.html#type-t">t</a></span></code></dt><dd><p>convert the primed vars to normal vars.</p></dd></dl><dl><dtclass="spec value"id="val-from_pi"><ahref="#val-from_pi"class="anchor"></a><code><spanclass="keyword">val</span> from_pi : <ahref="index.html#type-pi">pi</a><span>-></span><span><ahref="index.html#type-exposed">exposed</a><ahref="index.html#type-t">t</a></span></code></dt><dd><p>Build an exposed prop from pi</p></dd></dl><dl><dtclass="spec value"id="val-from_sigma"><ahref="#val-from_sigma"class="anchor"></a><code><spanclass="keyword">val</span> from_sigma : <ahref="index.html#type-sigma">sigma</a><span>-></span><span><ahref="index.html#type-exposed">exposed</a><ahref="index.html#type-t">t</a></span></code></dt><dd><p>Build an exposed prop from sigma</p></dd></dl><dl><dtclass="spec value"id="val-set"><ahref="#val-set"class="anchor"></a><code><spanclass="keyword">val</span> set : <span>?⁠sub:<ahref="../Predicates/index.html#type-subst">Predicates.subst</a></span><span>-></span><span>?⁠pi:<ahref="index.html#type-pi">pi</a></span><span>-></span><span>?⁠sigma:<ahref="index.html#type-sigma">sigma</a></span><span>-></span><span>?⁠pi_fp:<ahref="index.html#type-pi">pi</a></span><span>-></span><span>?⁠sigma_fp:<ahref="index.html#type-sigma">sigma</a></span><span>-></span><span><spanclass="type-var">'a</span><ahref="index.html#type-t">t</a></span><span>-></span><span><ahref="index.html#type-exposed">exposed</a><ahref="index.html#type-t">t</a></span></code></dt><dd><p>Set individual fields of the prop.</p></dd></dl></section><section><header><h3id="prop-iterators"><ahref="#prop-iterators"class="anchor"></a>Prop iterators</h3></header><dl><dtclass="spec type"id="type-prop_iter"><ahref="#type-prop_iter"class="anchor"></a><code><spanclass="keyword">type</span><span>'a prop_iter</span></code></dt><dd><p>Iterator over the sigma part. Each iterator has a current <code>hpred</code>.</p></dd></dl><dl><dtclass="spec value"id="val-prop_iter_create"><ahref="#val-prop_iter_create"class="anchor"></a><code><spanclass="keyword">val</span> prop_iter_create : <span><ahref="index.html#type-normal">normal</a><ahref="index.html#type-t">t</a></span><span>-></span><span><span>unit <ahref="index.html#type-prop_iter">prop_iter</a></span> option</span></code></dt><dd><p>Create an iterator, return None if sigma part is empty.</p></dd></dl><dl><dtclass="spec value"id="val-prop_iter_to_prop"><ahref="#val-prop_iter_to_prop"class="anchor"></a><code><spanclass="keyword">val</span> prop_iter_to_prop : <ahref="../../IR/Tenv/index.html#type-t">IR.Tenv.t</a><span>-></span><span><spanclass="type-var">'a</span><ahref="index.html#type-prop_iter">prop_iter</a></span><span>-></span><span><ahref="index.html#type-normal">normal</a><ahref="index.html#type-t">t</a></span></code></dt><dd><p>Return the prop associated to the iterator.</p></dd></dl><dl><dtclass="spec value"id="val-prop_iter_add_atom"><ahref="#val-prop_iter_add_atom"class="anchor"></a><code><spanclass="keyword">val</span> prop_iter_add_atom : bool <span>-></span><span><spanclass="type-var">'a</span><ahref="index.html#type-prop_iter">prop_iter</a></span><span>-></span><ahref="../Predicates/index.html#type-atom">Predicates.atom</a><span>-></span><span><spanclass="type-var">'a</span><ahref="index.html#type-prop_iter">prop_iter</a></span></code></dt><dd><p>Add an atom to the pi part of prop iter. The first parameter records whether it is done during footprint or during re - execution.</p></dd></dl><dl><dtclass="spec value"id="val-prop_iter_remove_curr_then_to_prop"><ahref="#val-prop_iter_remove_curr_then_to_prop"class="anchor"></a><code><spanclass="keyword">val</span> prop_iter_remove_curr_then_to_prop : <ahref="../../IR/Tenv/index.html#type-t">IR.Tenv.t</a><span>-></span><span><spanclass="type-var">'a</span><ahref="index.html#type-prop_iter">prop_iter</a></span><span>-></span><span><ahref="index.html#type-normal">normal</a><ahref="index.html#type-t">t</a></span></code></dt><dd><p>Remove the current element from the iterator, and return the prop associated to the resulting iterator.</p></dd></dl><dl><dtclass="spec value"id="val-prop_iter_current"><ahref="#val-prop_iter_current"class="anchor"></a><code><spanclass="keyword">val</span> prop_iter_current : <ahref="../../IR/Tenv/index.html#type-t">IR.Tenv.t</a><span>-></span><span><spanclass="type-var">'a</span><ahref="index.html#type-prop_iter">prop_iter</a></span><span>-></span><ahref="../Predicates/index.html#type-hpred">Predicates.hpred</a> * <spanclass="type-var">'a</span></code></dt><dd><p>Return the current hpred and state.</p></dd></dl><dl><dtclass="spec value"id="val-prop_iter_next"><ahref="#val-prop_iter_next"class="anchor"></a><code><spanclass="keyword">val</span> prop_iter_next : <span><spanclass="type-var">'a</span><ahref="index.html#type-prop_iter">prop_iter</a></span><span>-></span><span><span>unit <ahref="index.html#type-prop_iter">prop_iter</a></span> option</span></code></dt><dd><p>Return the next iterator.</p></dd></dl><dl><dtclass="spec value"id="val-prop_iter_update_current"><ahref="#val-prop_iter_update_current"class="anchor"></a><code><spanclass="keyword">val</span> prop_iter_update_current : <span><spanclass="type-var">'a</span><ahref="index.html#type-prop_iter">prop_iter</a></span><span>-></span><ahref="../Predicates/index.html#type-hpred">Predicates.hpred</a><span>-></span><span><spanclass="type-var">'a</span><ahref="index.html#type-prop_iter">prop_iter</a></span></code></dt><dd><p>Update the current element of the iterator.</p></dd></dl><dl><dtclass="spec value"id="val-prop_iter_prev_then_insert"><ahref="#val-prop_iter_prev_then_insert"class="anchor"></a><code><spanclass="keyword">val</span> prop_iter_prev_then_insert : <span><spanclass="type-var">'a</span><ahref="index.html#type-prop_iter">prop_iter</a></span><span>-></span><ahref="../Predicates/index.html#type-hpred">Predicates.hpred</a><span>-></span><span><spanclass="type-var">'a</span><ahref="index.html#type-prop_iter">prop_iter</a></span></code></dt><dd><p>Insert before the current element of the iterator.</p></dd></dl><dl><dtclass="spec value"id="val-prop_iter_max_stamp"><ahref="#val-prop_iter_max_stamp"class="anchor"></a><code><spanclass="keyword">val</span> prop_iter_max_stamp : <span>?⁠f:<span>(<ahref="../../IR/Ident/index.html#type-t">IR.Ident.t</a><span>-></span> bool)</span></span><span>-></span><span><spanclass="type-var">'a</span><ahref="index.html#type-prop_iter">prop_iter</a></span><span>-></span> int</code></dt><dd><p>Find the maximum stamp of a free variable of a certain kind.</p></dd></dl><dl><dtclass="spec value"id="val-prop_iter_get_footprint_sigma"><ahref="#val-prop_iter_get_footprint_sigma"class="anchor"></a><code><spanclass="keyword">val</span> prop_iter_get_footprint_sigma : <span><spanclass="type-var">'a</span><ahref="index.html#type-prop_iter">prop_iter</a></span><span>-></span><span><ahref="../Predicates/index.html#type-hpred">Predicates.hpred</a> list</span></code></dt><dd><p>Extract the sigma part of the footprint</p></dd></dl><dl><dtclass="spec value"id="val-prop_iter_replace_footprint_sigma"><ahref="#val-prop_iter_replace_footprint_sigma"class="anchor"></a><code><spanclass="keyword">val</span> prop_iter_replace_footprint_sigma : <span><spanclass="type-var">'a</span><ahref="index.html#type-prop_iter">prop_iter</a></span><span>-></span><span><ahref="../Predicates/index.html#type-hpred">Predicates.hpred</a> list</span><span>-></span><span><spanclass="type-var">'a</span><ahref="index.html#type-prop_iter">prop_iter</a></span></code></dt><dd><p>Replace the sigma part of the footprint</p></dd></dl><dl><dtclass="spec value"id="val-prop_iter_find"><ahref="#val-prop_iter_find"class="anchor"></a><code><spanclass="keyword">val</span> prop_iter_find : <span>unit <ahref="index.html#type-prop_iter">prop_iter</a></span><span>-></span><span>(<ahref="../Predicates/index.html#type-hpred">Predicates.hpred</a><span>-></span><span><spanclass="type-var">'a</span> option</span>)</span><span>-></span><span><span><spanclass="type-var">'a</span><ahref="index.html#type-prop_iter">prop_iter</a></span> option</span></code></dt><dd><p>Scan sigma to find an <code>hpred</code> satisfying the filter function.</p></dd></dl><dl><dtclass="spec value"id="val-prop_iter_update_current_by_list"><ahref="#val-prop_iter_update_current_by_list"class="anchor"></a><code><spanclass="keyword">val</span> prop_iter_update_current_by_list : <span><spanclass="type-var">'a</span><ahref="index.html#type-prop_iter">prop_iter</a></span><span>-></span><span><ahref="../Predicates/index.html#type-hpred">Predicates.hpred</a> list</span><span>-></span><span>unit <ahref="index.html#type-prop_iter">prop_iter</a></span></code></dt><dd><p>Update the current element of the iterator by a nonempty list of elements.</p></dd></dl><dl><dtclass="spec value"id="val-prop_iter_set_state"><ahref="#val-prop_iter_set_state"class="anchor"></a><code><spanclass="keyword">val</span> prop_iter_set_state : <span><spanclass="type-var">'a</span><ahref="index.html#type-prop_iter">prop_iter</a></span><span>-></span><spanclass="type-var">'b</span><span>-></span><span><spanclass="type-var">'b</span><ahref="index.html#type-prop_iter">prop_iter</a></span></code></dt><dd><p>Set the state of an iterator</p></dd></dl><dl><dtclass="spec value"id="val-prop_iter_make_id_primed"><ahref="#val-prop_iter_make_id_primed"class="anchor"></a><code><spanclass="keyword">val</span> prop_iter_make_id_primed : <ahref="../../IR/Tenv/index.html#type-t">IR.Tenv.t</a><span>-></span><ahref="../../IR/Ident/index.html#type-t">IR.Ident.t</a><span>-></span><span><spanclass="type-var">'a</span><ahref="index.html#type-prop_iter">prop_iter</a></span><span>-></span><span><spanclass="type-var">'a</span><ahref="index.html#type-prop_iter">prop_iter</a></span></code></dt><dd><p>Rename <code>ident</code> in <code>iter</code> by a fresh primed identifier</p></dd></dl><dl><dtclass="spec value"id="val-prop_iter_gc_fields"><ahref="#val-prop_iter_gc_fields"class="anchor"></a><code><spanclass="keyword">val</span> prop_iter_gc_fields : <span>unit <ahref="index.html#type-prop_iter">prop_iter</a></span><span>-></span><span>unit <ahref="index.html#type-prop_iter">prop_iter</a></span></code></dt><dd><p>Collect garbage fields.</p></dd></dl></section><section><header><h3id="internal-modules"><ahref="#internal-modules"class="anchor"></a>Internal modules</h3></header><divclass="spec module"id="module-Metrics"><ahref="#module-Metrics"class="anchor"></a><code><spanclass="keyword">module</span><ahref="Metrics/index.html">Metrics</a> : <spanclass="keyword">sig</span> ... <spanclass="keyword">end</span></code></div><divclass="spec module"id="module-CategorizePreconditions"><ahref="#module-CategorizePreconditions"class="anchor"></a><code><spanclass="keyword">module</span><ahref="CategorizePreconditions/index.html">CategorizePreconditions</a> : <spanclass="keyword">sig</span> ... <spanclass="keyword">end</span></code></div></section></div></body></html>