sidekick/dev/sidekick-bin/Sidekick_smtlib/Process/Solver/P/index.html
2021-12-17 16:41:10 +00:00

2 lines
No EOL
14 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>P (sidekick-bin.Sidekick_smtlib.Process.Solver.P)</title><link rel="stylesheet" href="../../../../../odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 2.0.2"/><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-bin</a> &#x00BB; <a href="../../../index.html">Sidekick_smtlib</a> &#x00BB; <a href="../../index.html">Process</a> &#x00BB; <a href="../index.html">Solver</a> &#x00BB; P</nav><header class="odoc-preamble"><h1>Module <code><span>Solver.P</span></code></h1></header><div class="odoc-content"><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><span> = <a href="../index.html#type-proof">proof</a></span></code></div><div class="spec-doc"><p>The abstract representation of a proof. A proof always proves a clause to be <b>valid</b> (true in every possible interpretation of the problem's assertions, and the theories)</p></div></div><div class="odoc-spec"><div class="spec type" id="type-proof_step" class="anchored"><a href="#type-proof_step" class="anchor"></a><code><span><span class="keyword">type</span> proof_step</span><span> = <a href="../index.html#type-proof_step">proof_step</a></span></code></div><div class="spec-doc"><p>Identifier for a proof proof_rule (like a unique ID for a clause previously added/proved)</p></div></div><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="../T/Term/index.html#type-t">T.Term.t</a></span></code></div></div><div class="odoc-spec"><div class="spec type" id="type-lit" class="anchored"><a href="#type-lit" class="anchor"></a><code><span><span class="keyword">type</span> lit</span><span> = <a href="../Lit/index.html#type-t">Lit.t</a></span></code></div></div><div class="odoc-spec"><div class="spec type" id="type-proof_rule" class="anchored"><a href="#type-proof_rule" class="anchor"></a><code><span><span class="keyword">type</span> proof_rule</span><span> = <span><a href="#type-t">t</a> <span class="arrow">&#45;&gt;</span></span> <a href="#type-proof_step">proof_step</a></span></code></div></div><div class="odoc-include"><details open="open"><summary class="spec include"><code><span><span class="keyword">include</span> <a href="../../../../../sidekick/Sidekick_core/module-type-CC_PROOF/index.html">Sidekick_core.CC_PROOF</a> <span class="keyword">with</span> <span><span class="keyword">type</span> <a href="../../../../../sidekick/Sidekick_core/module-type-CC_PROOF/index.html#type-t">t</a> := <a href="#type-t">t</a></span> <span class="keyword">and</span> <span><span class="keyword">type</span> <a href="../../../../../sidekick/Sidekick_core/module-type-CC_PROOF/index.html#type-lit">lit</a> := <a href="#type-lit">lit</a></span> <span class="keyword">and</span> <span><span class="keyword">type</span> <a href="../../../../../sidekick/Sidekick_core/module-type-CC_PROOF/index.html#type-proof_step">proof_step</a> := <a href="#type-proof_step">proof_step</a></span></span></code></summary><div class="odoc-spec"><div class="spec value" id="val-lemma_cc" class="anchored"><a href="#val-lemma_cc" class="anchor"></a><code><span><span class="keyword">val</span> lemma_cc : <span><span><a href="#type-lit">lit</a> <span class="xref-unresolved">Iter</span>.t</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-proof_step">proof_step</a></span></code></div><div class="spec-doc"><p><code>lemma_cc proof lits</code> asserts that <code>lits</code> form a tautology for the theory of uninterpreted functions.</p></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_core/module-type-SAT_PROOF/index.html">Sidekick_core.SAT_PROOF</a> <span class="keyword">with</span> <span><span class="keyword">type</span> <a href="../../../../../sidekick/Sidekick_core/module-type-SAT_PROOF/index.html#type-t">t</a> := <a href="#type-t">t</a></span> <span class="keyword">and</span> <span><span class="keyword">type</span> <a href="../../../../../sidekick/Sidekick_core/module-type-SAT_PROOF/index.html#type-lit">lit</a> := <a href="#type-lit">lit</a></span> <span class="keyword">and</span> <span><span class="keyword">type</span> <a href="../../../../../sidekick/Sidekick_core/module-type-SAT_PROOF/index.html#type-proof_step">proof_step</a> := <a href="#type-proof_step">proof_step</a></span> <span class="keyword">and</span> <span><span class="keyword">type</span> <a href="../../../../../sidekick/Sidekick_core/module-type-SAT_PROOF/index.html#type-proof_rule">proof_rule</a> := <a href="#type-proof_rule">proof_rule</a></span></span></code></summary><div class="odoc-spec"><div class="spec module" id="module-Step_vec" class="anchored"><a href="#module-Step_vec" class="anchor"></a><code><span><span class="keyword">module</span> </span><span><a href="Step_vec/index.html">Step_vec</a></span><span> : <a href="../../../../../sidekick/Sidekick_util/Vec_sig/module-type-S/index.html">Sidekick_util.Vec_sig.S</a> <span class="keyword">with</span> <span><span class="keyword">type</span> <a href="../../../../../sidekick/Sidekick_util/Vec_sig/module-type-S/index.html#type-elt">elt</a> = <a href="#type-proof_step">proof_step</a></span></span></code></div><div class="spec-doc"><p>A vector of steps</p></div></div><div class="odoc-spec"><div class="spec value" id="val-enabled" class="anchored"><a href="#val-enabled" class="anchor"></a><code><span><span class="keyword">val</span> enabled : <span><a href="#type-t">t</a> <span class="arrow">&#45;&gt;</span></span> bool</span></code></div><div class="spec-doc"><p>Returns true if proof production is enabled</p></div></div><div class="odoc-spec"><div class="spec value" id="val-emit_input_clause" class="anchored"><a href="#val-emit_input_clause" class="anchor"></a><code><span><span class="keyword">val</span> emit_input_clause : <span><span><a href="#type-lit">lit</a> <span class="xref-unresolved">Iter</span>.t</span> <span class="arrow">&#45;&gt;</span></span> <a href="#type-proof_rule">proof_rule</a></span></code></div><div class="spec-doc"><p>Emit an input clause.</p></div></div><div class="odoc-spec"><div class="spec value" id="val-emit_redundant_clause" class="anchored"><a href="#val-emit_redundant_clause" class="anchor"></a><code><span><span class="keyword">val</span> emit_redundant_clause : <span><span><a href="#type-lit">lit</a> <span class="xref-unresolved">Iter</span>.t</span> <span class="arrow">&#45;&gt;</span></span> <span>hyps:<span><a href="#type-proof_step">proof_step</a> <span class="xref-unresolved">Iter</span>.t</span> <span class="arrow">&#45;&gt;</span></span> <a href="#type-proof_rule">proof_rule</a></span></code></div><div class="spec-doc"><p>Emit a clause deduced by the SAT solver, redundant wrt previous clauses. The clause must be RUP wrt <code>hyps</code>.</p></div></div><div class="odoc-spec"><div class="spec value" id="val-emit_unsat_core" class="anchored"><a href="#val-emit_unsat_core" class="anchor"></a><code><span><span class="keyword">val</span> emit_unsat_core : <span><span><a href="#type-lit">lit</a> <span class="xref-unresolved">Iter</span>.t</span> <span class="arrow">&#45;&gt;</span></span> <a href="#type-proof_rule">proof_rule</a></span></code></div><div class="spec-doc"><p>Produce a proof of the empty clause given this subset of the assumptions. FIXME: probably needs the list of proof_step that disprove the lits?</p></div></div><div class="odoc-spec"><div class="spec value" id="val-emit_unsat" class="anchored"><a href="#val-emit_unsat" class="anchor"></a><code><span><span class="keyword">val</span> emit_unsat : <span><a href="#type-proof_step">proof_step</a> <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>Signal &quot;unsat&quot; result at the given proof</p></div></div><div class="odoc-spec"><div class="spec value" id="val-del_clause" class="anchored"><a href="#val-del_clause" class="anchor"></a><code><span><span class="keyword">val</span> del_clause : <span><a href="#type-proof_step">proof_step</a> <span class="arrow">&#45;&gt;</span></span> <span><span><a href="#type-lit">lit</a> <span class="xref-unresolved">Iter</span>.t</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>Forget a clause. Only useful for performance considerations.</p></div></div></details></div><div class="odoc-spec"><div class="spec value" id="val-define_term" class="anchored"><a href="#val-define_term" class="anchor"></a><code><span><span class="keyword">val</span> define_term : <span><a href="#type-term">term</a> <span class="arrow">&#45;&gt;</span></span> <span><a href="#type-term">term</a> <span class="arrow">&#45;&gt;</span></span> <a href="#type-proof_rule">proof_rule</a></span></code></div><div class="spec-doc"><p><code>define_term cst u proof</code> defines the new constant <code>cst</code> as being equal to <code>u</code>. The result is a proof of the clause <code>cst = u</code></p></div></div><div class="odoc-spec"><div class="spec value" id="val-proof_p1" class="anchored"><a href="#val-proof_p1" class="anchor"></a><code><span><span class="keyword">val</span> proof_p1 : <span><a href="#type-proof_step">proof_step</a> <span class="arrow">&#45;&gt;</span></span> <span><a href="#type-proof_step">proof_step</a> <span class="arrow">&#45;&gt;</span></span> <a href="#type-proof_rule">proof_rule</a></span></code></div><div class="spec-doc"><p><code>proof_p1 p1 p2</code>, where <code>p1</code> proves the unit clause <code>t=u</code> (t:bool) and <code>p2</code> proves <code>C \/ t</code>, is the rule that produces <code>C \/ u</code>, i.e unit paramodulation.</p></div></div><div class="odoc-spec"><div class="spec value" id="val-proof_r1" class="anchored"><a href="#val-proof_r1" class="anchor"></a><code><span><span class="keyword">val</span> proof_r1 : <span><a href="#type-proof_step">proof_step</a> <span class="arrow">&#45;&gt;</span></span> <span><a href="#type-proof_step">proof_step</a> <span class="arrow">&#45;&gt;</span></span> <a href="#type-proof_rule">proof_rule</a></span></code></div><div class="spec-doc"><p><code>proof_r1 p1 p2</code>, where <code>p1</code> proves the unit clause <code>|- t</code> (t:bool) and <code>p2</code> proves <code>C \/ ¬t</code>, is the rule that produces <code>C \/ u</code>, i.e unit resolution.</p></div></div><div class="odoc-spec"><div class="spec value" id="val-with_defs" class="anchored"><a href="#val-with_defs" class="anchor"></a><code><span><span class="keyword">val</span> with_defs : <span><a href="#type-proof_step">proof_step</a> <span class="arrow">&#45;&gt;</span></span> <span><span><a href="#type-proof_step">proof_step</a> <span class="xref-unresolved">Iter</span>.t</span> <span class="arrow">&#45;&gt;</span></span> <a href="#type-proof_rule">proof_rule</a></span></code></div><div class="spec-doc"><p><code>with_defs pr defs</code> specifies that <code>pr</code> is valid only in a context where the definitions <code>defs</code> are present.</p></div></div><div class="odoc-spec"><div class="spec value" id="val-lemma_true" class="anchored"><a href="#val-lemma_true" class="anchor"></a><code><span><span class="keyword">val</span> lemma_true : <span><a href="#type-term">term</a> <span class="arrow">&#45;&gt;</span></span> <a href="#type-proof_rule">proof_rule</a></span></code></div><div class="spec-doc"><p><code>lemma_true (true) p</code> asserts the clause <code>(true)</code></p></div></div><div class="odoc-spec"><div class="spec value" id="val-lemma_preprocess" class="anchored"><a href="#val-lemma_preprocess" class="anchor"></a><code><span><span class="keyword">val</span> lemma_preprocess : <span><a href="#type-term">term</a> <span class="arrow">&#45;&gt;</span></span> <span><a href="#type-term">term</a> <span class="arrow">&#45;&gt;</span></span> <span>using:<span><a href="#type-proof_step">proof_step</a> <span class="xref-unresolved">Iter</span>.t</span> <span class="arrow">&#45;&gt;</span></span> <a href="#type-proof_rule">proof_rule</a></span></code></div><div class="spec-doc"><p><code>lemma_preprocess t u ~using p</code> asserts that <code>t = u</code> is a tautology and that <code>t</code> has been preprocessed into <code>u</code>.</p><p>The theorem <code>/\_{eqn in using} eqn |- t=u</code> is proved using congruence closure, and then resolved against the clauses <code>using</code> to obtain a unit equality.</p><p>From now on, <code>t</code> and <code>u</code> will be used interchangeably.</p><ul class="at-tags"><li class="returns"><span class="at-tag">returns</span> <p>a proof_rule ID for the clause <code>(t=u)</code>.</p></li></ul></div></div><div class="odoc-spec"><div class="spec value" id="val-lemma_rw_clause" class="anchored"><a href="#val-lemma_rw_clause" class="anchor"></a><code><span><span class="keyword">val</span> lemma_rw_clause : <span><a href="#type-proof_step">proof_step</a> <span class="arrow">&#45;&gt;</span></span> <span>res:<span><a href="#type-lit">lit</a> <span class="xref-unresolved">Iter</span>.t</span> <span class="arrow">&#45;&gt;</span></span> <span>using:<span><a href="#type-proof_step">proof_step</a> <span class="xref-unresolved">Iter</span>.t</span> <span class="arrow">&#45;&gt;</span></span> <a href="#type-proof_rule">proof_rule</a></span></code></div><div class="spec-doc"><p><code>lemma_rw_clause prc ~res ~using</code>, where <code>prc</code> is the proof of <code>|- c</code>, uses the equations <code>|- p_i = q_i</code> from <code>using</code> to rewrite some literals of <code>c</code> into <code>res</code>. This is used to preprocess literals of a clause (using <a href="#val-lemma_preprocess"><code>lemma_preprocess</code></a> individually).</p></div></div></div></body></html>