File: m4-options.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 (297 lines) | stat: -rw-r--r-- 11,006 bytes parent folder | download | duplicates (3)
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
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html>
<head>
  <title>Prover9 Manual: Mace4 Options</title>
 <link rel="stylesheet" href="manual.css">
</head>

<body>

<hr>
<table width="100%">
<tr>
<colgroup>
<col width="33%">
<col width="34%">
<col width="33%">
</colgroup>
<td align="left"><i>Prover9 Manual</i>
<td align="center"><img src="prover9-5a-256t.gif">
<td align="right"><i>Version 2009-02A</i>
</table>
<hr>

<!-- Main content -->

<h1>Mace4 Options</h1>

Mace4 accepts <tt>set</tt>, <tt>clear</tt>, and <tt>assign</tt>
commands in the input file.  Several of these are in common with
Prover9 (e.g., <tt>assign(max_seconds, 30)</tt>), but most
are specifically for Mace4.

<p>
If Mace4 is called with the command-line option <tt>-c</tt>
(compatability mode), it will ignore any <tt>set</tt>, <tt>clear</tt>,
and <tt>assign</tt> that it does not recognize, assuming they
are meant for some other program (Prover9).

<p>
Most Mace4 options can be specified on the command line instead
of in the input file.
When Mace4 options are specified on the command line, single-character
codes are used.  For example, the command-line option
<tt>-t 30</tt> means the same as <tt>assign(max_second, 30)</tt>
in the input file.  If an option is given in <i>both</i> places,
the one on the command line takes precedence.
Command-line options for Boolean-valued options (flags)
always take an argument: 1 means "set", and 0 means "clear".
For example, <tt>-V 1</tt> means <tt>set(prolog_style_vaiables</tt>,
and <tt>-V 0</tt> means <tt>clear(prolog_style_variables)</tt>.

<p>
The command "<tt>mace4 -help</tt>" shows the correspondence between
the command-line codes and the option names, and it shows the default
values.

<h2>Symbol Ordering</h2>

Like Prover9, Mace4 accepts <tt>function_order</tt> and
<tt>relation_order</tt> commands that specify an order on the
symbols in the problem.  The syntax of the commands is the
<a href="term-order.html#lex_command">same as in Prover9</a>, for example,
<pre class="my_file">
predicate_order([=, <=, P, Q]).          % = &lt; P &lt; Q
function_order([a, b, c, +, *, h, g]).   % a &lt; b &lt; c &lt; + &lt; * &lt; h &lt; g
</pre>
Mace4's the default symbol order is the
<a href="term-order.html#default_lex">same as Prover9's</a>.
As in Prover9, function symbols are always less than predicate symbols.
<p>
The symbol order can have a big effect on the time it takes to find
a model or exhaust a domain size, because it determines the order in which
Mace4 tries to fill in the function and relation tables.  Unfortunately,
we do not know of any general-purpose heuristics for selecting a
good symbol order.  If Mace4 takes too long to go through a particular
domain size, we suggest trying a different symbol order.

<h2>Option Listing</h2>

<h3>Basic Options</h3>

<pre class="my_file">
assign(start_size, <i>n</i>).  % default <i>n</i>=2, range [2 .. <tt>INT_MAX</tt>]  % command-line -n <i>n</i>
</pre>
<pre class="my_file">
assign(end_size, <i>n</i>).  % default <i>n</i>=-1, range [-1 .. <tt>INT_MAX</tt>]  % command-line -N <i>n</i>
</pre>
<pre class="my_file">
assign(increment, <i>n</i>).  % default <i>n</i>=1, range [1 .. <tt>INT_MAX</tt>]  % command-line -i <i>n</i>
</pre>

These three parameter work together to determine the domain sizes
to be searched.  The search starts for structures of size
<tt>start_size</tt>; if that search fails, 
the size is incremented, and another search starts.  This continues
up through the value <tt>end_size</tt> (or until some other limit
terminates the process).  If <tt>end_size</tt> is -1, there is no limit.
(Also see the <tt>iterate</tt> parameter below.)

<p>
For example, the command-line options "<tt>-n 5 -N 11 -i 2</tt>"
say to try domain sizes 5,7,9,11.

<pre class="my_file">
assign(domain_size, <i>n</i>).  % default <i>n</i>=0, range [0 .. <tt>INT_MAX</tt>]  % command-line -n <i>n</i>
</pre>
This parameter says to search <i>only</i> the given size.
This (meta-) parameter works simply by making the following changes.
<pre>
  assign(domain_size, <i>n</i>) -> assign(start_size, <i>n</i>).
  assign(domain_size, <i>n</i>) -> assign(end_size, <i>n</i>).
</pre>

<pre class="my_file">
assign(iterate, <i>string</i>).  % default <i>string</i>=all, range [all,evens,odds,primes,nonprimes]
</pre>
The <tt>iterate</tt> parameter can be used to add an additional constraint
to the domain sizes.  It can be used together with the <tt>increment</tt>
parameter.  The <tt>iterate</tt> parameter cannot be specified on the
command line.

<pre class="my_file">
assign(max_models, <i>n</i>).  % default <i>n</i>=1, range [-1 .. <tt>INT_MAX</tt>]  % command-line -m <i>n</i>
</pre>
The parameter <tt>max_models</tt> says to stop searching when the <i>n</i>-th structure has been found.
A value of -1 means there is no limit.

<pre class="my_file">
assign(max_seconds, <i>n</i>).  % default <i>n</i>=-1, range [-1 .. <tt>INT_MAX</tt>]  % command-line -t <i>n</i>
</pre>
The parameter
<a href="limits.html#max_seconds"><tt><b>max_seconds</b></tt></a>
says to stop searching after <i>n</i> seconds.
A value of -1 means there is no limit.

<pre class="my_file">
assign(max_seconds_per, <i>n</i>).  % default <i>n</i>=-1, range [-1 .. <tt>INT_MAX</tt>]  % command-line -s <i>n</i>
</pre>
The parameter allows at most <i>n</i> seconds for each domain size.
The parameter <a href="limits.html#max_seconds"><tt><b>max_seconds</b></tt></a> can be used (together  with <tt>max_seconds_per</tt>)
to given an overall time limit.
A value of -1 means there is no limit.

<pre class="my_file">
assign(max_megs, <i>n</i>).  % default <i>n</i>=200, range [-1 .. <tt>INT_MAX</tt>]  % command-line -b <i>n</i>
</pre>
The parameter <a href="limits.html#max_megs"><tt><b>max_megs</b></tt></a>
says to stop searching when (about) <i>n</i> megabytes of memory have been used.
A value of -1 means there is no limit.

<pre class="my_file">
set(prolog_style_variables).                       % command-line -V 1
clear(prolog_style_variables).    % default clear  % command-line -V 0
</pre>

A rule is needed for distinguishing variables from constants in
clauses and formulas with free variables.
If this flag is clear, variables start with
(lower case) 'u' through 'z'.
If this flag is set, variables in clauses start with
(upper case) 'A' through 'Z' or '_'.

<pre class="my_file">
set(print_models).      % default set    % command-line -P 1
clear(print_models).                     % command-line -P 0
</pre>

If this flag is set, all structures that are found are printed
in "standard" form, which means they are suitable as
input to other LADR programs such as
<a href="m4-isofilter.html">isofilter</a> and
<a href="m4-interpforma.html">interpformat</a>.

<pre class="my_file">
set(print_models_tabular).                       % command-line -p 1
clear(print_models_tabular).    % default clear  % command-line -p 0
</pre>
If this flag is set, and if  is clear,
all structures that are found are printed in a tabular form.
If both <tt>print_models</tt> and <tt>print_models_standard</tt>
are set, the last one in the input takes effect.

<pre class="my_file">
set(integer_ring).                       % command-line -R 1
clear(integer_ring).    % default clear  % command-line -R 0
</pre>
If this flag is set, a ring structure is is applied to the search.
The operations {+,-,*} are assumed to be the ring of integers
(mod domain_size).  This method puts a tight constraint on
the search, allowing much larger structures to be investigated.
Here is an example.

<pre class="my_job">
mace4 -f <a href="ring41.in">ring41.in</a> &gt; <a href="ring41.out">ring41.out</a>
</pre>

For further information on the <tt>integer_ring</tt> flag, see
<a href="http://www.cs.unm.edu/~mccune/slides/award-2004.pdf">
slides from a workshop presentation</a>.

<pre class="my_file">
set(order_domain).
clear(order_domain).        % default clear
</pre>

If this flag is set, the relations <tt>&lt;</tt> and <tt>&lt;=</tt>
are fixed as order relations on the domain in the obvious way.

<pre class="my_file">
set(arithmetic).
clear(arithmetic).        % default clear
</pre>

If this flag is set, several function and relation symbols understood
by Mace4 as operations and relations on the integers, and evaluation
of terms involving those symbols occurs during the search for models.
See the page <a href="m4-arithmetic.html">Arithmetic for Mace4</a>.

<pre class="my_file">
set(verbose).                       % command-line -v 1
clear(verbose).    % default clear  % command-line -v 0
</pre>

If the <tt>verbose</tt> flag is set, the output file receives
information about the search, including the initial partial model (the
part of the model that can be determined before backtracking starts)
and timing and other statistics for each domain size. (It does not
give a trace of the backtracking, so it does not consume a lot of file
space.)

<pre class="my_file">
set(trace).                       % command-line -T 1
clear(trace).    % default clear  % command-line -T 0
</pre>

If the <tt>trace</tt> flag is set, detailed information about the
search, including a trace of all assignments and backtracking, is
printed to the standard output.  <i>This flag causes a lot of output, so
it should be used only on small searches</i>.

<h3>Advanced Options</h3>

These options are used for experimentation with search methods.
They can be ignored by nearly all users.  For descriptions of
most of these options, see the original Mace4 manual
[<a href="references.html#McCune-Mace4">McCune-Mace4</a>]
(<a href="http://www.cs.unm.edu/~mccune/prover9/mace4.pdf">PDF)</a>.

<pre class="my_file">
set(lnh).      % default set    % command-line -L 1
clear(lnh).                     % command-line -L 0
</pre>

<pre class="my_file">
assign(selection_order, <i>n</i>).  % default <i>n</i>=2, range [0 .. 2]  % command-line -O <i>n</i>
</pre>

<pre class="my_file">
assign(selection_measure, <i>n</i>).  % default <i>n</i>=4, range [0 .. 4]  % command-line -M <i>n</i>
</pre>

<pre class="my_file">
set(negprop).      % default set    % command-line -G 1
clear(negprop).                     % command-line -G 0
</pre>

<pre class="my_file">
set(neg_assign).      % default set    % command-line -H 1
clear(neg_assign).                     % command-line -H 0
</pre>

<pre class="my_file">
set(neg_assign_near).      % default set    % command-line -I 1
clear(neg_assign_near).                     % command-line -I 0
</pre>

<pre class="my_file">
set(neg_elim).      % default set    % command-line -J 1
clear(neg_elim).                     % command-line -J 0
</pre>

<pre class="my_file">
set(neg_elim_near).      % default set    % command-line -K 1
clear(neg_elim_near).                     % command-line -K 0
</pre>

<pre class="my_file">
set(skolems_last).                       % command-line -S 1
clear(skolems_last).    % default clear  % command-line -S 0
</pre>

<hr>
Next Section:
<a href="m4-arithmetic.html">Interpformat</a>

</body>
</html>