<htmlxmlns="http://www.w3.org/1999/xhtml"><head><title>Match (infer.Biabduction.Match)</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>» Match</nav><h1>Module <code>Biabduction.Match</code></h1></header><aside><p>Implementation of "Smart" Pattern Matching for higher order singly-linked list predicate.</p><p>Used for detecting on a given program if some data scructures are matching some predefined higher-order list predicates. When it is the case, these predicates can be used as possible candidates for abstracting the data-structures. See <ahref="http://dx.doi.org/10.1007/978-3-540-73368-3_22">CAV 2007</a> for the therory involved.</p></aside><dl><dtclass="spec value"id="val-hpara_match_with_impl"><ahref="#val-hpara_match_with_impl"class="anchor"></a><code><spanclass="keyword">val</span> hpara_match_with_impl : <ahref="../../IR/Tenv/index.html#type-t">IR.Tenv.t</a><span>-></span> bool <span>-></span><ahref="../Predicates/index.html#type-hpara">Predicates.hpara</a><span>-></span><ahref="../Predicates/index.html#type-hpara">Predicates.hpara</a><span>-></span> bool</code></dt><dtclass="spec value"id="val-hpara_dll_match_with_impl"><ahref="#val-hpara_dll_match_with_impl"class="anchor"></a><code><spanclass="keyword">val</span> hpara_dll_match_with_impl : <ahref="../../IR/Tenv/index.html#type-t">IR.Tenv.t</a><span>-></span> bool <span>-></span><ahref="../Predicates/index.html#type-hpara_dll">Predicates.hpara_dll</a><span>-></span><ahref="../Predicates/index.html#type-hpara_dll">Predicates.hpara_dll</a><span>-></span> bool</code></dt></dl><dl><dtclass="spec type"id="type-hpred_pat"><ahref="#type-hpred_pat"class="anchor"></a><code><spanclass="keyword">type</span> hpred_pat</code><code> = </code><code>{</code><tableclass="record"><trid="type-hpred_pat.hpred"class="anchored"><tdclass="def field"><ahref="#type-hpred_pat.hpred"class="anchor"></a><code>hpred : <ahref="../Predicates/index.html#type-hpred">Predicates.hpred</a>;</code></td></tr><trid="type-hpred_pat.flag"class="anchored"><tdclass="def field"><ahref="#type-hpred_pat.flag"class="anchor"></a><code>flag : bool;</code></td></tr></table><code>}</code></dt><dd><p>Type for a hpred pattern. <code>flag=false</code> means that the implication between hpreds is not considered, and <code>flag = true</code> means that it is considered during pattern matching.</p></dd></dl><dl><dtclass="spec type"id="type-sidecondition"><ahref="#type-sidecondition"class="anchor"></a><code><spanclass="keyword">type</span> sidecondition</code><code> = <span><ahref="../Prop/index.html#type-normal">Prop.normal</a><ahref="../Prop/index.html#type-t">Prop.t</a></span><span>-></span><ahref="../Predicates/index.html#type-subst">Predicates.subst</a><span>-></span> bool</code></dt></dl><dl><dtclass="spec value"id="val-prop_match_with_impl"><ahref="#val-prop_match_with_impl"class="anchor"></a><code><spanclass="keyword">val</span> prop_match_with_impl : <ahref="../../IR/Tenv/index.html#type-t">IR.Tenv.t</a><span>-></span><span><ahref="../Prop/index.html#type-normal">Prop.normal</a><ahref="../Prop/index.html#type-t">Prop.t</a></span><span>-></span><ahref="index.html#type-sidecondition">sidecondition</a><span>-></span><span><ahref="../../IR/Ident/index.html#type-t">IR.Ident.t</a> list</span><span>-></span><ahref="index.html#type-hpred_pat">hpred_pat</a><span>-></span><span><ahref="index.html#type-hpred_pat">hpred_pat</a> list</span><span>-></span><span><span>(<ahref="../Predicates/index.html#type-subst">P