mirror of
https://github.com/c-cube/sidekick.git
synced 2025-12-06 11:15:43 -05:00
38 lines
No EOL
38 KiB
HTML
38 lines
No EOL
38 KiB
HTML
<!DOCTYPE html>
|
||
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Term (sidekick-base.Sidekick_base.Term)</title><link rel="stylesheet" href="../../../odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 2.1.1"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body class="odoc"><nav class="odoc-nav"><a href="../index.html">Up</a> – <a href="../../index.html">sidekick-base</a> » <a href="../index.html">Sidekick_base</a> » Term</nav><header class="odoc-preamble"><h1>Module <code><span>Sidekick_base.Term</span></code></h1></header><div class="odoc-content"><div class="odoc-include"><details open="open"><summary class="spec include"><code><span><span class="keyword">include</span> <span class="keyword">module</span> <span class="keyword">type</span> <span class="keyword">of</span> <span class="keyword">struct</span> <span class="keyword">include</span> <a href="../../../sidekick/Sidekick_core/Term/index.html">Sidekick_core.Term</a> <span class="keyword">end</span></span></code></summary><div class="odoc-include"><details open="open"><summary class="spec include"><code><span><span class="keyword">include</span> <span class="keyword">module</span> <span class="keyword">type</span> <span class="keyword">of</span> <span class="keyword">struct</span> <span class="keyword">include</span> <a href="../../../sidekick/Sidekick_core_logic/Term/index.html">Sidekick_core_logic.Term</a> <span class="keyword">end</span></span></code></summary><div class="odoc-spec"><div class="spec type" id="type-var" class="anchored"><a href="#type-var" class="anchor"></a><code><span><span class="keyword">type</span> <span class="keyword">nonrec</span> var</span></code></div></div><div class="odoc-spec"><div class="spec type" id="type-bvar" class="anchored"><a href="#type-bvar" class="anchor"></a><code><span><span class="keyword">type</span> <span class="keyword">nonrec</span> bvar</span></code></div></div><div class="odoc-spec"><div class="spec type" id="type-t" class="anchored"><a href="#type-t" class="anchor"></a><code><span><span class="keyword">type</span> t</span></code></div><div class="spec-doc"><p>A term, in the calculus of constructions</p></div></div><div class="odoc-spec"><div class="spec type" id="type-store" class="anchored"><a href="#type-store" class="anchor"></a><code><span><span class="keyword">type</span> store</span><span> = <a href="../../../sidekick/Sidekick_core/Term/index.html#type-store">Sidekick_core.Term.store</a></span></code></div><div class="spec-doc"><p>The store for terms.</p><p>The store is responsible for allocating unique IDs to terms, and enforcing their hashconsing (so that syntactic equality is just a pointer comparison).</p></div></div><div class="odoc-spec"><div class="spec type" id="type-view" class="anchored"><a href="#type-view" class="anchor"></a><code><span><span class="keyword">type</span> view</span><span> = </span></code><table><tr id="type-view.E_type" class="anchored"><td class="def variant constructor"><a href="#type-view.E_type" class="anchor"></a><code><span>| </span><span><span class="constructor">E_type</span> <span class="keyword">of</span> int</span></code></td></tr><tr id="type-view.E_var" class="anchored"><td class="def variant constructor"><a href="#type-view.E_var" class="anchor"></a><code><span>| </span><span><span class="constructor">E_var</span> <span class="keyword">of</span> <a href="#type-var">var</a></span></code></td></tr><tr id="type-view.E_bound_var" class="anchored"><td class="def variant constructor"><a href="#type-view.E_bound_var" class="anchor"></a><code><span>| </span><span><span class="constructor">E_bound_var</span> <span class="keyword">of</span> <a href="#type-bvar">bvar</a></span></code></td></tr><tr id="type-view.E_app" class="anchored"><td class="def variant constructor"><a href="#type-view.E_app" class="anchor"></a><code><span>| </span><span><span class="constructor">E_app</span> <span class="keyword">of</span> <a href="#type-t">t</a> * <a href="#type-t">t</a></span></code></td></tr><tr id="type-view.E_lam" class="anchored"><td class="def variant constructor"><a href="#type-view.E_lam" class="anchor"></a><code><span>| </span><span><span class="constructor">E_lam</span> <span class="keyword">of</span> string * <a href="#type-t">t</a> * <a href="#type-t">t</a></span></code></td></tr><tr id="type-view.E_pi" class="anchored"><td class="def variant constructor"><a href="#type-view.E_pi" class="anchor"></a><code><span>| </span><span><span class="constructor">E_pi</span> <span class="keyword">of</span> string * <a href="#type-t">t</a> * <a href="#type-t">t</a></span></code></td></tr></table></div><div class="spec-doc"><p>View.</p><p>A view is the shape of the root node of a term.</p></div></div><div class="odoc-include"><details open="open"><summary class="spec include"><code><span><span class="keyword">include</span> <a href="../../../sidekick/Sidekick_sigs/module-type-EQ_ORD_HASH/index.html">Sidekick_sigs.EQ_ORD_HASH</a> <span class="keyword">with</span> <span><span class="keyword">type</span> <a href="../../../sidekick/Sidekick_sigs/module-type-EQ_ORD_HASH/index.html#type-t">t</a> := <a href="#type-t">t</a></span></span></code></summary><div class="odoc-include"><details open="open"><summary class="spec include"><code><span><span class="keyword">include</span> <a href="../../../sidekick/Sidekick_sigs/module-type-EQ/index.html">Sidekick_sigs.EQ</a> <span class="keyword">with</span> <span><span class="keyword">type</span> <a href="../../../sidekick/Sidekick_sigs/module-type-EQ/index.html#type-t">t</a> := <a href="#type-t">t</a></span></span></code></summary><div class="odoc-spec"><div class="spec value" id="val-equal" class="anchored"><a href="#val-equal" class="anchor"></a><code><span><span class="keyword">val</span> equal : <span><a href="#type-t">t</a> <span class="arrow">-></span></span> <span><a href="#type-t">t</a> <span class="arrow">-></span></span> bool</span></code></div></div></details></div><div class="odoc-include"><details open="open"><summary class="spec include"><code><span><span class="keyword">include</span> <a href="../../../sidekick/Sidekick_sigs/module-type-ORD/index.html">Sidekick_sigs.ORD</a> <span class="keyword">with</span> <span><span class="keyword">type</span> <a href="../../../sidekick/Sidekick_sigs/module-type-ORD/index.html#type-t">t</a> := <a href="#type-t">t</a></span></span></code></summary><div class="odoc-spec"><div class="spec value" id="val-compare" class="anchored"><a href="#val-compare" class="anchor"></a><code><span><span class="keyword">val</span> compare : <span><a href="#type-t">t</a> <span class="arrow">-></span></span> <span><a href="#type-t">t</a> <span class="arrow">-></span></span> int</span></code></div></div></details></div><div class="odoc-include"><details open="open"><summary class="spec include"><code><span><span class="keyword">include</span> <a href="../../../sidekick/Sidekick_sigs/module-type-HASH/index.html">Sidekick_sigs.HASH</a> <span class="keyword">with</span> <span><span class="keyword">type</span> <a href="../../../sidekick/Sidekick_sigs/module-type-HASH/index.html#type-t">t</a> := <a href="#type-t">t</a></span></span></code></summary><div class="odoc-spec"><div class="spec value" id="val-hash" class="anchored"><a href="#val-hash" class="anchor"></a><code><span><span class="keyword">val</span> hash : <span><a href="#type-t">t</a> <span class="arrow">-></span></span> int</span></code></div></div></details></div></details></div><div class="odoc-spec"><div class="spec value" id="val-pp_debug" class="anchored"><a href="#val-pp_debug" class="anchor"></a><code><span><span class="keyword">val</span> pp_debug : <span><a href="#type-t">t</a> <span class="xref-unresolved">Sidekick_util</span>.Fmt.printer</span></span></code></div></div><div class="odoc-spec"><div class="spec value" id="val-pp_debug_with_ids" class="anchored"><a href="#val-pp_debug_with_ids" class="anchor"></a><code><span><span class="keyword">val</span> pp_debug_with_ids : <span><a href="#type-t">t</a> <span class="xref-unresolved">Sidekick_util</span>.Fmt.printer</span></span></code></div></div><h3 id="containers"><a href="#containers" class="anchor"></a>Containers</h3><div class="odoc-include"><details open="open"><summary class="spec include"><code><span><span class="keyword">include</span> <a href="../../../sidekick/Sidekick_sigs/module-type-WITH_SET_MAP_TBL/index.html">Sidekick_sigs.WITH_SET_MAP_TBL</a> <span class="keyword">with</span> <span><span class="keyword">type</span> <a href="../../../sidekick/Sidekick_sigs/module-type-WITH_SET_MAP_TBL/index.html#type-t">t</a> := <a href="#type-t">t</a></span></span></code></summary><div class="odoc-spec"><div class="spec module" id="module-Set" class="anchored"><a href="#module-Set" class="anchor"></a><code><span><span class="keyword">module</span> Set</span><span> = <a href="../../../sidekick/Sidekick_core/Term/Set/index.html">Sidekick_core.Term.Set</a></span></code></div></div><div class="odoc-spec"><div class="spec module" id="module-Map" class="anchored"><a href="#module-Map" class="anchor"></a><code><span><span class="keyword">module</span> Map</span><span> = <a href="../../../sidekick/Sidekick_core/Term/Map/index.html">Sidekick_core.Term.Map</a></span></code></div></div><div class="odoc-spec"><div class="spec module" id="module-Tbl" class="anchored"><a href="#module-Tbl" class="anchor"></a><code><span><span class="keyword">module</span> Tbl</span><span> = <a href="../../../sidekick/Sidekick_core/Term/Tbl/index.html">Sidekick_core.Term.Tbl</a></span></code></div></div></details></div><h3 id="utils"><a href="#utils" class="anchor"></a>Utils</h3><div class="odoc-spec"><div class="spec value" id="val-view" class="anchored"><a href="#val-view" class="anchor"></a><code><span><span class="keyword">val</span> view : <span><a href="#type-t">t</a> <span class="arrow">-></span></span> <a href="#type-view">view</a></span></code></div></div><div class="odoc-spec"><div class="spec value" id="val-unfold_app" class="anchored"><a href="#val-unfold_app" class="anchor"></a><code><span><span class="keyword">val</span> unfold_app : <span><a href="#type-t">t</a> <span class="arrow">-></span></span> <a href="#type-t">t</a> * <span><a href="#type-t">t</a> list</span></span></code></div></div><div class="odoc-spec"><div class="spec value" id="val-is_app" class="anchored"><a href="#val-is_app" class="anchor"></a><code><span><span class="keyword">val</span> is_app : <span><a href="#type-t">t</a> <span class="arrow">-></span></span> bool</span></code></div></div><div class="odoc-spec"><div class="spec value" id="val-is_const" class="anchored"><a href="#val-is_const" class="anchor"></a><code><span><span class="keyword">val</span> is_const : <span><a href="#type-t">t</a> <span class="arrow">-></span></span> bool</span></code></div></div><div class="odoc-spec"><div class="spec value" id="val-iter_dag" class="anchored"><a href="#val-iter_dag" class="anchor"></a><code><span><span class="keyword">val</span> iter_dag : <span>?seen:<span>unit <span class="xref-unresolved">Tbl</span>.t</span> <span class="arrow">-></span></span> <span>iter_ty:bool <span class="arrow">-></span></span> <span>f:<span>( <span><a href="#type-t">t</a> <span class="arrow">-></span></span> unit )</span> <span class="arrow">-></span></span> <span><a href="#type-t">t</a> <span class="arrow">-></span></span> unit</span></code></div><div class="spec-doc"><p><code>iter_dag t ~f</code> calls <code>f</code> once on each subterm of <code>t</code>, <code>t</code> included. It must <b>not</b> traverse <code>t</code> as a tree, but rather as a perfectly shared DAG.</p><p>For example, in:</p><pre><code>let x = 2 in
|
||
let y = f x x in
|
||
let z = g y x in
|
||
z = z</code></pre><p>the DAG has the following nodes:</p><pre><code>n1: 2
|
||
n2: f n1 n1
|
||
n3: g n2 n1
|
||
n4: = n3 n3</code></pre></div></div><div class="odoc-spec"><div class="spec value" id="val-iter_shallow" class="anchored"><a href="#val-iter_shallow" class="anchor"></a><code><span><span class="keyword">val</span> iter_shallow : <span>f:<span>( <span>bool <span class="arrow">-></span></span> <span><a href="#type-t">t</a> <span class="arrow">-></span></span> unit )</span> <span class="arrow">-></span></span> <span><a href="#type-t">t</a> <span class="arrow">-></span></span> unit</span></code></div><div class="spec-doc"><p><code>iter_shallow f e</code> iterates on immediate subterms of <code>e</code>, calling <code>f trdb e'</code> for each subterm <code>e'</code>, with <code>trdb = true</code> iff <code>e'</code> is directly under a binder.</p></div></div><div class="odoc-spec"><div class="spec value" id="val-map_shallow" class="anchored"><a href="#val-map_shallow" class="anchor"></a><code><span><span class="keyword">val</span> map_shallow : <span><a href="#type-store">store</a> <span class="arrow">-></span></span> <span>f:<span>( <span>bool <span class="arrow">-></span></span> <span><a href="#type-t">t</a> <span class="arrow">-></span></span> <a href="#type-t">t</a> )</span> <span class="arrow">-></span></span> <span><a href="#type-t">t</a> <span class="arrow">-></span></span> <a href="#type-t">t</a></span></code></div></div><div class="odoc-spec"><div class="spec value" id="val-exists_shallow" class="anchored"><a href="#val-exists_shallow" class="anchor"></a><code><span><span class="keyword">val</span> exists_shallow : <span>f:<span>( <span>bool <span class="arrow">-></span></span> <span><a href="#type-t">t</a> <span class="arrow">-></span></span> bool )</span> <span class="arrow">-></span></span> <span><a href="#type-t">t</a> <span class="arrow">-></span></span> bool</span></code></div></div><div class="odoc-spec"><div class="spec value" id="val-for_all_shallow" class="anchored"><a href="#val-for_all_shallow" class="anchor"></a><code><span><span class="keyword">val</span> for_all_shallow : <span>f:<span>( <span>bool <span class="arrow">-></span></span> <span><a href="#type-t">t</a> <span class="arrow">-></span></span> bool )</span> <span class="arrow">-></span></span> <span><a href="#type-t">t</a> <span class="arrow">-></span></span> bool</span></code></div></div><div class="odoc-spec"><div class="spec value" id="val-contains" class="anchored"><a href="#val-contains" class="anchor"></a><code><span><span class="keyword">val</span> contains : <span><a href="#type-t">t</a> <span class="arrow">-></span></span> <span>sub:<a href="#type-t">t</a> <span class="arrow">-></span></span> bool</span></code></div></div><div class="odoc-spec"><div class="spec value" id="val-free_vars_iter" class="anchored"><a href="#val-free_vars_iter" class="anchor"></a><code><span><span class="keyword">val</span> free_vars_iter : <span><a href="#type-t">t</a> <span class="arrow">-></span></span> <span><a href="#type-var">var</a> <span class="xref-unresolved">Iter</span>.t</span></span></code></div></div><div class="odoc-spec"><div class="spec value" id="val-free_vars" class="anchored"><a href="#val-free_vars" class="anchor"></a><code><span><span class="keyword">val</span> free_vars :
|
||
<span>?init:<span class="xref-unresolved">Sidekick_core_logic__</span>.Var.Set.t <span class="arrow">-></span></span>
|
||
<span><a href="#type-t">t</a> <span class="arrow">-></span></span>
|
||
<span class="xref-unresolved">Sidekick_core_logic__</span>.Var.Set.t</span></code></div></div><div class="odoc-spec"><div class="spec value" id="val-is_type" class="anchored"><a href="#val-is_type" class="anchor"></a><code><span><span class="keyword">val</span> is_type : <span><a href="#type-t">t</a> <span class="arrow">-></span></span> bool</span></code></div><div class="spec-doc"><p><code>is_type t</code> is true iff <code>view t</code> is <code>Type _</code></p></div></div><div class="odoc-spec"><div class="spec value" id="val-is_a_type" class="anchored"><a href="#val-is_a_type" class="anchor"></a><code><span><span class="keyword">val</span> is_a_type : <span><a href="#type-t">t</a> <span class="arrow">-></span></span> bool</span></code></div><div class="spec-doc"><p><code>is_a_type t</code> is true if <code>is_ty (ty t)</code></p></div></div><div class="odoc-spec"><div class="spec value" id="val-is_closed" class="anchored"><a href="#val-is_closed" class="anchor"></a><code><span><span class="keyword">val</span> is_closed : <span><a href="#type-t">t</a> <span class="arrow">-></span></span> bool</span></code></div><div class="spec-doc"><p>Is the term closed (all bound variables are paired with a binder)? time: O(1)</p></div></div><div class="odoc-spec"><div class="spec value" id="val-has_fvars" class="anchored"><a href="#val-has_fvars" class="anchor"></a><code><span><span class="keyword">val</span> has_fvars : <span><a href="#type-t">t</a> <span class="arrow">-></span></span> bool</span></code></div><div class="spec-doc"><p>Does the term contain free variables? time: O(1)</p></div></div><div class="odoc-spec"><div class="spec value" id="val-ty" class="anchored"><a href="#val-ty" class="anchor"></a><code><span><span class="keyword">val</span> ty : <span><a href="#type-t">t</a> <span class="arrow">-></span></span> <a href="#type-t">t</a></span></code></div><div class="spec-doc"><p>Return the type of this term.</p></div></div><h3 id="creation"><a href="#creation" class="anchor"></a>Creation</h3><div class="odoc-spec"><div class="spec module" id="module-Store" class="anchored"><a href="#module-Store" class="anchor"></a><code><span><span class="keyword">module</span> Store</span><span> = <a href="../../../sidekick/Sidekick_core/Term/Store/index.html">Sidekick_core.Term.Store</a></span></code></div></div><div class="odoc-spec"><div class="spec value" id="val-type_" class="anchored"><a href="#val-type_" class="anchor"></a><code><span><span class="keyword">val</span> type_ : <span><a href="#type-store">store</a> <span class="arrow">-></span></span> <a href="#type-t">t</a></span></code></div></div><div class="odoc-spec"><div class="spec value" id="val-type_of_univ" class="anchored"><a href="#val-type_of_univ" class="anchor"></a><code><span><span class="keyword">val</span> type_of_univ : <span><a href="#type-store">store</a> <span class="arrow">-></span></span> <span>int <span class="arrow">-></span></span> <a href="#type-t">t</a></span></code></div></div><div class="odoc-spec"><div class="spec value" id="val-var" class="anchored"><a href="#val-var" class="anchor"></a><code><span><span class="keyword">val</span> var : <span><a href="#type-store">store</a> <span class="arrow">-></span></span> <span><a href="#type-var">var</a> <span class="arrow">-></span></span> <a href="#type-t">t</a></span></code></div></div><div class="odoc-spec"><div class="spec value" id="val-var_str" class="anchored"><a href="#val-var_str" class="anchor"></a><code><span><span class="keyword">val</span> var_str : <span><a href="#type-store">store</a> <span class="arrow">-></span></span> <span>string <span class="arrow">-></span></span> <span>ty:<a href="#type-t">t</a> <span class="arrow">-></span></span> <a href="#type-t">t</a></span></code></div></div><div class="odoc-spec"><div class="spec value" id="val-bvar" class="anchored"><a href="#val-bvar" class="anchor"></a><code><span><span class="keyword">val</span> bvar : <span><a href="#type-store">store</a> <span class="arrow">-></span></span> <span><a href="#type-bvar">bvar</a> <span class="arrow">-></span></span> <a href="#type-t">t</a></span></code></div></div><div class="odoc-spec"><div class="spec value" id="val-bvar_i" class="anchored"><a href="#val-bvar_i" class="anchor"></a><code><span><span class="keyword">val</span> bvar_i : <span><a href="#type-store">store</a> <span class="arrow">-></span></span> <span>int <span class="arrow">-></span></span> <span>ty:<a href="#type-t">t</a> <span class="arrow">-></span></span> <a href="#type-t">t</a></span></code></div></div><div class="odoc-spec"><div class="spec value" id="val-const" class="anchored"><a href="#val-const" class="anchor"></a><code><span><span class="keyword">val</span> const : <span><a href="#type-store">store</a> <span class="arrow">-></span></span> <span><span class="xref-unresolved">Sidekick_core_logic__Types_.const</span> <span class="arrow">-></span></span> <a href="#type-t">t</a></span></code></div></div><div class="odoc-spec"><div class="spec value" id="val-app" class="anchored"><a href="#val-app" class="anchor"></a><code><span><span class="keyword">val</span> app : <span><a href="#type-store">store</a> <span class="arrow">-></span></span> <span><a href="#type-t">t</a> <span class="arrow">-></span></span> <span><a href="#type-t">t</a> <span class="arrow">-></span></span> <a href="#type-t">t</a></span></code></div></div><div class="odoc-spec"><div class="spec value" id="val-app_l" class="anchored"><a href="#val-app_l" class="anchor"></a><code><span><span class="keyword">val</span> app_l : <span><a href="#type-store">store</a> <span class="arrow">-></span></span> <span><a href="#type-t">t</a> <span class="arrow">-></span></span> <span><span><a href="#type-t">t</a> list</span> <span class="arrow">-></span></span> <a href="#type-t">t</a></span></code></div></div><div class="odoc-spec"><div class="spec value" id="val-app_fold" class="anchored"><a href="#val-app_fold" class="anchor"></a><code><span><span class="keyword">val</span> app_fold : <span><a href="#type-store">store</a> <span class="arrow">-></span></span> <span>f:<a href="#type-t">t</a> <span class="arrow">-></span></span> <span>acc0:<a href="#type-t">t</a> <span class="arrow">-></span></span> <span><span><a href="#type-t">t</a> list</span> <span class="arrow">-></span></span> <a href="#type-t">t</a></span></code></div></div><div class="odoc-spec"><div class="spec value" id="val-lam" class="anchored"><a href="#val-lam" class="anchor"></a><code><span><span class="keyword">val</span> lam : <span><a href="#type-store">store</a> <span class="arrow">-></span></span> <span><a href="#type-var">var</a> <span class="arrow">-></span></span> <span><a href="#type-t">t</a> <span class="arrow">-></span></span> <a href="#type-t">t</a></span></code></div></div><div class="odoc-spec"><div class="spec value" id="val-pi" class="anchored"><a href="#val-pi" class="anchor"></a><code><span><span class="keyword">val</span> pi : <span><a href="#type-store">store</a> <span class="arrow">-></span></span> <span><a href="#type-var">var</a> <span class="arrow">-></span></span> <span><a href="#type-t">t</a> <span class="arrow">-></span></span> <a href="#type-t">t</a></span></code></div></div><div class="odoc-spec"><div class="spec value" id="val-arrow" class="anchored"><a href="#val-arrow" class="anchor"></a><code><span><span class="keyword">val</span> arrow : <span><a href="#type-store">store</a> <span class="arrow">-></span></span> <span><a href="#type-t">t</a> <span class="arrow">-></span></span> <span><a href="#type-t">t</a> <span class="arrow">-></span></span> <a href="#type-t">t</a></span></code></div></div><div class="odoc-spec"><div class="spec value" id="val-arrow_l" class="anchored"><a href="#val-arrow_l" class="anchor"></a><code><span><span class="keyword">val</span> arrow_l : <span><a href="#type-store">store</a> <span class="arrow">-></span></span> <span><span><a href="#type-t">t</a> list</span> <span class="arrow">-></span></span> <span><a href="#type-t">t</a> <span class="arrow">-></span></span> <a href="#type-t">t</a></span></code></div></div><div class="odoc-spec"><div class="spec value" id="val-open_lambda" class="anchored"><a href="#val-open_lambda" class="anchor"></a><code><span><span class="keyword">val</span> open_lambda : <span><a href="#type-store">store</a> <span class="arrow">-></span></span> <span><a href="#type-t">t</a> <span class="arrow">-></span></span> <span><span>(<a href="#type-var">var</a> * <a href="#type-t">t</a>)</span> option</span></span></code></div></div><div class="odoc-spec"><div class="spec value" id="val-open_lambda_exn" class="anchored"><a href="#val-open_lambda_exn" class="anchor"></a><code><span><span class="keyword">val</span> open_lambda_exn : <span><a href="#type-store">store</a> <span class="arrow">-></span></span> <span><a href="#type-t">t</a> <span class="arrow">-></span></span> <a href="#type-var">var</a> * <a href="#type-t">t</a></span></code></div></div><div class="odoc-spec"><div class="spec module" id="module-DB" class="anchored"><a href="#module-DB" class="anchor"></a><code><span><span class="keyword">module</span> DB</span><span> = <a href="../../../sidekick/Sidekick_core/Term/DB/index.html">Sidekick_core.Term.DB</a></span></code></div><div class="spec-doc"><p>De bruijn indices</p></div></div></details></div><div class="odoc-include"><details open="open"><summary class="spec include"><code><span><span class="keyword">include</span> <span class="keyword">module</span> <span class="keyword">type</span> <span class="keyword">of</span> <span class="keyword">struct</span> <span class="keyword">include</span> <a href="../../../sidekick/Sidekick_core_logic/T_builtins/index.html">Sidekick_core_logic.T_builtins</a> <span class="keyword">end</span></span></code></summary><div class="odoc-spec"><div class="spec type extension" id="extension-decl-C_bool" class="anchored"><a href="#extension-decl-C_bool" class="anchor"></a><code><span><span class="keyword">type</span> <span class="xref-unresolved">Sidekick_core_logic__Types_.const_view</span> += </span></code><table><tr id="extension-C_bool" class="anchored"><td class="def extension"><a href="#extension-C_bool" class="anchor"></a><code><span>| </span><span><span class="extension">C_bool</span></span></code></td></tr><tr id="extension-C_eq" class="anchored"><td class="def extension"><a href="#extension-C_eq" class="anchor"></a><code><span>| </span><span><span class="extension">C_eq</span></span></code></td></tr><tr id="extension-C_ite" class="anchored"><td class="def extension"><a href="#extension-C_ite" class="anchor"></a><code><span>| </span><span><span class="extension">C_ite</span></span></code></td></tr><tr id="extension-C_not" class="anchored"><td class="def extension"><a href="#extension-C_not" class="anchor"></a><code><span>| </span><span><span class="extension">C_not</span></span></code></td></tr><tr id="extension-C_true" class="anchored"><td class="def extension"><a href="#extension-C_true" class="anchor"></a><code><span>| </span><span><span class="extension">C_true</span></span></code></td></tr><tr id="extension-C_false" class="anchored"><td class="def extension"><a href="#extension-C_false" class="anchor"></a><code><span>| </span><span><span class="extension">C_false</span></span></code></td></tr></table></div></div><div class="odoc-spec"><div class="spec value" id="val-bool" class="anchored"><a href="#val-bool" class="anchor"></a><code><span><span class="keyword">val</span> bool : <span><a href="../../../sidekick/Sidekick_core_logic/Term/index.html#type-store">Sidekick_core_logic.Term.store</a> <span class="arrow">-></span></span> <a href="../../../sidekick/Sidekick_core_logic/Term/index.html#type-t">Sidekick_core_logic.Term.t</a></span></code></div></div><div class="odoc-spec"><div class="spec value" id="val-c_not" class="anchored"><a href="#val-c_not" class="anchor"></a><code><span><span class="keyword">val</span> c_not : <span><a href="../../../sidekick/Sidekick_core_logic/Term/index.html#type-store">Sidekick_core_logic.Term.store</a> <span class="arrow">-></span></span> <a href="../../../sidekick/Sidekick_core_logic/Term/index.html#type-t">Sidekick_core_logic.Term.t</a></span></code></div></div><div class="odoc-spec"><div class="spec value" id="val-c_eq" class="anchored"><a href="#val-c_eq" class="anchor"></a><code><span><span class="keyword">val</span> c_eq : <span><a href="../../../sidekick/Sidekick_core_logic/Term/index.html#type-store">Sidekick_core_logic.Term.store</a> <span class="arrow">-></span></span> <a href="../../../sidekick/Sidekick_core_logic/Term/index.html#type-t">Sidekick_core_logic.Term.t</a></span></code></div></div><div class="odoc-spec"><div class="spec value" id="val-c_ite" class="anchored"><a href="#val-c_ite" class="anchor"></a><code><span><span class="keyword">val</span> c_ite : <span><a href="../../../sidekick/Sidekick_core_logic/Term/index.html#type-store">Sidekick_core_logic.Term.store</a> <span class="arrow">-></span></span> <a href="../../../sidekick/Sidekick_core_logic/Term/index.html#type-t">Sidekick_core_logic.Term.t</a></span></code></div></div><div class="odoc-spec"><div class="spec value" id="val-true_" class="anchored"><a href="#val-true_" class="anchor"></a><code><span><span class="keyword">val</span> true_ : <span><a href="../../../sidekick/Sidekick_core_logic/Term/index.html#type-store">Sidekick_core_logic.Term.store</a> <span class="arrow">-></span></span> <a href="../../../sidekick/Sidekick_core_logic/Term/index.html#type-t">Sidekick_core_logic.Term.t</a></span></code></div></div><div class="odoc-spec"><div class="spec value" id="val-false_" class="anchored"><a href="#val-false_" class="anchor"></a><code><span><span class="keyword">val</span> false_ : <span><a href="../../../sidekick/Sidekick_core_logic/Term/index.html#type-store">Sidekick_core_logic.Term.store</a> <span class="arrow">-></span></span> <a href="../../../sidekick/Sidekick_core_logic/Term/index.html#type-t">Sidekick_core_logic.Term.t</a></span></code></div></div><div class="odoc-spec"><div class="spec value" id="val-bool_val" class="anchored"><a href="#val-bool_val" class="anchor"></a><code><span><span class="keyword">val</span> bool_val :
|
||
<span><a href="../../../sidekick/Sidekick_core_logic/Term/index.html#type-store">Sidekick_core_logic.Term.store</a> <span class="arrow">-></span></span>
|
||
<span>bool <span class="arrow">-></span></span>
|
||
<a href="../../../sidekick/Sidekick_core_logic/Term/index.html#type-t">Sidekick_core_logic.Term.t</a></span></code></div></div><div class="odoc-spec"><div class="spec value" id="val-eq" class="anchored"><a href="#val-eq" class="anchor"></a><code><span><span class="keyword">val</span> eq :
|
||
<span><a href="../../../sidekick/Sidekick_core_logic/Term/index.html#type-store">Sidekick_core_logic.Term.store</a> <span class="arrow">-></span></span>
|
||
<span><a href="../../../sidekick/Sidekick_core_logic/Term/index.html#type-t">Sidekick_core_logic.Term.t</a> <span class="arrow">-></span></span>
|
||
<span><a href="../../../sidekick/Sidekick_core_logic/Term/index.html#type-t">Sidekick_core_logic.Term.t</a> <span class="arrow">-></span></span>
|
||
<a href="../../../sidekick/Sidekick_core_logic/Term/index.html#type-t">Sidekick_core_logic.Term.t</a></span></code></div><div class="spec-doc"><p><code>eq a b</code> is <code>a = b</code></p></div></div><div class="odoc-spec"><div class="spec value" id="val-not" class="anchored"><a href="#val-not" class="anchor"></a><code><span><span class="keyword">val</span> not :
|
||
<span><a href="../../../sidekick/Sidekick_core_logic/Term/index.html#type-store">Sidekick_core_logic.Term.store</a> <span class="arrow">-></span></span>
|
||
<span><a href="../../../sidekick/Sidekick_core_logic/Term/index.html#type-t">Sidekick_core_logic.Term.t</a> <span class="arrow">-></span></span>
|
||
<a href="../../../sidekick/Sidekick_core_logic/Term/index.html#type-t">Sidekick_core_logic.Term.t</a></span></code></div></div><div class="odoc-spec"><div class="spec value" id="val-ite" class="anchored"><a href="#val-ite" class="anchor"></a><code><span><span class="keyword">val</span> ite :
|
||
<span><a href="../../../sidekick/Sidekick_core_logic/Term/index.html#type-store">Sidekick_core_logic.Term.store</a> <span class="arrow">-></span></span>
|
||
<span><a href="../../../sidekick/Sidekick_core_logic/Term/index.html#type-t">Sidekick_core_logic.Term.t</a> <span class="arrow">-></span></span>
|
||
<span><a href="../../../sidekick/Sidekick_core_logic/Term/index.html#type-t">Sidekick_core_logic.Term.t</a> <span class="arrow">-></span></span>
|
||
<span><a href="../../../sidekick/Sidekick_core_logic/Term/index.html#type-t">Sidekick_core_logic.Term.t</a> <span class="arrow">-></span></span>
|
||
<a href="../../../sidekick/Sidekick_core_logic/Term/index.html#type-t">Sidekick_core_logic.Term.t</a></span></code></div><div class="spec-doc"><p><code>ite a b c</code> is <code>if a then b else c</code></p></div></div><div class="odoc-spec"><div class="spec value" id="val-is_eq" class="anchored"><a href="#val-is_eq" class="anchor"></a><code><span><span class="keyword">val</span> is_eq : <span><a href="../../../sidekick/Sidekick_core_logic/Term/index.html#type-t">Sidekick_core_logic.Term.t</a> <span class="arrow">-></span></span> bool</span></code></div></div><div class="odoc-spec"><div class="spec value" id="val-is_bool" class="anchored"><a href="#val-is_bool" class="anchor"></a><code><span><span class="keyword">val</span> is_bool : <span><a href="../../../sidekick/Sidekick_core_logic/Term/index.html#type-t">Sidekick_core_logic.Term.t</a> <span class="arrow">-></span></span> bool</span></code></div></div><div class="odoc-spec"><div class="spec value" id="val-abs" class="anchored"><a href="#val-abs" class="anchor"></a><code><span><span class="keyword">val</span> abs :
|
||
<span><a href="../../../sidekick/Sidekick_core_logic/Term/index.html#type-store">Sidekick_core_logic.Term.store</a> <span class="arrow">-></span></span>
|
||
<span><a href="../../../sidekick/Sidekick_core_logic/Term/index.html#type-t">Sidekick_core_logic.Term.t</a> <span class="arrow">-></span></span>
|
||
bool * <a href="../../../sidekick/Sidekick_core_logic/Term/index.html#type-t">Sidekick_core_logic.Term.t</a></span></code></div><div class="spec-doc"><p><code>abs t</code> returns an "absolute value" for the term, along with the sign of <code>t</code>.</p><p>The idea is that we want to turn <code>not a</code> into <code>(false, a)</code>, or <code>(a != b)</code> into <code>(false, a=b)</code>. For terms without a negation this should return <code>(true, t)</code>.</p></div></div><div class="odoc-spec"><div class="spec value" id="val-as_bool_val" class="anchored"><a href="#val-as_bool_val" class="anchor"></a><code><span><span class="keyword">val</span> as_bool_val : <span><a href="../../../sidekick/Sidekick_core_logic/Term/index.html#type-t">Sidekick_core_logic.Term.t</a> <span class="arrow">-></span></span> <span>bool option</span></span></code></div></div></details></div><div class="odoc-include"><div class="odoc-spec"><div class="spec type" id="type-term" class="anchored"><a href="#type-term" class="anchor"></a><code><span><span class="keyword">type</span> term</span><span> = <a href="../../../sidekick/Sidekick_core_logic/Term/index.html#type-t">Sidekick_core_logic.Term.t</a></span></code></div></div><div class="odoc-spec"><div class="spec type" id="type-hook" class="anchored"><a href="#type-hook" class="anchor"></a><code><span><span class="keyword">type</span> hook</span><span> =
|
||
<span>recurse:<span><a href="#type-term">term</a> <span class="xref-unresolved">Sidekick_util</span>.Fmt.printer</span> <span class="arrow">-></span></span>
|
||
<span><span class="xref-unresolved">Sidekick_util</span>.Fmt.t <span class="arrow">-></span></span>
|
||
<span><a href="#type-term">term</a> <span class="arrow">-></span></span>
|
||
bool</span></code></div><div class="spec-doc"><p>Printing hook, responsible for printing certain subterms</p></div></div><div class="odoc-spec"><div class="spec module" id="module-Hooks" class="anchored"><a href="#module-Hooks" class="anchor"></a><code><span><span class="keyword">module</span> Hooks</span><span> = <a href="../../../sidekick/Sidekick_core/Term/Hooks/index.html">Sidekick_core.Term.Hooks</a></span></code></div></div><div class="odoc-spec"><div class="spec value" id="val-default_hooks" class="anchored"><a href="#val-default_hooks" class="anchor"></a><code><span><span class="keyword">val</span> default_hooks : <span><a href="../../../sidekick/Sidekick_core/Term/Hooks/index.html#type-t">Hooks.t</a> <span class="xref-unresolved">Stdlib</span>.ref</span></span></code></div></div><div class="odoc-spec"><div class="spec value" id="val-pp_with" class="anchored"><a href="#val-pp_with" class="anchor"></a><code><span><span class="keyword">val</span> pp_with : <span><a href="../../../sidekick/Sidekick_core/Term/Hooks/index.html#type-t">Hooks.t</a> <span class="arrow">-></span></span> <span><a href="#type-term">term</a> <span class="xref-unresolved">Sidekick_util</span>.Fmt.printer</span></span></code></div><div class="spec-doc"><p>Print using the hooks</p></div></div><div class="odoc-spec"><div class="spec value" id="val-pp" class="anchored"><a href="#val-pp" class="anchor"></a><code><span><span class="keyword">val</span> pp : <span><a href="#type-term">term</a> <span class="xref-unresolved">Sidekick_util</span>.Fmt.printer</span></span></code></div><div class="spec-doc"><p>Print using <a href="#val-default_hooks"><code>default_hooks</code></a></p></div></div></div></details></div><div class="odoc-spec"><div class="spec value" id="val-view_as_cc" class="anchored"><a href="#val-view_as_cc" class="anchor"></a><code><span><span class="keyword">val</span> view_as_cc :
|
||
<span><a href="../../../sidekick/Sidekick_core_logic/Term/index.html#type-t">Sidekick_core_logic.Term.t</a> <span class="arrow">-></span></span>
|
||
<span><span>( <a href="../../../sidekick/Sidekick_core_logic/Const/index.html#type-t">Sidekick_core_logic.Const.t</a>,
|
||
<a href="../../../sidekick/Sidekick_core_logic/Term/index.html#type-t">Sidekick_core_logic.Term.t</a>,
|
||
<span><a href="../../../sidekick/Sidekick_core_logic/Term/index.html#type-t">Sidekick_core_logic.Term.t</a> list</span> )</span>
|
||
<a href="../../../sidekick/Sidekick_core/CC_view/index.html#type-t">Sidekick_core.CC_view.t</a></span></span></code></div></div></div></body></html> |