@ciao-lang/ts-ciao-interface
Version:
Simple Ciao interface for node.
156 lines • 92.2 kB
HTML
<!DOCTYPE HTML><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><meta name="theme-color" content="#273f79"/><link rel="stylesheet" href="lpdoc.css" type="text/css"/><script type="text/javascript" src="lpdoc.js"></script><title>termsd: types with shortening (abstract domain) — The CiaoPP Program Processor v1.5</title></head><body><div class="lpdoc-page fixleftbar"><a href="#" id="sidebar-toggle-button" class="lpdoc-navbutton"><span id="sidebar-button-arrow">☰</span></a><div id="sidebar" class="lpdoc-sidebar"><div style="height: 40px; margin-left: auto; margin-right: auto"><img src="ciao-logo_autofig.png" width=auto height=100%></div><div class="lpdoc-nav"><span class="lpdoc-on-right"><a class="lpdoc-navbutton" href="part_domains.html">↑</a><a class="lpdoc-navbutton" href="svterms.html">←</a><a class="lpdoc-navbutton" href="top_path_sharing.html">→</a><a class="lpdoc-navbutton" href="ciaopp_ref_mansearch.html">🔍</a></span><span><a href="ciaopp_ref_manfulltoc.html">TOC</a></span></div><hr></hr><ul class="lpdoc-itemize-sectpath"><li><a href="ciaopp_ref_man.html">The CiaoPP Program Processor</a> »<br/> </li><li><a href="part_usage.html">PART I - Using CiaoPP</a> »<br/> </li><li><a href="part_domains.html">Available abstract domains</a> »<br/> </li><li><a href=""><strong>termsd: types with shortening (abstract domain)</strong></a></li></ul><hr></hr><em>ON THIS PAGE</em><ul><li><a href="#Usage and interface">Usage and interface</a></li><li><a href="#Documentation on exports">Documentation on exports</a></li><li><a href="#Documentation on multifiles">Documentation on multifiles</a></li><li><a href="#Documentation on imports">Documentation on imports</a></li></ul></div><div class="lpdoc-main"><div id=""><h1>termsd: types with shortening (abstract domain)</h1><a class="lpdoc-idx-anchor" href="ciaopp_ref_mansearch.html#termsd"></a>
<strong>Author(s):</strong> <a class="lpdoc-idx-anchor" id="Claudio Vaucheret" href="ciaopp_ref_mansearch.html#Claudio Vaucheret">Claudio Vaucheret</a>, <a class="lpdoc-idx-anchor" id="Francisco Bueno" href="ciaopp_ref_mansearch.html#Francisco Bueno">Francisco Bueno</a>, <a class="lpdoc-idx-anchor" id="Ciao Development Team" href="ciaopp_ref_mansearch.html#Ciao Development Team">Ciao Development Team</a>.<p>
This module implements the abstract operations of the type domains with widening based on shortening (<a class="lpdoc-idx-anchor" id="0" href="ciaopp_ref_mansearch.html#shortening_el/3"><tt>shortening_el/3</tt></a>). An abstract sustitution is a list of <tt>Var:Type</tt> elements, where <span class="lpdoc-var">Var</span> is a variable and <span class="lpdoc-var">Type</span> is a pure type term [<a class="lpdoc-idx-anchor" id="1" href="ciaopp_ref_manrefs.html#Dart-Zobel">DZ92</a>].<br/><div id="Usage and interface"><h2>Usage and interface</h2><div class="lpdoc-cartouche"><ul><li><strong>Library usage:</strong><br/><tt>:- use_module(domain(termsd)).</tt><li><strong>Exports:</strong><br/><ul class="lpdoc-itemize-minus"><li><em>Predicates:</em><br/><a class="lpdoc-idx-anchor" id="2" href="#terms_input_interface/4"><tt>terms_input_interface/4</tt></a>, <a class="lpdoc-idx-anchor" id="3" href="#terms_concrete/3"><tt>terms_concrete/3</tt></a>, <a class="lpdoc-idx-anchor" id="4" href="#terms_compute_lub/2"><tt>terms_compute_lub/2</tt></a>, <a class="lpdoc-idx-anchor" id="5" href="#terms_compute_lub_el/3"><tt>terms_compute_lub_el/3</tt></a>, <a class="lpdoc-idx-anchor" id="6" href="#terms_widencall/3"><tt>terms_widencall/3</tt></a>, <a class="lpdoc-idx-anchor" id="7" href="#terms_needs/1"><tt>terms_needs/1</tt></a>, <a class="lpdoc-idx-anchor" id="8" href="#terms_widen/3"><tt>terms_widen/3</tt></a>, <a class="lpdoc-idx-anchor" id="9" href="#terms_init_abstract_domain/1"><tt>terms_init_abstract_domain/1</tt></a>, <a class="lpdoc-idx-anchor" id="10" href="#terms_call_to_entry/9"><tt>terms_call_to_entry/9</tt></a>, <a class="lpdoc-idx-anchor" id="11" href="#variables_are_variable_type/2"><tt>variables_are_variable_type/2</tt></a>, <a class="lpdoc-idx-anchor" id="12" href="#terms_exit_to_prime/7"><tt>terms_exit_to_prime/7</tt></a>, <a class="lpdoc-idx-anchor" id="13" href="#unify_term_and_type_term/5"><tt>unify_term_and_type_term/5</tt></a>, <a class="lpdoc-idx-anchor" id="14" href="#generate_a_type_assignment/3"><tt>generate_a_type_assignment/3</tt></a>, <a class="lpdoc-idx-anchor" id="15" href="#get_var_types_by_unification/3"><tt>get_var_types_by_unification/3</tt></a>, <a class="lpdoc-idx-anchor" id="16" href="#compute_type/3"><tt>compute_type/3</tt></a>, <a class="lpdoc-idx-anchor" id="17" href="#find_list_entry/3"><tt>find_list_entry/3</tt></a>, <a class="lpdoc-idx-anchor" id="18" href="#terms_project/5"><tt>terms_project/5</tt></a>, <a class="lpdoc-idx-anchor" id="19" href="#terms_abs_sort/2"><tt>terms_abs_sort/2</tt></a>, <a class="lpdoc-idx-anchor" id="20" href="#terms_extend/5"><tt>terms_extend/5</tt></a>, <a class="lpdoc-idx-anchor" id="21" href="#terms_less_or_equal/2"><tt>terms_less_or_equal/2</tt></a>, <a class="lpdoc-idx-anchor" id="22" href="#terms_glb/3"><tt>terms_glb/3</tt></a>, <a class="lpdoc-idx-anchor" id="23" href="#terms_unknown_entry/3"><tt>terms_unknown_entry/3</tt></a>, <a class="lpdoc-idx-anchor" id="24" href="#terms_empty_entry/3"><tt>terms_empty_entry/3</tt></a>, <a class="lpdoc-idx-anchor" id="25" href="#terms_unknown_call/4"><tt>terms_unknown_call/4</tt></a>, <a class="lpdoc-idx-anchor" id="26" href="#substitution/3"><tt>substitution/3</tt></a>, <a class="lpdoc-idx-anchor" id="27" href="eterms.html#variables_are_top_type/2"><tt>variables_are_top_type/2</tt></a>, <a class="lpdoc-idx-anchor" id="28" href="#terms_call_to_success_fact/9"><tt>terms_call_to_success_fact/9</tt></a>, <a class="lpdoc-idx-anchor" id="29" href="#terms_special_builtin/5"><tt>terms_special_builtin/5</tt></a>, <a class="lpdoc-idx-anchor" id="30" href="#terms_success_builtin/6"><tt>terms_success_builtin/6</tt></a>, <a class="lpdoc-idx-anchor" id="31" href="#terms_call_to_success_builtin/6"><tt>terms_call_to_success_builtin/6</tt></a>, <a class="lpdoc-idx-anchor" id="32" href="#precondition_builtin/2"><tt>precondition_builtin/2</tt></a>, <a class="lpdoc-idx-anchor" id="33" href="#postcondition_builtin/4"><tt>postcondition_builtin/4</tt></a>, <a class="lpdoc-idx-anchor" id="34" href="#terms_input_user_interface/5"><tt>terms_input_user_interface/5</tt></a>, <a class="lpdoc-idx-anchor" id="35" href="#terms_asub_to_native/5"><tt>terms_asub_to_native/5</tt></a>, <a class="lpdoc-idx-anchor" id="36" href="#terms_internal_to_native/3"><tt>terms_internal_to_native/3</tt></a>, <a class="lpdoc-idx-anchor" id="37" href="#terms_output_interface/2"><tt>terms_output_interface/2</tt></a>, <a class="lpdoc-idx-anchor" id="38" href="#terms_collect_auxinfo_asub/3"><tt>terms_collect_auxinfo_asub/3</tt></a>, <a class="lpdoc-idx-anchor" id="39" href="#terms_rename_auxinfo_asub/3"><tt>terms_rename_auxinfo_asub/3</tt></a>, <a class="lpdoc-idx-anchor" id="40" href="#terms_identical_abstract/2"><tt>terms_identical_abstract/2</tt></a>.
<li><em>Multifiles:</em><br/><a class="lpdoc-idx-anchor" id="41" href="auto_interface.html#aidomain/1"><tt>aidomain/1</tt></a>, <a class="lpdoc-idx-anchor" id="42" href="aeq.html#aidom.init_abstract_domain/2"><tt>aidom.init_abstract_domain/2</tt></a>, <a class="lpdoc-idx-anchor" id="43" href="aeq.html#aidom.amgu/5"><tt>aidom.amgu/5</tt></a>, <a class="lpdoc-idx-anchor" id="44" href="aeq.html#aidom.augment_asub/4"><tt>aidom.augment_asub/4</tt></a>, <a class="lpdoc-idx-anchor" id="45" href="aeq.html#aidom.augment_two_asub/4"><tt>aidom.augment_two_asub/4</tt></a>, <a class="lpdoc-idx-anchor" id="46" href="aeq.html#aidom.call_to_entry/10"><tt>aidom.call_to_entry/10</tt></a>, <a class="lpdoc-idx-anchor" id="47" href="aeq.html#aidom.exit_to_prime/8"><tt>aidom.exit_to_prime/8</tt></a>, <a class="lpdoc-idx-anchor" id="48" href="aeq.html#aidom.project/6"><tt>aidom.project/6</tt></a>, <a class="lpdoc-idx-anchor" id="49" href="aeq.html#aidom.widencall/4"><tt>aidom.widencall/4</tt></a>, <a class="lpdoc-idx-anchor" id="50" href="aeq.html#aidom.needs/2"><tt>aidom.needs/2</tt></a>, <a class="lpdoc-idx-anchor" id="51" href="aeq.html#aidom.widen/4"><tt>aidom.widen/4</tt></a>, <a class="lpdoc-idx-anchor" id="52" href="aeq.html#aidom.compute_lub/3"><tt>aidom.compute_lub/3</tt></a>, <a class="lpdoc-idx-anchor" id="53" href="aeq.html#aidom.compute_clauses_lub/4"><tt>aidom.compute_clauses_lub/4</tt></a>, <a class="lpdoc-idx-anchor" id="54" href="aeq.html#aidom.compute_clauses_glb/4"><tt>aidom.compute_clauses_glb/4</tt></a>, <a class="lpdoc-idx-anchor" id="55" href="aeq.html#aidom.fixpoint_covered/3"><tt>aidom.fixpoint_covered/3</tt></a>, <a class="lpdoc-idx-anchor" id="56" href="aeq.html#aidom.fixpoint_covered_gfp/3"><tt>aidom.fixpoint_covered_gfp/3</tt></a>, <a class="lpdoc-idx-anchor" id="57" href="aeq.html#aidom.identical_abstract/3"><tt>aidom.identical_abstract/3</tt></a>, <a class="lpdoc-idx-anchor" id="58" href="aeq.html#aidom.abs_sort/3"><tt>aidom.abs_sort/3</tt></a>, <a class="lpdoc-idx-anchor" id="59" href="aeq.html#aidom.extend/6"><tt>aidom.extend/6</tt></a>, <a class="lpdoc-idx-anchor" id="60" href="aeq.html#aidom.less_or_equal/3"><tt>aidom.less_or_equal/3</tt></a>, <a class="lpdoc-idx-anchor" id="61" href="aeq.html#aidom.glb/4"><tt>aidom.glb/4</tt></a>, <a class="lpdoc-idx-anchor" id="62" href="aeq.html#aidom.eliminate_equivalent/3"><tt>aidom.eliminate_equivalent/3</tt></a>, <a class="lpdoc-idx-anchor" id="63" href="aeq.html#aidom.abs_subset/3"><tt>aidom.abs_subset/3</tt></a>, <a class="lpdoc-idx-anchor" id="64" href="aeq.html#aidom.call_to_success_fact/10"><tt>aidom.call_to_success_fact/10</tt></a>, <a class="lpdoc-idx-anchor" id="65" href="aeq.html#aidom.special_builtin/6"><tt>aidom.special_builtin/6</tt></a>, <a class="lpdoc-idx-anchor" id="66" href="aeq.html#aidom.combined_special_builtin0/3"><tt>aidom.combined_special_builtin0/3</tt></a>, <a class="lpdoc-idx-anchor" id="67" href="aeq.html#aidom.body_succ_builtin/9"><tt>aidom.body_succ_builtin/9</tt></a>, <a class="lpdoc-idx-anchor" id="68" href="aeq.html#aidom.split_combined_domain/4"><tt>aidom.split_combined_domain/4</tt></a>, <a class="lpdoc-idx-anchor" id="69" href="aeq.html#aidom.success_builtin/7"><tt>aidom.success_builtin/7</tt></a>, <a class="lpdoc-idx-anchor" id="70" href="aeq.html#aidom.call_to_success_builtin/7"><tt>aidom.call_to_success_builtin/7</tt></a>, <a class="lpdoc-idx-anchor" id="71" href="aeq.html#aidom.obtain_info/5"><tt>aidom.obtain_info/5</tt></a>, <a class="lpdoc-idx-anchor" id="72" href="aeq.html#aidom.input_interface/5"><tt>aidom.input_interface/5</tt></a>, <a class="lpdoc-idx-anchor" id="73" href="aeq.html#aidom.input_user_interface/6"><tt>aidom.input_user_interface/6</tt></a>, <a class="lpdoc-idx-anchor" id="74" href="aeq.html#aidom.asub_to_native/6"><tt>aidom.asub_to_native/6</tt></a>, <a class="lpdoc-idx-anchor" id="75" href="aeq.html#aidom.concrete/4"><tt>aidom.concrete/4</tt></a>, <a class="lpdoc-idx-anchor" id="76" href="aeq.html#aidom.unknown_call/5"><tt>aidom.unknown_call/5</tt></a>, <a class="lpdoc-idx-anchor" id="77" href="aeq.html#aidom.unknown_entry/4"><tt>aidom.unknown_entry/4</tt></a>, <a class="lpdoc-idx-anchor" id="78" href="aeq.html#aidom.empty_entry/4"><tt>aidom.empty_entry/4</tt></a>, <a class="lpdoc-idx-anchor" id="79" href="aeq.html#aidom.part_conc/5"><tt>aidom.part_conc/5</tt></a>, <a class="lpdoc-idx-anchor" id="80" href="aeq.html#aidom.multi_part_conc/4"><tt>aidom.multi_part_conc/4</tt></a>, <a class="lpdoc-idx-anchor" id="81" href="aeq.html#aidom.collect_auxinfo_asub/4"><tt>aidom.collect_auxinfo_asub/4</tt></a>, <a class="lpdoc-idx-anchor" id="82" href="aeq.html#aidom.rename_auxinfo_asub/4"><tt>aidom.rename_auxinfo_asub/4</tt></a>, <a class="lpdoc-idx-anchor" id="83" href="aeq.html#aidom.dom_statistics/2"><tt>aidom.dom_statistics/2</tt></a>, <a class="lpdoc-idx-anchor" id="84" href="aeq.html#aidom.contains_parameters/2"><tt>aidom.contains_parameters/2</tt></a>.
</ul></ul></div></div><div id="Documentation on exports"><h2>Documentation on exports</h2><div><div class="lpdoc-defname"><span class="lpdoc-predtag">PREDICATE</span><a class="lpdoc-idx-anchor" id="terms_input_interface/4" href="ciaopp_ref_mansearch.html#terms_input_interface/4">terms_input_interface/4</a></div><div class="lpdoc-deftext">No further documentation available for this predicate.</div></div><p>
<div><div class="lpdoc-defname"><span class="lpdoc-predtag">PREDICATE</span><a class="lpdoc-idx-anchor" id="terms_concrete/3" href="ciaopp_ref_mansearch.html#terms_concrete/3">terms_concrete/3</a></div><div class="lpdoc-deftext">No further documentation available for this predicate.</div></div><p>
<div><div class="lpdoc-defname"><span class="lpdoc-predtag">PREDICATE</span><a class="lpdoc-idx-anchor" id="terms_compute_lub/2" href="ciaopp_ref_mansearch.html#terms_compute_lub/2">terms_compute_lub/2</a></div><div class="lpdoc-deftext"><p><span class="lpdoc-usage-header">Usage:</span><span class="lpdoc-usage-decl"><tt>terms_compute_lub(ListASub,Lub)</tt>
</span><p>It computes the least upper bound of a set of abstract substitutions. For each two abstract substitutions <span class="lpdoc-var">ASub1</span> and <span class="lpdoc-var">ASub2</span> in <span class="lpdoc-var">ListASub</span>, obtaining the lub is foreach X:Type1 in <span class="lpdoc-var">ASub1</span> and X:Type2 in <span class="lpdoc-var">ASub2</span>, X:TypeUnion is in Lub, and TypeUnion is the deterministic union of Type1 an Type2.</p><ul class="lpdoc-itemize-minus"><li><em>The following properties should hold at call time:</em><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="85" href="ciaopp_ref_mansearch.html#nonvar/1"><tt>nonvar/1</tt></a>)</span><span><span class="lpdoc-var">ListASub</span> is currently a term which is not a free variable.
</span><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="86" href="ciaopp_ref_mansearch.html#var/1"><tt>var/1</tt></a>)</span><span><span class="lpdoc-var">Lub</span> is a free variable.
</span><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="87" href="basic_props.html#list/2"><tt>list/2</tt></a>)</span><span><span class="lpdoc-var">ListASub</span> is a list of <span class="lpdoc-var">termsd_asub</span>s.
</span>
<li><em>The following properties should hold upon exit:</em><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="88" href="ciaopp_ref_mansearch.html#termsd_asub/1"><tt>termsd_asub/1</tt></a>)</span><span><span class="lpdoc-var">Lub</span> is an abstract substitution
</span>
</ul></div></div><p>
<div><div class="lpdoc-defname"><span class="lpdoc-predtag">PREDICATE</span><a class="lpdoc-idx-anchor" id="terms_compute_lub_el/3" href="ciaopp_ref_mansearch.html#terms_compute_lub_el/3">terms_compute_lub_el/3</a></div><div class="lpdoc-deftext">No further documentation available for this predicate.</div></div><p>
<div><div class="lpdoc-defname"><span class="lpdoc-predtag">PREDICATE</span><a class="lpdoc-idx-anchor" id="terms_widencall/3" href="ciaopp_ref_mansearch.html#terms_widencall/3">terms_widencall/3</a></div><div class="lpdoc-deftext">No further documentation available for this predicate.</div></div><p>
<div><div class="lpdoc-defname"><span class="lpdoc-predtag">PREDICATE</span><a class="lpdoc-idx-anchor" id="terms_needs/1" href="ciaopp_ref_mansearch.html#terms_needs/1">terms_needs/1</a></div><div class="lpdoc-deftext">No further documentation available for this predicate.</div></div><p>
<div><div class="lpdoc-defname"><span class="lpdoc-predtag">PREDICATE</span><a class="lpdoc-idx-anchor" id="terms_widen/3" href="ciaopp_ref_mansearch.html#terms_widen/3">terms_widen/3</a></div><div class="lpdoc-deftext"><p><span class="lpdoc-usage-header">Usage:</span><span class="lpdoc-usage-decl"><tt>terms_widen(Prime0,Prime1,NewPrime)</tt>
</span><p>Induction step on the abstract substitution of a fixpoint. <span class="lpdoc-var">Prime0</span> corresponds to non-recursive and <span class="lpdoc-var">Prime1</span> to recursive clauses. <span class="lpdoc-var">NewPrime</span> is the result of apply one widening operation to the least upper bound of the formers. Widening operations implemented are ``shortening'' and ``restricted shortening'' [<a class="lpdoc-idx-anchor" id="89" href="ciaopp_ref_manrefs.html#gallagher-types-iclp94">GdW94</a>,<a class="lpdoc-idx-anchor" id="90" href="ciaopp_ref_manrefs.html#Saglam-Gallagher-94">SG94</a>].</p><ul class="lpdoc-itemize-minus"><li><em>The following properties should hold at call time:</em><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="91" href="ciaopp_ref_mansearch.html#nonvar/1"><tt>nonvar/1</tt></a>)</span><span><span class="lpdoc-var">Prime0</span> is currently a term which is not a free variable.
</span><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="92" href="ciaopp_ref_mansearch.html#nonvar/1"><tt>nonvar/1</tt></a>)</span><span><span class="lpdoc-var">Prime1</span> is currently a term which is not a free variable.
</span><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="93" href="ciaopp_ref_mansearch.html#var/1"><tt>var/1</tt></a>)</span><span><span class="lpdoc-var">NewPrime</span> is a free variable.
</span><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="94" href="ciaopp_ref_mansearch.html#termsd_asub/1"><tt>termsd_asub/1</tt></a>)</span><span><span class="lpdoc-var">Prime0</span> is an abstract substitution
</span><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="95" href="ciaopp_ref_mansearch.html#termsd_asub/1"><tt>termsd_asub/1</tt></a>)</span><span><span class="lpdoc-var">Prime1</span> is an abstract substitution
</span><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="96" href="basic_props.html#term/1"><tt>term/1</tt></a>)</span><span><span class="lpdoc-var">NewPrime</span> is any term.
</span>
<li><em>The following properties should hold upon exit:</em><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="97" href="ciaopp_ref_mansearch.html#termsd_asub/1"><tt>termsd_asub/1</tt></a>)</span><span><span class="lpdoc-var">NewPrime</span> is an abstract substitution
</span>
</ul></div></div><p>
<div><div class="lpdoc-defname"><span class="lpdoc-predtag">PREDICATE</span><a class="lpdoc-idx-anchor" id="terms_init_abstract_domain/1" href="ciaopp_ref_mansearch.html#terms_init_abstract_domain/1">terms_init_abstract_domain/1</a></div><div class="lpdoc-deftext">No further documentation available for this predicate.</div></div><p>
<div><div class="lpdoc-defname"><span class="lpdoc-predtag">PREDICATE</span><a class="lpdoc-idx-anchor" id="terms_call_to_entry/9" href="ciaopp_ref_mansearch.html#terms_call_to_entry/9">terms_call_to_entry/9</a></div><div class="lpdoc-deftext"><p><span class="lpdoc-usage-header">Usage:</span><span class="lpdoc-usage-decl"><tt>terms_call_to_entry(Sv,Sg,Hv,Head,K,Fv,Proj,Entry,ExtraInfo)</tt>
</span><p>It obtains the abstract substitution <span class="lpdoc-var">Entry</span> which results from adding the abstraction of the <span class="lpdoc-var">Sg</span> = <span class="lpdoc-var">Head</span> to <span class="lpdoc-var">Proj</span>, later projecting the resulting substitution onto <span class="lpdoc-var">Hv</span>.<p>This is done as follows: <ul> <li>If <span class="lpdoc-var">Sg</span> and <span class="lpdoc-var">Head</span> are identical up to renaming it is just renaming <span class="lpdoc-var">Proj</span> and adding the <span class="lpdoc-var">Fv</span> <li>Otherwise, it will: <ul> <li>obtain the abstract substitution from unifying <span class="lpdoc-var">Sg</span> and <span class="lpdoc-var">Head</span> calling ``unify_term_and_type_term'' <li>add to this abstract substituion the variables in <span class="lpdoc-var">Fv</span> as term type. </ul> </ul> <p>The meaning of the variables is: <ul> <li><span class="lpdoc-var">Sg</span> is the subgoal being analysed. <li><span class="lpdoc-var">Head</span> is the Head of the clause being analysed. <li><span class="lpdoc-var">Fv</span> is a list of free variables in the body of the clause being considered. <li><span class="lpdoc-var">Proj</span> is the abstract substitution <span class="lpdoc-var">Call</span> projected onto <span class="lpdoc-var">Sv</span>. <li><span class="lpdoc-var">Entry</span> is the Abstract entry substitution (i.e. the abstract subtitution obtained after the abstract unification of <span class="lpdoc-var">Sg</span> and <span class="lpdoc-var">Head</span> projected onto <span class="lpdoc-var">Hv</span> + <span class="lpdoc-var">Fv</span>). <li><span class="lpdoc-var">ExtraInfo</span> is a flag <tt>yes</tt> when no unification is required, i.e., <tt>Entry=Proj</tt> upto names of vars. and ignoring <span class="lpdoc-var">Fv</span>. It is <tt>no</tt> if unification fails. </ul></p><ul class="lpdoc-itemize-minus"><li><em>The following properties should hold at call time:</em><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="98" href="ciaopp_ref_mansearch.html#nonvar/1"><tt>nonvar/1</tt></a>)</span><span><span class="lpdoc-var">Sv</span> is currently a term which is not a free variable.
</span><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="99" href="ciaopp_ref_mansearch.html#nonvar/1"><tt>nonvar/1</tt></a>)</span><span><span class="lpdoc-var">Sg</span> is currently a term which is not a free variable.
</span><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="100" href="ciaopp_ref_mansearch.html#nonvar/1"><tt>nonvar/1</tt></a>)</span><span><span class="lpdoc-var">Hv</span> is currently a term which is not a free variable.
</span><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="101" href="ciaopp_ref_mansearch.html#nonvar/1"><tt>nonvar/1</tt></a>)</span><span><span class="lpdoc-var">Head</span> is currently a term which is not a free variable.
</span><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="102" href="ciaopp_ref_mansearch.html#nonvar/1"><tt>nonvar/1</tt></a>)</span><span><span class="lpdoc-var">K</span> is currently a term which is not a free variable.
</span><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="103" href="ciaopp_ref_mansearch.html#nonvar/1"><tt>nonvar/1</tt></a>)</span><span><span class="lpdoc-var">Fv</span> is currently a term which is not a free variable.
</span><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="104" href="ciaopp_ref_mansearch.html#nonvar/1"><tt>nonvar/1</tt></a>)</span><span><span class="lpdoc-var">Proj</span> is currently a term which is not a free variable.
</span><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="105" href="ciaopp_ref_mansearch.html#var/1"><tt>var/1</tt></a>)</span><span><span class="lpdoc-var">Entry</span> is a free variable.
</span><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="106" href="ciaopp_ref_mansearch.html#var/1"><tt>var/1</tt></a>)</span><span><span class="lpdoc-var">ExtraInfo</span> is a free variable.
</span><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="107" href="basic_props.html#term/1"><tt>term/1</tt></a>)</span><span><span class="lpdoc-var">Sv</span> is any term.
</span><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="108" href="basic_props.html#cgoal/1"><tt>cgoal/1</tt></a>)</span><span><span class="lpdoc-var">Sg</span> is a term which represents a goal, i.e., an atom or a structure.
</span><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="109" href="basic_props.html#list/1"><tt>list/1</tt></a>)</span><span><span class="lpdoc-var">Hv</span> is a list.
</span><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="110" href="basic_props.html#cgoal/1"><tt>cgoal/1</tt></a>)</span><span><span class="lpdoc-var">Head</span> is a term which represents a goal, i.e., an atom or a structure.
</span><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="111" href="basic_props.html#term/1"><tt>term/1</tt></a>)</span><span><span class="lpdoc-var">K</span> is any term.
</span><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="112" href="basic_props.html#list/1"><tt>list/1</tt></a>)</span><span><span class="lpdoc-var">Fv</span> is a list.
</span><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="113" href="ciaopp_ref_mansearch.html#termsd_asub/1"><tt>termsd_asub/1</tt></a>)</span><span><span class="lpdoc-var">Proj</span> is an abstract substitution
</span><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="114" href="basic_props.html#term/1"><tt>term/1</tt></a>)</span><span><span class="lpdoc-var">Entry</span> is any term.
</span><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="115" href="basic_props.html#term/1"><tt>term/1</tt></a>)</span><span><span class="lpdoc-var">ExtraInfo</span> is any term.
</span>
<li><em>The following properties should hold upon exit:</em><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="116" href="ciaopp_ref_mansearch.html#termsd_asub/1"><tt>termsd_asub/1</tt></a>)</span><span><span class="lpdoc-var">Entry</span> is an abstract substitution
</span><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="118" href="ciaopp_ref_mansearch.html#termsd_extrainfo/1"><tt>termsd_extrainfo/1</tt></a>)</span><span><a class="lpdoc-idx-anchor" id="117" href="ciaopp_ref_mansearch.html#termsd_extrainfo(ExtraInfo)"><tt>termsd_extrainfo(ExtraInfo)</tt></a>
</span>
</ul></div></div><p>
<div><div class="lpdoc-defname"><span class="lpdoc-predtag">PREDICATE</span><a class="lpdoc-idx-anchor" id="variables_are_variable_type/2" href="ciaopp_ref_mansearch.html#variables_are_variable_type/2">variables_are_variable_type/2</a></div><div class="lpdoc-deftext"><p><span class="lpdoc-usage-header">Usage:</span><span class="lpdoc-usage-decl"><tt>variables_are_variable_type(Fv,ASub)</tt>
</span><p>(at the moment) assigns the value top_type to the variables in <span class="lpdoc-var">Fv</span> but in the future it must assign the value <tt>var</tt></p><ul class="lpdoc-itemize-minus"><li><em>The following properties should hold at call time:</em><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="119" href="ciaopp_ref_mansearch.html#nonvar/1"><tt>nonvar/1</tt></a>)</span><span><span class="lpdoc-var">Fv</span> is currently a term which is not a free variable.
</span><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="120" href="ciaopp_ref_mansearch.html#var/1"><tt>var/1</tt></a>)</span><span><span class="lpdoc-var">ASub</span> is a free variable.
</span><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="121" href="basic_props.html#list/1"><tt>list/1</tt></a>)</span><span><span class="lpdoc-var">Fv</span> is a list.
</span>
<li><em>The following properties should hold upon exit:</em><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="122" href="ciaopp_ref_mansearch.html#termsd_asub/1"><tt>termsd_asub/1</tt></a>)</span><span><span class="lpdoc-var">ASub</span> is an abstract substitution
</span>
</ul></div></div><p>
<div><div class="lpdoc-defname"><span class="lpdoc-predtag">PREDICATE</span><a class="lpdoc-idx-anchor" id="terms_exit_to_prime/7" href="ciaopp_ref_mansearch.html#terms_exit_to_prime/7">terms_exit_to_prime/7</a></div><div class="lpdoc-deftext"><p><span class="lpdoc-usage-header">Usage:</span><span class="lpdoc-usage-decl"><tt>terms_exit_to_prime(Sg,Hv,Head,Sv,Exit,ExtraInfo,Prime)</tt>
</span><p>It computes the prime abstract substitution <span class="lpdoc-var">Prime</span>, i.e. the result of going from the abstract substitution over the head variables <span class="lpdoc-var">Exit</span>, to the abstract substitution over the variables in the subgoal. It will:<p><ul> <li>If <span class="lpdoc-var">Exit</span> is '$bottom', <span class="lpdoc-var">Prime</span> will be also '$bottom'. <li>If <span class="lpdoc-var">ExtraInfo</span> = yes (<span class="lpdoc-var">Head</span> and <span class="lpdoc-var">Sg</span> identical up to renaming) it is just renaming Exit % <li>Otherwise, it will: <ul> <li>projects <span class="lpdoc-var">Exit</span> onto <span class="lpdoc-var">Hv</span> obtaining <span class="lpdoc-var">BPrime</span>. <li>obtain the abstract substitution from unifying <span class="lpdoc-var">Sg</span> and <span class="lpdoc-var">Head</span> calling ``unify_term_and_type_term'' </ul> </ul></p><ul class="lpdoc-itemize-minus"><li><em>The following properties should hold at call time:</em><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="123" href="ciaopp_ref_mansearch.html#nonvar/1"><tt>nonvar/1</tt></a>)</span><span><span class="lpdoc-var">Sg</span> is currently a term which is not a free variable.
</span><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="124" href="ciaopp_ref_mansearch.html#nonvar/1"><tt>nonvar/1</tt></a>)</span><span><span class="lpdoc-var">Hv</span> is currently a term which is not a free variable.
</span><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="125" href="ciaopp_ref_mansearch.html#nonvar/1"><tt>nonvar/1</tt></a>)</span><span><span class="lpdoc-var">Head</span> is currently a term which is not a free variable.
</span><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="126" href="ciaopp_ref_mansearch.html#nonvar/1"><tt>nonvar/1</tt></a>)</span><span><span class="lpdoc-var">Sv</span> is currently a term which is not a free variable.
</span><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="127" href="ciaopp_ref_mansearch.html#nonvar/1"><tt>nonvar/1</tt></a>)</span><span><span class="lpdoc-var">Exit</span> is currently a term which is not a free variable.
</span><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="128" href="ciaopp_ref_mansearch.html#nonvar/1"><tt>nonvar/1</tt></a>)</span><span><span class="lpdoc-var">ExtraInfo</span> is currently a term which is not a free variable.
</span><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="129" href="ciaopp_ref_mansearch.html#var/1"><tt>var/1</tt></a>)</span><span><span class="lpdoc-var">Prime</span> is a free variable.
</span><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="130" href="basic_props.html#cgoal/1"><tt>cgoal/1</tt></a>)</span><span><span class="lpdoc-var">Sg</span> is a term which represents a goal, i.e., an atom or a structure.
</span><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="131" href="basic_props.html#list/1"><tt>list/1</tt></a>)</span><span><span class="lpdoc-var">Hv</span> is a list.
</span><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="132" href="basic_props.html#cgoal/1"><tt>cgoal/1</tt></a>)</span><span><span class="lpdoc-var">Head</span> is a term which represents a goal, i.e., an atom or a structure.
</span><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="133" href="basic_props.html#list/1"><tt>list/1</tt></a>)</span><span><span class="lpdoc-var">Sv</span> is a list.
</span><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="134" href="ciaopp_ref_mansearch.html#termsd_asub/1"><tt>termsd_asub/1</tt></a>)</span><span><span class="lpdoc-var">Exit</span> is an abstract substitution
</span><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="136" href="ciaopp_ref_mansearch.html#termsd_extrainfo/1"><tt>termsd_extrainfo/1</tt></a>)</span><span><a class="lpdoc-idx-anchor" id="135" href="ciaopp_ref_mansearch.html#termsd_extrainfo(ExtraInfo)"><tt>termsd_extrainfo(ExtraInfo)</tt></a>
</span><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="137" href="basic_props.html#term/1"><tt>term/1</tt></a>)</span><span><span class="lpdoc-var">Prime</span> is any term.
</span>
<li><em>The following properties should hold upon exit:</em><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="138" href="ciaopp_ref_mansearch.html#termsd_asub/1"><tt>termsd_asub/1</tt></a>)</span><span><span class="lpdoc-var">Prime</span> is an abstract substitution
</span>
</ul></div></div><p>
<div><div class="lpdoc-defname"><span class="lpdoc-predtag">PREDICATE</span><a class="lpdoc-idx-anchor" id="unify_term_and_type_term/5" href="ciaopp_ref_mansearch.html#unify_term_and_type_term/5">unify_term_and_type_term/5</a></div><div class="lpdoc-deftext"><p><span class="lpdoc-usage-header">Usage:</span><span class="lpdoc-usage-decl"><tt>unify_term_and_type_term(Term1,Tv,Term2,ASub,NewASub)</tt>
</span><p>It unifies the term <span class="lpdoc-var">Term1</span> to the type term <span class="lpdoc-var">Term2</span> obtaining the the abstract substitution TypeAss which is sorted and projeted on <span class="lpdoc-var">Tv</span></p><ul class="lpdoc-itemize-minus"><li><em>The following properties should hold at call time:</em><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="139" href="ciaopp_ref_mansearch.html#nonvar/1"><tt>nonvar/1</tt></a>)</span><span><span class="lpdoc-var">Term1</span> is currently a term which is not a free variable.
</span><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="140" href="ciaopp_ref_mansearch.html#nonvar/1"><tt>nonvar/1</tt></a>)</span><span><span class="lpdoc-var">Tv</span> is currently a term which is not a free variable.
</span><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="141" href="ciaopp_ref_mansearch.html#nonvar/1"><tt>nonvar/1</tt></a>)</span><span><span class="lpdoc-var">Term2</span> is currently a term which is not a free variable.
</span><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="142" href="ciaopp_ref_mansearch.html#nonvar/1"><tt>nonvar/1</tt></a>)</span><span><span class="lpdoc-var">ASub</span> is currently a term which is not a free variable.
</span><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="143" href="ciaopp_ref_mansearch.html#var/1"><tt>var/1</tt></a>)</span><span><span class="lpdoc-var">NewASub</span> is a free variable.
</span><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="144" href="basic_props.html#cgoal/1"><tt>cgoal/1</tt></a>)</span><span><span class="lpdoc-var">Term1</span> is a term which represents a goal, i.e., an atom or a structure.
</span><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="145" href="basic_props.html#list/1"><tt>list/1</tt></a>)</span><span><span class="lpdoc-var">Tv</span> is a list.
</span><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="146" href="basic_props.html#cgoal/1"><tt>cgoal/1</tt></a>)</span><span><span class="lpdoc-var">Term2</span> is a term which represents a goal, i.e., an atom or a structure.
</span><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="147" href="ciaopp_ref_mansearch.html#termsd_asub/1"><tt>termsd_asub/1</tt></a>)</span><span><span class="lpdoc-var">ASub</span> is an abstract substitution
</span><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="148" href="basic_props.html#term/1"><tt>term/1</tt></a>)</span><span><span class="lpdoc-var">NewASub</span> is any term.
</span>
<li><em>The following properties should hold upon exit:</em><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="149" href="ciaopp_ref_mansearch.html#termsd_asub/1"><tt>termsd_asub/1</tt></a>)</span><span><span class="lpdoc-var">NewASub</span> is an abstract substitution
</span>
</ul></div></div><p>
<div><div class="lpdoc-defname"><span class="lpdoc-predtag">PREDICATE</span><a class="lpdoc-idx-anchor" id="generate_a_type_assignment/3" href="ciaopp_ref_mansearch.html#generate_a_type_assignment/3">generate_a_type_assignment/3</a></div><div class="lpdoc-deftext">No further documentation available for this predicate.</div></div><p>
<div><div class="lpdoc-defname"><span class="lpdoc-predtag">PREDICATE</span><a class="lpdoc-idx-anchor" id="get_var_types_by_unification/3" href="ciaopp_ref_mansearch.html#get_var_types_by_unification/3">get_var_types_by_unification/3</a></div><div class="lpdoc-deftext">No further documentation available for this predicate.</div></div><p>
<div><div class="lpdoc-defname"><span class="lpdoc-predtag">PREDICATE</span><a class="lpdoc-idx-anchor" id="compute_type/3" href="ciaopp_ref_mansearch.html#compute_type/3">compute_type/3</a></div><div class="lpdoc-deftext"><p><span class="lpdoc-usage-header">Usage:</span><span class="lpdoc-usage-decl"><tt>compute_type(Term,Type,Types)</tt>
</span><p>Given the term <span class="lpdoc-var">Term</span> and a type <span class="lpdoc-var">Type</span>, computes the type corresponding to each variable in <span class="lpdoc-var">Term</span>, and store it in the data structure <span class="lpdoc-var">Types</span>. <span class="lpdoc-var">Types</span> have the structure [vt(Var1, TypeList1), ..., vt(VarN, TypeListN)|_], where TypeListN is the list of types corresponding to variable VarN.</p><ul class="lpdoc-itemize-minus"><li><em>The following properties should hold at call time:</em><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="150" href="ciaopp_ref_mansearch.html#nonvar/1"><tt>nonvar/1</tt></a>)</span><span><span class="lpdoc-var">Type</span> is currently a term which is not a free variable.
</span>
</ul></div></div><p>
<div><div class="lpdoc-defname"><span class="lpdoc-predtag">PREDICATE</span><a class="lpdoc-idx-anchor" id="find_list_entry/3" href="ciaopp_ref_mansearch.html#find_list_entry/3">find_list_entry/3</a></div><div class="lpdoc-deftext">No further documentation available for this predicate.</div></div><p>
<div><div class="lpdoc-defname"><span class="lpdoc-predtag">PREDICATE</span><a class="lpdoc-idx-anchor" id="terms_project/5" href="ciaopp_ref_mansearch.html#terms_project/5">terms_project/5</a></div><div class="lpdoc-deftext"><p><span class="lpdoc-usage-header">Usage:</span><span class="lpdoc-usage-decl"><tt>terms_project(Sg,Vars,HvFv_u,Asub,Proj)</tt>
</span><p><span class="lpdoc-var">Proj</span> is the result of eliminating from <span class="lpdoc-var">Asub</span> all <span class="lpdoc-var">X</span>:<span class="lpdoc-var">Value</span> such that <span class="lpdoc-var">X</span> is not in <span class="lpdoc-var">Vars</span>.<p><span class="lpdoc-var">HvFv_u</span> may be a list or <tt>not_provided_HvFv_u</tt> and is not used by this predicate.</p><ul class="lpdoc-itemize-minus"><li><em>The following properties should hold at call time:</em><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="151" href="ciaopp_ref_mansearch.html#nonvar/1"><tt>nonvar/1</tt></a>)</span><span><span class="lpdoc-var">Sg</span> is currently a term which is not a free variable.
</span><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="152" href="ciaopp_ref_mansearch.html#nonvar/1"><tt>nonvar/1</tt></a>)</span><span><span class="lpdoc-var">Vars</span> is currently a term which is not a free variable.
</span><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="153" href="ciaopp_ref_mansearch.html#nonvar/1"><tt>nonvar/1</tt></a>)</span><span><span class="lpdoc-var">HvFv_u</span> is currently a term which is not a free variable.
</span><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="154" href="ciaopp_ref_mansearch.html#nonvar/1"><tt>nonvar/1</tt></a>)</span><span><span class="lpdoc-var">Asub</span> is currently a term which is not a free variable.
</span><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="155" href="ciaopp_ref_mansearch.html#var/1"><tt>var/1</tt></a>)</span><span><span class="lpdoc-var">Proj</span> is a free variable.
</span><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="156" href="basic_props.html#term/1"><tt>term/1</tt></a>)</span><span><span class="lpdoc-var">Sg</span> is any term.
</span><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="157" href="basic_props.html#list/1"><tt>list/1</tt></a>)</span><span><span class="lpdoc-var">Vars</span> is a list.
</span><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="158" href="basic_props.html#term/1"><tt>term/1</tt></a>)</span><span><span class="lpdoc-var">HvFv_u</span> is any term.
</span><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="159" href="ciaopp_ref_mansearch.html#termsd_asub/1"><tt>termsd_asub/1</tt></a>)</span><span><span class="lpdoc-var">Asub</span> is an abstract substitution
</span><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="160" href="basic_props.html#term/1"><tt>term/1</tt></a>)</span><span><span class="lpdoc-var">Proj</span> is any term.
</span>
<li><em>The following properties should hold upon exit:</em><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="161" href="ciaopp_ref_mansearch.html#termsd_asub/1"><tt>termsd_asub/1</tt></a>)</span><span><span class="lpdoc-var">Proj</span> is an abstract substitution
</span>
</ul></div></div><p>
<div><div class="lpdoc-defname"><span class="lpdoc-predtag">PREDICATE</span><a class="lpdoc-idx-anchor" id="terms_abs_sort/2" href="ciaopp_ref_mansearch.html#terms_abs_sort/2">terms_abs_sort/2</a></div><div class="lpdoc-deftext"><p><span class="lpdoc-usage-header">Usage:</span><span class="lpdoc-usage-decl"><tt>terms_abs_sort(Asub,Asub_s)</tt>
</span><p>It sorts the set of <span class="lpdoc-var">X</span>:<span class="lpdoc-var">Type</span> in <span class="lpdoc-var">Asub</span> containing <span class="lpdoc-var">Asub_s</span></p><ul class="lpdoc-itemize-minus"><li><em>The following properties should hold at call time:</em><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="162" href="ciaopp_ref_mansearch.html#nonvar/1"><tt>nonvar/1</tt></a>)</span><span><span class="lpdoc-var">Asub</span> is currently a term which is not a free variable.
</span><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="163" href="ciaopp_ref_mansearch.html#var/1"><tt>var/1</tt></a>)</span><span><span class="lpdoc-var">Asub_s</span> is a free variable.
</span><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="164" href="ciaopp_ref_mansearch.html#termsd_asub/1"><tt>termsd_asub/1</tt></a>)</span><span><span class="lpdoc-var">Asub</span> is an abstract substitution
</span>
<li><em>The following properties should hold upon exit:</em><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="165" href="ciaopp_ref_mansearch.html#termsd_asub/1"><tt>termsd_asub/1</tt></a>)</span><span><span class="lpdoc-var">Asub_s</span> is an abstract substitution
</span>
</ul></div></div><p>
<div><div class="lpdoc-defname"><span class="lpdoc-predtag">PREDICATE</span><a class="lpdoc-idx-anchor" id="terms_extend/5" href="ciaopp_ref_mansearch.html#terms_extend/5">terms_extend/5</a></div><div class="lpdoc-deftext"><p><span class="lpdoc-usage-header">Usage:</span><span class="lpdoc-usage-decl"><tt>terms_extend(Sg,Prime,Sv,Call,Succ)</tt>
</span><p>If <span class="lpdoc-var">Prime</span> = '$bottom', <span class="lpdoc-var">Succ</span> = '$bottom' otherwise, <span class="lpdoc-var">Succ</span> is computed updating the values of <span class="lpdoc-var">Call</span> with those in <span class="lpdoc-var">Prime</span></p><ul class="lpdoc-itemize-minus"><li><em>The following properties should hold at call time:</em><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="166" href="ciaopp_ref_mansearch.html#nonvar/1"><tt>nonvar/1</tt></a>)</span><span><span class="lpdoc-var">Sg</span> is currently a term which is not a free variable.
</span><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="167" href="ciaopp_ref_mansearch.html#nonvar/1"><tt>nonvar/1</tt></a>)</span><span><span class="lpdoc-var">Prime</span> is currently a term which is not a free variable.
</span><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="168" href="ciaopp_ref_mansearch.html#nonvar/1"><tt>nonvar/1</tt></a>)</span><span><span class="lpdoc-var">Sv</span> is currently a term which is not a free variable.
</span><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="169" href="ciaopp_ref_mansearch.html#nonvar/1"><tt>nonvar/1</tt></a>)</span><span><span class="lpdoc-var">Call</span> is currently a term which is not a free variable.
</span><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="170" href="ciaopp_ref_mansearch.html#var/1"><tt>var/1</tt></a>)</span><span><span class="lpdoc-var">Succ</span> is a free variable.
</span><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="171" href="basic_props.html#term/1"><tt>term/1</tt></a>)</span><span><span class="lpdoc-var">Sg</span> is any term.
</span><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="172" href="ciaopp_ref_mansearch.html#termsd_asub/1"><tt>termsd_asub/1</tt></a>)</span><span><span class="lpdoc-var">Prime</span> is an abstract substitution
</span><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="173" href="basic_props.html#list/1"><tt>list/1</tt></a>)</span><span><span class="lpdoc-var">Sv</span> is a list.
</span><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="174" href="ciaopp_ref_mansearch.html#termsd_asub/1"><tt>termsd_asub/1</tt></a>)</span><span><span class="lpdoc-var">Call</span> is an abstract substitution
</span><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="175" href="basic_props.html#term/1"><tt>term/1</tt></a>)</span><span><span class="lpdoc-var">Succ</span> is any term.
</span>
<li><em>The following properties should hold upon exit:</em><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="176" href="ciaopp_ref_mansearch.html#termsd_asub/1"><tt>termsd_asub/1</tt></a>)</span><span><span class="lpdoc-var">Succ</span> is an abstract substitution
</span>
</ul></div></div><p>
<div><div class="lpdoc-defname"><span class="lpdoc-predtag">PREDICATE</span><a class="lpdoc-idx-anchor" id="terms_less_or_equal/2" href="ciaopp_ref_mansearch.html#terms_less_or_equal/2">terms_less_or_equal/2</a></div><div class="lpdoc-deftext"><p><span class="lpdoc-usage-header">Usage:</span><span class="lpdoc-usage-decl"><tt>terms_less_or_equal(ASub0,ASub1)</tt>
</span><p>Succeeds if <span class="lpdoc-var">ASub1</span> is more general or equal to <span class="lpdoc-var">ASub0</span>. it's assumed the two abstract substitutions are defined on the same variables</p><ul class="lpdoc-itemize-minus"><li><em>The following properties should hold at call time:</em><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="177" href="ciaopp_ref_mansearch.html#nonvar/1"><tt>nonvar/1</tt></a>)</span><span><span class="lpdoc-var">ASub0</span> is currently a term which is not a free variable.
</span><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="178" href="ciaopp_ref_mansearch.html#nonvar/1"><tt>nonvar/1</tt></a>)</span><span><span class="lpdoc-var">ASub1</span> is currently a term which is not a free variable.
</span><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="179" href="ciaopp_ref_mansearch.html#termsd_asub/1"><tt>termsd_asub/1</tt></a>)</span><span><span class="lpdoc-var">ASub0</span> is an abstract substitution
</span><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="180" href="ciaopp_ref_mansearch.html#termsd_asub/1"><tt>termsd_asub/1</tt></a>)</span><span><span class="lpdoc-var">ASub1</span> is an abstract substitution
</span>
</ul></div></div><p>
<div><div class="lpdoc-defname"><span class="lpdoc-predtag">PREDICATE</span><a class="lpdoc-idx-anchor" id="terms_glb/3" href="ciaopp_ref_mansearch.html#terms_glb/3">terms_glb/3</a></div><div class="lpdoc-deftext"><p><span class="lpdoc-usage-header">Usage:</span><span class="lpdoc-usage-decl"><tt>terms_glb(ASub0,ASub1,Glb)</tt>
</span><p><span class="lpdoc-var">Glb</span> is the great lower bound of <span class="lpdoc-var">ASub0</span> and <span class="lpdoc-var">ASub1</span></p><ul class="lpdoc-itemize-minus"><li><em>The following properties should hold at call time:</em><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="181" href="ciaopp_ref_mansearch.html#nonvar/1"><tt>nonvar/1</tt></a>)</span><span><span class="lpdoc-var">ASub0</span> is currently a term which is not a free variable.
</span><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="182" href="ciaopp_ref_mansearch.html#nonvar/1"><tt>nonvar/1</tt></a>)</span><span><span class="lpdoc-var">ASub1</span> is currently a term which is not a free variable.
</span><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="183" href="ciaopp_ref_mansearch.html#var/1"><tt>var/1</tt></a>)</span><span><span class="lpdoc-var">Glb</span> is a free variable.
</span><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="184" href="ciaopp_ref_mansearch.html#termsd_asub/1"><tt>termsd_asub/1</tt></a>)</span><span><span class="lpdoc-var">ASub0</span> is an abstract substitution
</span><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="185" href="ciaopp_ref_mansearch.html#termsd_asub/1"><tt>termsd_asub/1</tt></a>)</span><span><span class="lpdoc-var">ASub1</span> is an abstract substitution
</span><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="186" href="basic_props.html#term/1"><tt>term/1</tt></a>)</span><span><span class="lpdoc-var">Glb</span> is any term.
</span>
<li><em>The following properties should hold upon exit:</em><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="187" href="ciaopp_ref_mansearch.html#termsd_asub/1"><tt>termsd_asub/1</tt></a>)</span><span><span class="lpdoc-var">Glb</span> is an abstract substitution