Connect++ 0.7.0
A fast, readable connection prover for first-order logic.
Loading...
Searching...
No Matches
Parameters.cpp
1/*
2
3Copyright © 2023-26 Sean Holden. All rights reserved.
4
5*/
6/*
7
8This file is part of Connect++.
9
10Connect++ is free software: you can redistribute it and/or modify it
11under the terms of the GNU General Public License as published by the
12Free Software Foundation, either version 3 of the License, or (at your
13option) any later version.
14
15Connect++ is distributed in the hope that it will be useful, but WITHOUT
16ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
17FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
18more details.
19
20You should have received a copy of the GNU General Public License along
21with Connect++. If not, see <https://www.gnu.org/licenses/>.
22
23*/
24
25#include "Parameters.hpp"
26
27//------------------------------------------------------------------
28// Cosmetic output options.
29//------------------------------------------------------------------
30uint8_t params::verbosity = 2;
31bool params::use_colours = true;
32uint8_t params::indent_size = 4;
33uint8_t params::output_width = 7;
34uint32_t params::output_frequency = 500000;
35bool params::output_terms_with_substitution = false;
36std::string params::problem_name = "Unknown";
37bool params::write_output_summary = false;
38std::string params::definitional_predicate_prefix = "sP";
39std::string params::unique_var_prefix = "U_";
40std::string params::unique_skolem_prefix = "sK";
41bool params::show_full_stats = true;
42bool params::first_parse = true;
43//------------------------------------------------------------------
44// CNF conversion.
45//------------------------------------------------------------------
46bool params::miniscope = true;
47bool params::all_definitional = false;
48bool params::no_definitional = false;
49//------------------------------------------------------------------
50// Equality axioms.
51 //------------------------------------------------------------------
52bool params::add_equality_axioms = true;
53bool params::equality_axioms_at_start = true;
54bool params::all_distinct_objects = false;
55bool params::no_distinct_objects = false;
56//------------------------------------------------------------------
57// Reordering
58//------------------------------------------------------------------
59unsigned params::random_seed = 0;
60uint32_t params::boost_random_seed = 0;
61bool params::deterministic_reorder = false;
62uint32_t params::number_of_reorders = 0;
63bool params::random_reorder = false;
64bool params::random_reorder_literals = false;
65//------------------------------------------------------------------
66// Timeout.
67//------------------------------------------------------------------
68bool params::timeout = false;
69uint32_t params::timeout_value = UINT32_MAX;
70std::chrono::steady_clock::time_point params::global_timeout(std::chrono::steady_clock::now());
71//------------------------------------------------------------------
72// Use of schedule.
73//------------------------------------------------------------------
74bool params::use_schedule = false;
75//------------------------------------------------------------------
76// Positive/negative representation.
77//------------------------------------------------------------------
78bool params::positive_representation = false;
79//------------------------------------------------------------------
80// Deepening.
81//------------------------------------------------------------------
82uint32_t params::start_depth = 2;
83uint32_t params::depth_limit = UINT32_MAX;
84uint32_t params::depth_increment = 1;
85//------------------------------------------------------------------
86// Start clauses.
87//------------------------------------------------------------------
88bool params::all_start = false;
89bool params::all_pos_neg_start = false;
90bool params::conjecture_start = false;
91bool params::restrict_start = false;
92//------------------------------------------------------------------
93// Use of regularity test.
94//------------------------------------------------------------------
95bool params::use_regularity_test = true;
96//------------------------------------------------------------------
97// Various basic limitations of search.
98//------------------------------------------------------------------
99bool params::use_lemmata = true;
100bool params::limit_lemmata = true;
101bool params::limit_reductions = true;
102bool params::limit_extensions = true;
103bool params::limit_bt_all = true;
104bool params::limit_bt_lemmas = true;
105bool params::limit_bt_reductions = true;
106bool params::limit_bt_extensions = true;
107bool params::limit_bt_extensions_left_tree = true;
108//------------------------------------------------------------------
109// Move to a complete search.
110//------------------------------------------------------------------
111uint32_t params::switch_to_complete = UINT32_MAX;
112//------------------------------------------------------------------
113// Type of unification to use.
114//------------------------------------------------------------------
115bool params::poly_unification = false;
116//------------------------------------------------------------------
117// Start and increment sizes for clause cache and stacks.
118//------------------------------------------------------------------
119size_t params::clause_copy_cache_start_size = 5; // This MUST be at least 1.
120size_t params::clause_copy_cache_increment = 1;
121size_t params::stack_start_size = 5000;
122size_t params::stack_increment = 0; // 0 means you'll double the size.
123//------------------------------------------------------------------
124// Generation of proof for output.
125//------------------------------------------------------------------
126bool params::verify_proof_verbose = false;
127bool params::verify_proof = false;
128bool params::build_proof = false;
129bool params::generate_LaTeX_proof = false;
130bool params::generate_LaTeX_tableau_proof = false;
131bool params::generate_graphviz_tableau_proof = false;
132bool params::latex_tableau_subs = false;
133bool params::graphviz_tableau_subs = false;
134bool params::sub_LaTeX_proof = false;
135bool params::sub_Graphviz_proof = false;
136int params::latex_truncation_length = 25;
137bool params::latex_tiny_proof = false;
138bool params::latex_include_matrix = true;
139string params::latex_height = "500mm";
140string params::latex_width = "500mm";
141float params::graphviz_height = 11.69;
142float params::graphviz_width = 8.27;
143bool params::latex_body_only = false;
144bool params::generate_Prolog_proof = false;
145bool params::generate_tptp_proof = false;
146bool params::tptp_proof_to_file = false;
147bool params::tptp_proof_no_subs = false;
148bool params::tptp_proof_show_paths = false;
149bool params::tptp_proof_show_subs = false;
150bool params::all_tptp_records = false;
151bool params::generate_sc_tptp_proof = false;
152//------------------------------------------------------------------
153// Assorted file paths.
154//------------------------------------------------------------------
155std::filesystem::path params::LaTeX_proof_path = "latex_proof.tex";
156std::filesystem::path params::LaTeX_tableau_proof_path = "latex_tableau_proof.tex";
157std::filesystem::path params::graphviz_tableau_proof_path = "graphviz_tableau_proof.dot";
158std::filesystem::path params::Prolog_matrix_path = "matrix.pl";
159std::filesystem::path params::Prolog_proof_path = "proof.pl";
160std::filesystem::path params::output_summary_path = "output_summary.txt";
161std::filesystem::path params::schedule_path = ".";
162std::filesystem::path params::tptp_path = ".";
163std::filesystem::path params::tptp_proof_path = ".";
164std::filesystem::path params::pwd_path = ".";
165std::filesystem::path params::connectpp_path = ".";
166std::filesystem::path params::full_problem_path;
167//------------------------------------------------------------------
168// Default schedule.
169//------------------------------------------------------------------
170std::string params::default_schedule;
171
172void params::set_default_schedule() {
173 default_schedule = "10 --complete 7 ;\n";
174 default_schedule += "15 --conjecture-start --all-definitional ;\n";
175 default_schedule += "15 --no-definitional --restrict-start ;\n";
176 default_schedule += "10 --restrict-start --all-backtrack ;\n";
177 default_schedule += "5 --all-definitional ;\n";
178 default_schedule += "4 --conjecture-start --no-definitional ;\n";
179 default_schedule += "2 --all-definitional --restrict-start ;\n";
180 default_schedule += "2 --restrict-start ;\n";
181 default_schedule += "1 --conjecture-start --all-definitional --all-backtrack ;\n";
182 default_schedule += "4 --random-reorder --random-reorder-literals --conjecture-start --no-definitional --restrict-start ;\n";
183 default_schedule += "4 --random-reorder --random-reorder-literals --all-definitional --restrict-start ;\n";
184 default_schedule += "2 --random-reorder --random-reorder-literals --all-definitional --restrict-start ;\n";
185 default_schedule += "2 --random-reorder --random-reorder-literals --all-definitional --restrict-start ;\n";
186 default_schedule += "2 --random-reorder --random-reorder-literals --no-definitional ;\n";
187 default_schedule += "2 --random-reorder --random-reorder-literals --conjecture-start --all-definitional ;\n";
188 default_schedule += "2 --random-reorder --random-reorder-literals --conjecture-start --all-definitional ;\n";
189 default_schedule += "1 --random-reorder --random-reorder-literals --conjecture-start --all-definitional ;\n";
190 default_schedule += "1 --random-reorder --random-reorder-literals --conjecture-start --all-definitional ;\n";
191 default_schedule += "1 --random-reorder --random-reorder-literals --conjecture-start --no-definitional --restrict-start ;\n";
192 default_schedule += "1 --random-reorder --random-reorder-literals --conjecture-start --no-definitional --restrict-start ;\n";
193 default_schedule += "1 --random-reorder --random-reorder-literals --conjecture-start --no-definitional --restrict-start ;\n";
194 default_schedule += "1 --random-reorder --random-reorder-literals --conjecture-start --no-definitional --restrict-start --all-backtrack ;\n";
195 default_schedule += "1 --random-reorder --random-reorder-literals --conjecture-start --no-definitional --restrict-start --all-backtrack ;\n";
196 default_schedule += "1 --random-reorder --random-reorder-literals --all-definitional --restrict-start --all-backtrack ;\n";
197 default_schedule += "1 --random-reorder --random-reorder-literals --all-definitional --restrict-start ;\n";
198 default_schedule += "1 --random-reorder --random-reorder-literals --all-definitional --restrict-start ;\n";
199 default_schedule += "1 --random-reorder --random-reorder-literals --no-definitional ;\n";
200 default_schedule += "1 --random-reorder --random-reorder-literals --no-definitional ;\n";
201 default_schedule += "1 --random-reorder --random-reorder-literals --no-definitional --restrict-start --all-backtrack ;\n";
202 default_schedule += "0 --all-definitional --all-backtrack ;\n";
203}
204//------------------------------------------------------------------------
205bool params::show_clauses = false;
206//------------------------------------------------------------------
208 all_definitional = false;
209 no_definitional = false;
210
211 deterministic_reorder = false;
212 number_of_reorders = 0;
213 random_reorder = false;
214 random_reorder_literals = false;
215
216 start_depth = 2;
217 depth_increment = 1;
218
219 all_start = false;
220 all_pos_neg_start = false;
221 conjecture_start = false;
222 restrict_start = false;
223
224 use_regularity_test = true;
225
226 use_lemmata = true;
227 limit_lemmata = true;
228 limit_reductions = true;
229 limit_extensions = true;
230 limit_bt_all = true;
231 limit_bt_lemmas = true;
232 limit_bt_reductions = true;
233 limit_bt_extensions = true;
234 limit_bt_extensions_left_tree = true;
235
236 switch_to_complete = UINT32_MAX;
237}
238//------------------------------------------------------------------------
240 all_start = false;
241 all_pos_neg_start = true;
242 conjecture_start = false;
243 restrict_start = false;
244
245 limit_bt_all = false;
246 limit_bt_reductions = false;
247 limit_bt_extensions = false;
248 limit_bt_extensions_left_tree = false;
249}
250//------------------------------------------------------------------------
252 bool start_conditions_ok =
253 (all_pos_neg_start || all_start) && !restrict_start && !conjecture_start;
254
255 // You don't care about lemmas.
256 bool backtracking_ok =
257 !limit_bt_all && !limit_bt_reductions && !limit_bt_extensions &&
258 !limit_bt_extensions_left_tree;
259
260 return start_conditions_ok && backtracking_ok;
261}
262//------------------------------------------------------------------------
264 limit_bt_all = false;
265 limit_bt_lemmas = false;
266 limit_bt_reductions = false;
267 limit_bt_extensions = false;
268 limit_bt_extensions_left_tree = false;
269}
270//------------------------------------------------------------------------
272 return !all_start &&
273 !all_pos_neg_start &&
274 !conjecture_start &&
275 !restrict_start;
276}
277//------------------------------------------------------------------------
279 all_start = false;
280 all_pos_neg_start = true;
281 conjecture_start = false;
282 restrict_start = false;
283}
284//------------------------------------------------------------------------
286 all_start = true;
287 all_pos_neg_start = false;
288 conjecture_start = false;
289 restrict_start = false;
290}
291//------------------------------------------------------------------------
293 cout << std::boolalpha
294 << "all_definitional: " << all_definitional << endl
295 << "no_definitional: " << no_definitional << endl
296 << "all_start: " << all_start << endl
297 << "all_pos_neg_start: " << all_pos_neg_start << endl
298 << "conjecture_start: " << conjecture_start << endl
299 << "restrict_start: " << restrict_start << endl
300 << "limit_bt_all: " << limit_bt_all << endl
301 << "switch_to_complete: " << switch_to_complete
302 << std::noboolalpha;
303}
static void set_default_schedule_parameters()
Self-explanatory.
static void set_all_backtrack()
Self-explanatory.
static void set_all_start()
Self-explanatory.
static void set_complete_parameters()
Change the parameters to make the search complete.
static bool no_start_options()
Self-explanatory.
static void correct_missing_start_options()
Self-explanatory.
static bool search_is_complete()
Self-explanatory.
static void show_search_parameter_settings()
Give a detailed indication of what the parameters affecting the search are currently set to.