sidekick/dev/sidekick-base/Sidekick_base/Term/index.html
2022-08-30 00:33:56 +00:00

38 lines
No EOL
38 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!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> &#x00BB; <a href="../index.html">Sidekick_base</a> &#x00BB; 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">&#45;&gt;</span></span> <span><a href="#type-t">t</a> <span class="arrow">&#45;&gt;</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">&#45;&gt;</span></span> <span><a href="#type-t">t</a> <span class="arrow">&#45;&gt;</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">&#45;&gt;</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">&#45;&gt;</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">&#45;&gt;</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">&#45;&gt;</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">&#45;&gt;</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">&#45;&gt;</span></span> <span>iter_ty:bool <span class="arrow">&#45;&gt;</span></span> <span>f:<span>( <span><a href="#type-t">t</a> <span class="arrow">&#45;&gt;</span></span> unit )</span> <span class="arrow">&#45;&gt;</span></span> <span><a href="#type-t">t</a> <span class="arrow">&#45;&gt;</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">&#45;&gt;</span></span> <span><a href="#type-t">t</a> <span class="arrow">&#45;&gt;</span></span> unit )</span> <span class="arrow">&#45;&gt;</span></span> <span><a href="#type-t">t</a> <span class="arrow">&#45;&gt;</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">&#45;&gt;</span></span> <span>f:<span>( <span>bool <span class="arrow">&#45;&gt;</span></span> <span><a href="#type-t">t</a> <span class="arrow">&#45;&gt;</span></span> <a href="#type-t">t</a> )</span> <span class="arrow">&#45;&gt;</span></span> <span><a href="#type-t">t</a> <span class="arrow">&#45;&gt;</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">&#45;&gt;</span></span> <span><a href="#type-t">t</a> <span class="arrow">&#45;&gt;</span></span> bool )</span> <span class="arrow">&#45;&gt;</span></span> <span><a href="#type-t">t</a> <span class="arrow">&#45;&gt;</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">&#45;&gt;</span></span> <span><a href="#type-t">t</a> <span class="arrow">&#45;&gt;</span></span> bool )</span> <span class="arrow">&#45;&gt;</span></span> <span><a href="#type-t">t</a> <span class="arrow">&#45;&gt;</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">&#45;&gt;</span></span> <span>sub:<a href="#type-t">t</a> <span class="arrow">&#45;&gt;</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">&#45;&gt;</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">&#45;&gt;</span></span>
<span><a href="#type-t">t</a> <span class="arrow">&#45;&gt;</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">&#45;&gt;</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">&#45;&gt;</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">&#45;&gt;</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">&#45;&gt;</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">&#45;&gt;</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">&#45;&gt;</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">&#45;&gt;</span></span> <span>int <span class="arrow">&#45;&gt;</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">&#45;&gt;</span></span> <span><a href="#type-var">var</a> <span class="arrow">&#45;&gt;</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">&#45;&gt;</span></span> <span>string <span class="arrow">&#45;&gt;</span></span> <span>ty:<a href="#type-t">t</a> <span class="arrow">&#45;&gt;</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">&#45;&gt;</span></span> <span><a href="#type-bvar">bvar</a> <span class="arrow">&#45;&gt;</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">&#45;&gt;</span></span> <span>int <span class="arrow">&#45;&gt;</span></span> <span>ty:<a href="#type-t">t</a> <span class="arrow">&#45;&gt;</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">&#45;&gt;</span></span> <span><span class="xref-unresolved">Sidekick_core_logic__Types_.const</span> <span class="arrow">&#45;&gt;</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">&#45;&gt;</span></span> <span><a href="#type-t">t</a> <span class="arrow">&#45;&gt;</span></span> <span><a href="#type-t">t</a> <span class="arrow">&#45;&gt;</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">&#45;&gt;</span></span> <span><a href="#type-t">t</a> <span class="arrow">&#45;&gt;</span></span> <span><span><a href="#type-t">t</a> list</span> <span class="arrow">&#45;&gt;</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">&#45;&gt;</span></span> <span>f:<a href="#type-t">t</a> <span class="arrow">&#45;&gt;</span></span> <span>acc0:<a href="#type-t">t</a> <span class="arrow">&#45;&gt;</span></span> <span><span><a href="#type-t">t</a> list</span> <span class="arrow">&#45;&gt;</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">&#45;&gt;</span></span> <span><a href="#type-var">var</a> <span class="arrow">&#45;&gt;</span></span> <span><a href="#type-t">t</a> <span class="arrow">&#45;&gt;</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">&#45;&gt;</span></span> <span><a href="#type-var">var</a> <span class="arrow">&#45;&gt;</span></span> <span><a href="#type-t">t</a> <span class="arrow">&#45;&gt;</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">&#45;&gt;</span></span> <span><a href="#type-t">t</a> <span class="arrow">&#45;&gt;</span></span> <span><a href="#type-t">t</a> <span class="arrow">&#45;&gt;</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">&#45;&gt;</span></span> <span><span><a href="#type-t">t</a> list</span> <span class="arrow">&#45;&gt;</span></span> <span><a href="#type-t">t</a> <span class="arrow">&#45;&gt;</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">&#45;&gt;</span></span> <span><a href="#type-t">t</a> <span class="arrow">&#45;&gt;</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">&#45;&gt;</span></span> <span><a href="#type-t">t</a> <span class="arrow">&#45;&gt;</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">&#45;&gt;</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">&#45;&gt;</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">&#45;&gt;</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">&#45;&gt;</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">&#45;&gt;</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">&#45;&gt;</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">&#45;&gt;</span></span>
<span>bool <span class="arrow">&#45;&gt;</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">&#45;&gt;</span></span>
<span><a href="../../../sidekick/Sidekick_core_logic/Term/index.html#type-t">Sidekick_core_logic.Term.t</a> <span class="arrow">&#45;&gt;</span></span>
<span><a href="../../../sidekick/Sidekick_core_logic/Term/index.html#type-t">Sidekick_core_logic.Term.t</a> <span class="arrow">&#45;&gt;</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">&#45;&gt;</span></span>
<span><a href="../../../sidekick/Sidekick_core_logic/Term/index.html#type-t">Sidekick_core_logic.Term.t</a> <span class="arrow">&#45;&gt;</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">&#45;&gt;</span></span>
<span><a href="../../../sidekick/Sidekick_core_logic/Term/index.html#type-t">Sidekick_core_logic.Term.t</a> <span class="arrow">&#45;&gt;</span></span>
<span><a href="../../../sidekick/Sidekick_core_logic/Term/index.html#type-t">Sidekick_core_logic.Term.t</a> <span class="arrow">&#45;&gt;</span></span>
<span><a href="../../../sidekick/Sidekick_core_logic/Term/index.html#type-t">Sidekick_core_logic.Term.t</a> <span class="arrow">&#45;&gt;</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">&#45;&gt;</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">&#45;&gt;</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">&#45;&gt;</span></span>
<span><a href="../../../sidekick/Sidekick_core_logic/Term/index.html#type-t">Sidekick_core_logic.Term.t</a> <span class="arrow">&#45;&gt;</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 &quot;absolute value&quot; 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">&#45;&gt;</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">&#45;&gt;</span></span>
<span><span class="xref-unresolved">Sidekick_util</span>.Fmt.t <span class="arrow">&#45;&gt;</span></span>
<span><a href="#type-term">term</a> <span class="arrow">&#45;&gt;</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">&#45;&gt;</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">&#45;&gt;</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>