File: loop.html

package info (click to toggle)
prover9-manual 0.0.200902a-2.1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, bullseye
  • size: 4,272 kB
  • sloc: xml: 212; csh: 144; python: 73; makefile: 42; perl: 10; sh: 1
file content (128 lines) | stat: -rw-r--r-- 4,239 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html>
<head>
  <title>Prover9 Manual: The Inference Loop</title>
 <link rel="stylesheet" href="manual.css">
</head>

<body>

<!-- Site navigation menu -->

<ul class="navbar">
  <li><a href="index.html">Introduction</a>
  <li><a href="install.html">Installation</a>
  <li><a href="running.html">Running Prover9</a>
  <li><a href="input.html">Input Files</a>
  <li><a href="syntax.html">Clauses & Formulas</a>
  <li>Search Prep
  <ul class="navbar2">
    <li><a href="auto.html">Auto Modes</a>
    <li><a href="term-order.html">Term Ordering</a>
    <li><a href="more-prep.html">More Prep</a>
    <li><a href="limits.html">Search Limits</a>
  </ul>
  <li>Inference
  <ul class="navbar2">
    <li><a href="loop.html">The Loop</a>
    <li><a href="select.html">Select Given</a>
    <li><a href="inf-rules.html">Inference Rules</a>
    <li><a href="process-inf.html">Process Inferred</a>
  </ul>
  <li><a href="output.html">Output Files</a>
  <li>More Features
  <ul class="navbar2">
    <li><a href="weight.html">Weighting</a>
    <li><a href="attributes.html">Attributes</a>
    <li><a href="actions.html">Actions</a>
    <li><a href="fof-reduction.html">FOF Reduction</a>
    <li><a href="goals.html">Goals</a>
    <li><a href="hints.html">Hints</a>
    <li><a href="semantics.html">Semantics</a>
  </ul>
  <li>Related Programs
  <ul class="navbar2">
    <li><a href="prooftrans.html">Prooftrans</a>
    <li><a href="mace4.html">Mace4</a>
  </ul>
  <li>Ending
  <ul class="navbar2">
    <li><a href="options.html">All Options</a>
    <li><a href="glossary.html">Glossary</a>
    <li><a href="manual-index.html">Index</a>
    <li><a href="references.html">References</a>
  </ul>
</ul>

<div class="header">Prover9 Manual Version June-2006</div>

<!-- Main content -->

<h1>Prover9 Manual: The Inference Loop</h1>

The <i>main loop</i> for inferring and processing clauses
and searching for a proof is sometimes called the <i>given
clause algorithm</i>.
It operates mainly on the <tt>sos</tt> and <tt>usable</tt> lists.

<pre class="my_code">
While the sos list is not empty:
    1. <a href="select.html">Select a given clause</a> from sos and move it to the usable list;
    2. <a href="inf-rules.html">Infer new clauses</a> using the inference rules in effect;
       each new clause must have the given clause as one of its
       parents and members of the usable list as its other parents;
    3. <a href="process-inf.html">process each new clause</a>;
    4. append new clauses that pass the retention tests to the sos list.
end of while loop.
</pre>

<h2>Two Frequently Asked Questions</h2>

<blockquote>
<i>At some point in the search,
Prover9 has all of the clauses needed to make an important
inference, and one of the potential parents is selected as
the given clause.  But Prover9 fails to make the inference.
Why is that?</i>
</blockquote>

<blockquote>
<i>Why do all parents have to be in the <tt>usable</tt> list?</i>
</blockquote>

The answer to both questions is the same, and it has to do
with redundancy.  Assume 
<ul>
<li>clause <i>C</i> can be inferred from clauses
<i>A</i> and <i>B</i>;
<li>both <i>A</i> and <i>B</i> are in the
<tt>sos</tt> list; and
<li><i>A</i> is selected first.
</ul>
According to the algorithm, <i>C</i> is not derived
until <i>B</i> has also been selected.
Otherwise, <i>C</i> would be derived twice from
<i>A</i> and <i>B</i>.

<h2>Variations of the Loop</h2>

<p>
There are two common versions of the given clause algorithm
that differ in how newly inferred clauses are processed, in
particular, what clauses can operate on (rewrite, simplify)
newly generated clauses.

<p>
In the <i>Otter loop</i>, which Prover9 uses, clauses in
the <tt>sos</tt> list can operate on new clauses.
In the <i>Discount loop</i>, clauses in the <tt>sos</tt>
list (also called the <i>passive list</i>) cannot operate on
new clauses.  The tradeoff between the two versions is
straightforward --- the Otter loop spends more time
simplifying new clauses with the possible benefit of
making an important simplification sooner.  Some
experimental analysis of the tradeoff has been done
[<a href="references.html#Voronkov-loop">Voronkov-loop???</a>].

</body>
</html>