GCC Code Coverage Report
Directory: . Exec Total Coverage
File: build-coverage/src/options/quantifiers_options.cpp Lines: 34 989 3.4 %
Date: 2021-09-17 Branches: 34 1064 3.2 %

Line Exec Source
1
/******************************************************************************
2
 * Top contributors (to current version):
3
 *   Mathias Preiner, Aina Niemetz
4
 *
5
 * This file is part of the cvc5 project.
6
 *
7
 * Copyright (c) 2009-2021 by the authors listed in the file AUTHORS
8
 * in the top-level source directory and their institutional affiliations.
9
 * All rights reserved.  See the file COPYING in the top-level source
10
 * directory for licensing information.
11
 * ****************************************************************************
12
 *
13
 * Option template for option modules.
14
 *
15
 * For each <module>_options.toml configuration file, mkoptions.py
16
 * expands this template and generates a <module>_options.cpp file.
17
 */
18
#include "options/quantifiers_options.h"
19
20
#include <iostream>
21
22
#include "base/check.h"
23
#include "options/option_exception.h"
24
25
namespace cvc5::options {
26
27
// clang-format off
28
std::ostream& operator<<(std::ostream& os, CegisSampleMode mode)
29
{
30
  switch(mode)
31
  {
32
    case CegisSampleMode::NONE: return os << "CegisSampleMode::NONE";
33
    case CegisSampleMode::USE: return os << "CegisSampleMode::USE";
34
    case CegisSampleMode::TRUST: return os << "CegisSampleMode::TRUST";
35
    default: Unreachable();
36
  }
37
  return os;
38
}
39
3
CegisSampleMode stringToCegisSampleMode(const std::string& optarg)
40
{
41
3
  if (optarg == "none") return CegisSampleMode::NONE;
42
3
  else if (optarg == "use") return CegisSampleMode::USE;
43
1
  else if (optarg == "trust") return CegisSampleMode::TRUST;
44
  else if (optarg == "help")
45
  {
46
    std::cerr << R"FOOBAR(
47
  Modes for sampling with counterexample-guided inductive synthesis (CEGIS).
48
Available modes for --cegis-sample are:
49
+ none (default)
50
  Do not use sampling with CEGIS.
51
+ use
52
  Use sampling to accelerate CEGIS. This will rule out solutions for a
53
  conjecture when they are not satisfied by a sample point.
54
+ trust
55
  Trust that when a solution for a conjecture is always true under sampling,
56
  then it is indeed a solution. Note this option may print out spurious
57
  solutions for synthesis conjectures.
58
)FOOBAR";
59
    std::exit(1);
60
  }
61
  throw OptionException(std::string("unknown option for --cegis-sample: `") +
62
                        optarg + "'.  Try --cegis-sample=help.");
63
}
64
std::ostream& operator<<(std::ostream& os, CegqiBvIneqMode mode)
65
{
66
  switch(mode)
67
  {
68
    case CegqiBvIneqMode::KEEP: return os << "CegqiBvIneqMode::KEEP";
69
    case CegqiBvIneqMode::EQ_SLACK: return os << "CegqiBvIneqMode::EQ_SLACK";
70
    case CegqiBvIneqMode::EQ_BOUNDARY: return os << "CegqiBvIneqMode::EQ_BOUNDARY";
71
    default: Unreachable();
72
  }
73
  return os;
74
}
75
82
CegqiBvIneqMode stringToCegqiBvIneqMode(const std::string& optarg)
76
{
77
82
  if (optarg == "keep") return CegqiBvIneqMode::KEEP;
78
3
  else if (optarg == "eq-slack") return CegqiBvIneqMode::EQ_SLACK;
79
3
  else if (optarg == "eq-boundary") return CegqiBvIneqMode::EQ_BOUNDARY;
80
  else if (optarg == "help")
81
  {
82
    std::cerr << R"FOOBAR(
83
  Modes for handling bit-vector inequalities in counterexample-guided
84
  instantiation.
85
Available modes for --cegqi-bv-ineq are:
86
+ keep
87
  Solve for the inequality directly using side conditions for invertibility.
88
+ eq-slack
89
  Solve for the inequality using the slack value in the model, e.g., t > s
90
  becomes t = s + ( t-s )^M.
91
+ eq-boundary (default)
92
  Solve for the boundary point of the inequality, e.g., t > s becomes t = s+1.
93
)FOOBAR";
94
    std::exit(1);
95
  }
96
  throw OptionException(std::string("unknown option for --cegqi-bv-ineq: `") +
97
                        optarg + "'.  Try --cegqi-bv-ineq=help.");
98
}
99
std::ostream& operator<<(std::ostream& os, InstWhenMode mode)
100
{
101
  switch(mode)
102
  {
103
    case InstWhenMode::FULL: return os << "InstWhenMode::FULL";
104
    case InstWhenMode::FULL_LAST_CALL: return os << "InstWhenMode::FULL_LAST_CALL";
105
    case InstWhenMode::LAST_CALL: return os << "InstWhenMode::LAST_CALL";
106
    case InstWhenMode::FULL_DELAY_LAST_CALL: return os << "InstWhenMode::FULL_DELAY_LAST_CALL";
107
    case InstWhenMode::FULL_DELAY: return os << "InstWhenMode::FULL_DELAY";
108
    case InstWhenMode::PRE_FULL: return os << "InstWhenMode::PRE_FULL";
109
    default: Unreachable();
110
  }
111
  return os;
112
}
113
3
InstWhenMode stringToInstWhenMode(const std::string& optarg)
114
{
115
3
  if (optarg == "full") return InstWhenMode::FULL;
116
  else if (optarg == "full-last-call") return InstWhenMode::FULL_LAST_CALL;
117
  else if (optarg == "last-call") return InstWhenMode::LAST_CALL;
118
  else if (optarg == "full-delay-last-call") return InstWhenMode::FULL_DELAY_LAST_CALL;
119
  else if (optarg == "full-delay") return InstWhenMode::FULL_DELAY;
120
  else if (optarg == "pre-full") return InstWhenMode::PRE_FULL;
121
  else if (optarg == "help")
122
  {
123
    std::cerr << R"FOOBAR(
124
  Instantiation modes.
125
Available modes for --inst-when are:
126
+ full
127
  Run instantiation round at full effort, before theory combination.
128
+ full-last-call (default)
129
  Alternate running instantiation rounds at full effort and last call.  In other
130
  words, interleave instantiation and theory combination.
131
+ last-call
132
  Run instantiation at last call effort, after theory combination and and
133
  theories report sat.
134
+ full-delay-last-call
135
  Alternate running instantiation rounds at full effort after all other theories
136
  have finished, and last call.
137
+ full-delay
138
  Run instantiation round at full effort, before theory combination, after all
139
  other theories have finished.
140
+ pre-full
141
  Run instantiation round before full effort (possibly at standard effort).
142
)FOOBAR";
143
    std::exit(1);
144
  }
145
  throw OptionException(std::string("unknown option for --inst-when: `") +
146
                        optarg + "'.  Try --inst-when=help.");
147
}
148
std::ostream& operator<<(std::ostream& os, IteLiftQuantMode mode)
149
{
150
  switch(mode)
151
  {
152
    case IteLiftQuantMode::ALL: return os << "IteLiftQuantMode::ALL";
153
    case IteLiftQuantMode::NONE: return os << "IteLiftQuantMode::NONE";
154
    case IteLiftQuantMode::SIMPLE: return os << "IteLiftQuantMode::SIMPLE";
155
    default: Unreachable();
156
  }
157
  return os;
158
}
159
IteLiftQuantMode stringToIteLiftQuantMode(const std::string& optarg)
160
{
161
  if (optarg == "all") return IteLiftQuantMode::ALL;
162
  else if (optarg == "none") return IteLiftQuantMode::NONE;
163
  else if (optarg == "simple") return IteLiftQuantMode::SIMPLE;
164
  else if (optarg == "help")
165
  {
166
    std::cerr << R"FOOBAR(
167
  ITE lifting modes for quantified formulas.
168
Available modes for --ite-lift-quant are:
169
+ all
170
  Lift if-then-else in quantified formulas.
171
+ none
172
  Do not lift if-then-else in quantified formulas.
173
+ simple (default)
174
  Lift if-then-else in quantified formulas if results in smaller term size.
175
)FOOBAR";
176
    std::exit(1);
177
  }
178
  throw OptionException(std::string("unknown option for --ite-lift-quant: `") +
179
                        optarg + "'.  Try --ite-lift-quant=help.");
180
}
181
std::ostream& operator<<(std::ostream& os, LiteralMatchMode mode)
182
{
183
  switch(mode)
184
  {
185
    case LiteralMatchMode::AGG: return os << "LiteralMatchMode::AGG";
186
    case LiteralMatchMode::NONE: return os << "LiteralMatchMode::NONE";
187
    case LiteralMatchMode::USE: return os << "LiteralMatchMode::USE";
188
    case LiteralMatchMode::AGG_PREDICATE: return os << "LiteralMatchMode::AGG_PREDICATE";
189
    default: Unreachable();
190
  }
191
  return os;
192
}
193
LiteralMatchMode stringToLiteralMatchMode(const std::string& optarg)
194
{
195
  if (optarg == "agg") return LiteralMatchMode::AGG;
196
  else if (optarg == "none") return LiteralMatchMode::NONE;
197
  else if (optarg == "use") return LiteralMatchMode::USE;
198
  else if (optarg == "agg-predicate") return LiteralMatchMode::AGG_PREDICATE;
199
  else if (optarg == "help")
200
  {
201
    std::cerr << R"FOOBAR(
202
  Literal match modes.
203
Available modes for --literal-matching are:
204
+ agg
205
  Consider the phase requirements aggressively for all triggers.
206
+ none
207
  Do not use literal matching.
208
+ use (default)
209
  Consider phase requirements of triggers conservatively. For example, the
210
  trigger P( x ) in forall( x ). ( P( x ) V ~Q( x ) ) will not be matched with
211
  terms in the equivalence class of true, and likewise Q( x ) will not be
212
  matched terms in the equivalence class of false. Extends to equality.
213
+ agg-predicate
214
  Consider phase requirements aggressively for predicates. In the above example,
215
  only match P( x ) with terms that are in the equivalence class of false.
216
)FOOBAR";
217
    std::exit(1);
218
  }
219
  throw OptionException(std::string("unknown option for --literal-matching: `") +
220
                        optarg + "'.  Try --literal-matching=help.");
221
}
222
std::ostream& operator<<(std::ostream& os, MacrosQuantMode mode)
223
{
224
  switch(mode)
225
  {
226
    case MacrosQuantMode::ALL: return os << "MacrosQuantMode::ALL";
227
    case MacrosQuantMode::GROUND_UF: return os << "MacrosQuantMode::GROUND_UF";
228
    case MacrosQuantMode::GROUND: return os << "MacrosQuantMode::GROUND";
229
    default: Unreachable();
230
  }
231
  return os;
232
}
233
2
MacrosQuantMode stringToMacrosQuantMode(const std::string& optarg)
234
{
235
2
  if (optarg == "all") return MacrosQuantMode::ALL;
236
2
  else if (optarg == "ground-uf") return MacrosQuantMode::GROUND_UF;
237
2
  else if (optarg == "ground") return MacrosQuantMode::GROUND;
238
  else if (optarg == "help")
239
  {
240
    std::cerr << R"FOOBAR(
241
  Modes for quantifiers macro expansion.
242
Available modes for --macros-quant-mode are:
243
+ all
244
  Infer definitions for functions, including those containing quantified
245
  formulas.
246
+ ground-uf (default)
247
  Only infer ground definitions for functions that result in triggers for all
248
  free variables.
249
+ ground
250
  Only infer ground definitions for functions.
251
)FOOBAR";
252
    std::exit(1);
253
  }
254
  throw OptionException(std::string("unknown option for --macros-quant-mode: `") +
255
                        optarg + "'.  Try --macros-quant-mode=help.");
256
}
257
std::ostream& operator<<(std::ostream& os, MbqiMode mode)
258
{
259
  switch(mode)
260
  {
261
    case MbqiMode::NONE: return os << "MbqiMode::NONE";
262
    case MbqiMode::TRUST: return os << "MbqiMode::TRUST";
263
    case MbqiMode::FMC: return os << "MbqiMode::FMC";
264
    default: Unreachable();
265
  }
266
  return os;
267
}
268
MbqiMode stringToMbqiMode(const std::string& optarg)
269
{
270
  if (optarg == "none") return MbqiMode::NONE;
271
  else if (optarg == "trust") return MbqiMode::TRUST;
272
  else if (optarg == "fmc") return MbqiMode::FMC;
273
  else if (optarg == "help")
274
  {
275
    std::cerr << R"FOOBAR(
276
  Model-based quantifier instantiation modes.
277
Available modes for --mbqi are:
278
+ none
279
  Disable model-based quantifier instantiation.
280
+ trust
281
  Do not instantiate quantified formulas (incomplete technique).
282
+ fmc (default)
283
  Use algorithm from Section 5.4.2 of thesis Finite Model Finding in
284
  Satisfiability Modulo Theories.
285
)FOOBAR";
286
    std::exit(1);
287
  }
288
  throw OptionException(std::string("unknown option for --mbqi: `") +
289
                        optarg + "'.  Try --mbqi=help.");
290
}
291
std::ostream& operator<<(std::ostream& os, PrenexQuantMode mode)
292
{
293
  switch(mode)
294
  {
295
    case PrenexQuantMode::NONE: return os << "PrenexQuantMode::NONE";
296
    case PrenexQuantMode::SIMPLE: return os << "PrenexQuantMode::SIMPLE";
297
    case PrenexQuantMode::NORMAL: return os << "PrenexQuantMode::NORMAL";
298
    default: Unreachable();
299
  }
300
  return os;
301
}
302
PrenexQuantMode stringToPrenexQuantMode(const std::string& optarg)
303
{
304
  if (optarg == "none") return PrenexQuantMode::NONE;
305
  else if (optarg == "simple") return PrenexQuantMode::SIMPLE;
306
  else if (optarg == "norm") return PrenexQuantMode::NORMAL;
307
  else if (optarg == "help")
308
  {
309
    std::cerr << R"FOOBAR(
310
  Prenex quantifiers modes.
311
Available modes for --prenex-quant are:
312
+ none
313
  Do no prenex nested quantifiers.
314
+ simple (default)
315
  Do simple prenexing of same sign quantifiers.
316
+ norm
317
  Prenex to prenex normal form.
318
)FOOBAR";
319
    std::exit(1);
320
  }
321
  throw OptionException(std::string("unknown option for --prenex-quant: `") +
322
                        optarg + "'.  Try --prenex-quant=help.");
323
}
324
std::ostream& operator<<(std::ostream& os, QcfMode mode)
325
{
326
  switch(mode)
327
  {
328
    case QcfMode::CONFLICT_ONLY: return os << "QcfMode::CONFLICT_ONLY";
329
    case QcfMode::PARTIAL: return os << "QcfMode::PARTIAL";
330
    case QcfMode::PROP_EQ: return os << "QcfMode::PROP_EQ";
331
    default: Unreachable();
332
  }
333
  return os;
334
}
335
QcfMode stringToQcfMode(const std::string& optarg)
336
{
337
  if (optarg == "conflict") return QcfMode::CONFLICT_ONLY;
338
  else if (optarg == "partial") return QcfMode::PARTIAL;
339
  else if (optarg == "prop-eq") return QcfMode::PROP_EQ;
340
  else if (optarg == "help")
341
  {
342
    std::cerr << R"FOOBAR(
343
  Quantifier conflict find modes.
344
Available modes for --quant-cf-mode are:
345
+ conflict
346
  Apply QCF algorithm to find conflicts only.
347
+ partial
348
  Use QCF for conflicts, propagations and heuristic instantiations.
349
+ prop-eq (default)
350
  Apply QCF algorithm to propagate equalities as well as conflicts.
351
)FOOBAR";
352
    std::exit(1);
353
  }
354
  throw OptionException(std::string("unknown option for --quant-cf-mode: `") +
355
                        optarg + "'.  Try --quant-cf-mode=help.");
356
}
357
std::ostream& operator<<(std::ostream& os, QcfWhenMode mode)
358
{
359
  switch(mode)
360
  {
361
    case QcfWhenMode::LAST_CALL: return os << "QcfWhenMode::LAST_CALL";
362
    case QcfWhenMode::STD: return os << "QcfWhenMode::STD";
363
    case QcfWhenMode::DEFAULT: return os << "QcfWhenMode::DEFAULT";
364
    case QcfWhenMode::STD_H: return os << "QcfWhenMode::STD_H";
365
    default: Unreachable();
366
  }
367
  return os;
368
}
369
QcfWhenMode stringToQcfWhenMode(const std::string& optarg)
370
{
371
  if (optarg == "last-call") return QcfWhenMode::LAST_CALL;
372
  else if (optarg == "std") return QcfWhenMode::STD;
373
  else if (optarg == "default") return QcfWhenMode::DEFAULT;
374
  else if (optarg == "std-h") return QcfWhenMode::STD_H;
375
  else if (optarg == "help")
376
  {
377
    std::cerr << R"FOOBAR(
378
  Quantifier conflict find modes.
379
Available modes for --quant-cf-when are:
380
+ last-call
381
  Apply conflict finding at last call, after theory combination and and all
382
  theories report sat.
383
+ std
384
  Apply conflict finding at standard effort.
385
+ default
386
  Default, apply conflict finding at full effort.
387
+ std-h
388
  Apply conflict finding at standard effort when heuristic says to.
389
)FOOBAR";
390
    std::exit(1);
391
  }
392
  throw OptionException(std::string("unknown option for --quant-cf-when: `") +
393
                        optarg + "'.  Try --quant-cf-when=help.");
394
}
395
std::ostream& operator<<(std::ostream& os, QuantDSplitMode mode)
396
{
397
  switch(mode)
398
  {
399
    case QuantDSplitMode::AGG: return os << "QuantDSplitMode::AGG";
400
    case QuantDSplitMode::NONE: return os << "QuantDSplitMode::NONE";
401
    case QuantDSplitMode::DEFAULT: return os << "QuantDSplitMode::DEFAULT";
402
    default: Unreachable();
403
  }
404
  return os;
405
}
406
QuantDSplitMode stringToQuantDSplitMode(const std::string& optarg)
407
{
408
  if (optarg == "agg") return QuantDSplitMode::AGG;
409
  else if (optarg == "none") return QuantDSplitMode::NONE;
410
  else if (optarg == "default") return QuantDSplitMode::DEFAULT;
411
  else if (optarg == "help")
412
  {
413
    std::cerr << R"FOOBAR(
414
  Modes for quantifiers splitting.
415
Available modes for --quant-dsplit-mode are:
416
+ agg
417
  Aggressively split quantified formulas.
418
+ none
419
  Never split quantified formulas.
420
+ default
421
  Split quantified formulas over some finite datatypes when finite model finding
422
  is enabled.
423
)FOOBAR";
424
    std::exit(1);
425
  }
426
  throw OptionException(std::string("unknown option for --quant-dsplit-mode: `") +
427
                        optarg + "'.  Try --quant-dsplit-mode=help.");
428
}
429
std::ostream& operator<<(std::ostream& os, QuantRepMode mode)
430
{
431
  switch(mode)
432
  {
433
    case QuantRepMode::FIRST: return os << "QuantRepMode::FIRST";
434
    case QuantRepMode::EE: return os << "QuantRepMode::EE";
435
    case QuantRepMode::DEPTH: return os << "QuantRepMode::DEPTH";
436
    default: Unreachable();
437
  }
438
  return os;
439
}
440
QuantRepMode stringToQuantRepMode(const std::string& optarg)
441
{
442
  if (optarg == "first") return QuantRepMode::FIRST;
443
  else if (optarg == "ee") return QuantRepMode::EE;
444
  else if (optarg == "depth") return QuantRepMode::DEPTH;
445
  else if (optarg == "help")
446
  {
447
    std::cerr << R"FOOBAR(
448
  Modes for quantifiers representative selection.
449
Available modes for --quant-rep-mode are:
450
+ first (default)
451
  Choose terms that appear first.
452
+ ee
453
  Let equality engine choose representatives.
454
+ depth
455
  Choose terms that are of minimal depth.
456
)FOOBAR";
457
    std::exit(1);
458
  }
459
  throw OptionException(std::string("unknown option for --quant-rep-mode: `") +
460
                        optarg + "'.  Try --quant-rep-mode=help.");
461
}
462
std::ostream& operator<<(std::ostream& os, SygusActiveGenMode mode)
463
{
464
  switch(mode)
465
  {
466
    case SygusActiveGenMode::ENUM_BASIC: return os << "SygusActiveGenMode::ENUM_BASIC";
467
    case SygusActiveGenMode::NONE: return os << "SygusActiveGenMode::NONE";
468
    case SygusActiveGenMode::AUTO: return os << "SygusActiveGenMode::AUTO";
469
    case SygusActiveGenMode::VAR_AGNOSTIC: return os << "SygusActiveGenMode::VAR_AGNOSTIC";
470
    case SygusActiveGenMode::ENUM: return os << "SygusActiveGenMode::ENUM";
471
    default: Unreachable();
472
  }
473
  return os;
474
}
475
14
SygusActiveGenMode stringToSygusActiveGenMode(const std::string& optarg)
476
{
477
14
  if (optarg == "basic") return SygusActiveGenMode::ENUM_BASIC;
478
14
  else if (optarg == "none") return SygusActiveGenMode::NONE;
479
11
  else if (optarg == "auto") return SygusActiveGenMode::AUTO;
480
11
  else if (optarg == "var-agnostic") return SygusActiveGenMode::VAR_AGNOSTIC;
481
10
  else if (optarg == "enum") return SygusActiveGenMode::ENUM;
482
  else if (optarg == "help")
483
  {
484
    std::cerr << R"FOOBAR(
485
  Modes for actively-generated sygus enumerators.
486
Available modes for --sygus-active-gen are:
487
+ basic
488
  Use basic type enumerator for actively-generated sygus enumerators.
489
+ none
490
  Do not use actively-generated sygus enumerators.
491
+ auto (default)
492
  Internally decide the best policy for each enumerator.
493
+ var-agnostic
494
  Use sygus solver to enumerate terms that are agnostic to variables.
495
+ enum
496
  Use optimized enumerator for actively-generated sygus enumerators.
497
)FOOBAR";
498
    std::exit(1);
499
  }
500
  throw OptionException(std::string("unknown option for --sygus-active-gen: `") +
501
                        optarg + "'.  Try --sygus-active-gen=help.");
502
}
503
std::ostream& operator<<(std::ostream& os, SygusFilterSolMode mode)
504
{
505
  switch(mode)
506
  {
507
    case SygusFilterSolMode::STRONG: return os << "SygusFilterSolMode::STRONG";
508
    case SygusFilterSolMode::NONE: return os << "SygusFilterSolMode::NONE";
509
    case SygusFilterSolMode::WEAK: return os << "SygusFilterSolMode::WEAK";
510
    default: Unreachable();
511
  }
512
  return os;
513
}
514
SygusFilterSolMode stringToSygusFilterSolMode(const std::string& optarg)
515
{
516
  if (optarg == "strong") return SygusFilterSolMode::STRONG;
517
  else if (optarg == "none") return SygusFilterSolMode::NONE;
518
  else if (optarg == "weak") return SygusFilterSolMode::WEAK;
519
  else if (optarg == "help")
520
  {
521
    std::cerr << R"FOOBAR(
522
  Modes for filtering sygus solutions.
523
Available modes for --sygus-filter-sol are:
524
+ strong
525
  Filter solutions that are logically stronger than others.
526
+ none (default)
527
  Do not filter sygus solutions.
528
+ weak
529
  Filter solutions that are logically weaker than others.
530
)FOOBAR";
531
    std::exit(1);
532
  }
533
  throw OptionException(std::string("unknown option for --sygus-filter-sol: `") +
534
                        optarg + "'.  Try --sygus-filter-sol=help.");
535
}
536
std::ostream& operator<<(std::ostream& os, SygusGrammarConsMode mode)
537
{
538
  switch(mode)
539
  {
540
    case SygusGrammarConsMode::ANY_CONST: return os << "SygusGrammarConsMode::ANY_CONST";
541
    case SygusGrammarConsMode::ANY_TERM_CONCISE: return os << "SygusGrammarConsMode::ANY_TERM_CONCISE";
542
    case SygusGrammarConsMode::SIMPLE: return os << "SygusGrammarConsMode::SIMPLE";
543
    case SygusGrammarConsMode::ANY_TERM: return os << "SygusGrammarConsMode::ANY_TERM";
544
    default: Unreachable();
545
  }
546
  return os;
547
}
548
6
SygusGrammarConsMode stringToSygusGrammarConsMode(const std::string& optarg)
549
{
550
6
  if (optarg == "any-const") return SygusGrammarConsMode::ANY_CONST;
551
4
  else if (optarg == "any-term-concise") return SygusGrammarConsMode::ANY_TERM_CONCISE;
552
2
  else if (optarg == "simple") return SygusGrammarConsMode::SIMPLE;
553
2
  else if (optarg == "any-term") return SygusGrammarConsMode::ANY_TERM;
554
  else if (optarg == "help")
555
  {
556
    std::cerr << R"FOOBAR(
557
  Modes for default SyGuS grammars.
558
Available modes for --sygus-grammar-cons are:
559
+ any-const
560
  Use symoblic constant constructors.
561
+ any-term-concise
562
  When applicable, use constructors corresponding to any symbolic term, favoring
563
  conciseness over generality. This option is equivalent to any-term but enables
564
  a polynomial grammar for arithmetic when not in a combined theory.
565
+ simple (default)
566
  Use simple grammar construction (no symbolic terms or constants).
567
+ any-term
568
  When applicable, use constructors corresponding to any symbolic term. This
569
  option enables a sum-of-monomials grammar for arithmetic. For all other types,
570
  it enables symbolic constant constructors.
571
)FOOBAR";
572
    std::exit(1);
573
  }
574
  throw OptionException(std::string("unknown option for --sygus-grammar-cons: `") +
575
                        optarg + "'.  Try --sygus-grammar-cons=help.");
576
}
577
std::ostream& operator<<(std::ostream& os, SygusInstMode mode)
578
{
579
  switch(mode)
580
  {
581
    case SygusInstMode::PRIORITY_EVAL: return os << "SygusInstMode::PRIORITY_EVAL";
582
    case SygusInstMode::PRIORITY_INST: return os << "SygusInstMode::PRIORITY_INST";
583
    case SygusInstMode::INTERLEAVE: return os << "SygusInstMode::INTERLEAVE";
584
    default: Unreachable();
585
  }
586
  return os;
587
}
588
SygusInstMode stringToSygusInstMode(const std::string& optarg)
589
{
590
  if (optarg == "priority-eval") return SygusInstMode::PRIORITY_EVAL;
591
  else if (optarg == "priority-inst") return SygusInstMode::PRIORITY_INST;
592
  else if (optarg == "interleave") return SygusInstMode::INTERLEAVE;
593
  else if (optarg == "help")
594
  {
595
    std::cerr << R"FOOBAR(
596
  SyGuS instantiation lemma modes.
597
Available modes for --sygus-inst-mode are:
598
+ priority-eval
599
  add evaluation unfolding lemma first, add instantiation lemma if unfolding
600
  lemmas already added.
601
+ priority-inst (default)
602
  add instantiation lemmas first, add evaluation unfolding if instantiation
603
  fails.
604
+ interleave
605
  add instantiation and evaluation unfolding lemmas in the same step.
606
)FOOBAR";
607
    std::exit(1);
608
  }
609
  throw OptionException(std::string("unknown option for --sygus-inst-mode: `") +
610
                        optarg + "'.  Try --sygus-inst-mode=help.");
611
}
612
std::ostream& operator<<(std::ostream& os, SygusInstScope mode)
613
{
614
  switch(mode)
615
  {
616
    case SygusInstScope::BOTH: return os << "SygusInstScope::BOTH";
617
    case SygusInstScope::IN: return os << "SygusInstScope::IN";
618
    case SygusInstScope::OUT: return os << "SygusInstScope::OUT";
619
    default: Unreachable();
620
  }
621
  return os;
622
}
623
SygusInstScope stringToSygusInstScope(const std::string& optarg)
624
{
625
  if (optarg == "both") return SygusInstScope::BOTH;
626
  else if (optarg == "in") return SygusInstScope::IN;
627
  else if (optarg == "out") return SygusInstScope::OUT;
628
  else if (optarg == "help")
629
  {
630
    std::cerr << R"FOOBAR(
631
  scope for collecting ground terms for the grammar.
632
Available modes for --sygus-inst-scope are:
633
+ both
634
  combines inside and outside.
635
+ in (default)
636
  use ground terms inside given quantified formula only.
637
+ out
638
  use ground terms outside of quantified formulas only.
639
)FOOBAR";
640
    std::exit(1);
641
  }
642
  throw OptionException(std::string("unknown option for --sygus-inst-scope: `") +
643
                        optarg + "'.  Try --sygus-inst-scope=help.");
644
}
645
std::ostream& operator<<(std::ostream& os, SygusInstTermSelMode mode)
646
{
647
  switch(mode)
648
  {
649
    case SygusInstTermSelMode::MIN: return os << "SygusInstTermSelMode::MIN";
650
    case SygusInstTermSelMode::BOTH: return os << "SygusInstTermSelMode::BOTH";
651
    case SygusInstTermSelMode::MAX: return os << "SygusInstTermSelMode::MAX";
652
    default: Unreachable();
653
  }
654
  return os;
655
}
656
SygusInstTermSelMode stringToSygusInstTermSelMode(const std::string& optarg)
657
{
658
  if (optarg == "min") return SygusInstTermSelMode::MIN;
659
  else if (optarg == "both") return SygusInstTermSelMode::BOTH;
660
  else if (optarg == "max") return SygusInstTermSelMode::MAX;
661
  else if (optarg == "help")
662
  {
663
    std::cerr << R"FOOBAR(
664
  Ground term selection modes.
665
Available modes for --sygus-inst-term-sel are:
666
+ min (default)
667
  collect minimal ground terms only.
668
+ both
669
  combines minimal and maximal .
670
+ max
671
  collect maximal ground terms only.
672
)FOOBAR";
673
    std::exit(1);
674
  }
675
  throw OptionException(std::string("unknown option for --sygus-inst-term-sel: `") +
676
                        optarg + "'.  Try --sygus-inst-term-sel=help.");
677
}
678
std::ostream& operator<<(std::ostream& os, SygusInvTemplMode mode)
679
{
680
  switch(mode)
681
  {
682
    case SygusInvTemplMode::PRE: return os << "SygusInvTemplMode::PRE";
683
    case SygusInvTemplMode::POST: return os << "SygusInvTemplMode::POST";
684
    case SygusInvTemplMode::NONE: return os << "SygusInvTemplMode::NONE";
685
    default: Unreachable();
686
  }
687
  return os;
688
}
689
3
SygusInvTemplMode stringToSygusInvTemplMode(const std::string& optarg)
690
{
691
3
  if (optarg == "pre") return SygusInvTemplMode::PRE;
692
2
  else if (optarg == "post") return SygusInvTemplMode::POST;
693
  else if (optarg == "none") return SygusInvTemplMode::NONE;
694
  else if (optarg == "help")
695
  {
696
    std::cerr << R"FOOBAR(
697
  Template modes for sygus invariant synthesis.
698
Available modes for --sygus-inv-templ are:
699
+ pre
700
  Synthesize invariant based on weakening of precondition.
701
+ post (default)
702
  Synthesize invariant based on strengthening of postcondition.
703
+ none
704
  Synthesize invariant directly.
705
)FOOBAR";
706
    std::exit(1);
707
  }
708
  throw OptionException(std::string("unknown option for --sygus-inv-templ: `") +
709
                        optarg + "'.  Try --sygus-inv-templ=help.");
710
}
711
std::ostream& operator<<(std::ostream& os, SygusQueryDumpFilesMode mode)
712
{
713
  switch(mode)
714
  {
715
    case SygusQueryDumpFilesMode::ALL: return os << "SygusQueryDumpFilesMode::ALL";
716
    case SygusQueryDumpFilesMode::NONE: return os << "SygusQueryDumpFilesMode::NONE";
717
    case SygusQueryDumpFilesMode::UNSOLVED: return os << "SygusQueryDumpFilesMode::UNSOLVED";
718
    default: Unreachable();
719
  }
720
  return os;
721
}
722
SygusQueryDumpFilesMode stringToSygusQueryDumpFilesMode(const std::string& optarg)
723
{
724
  if (optarg == "all") return SygusQueryDumpFilesMode::ALL;
725
  else if (optarg == "none") return SygusQueryDumpFilesMode::NONE;
726
  else if (optarg == "unsolved") return SygusQueryDumpFilesMode::UNSOLVED;
727
  else if (optarg == "help")
728
  {
729
    std::cerr << R"FOOBAR(
730
  Query file options.
731
Available modes for --sygus-query-gen-dump-files are:
732
+ all
733
  Dump all query files.
734
+ none (default)
735
  Do not dump query files when using --sygus-query-gen.
736
+ unsolved
737
  Dump query files that the subsolver did not solve.
738
)FOOBAR";
739
    std::exit(1);
740
  }
741
  throw OptionException(std::string("unknown option for --sygus-query-gen-dump-files: `") +
742
                        optarg + "'.  Try --sygus-query-gen-dump-files=help.");
743
}
744
std::ostream& operator<<(std::ostream& os, CegqiSingleInvMode mode)
745
{
746
  switch(mode)
747
  {
748
    case CegqiSingleInvMode::ALL: return os << "CegqiSingleInvMode::ALL";
749
    case CegqiSingleInvMode::NONE: return os << "CegqiSingleInvMode::NONE";
750
    case CegqiSingleInvMode::USE: return os << "CegqiSingleInvMode::USE";
751
    default: Unreachable();
752
  }
753
  return os;
754
}
755
47
CegqiSingleInvMode stringToCegqiSingleInvMode(const std::string& optarg)
756
{
757
47
  if (optarg == "all") return CegqiSingleInvMode::ALL;
758
22
  else if (optarg == "none") return CegqiSingleInvMode::NONE;
759
  else if (optarg == "use") return CegqiSingleInvMode::USE;
760
  else if (optarg == "help")
761
  {
762
    std::cerr << R"FOOBAR(
763
  Modes for single invocation techniques.
764
Available modes for --sygus-si are:
765
+ all
766
  Always use single invocation techniques.
767
+ none (default)
768
  Do not use single invocation techniques.
769
+ use
770
  Use single invocation techniques only if grammar is not restrictive.
771
)FOOBAR";
772
    std::exit(1);
773
  }
774
  throw OptionException(std::string("unknown option for --sygus-si: `") +
775
                        optarg + "'.  Try --sygus-si=help.");
776
}
777
std::ostream& operator<<(std::ostream& os, CegqiSingleInvRconsMode mode)
778
{
779
  switch(mode)
780
  {
781
    case CegqiSingleInvRconsMode::TRY: return os << "CegqiSingleInvRconsMode::TRY";
782
    case CegqiSingleInvRconsMode::ALL: return os << "CegqiSingleInvRconsMode::ALL";
783
    case CegqiSingleInvRconsMode::NONE: return os << "CegqiSingleInvRconsMode::NONE";
784
    case CegqiSingleInvRconsMode::ALL_LIMIT: return os << "CegqiSingleInvRconsMode::ALL_LIMIT";
785
    default: Unreachable();
786
  }
787
  return os;
788
}
789
CegqiSingleInvRconsMode stringToCegqiSingleInvRconsMode(const std::string& optarg)
790
{
791
  if (optarg == "try") return CegqiSingleInvRconsMode::TRY;
792
  else if (optarg == "all") return CegqiSingleInvRconsMode::ALL;
793
  else if (optarg == "none") return CegqiSingleInvRconsMode::NONE;
794
  else if (optarg == "all-limit") return CegqiSingleInvRconsMode::ALL_LIMIT;
795
  else if (optarg == "help")
796
  {
797
    std::cerr << R"FOOBAR(
798
  Modes for reconstruction solutions while using single invocation techniques.
799
Available modes for --sygus-si-rcons are:
800
+ try
801
  Try to reconstruct solutions in the original grammar when using single
802
  invocation techniques in an incomplete (fail-fast) manner.
803
+ all
804
  Try to reconstruct solutions in the original grammar. In this mode, we do not
805
  terminate until a solution is successfully reconstructed.
806
+ none
807
  Do not try to reconstruct solutions in the original (user-provided) grammar
808
  when using single invocation techniques. In this mode, solutions produced by
809
  cvc5 may violate grammar restrictions.
810
+ all-limit (default)
811
  Try to reconstruct solutions in the original grammar, but termintate if a
812
  maximum number of rounds for reconstruction is exceeded.
813
)FOOBAR";
814
    std::exit(1);
815
  }
816
  throw OptionException(std::string("unknown option for --sygus-si-rcons: `") +
817
                        optarg + "'.  Try --sygus-si-rcons=help.");
818
}
819
std::ostream& operator<<(std::ostream& os, SygusUnifPiMode mode)
820
{
821
  switch(mode)
822
  {
823
    case SygusUnifPiMode::COMPLETE: return os << "SygusUnifPiMode::COMPLETE";
824
    case SygusUnifPiMode::NONE: return os << "SygusUnifPiMode::NONE";
825
    case SygusUnifPiMode::CENUM_IGAIN: return os << "SygusUnifPiMode::CENUM_IGAIN";
826
    case SygusUnifPiMode::CENUM: return os << "SygusUnifPiMode::CENUM";
827
    default: Unreachable();
828
  }
829
  return os;
830
}
831
9
SygusUnifPiMode stringToSygusUnifPiMode(const std::string& optarg)
832
{
833
9
  if (optarg == "complete") return SygusUnifPiMode::COMPLETE;
834
  else if (optarg == "none") return SygusUnifPiMode::NONE;
835
  else if (optarg == "cond-enum-igain") return SygusUnifPiMode::CENUM_IGAIN;
836
  else if (optarg == "cond-enum") return SygusUnifPiMode::CENUM;
837
  else if (optarg == "help")
838
  {
839
    std::cerr << R"FOOBAR(
840
  Modes for piecewise-independent unification.
841
Available modes for --sygus-unif-pi are:
842
+ complete
843
  Use complete approach for piecewise-independent unification (see Section 3 of
844
  Barbosa et al FMCAD 2019)
845
+ none (default)
846
  Do not use piecewise-independent unification.
847
+ cond-enum-igain
848
  Same as cond-enum, but additionally uses an information gain heuristic when
849
  doing decision tree learning.
850
+ cond-enum
851
  Use unconstrained condition enumeration for piecewise-independent unification
852
  (see Section 4 of Barbosa et al FMCAD 2019).
853
)FOOBAR";
854
    std::exit(1);
855
  }
856
  throw OptionException(std::string("unknown option for --sygus-unif-pi: `") +
857
                        optarg + "'.  Try --sygus-unif-pi=help.");
858
}
859
std::ostream& operator<<(std::ostream& os, TermDbMode mode)
860
{
861
  switch(mode)
862
  {
863
    case TermDbMode::ALL: return os << "TermDbMode::ALL";
864
    case TermDbMode::RELEVANT: return os << "TermDbMode::RELEVANT";
865
    default: Unreachable();
866
  }
867
  return os;
868
}
869
TermDbMode stringToTermDbMode(const std::string& optarg)
870
{
871
  if (optarg == "all") return TermDbMode::ALL;
872
  else if (optarg == "relevant") return TermDbMode::RELEVANT;
873
  else if (optarg == "help")
874
  {
875
    std::cerr << R"FOOBAR(
876
  Modes for terms included in the quantifiers term database.
877
Available modes for --term-db-mode are:
878
+ all (default)
879
  Quantifiers module considers all ground terms.
880
+ relevant
881
  Quantifiers module considers only ground terms connected to current
882
  assertions.
883
)FOOBAR";
884
    std::exit(1);
885
  }
886
  throw OptionException(std::string("unknown option for --term-db-mode: `") +
887
                        optarg + "'.  Try --term-db-mode=help.");
888
}
889
std::ostream& operator<<(std::ostream& os, TriggerActiveSelMode mode)
890
{
891
  switch(mode)
892
  {
893
    case TriggerActiveSelMode::MIN: return os << "TriggerActiveSelMode::MIN";
894
    case TriggerActiveSelMode::ALL: return os << "TriggerActiveSelMode::ALL";
895
    case TriggerActiveSelMode::MAX: return os << "TriggerActiveSelMode::MAX";
896
    default: Unreachable();
897
  }
898
  return os;
899
}
900
TriggerActiveSelMode stringToTriggerActiveSelMode(const std::string& optarg)
901
{
902
  if (optarg == "min") return TriggerActiveSelMode::MIN;
903
  else if (optarg == "all") return TriggerActiveSelMode::ALL;
904
  else if (optarg == "max") return TriggerActiveSelMode::MAX;
905
  else if (optarg == "help")
906
  {
907
    std::cerr << R"FOOBAR(
908
  Trigger active selection modes.
909
Available modes for --trigger-active-sel are:
910
+ min
911
  Activate triggers with minimal ground terms.
912
+ all (default)
913
  Make all triggers active.
914
+ max
915
  Activate triggers with maximal ground terms.
916
)FOOBAR";
917
    std::exit(1);
918
  }
919
  throw OptionException(std::string("unknown option for --trigger-active-sel: `") +
920
                        optarg + "'.  Try --trigger-active-sel=help.");
921
}
922
std::ostream& operator<<(std::ostream& os, TriggerSelMode mode)
923
{
924
  switch(mode)
925
  {
926
    case TriggerSelMode::MIN: return os << "TriggerSelMode::MIN";
927
    case TriggerSelMode::MIN_SINGLE_MAX: return os << "TriggerSelMode::MIN_SINGLE_MAX";
928
    case TriggerSelMode::ALL: return os << "TriggerSelMode::ALL";
929
    case TriggerSelMode::MIN_SINGLE_ALL: return os << "TriggerSelMode::MIN_SINGLE_ALL";
930
    case TriggerSelMode::MAX: return os << "TriggerSelMode::MAX";
931
    default: Unreachable();
932
  }
933
  return os;
934
}
935
TriggerSelMode stringToTriggerSelMode(const std::string& optarg)
936
{
937
  if (optarg == "min") return TriggerSelMode::MIN;
938
  else if (optarg == "min-s-max") return TriggerSelMode::MIN_SINGLE_MAX;
939
  else if (optarg == "all") return TriggerSelMode::ALL;
940
  else if (optarg == "min-s-all") return TriggerSelMode::MIN_SINGLE_ALL;
941
  else if (optarg == "max") return TriggerSelMode::MAX;
942
  else if (optarg == "help")
943
  {
944
    std::cerr << R"FOOBAR(
945
  Trigger selection modes.
946
Available modes for --trigger-sel are:
947
+ min (default)
948
  Consider only minimal subterms that meet criteria for triggers.
949
+ min-s-max
950
  Consider only minimal subterms that meet criteria for single triggers, maximal
951
  otherwise.
952
+ all
953
  Consider all subterms that meet criteria for triggers.
954
+ min-s-all
955
  Consider only minimal subterms that meet criteria for single triggers, all
956
  otherwise.
957
+ max
958
  Consider only maximal subterms that meet criteria for triggers.
959
)FOOBAR";
960
    std::exit(1);
961
  }
962
  throw OptionException(std::string("unknown option for --trigger-sel: `") +
963
                        optarg + "'.  Try --trigger-sel=help.");
964
}
965
std::ostream& operator<<(std::ostream& os, UserPatMode mode)
966
{
967
  switch(mode)
968
  {
969
    case UserPatMode::RESORT: return os << "UserPatMode::RESORT";
970
    case UserPatMode::USE: return os << "UserPatMode::USE";
971
    case UserPatMode::TRUST: return os << "UserPatMode::TRUST";
972
    case UserPatMode::STRICT: return os << "UserPatMode::STRICT";
973
    case UserPatMode::IGNORE: return os << "UserPatMode::IGNORE";
974
    case UserPatMode::INTERLEAVE: return os << "UserPatMode::INTERLEAVE";
975
    default: Unreachable();
976
  }
977
  return os;
978
}
979
UserPatMode stringToUserPatMode(const std::string& optarg)
980
{
981
  if (optarg == "resort") return UserPatMode::RESORT;
982
  else if (optarg == "use") return UserPatMode::USE;
983
  else if (optarg == "trust") return UserPatMode::TRUST;
984
  else if (optarg == "strict") return UserPatMode::STRICT;
985
  else if (optarg == "ignore") return UserPatMode::IGNORE;
986
  else if (optarg == "interleave") return UserPatMode::INTERLEAVE;
987
  else if (optarg == "help")
988
  {
989
    std::cerr << R"FOOBAR(
990
  These modes determine how user provided patterns (triggers) are used during
991
  E-matching. The modes vary on when instantiation based on user-provided
992
  triggers is combined with instantiation based on automatically selected
993
  triggers.
994
Available modes for --user-pat are:
995
+ resort
996
  Use user-provided patterns only after auto-generated patterns saturate.
997
+ use
998
  Use both user-provided and auto-generated patterns when patterns are provided
999
  for a quantified formula.
1000
+ trust (default)
1001
  When provided, use only user-provided patterns for a quantified formula.
1002
+ strict
1003
  When provided, use only user-provided patterns for a quantified formula, and
1004
  do not use any other instantiation techniques.
1005
+ ignore
1006
  Ignore user-provided patterns.
1007
+ interleave
1008
  Alternate between use/resort.
1009
)FOOBAR";
1010
    std::exit(1);
1011
  }
1012
  throw OptionException(std::string("unknown option for --user-pat: `") +
1013
                        optarg + "'.  Try --user-pat=help.");
1014
}
1015
// clang-format on
1016
1017
namespace quantifiers
1018
{
1019
// clang-format off
1020
void setDefaultAggressiveMiniscopeQuant(Options& opts, bool value)
1021
{
1022
    if (!opts.quantifiers.aggressiveMiniscopeQuantWasSetByUser) opts.quantifiers.aggressiveMiniscopeQuant = value;
1023
}
1024
void setDefaultCegisSample(Options& opts, CegisSampleMode value)
1025
{
1026
    if (!opts.quantifiers.cegisSampleWasSetByUser) opts.quantifiers.cegisSample = value;
1027
}
1028
void setDefaultCegqi(Options& opts, bool value)
1029
{
1030
    if (!opts.quantifiers.cegqiWasSetByUser) opts.quantifiers.cegqi = value;
1031
}
1032
void setDefaultCegqiAll(Options& opts, bool value)
1033
{
1034
    if (!opts.quantifiers.cegqiAllWasSetByUser) opts.quantifiers.cegqiAll = value;
1035
}
1036
void setDefaultCegqiBv(Options& opts, bool value)
1037
{
1038
    if (!opts.quantifiers.cegqiBvWasSetByUser) opts.quantifiers.cegqiBv = value;
1039
}
1040
void setDefaultCegqiBvConcInv(Options& opts, bool value)
1041
{
1042
    if (!opts.quantifiers.cegqiBvConcInvWasSetByUser) opts.quantifiers.cegqiBvConcInv = value;
1043
}
1044
void setDefaultCegqiBvIneqMode(Options& opts, CegqiBvIneqMode value)
1045
{
1046
    if (!opts.quantifiers.cegqiBvIneqModeWasSetByUser) opts.quantifiers.cegqiBvIneqMode = value;
1047
}
1048
void setDefaultCegqiBvInterleaveValue(Options& opts, bool value)
1049
{
1050
    if (!opts.quantifiers.cegqiBvInterleaveValueWasSetByUser) opts.quantifiers.cegqiBvInterleaveValue = value;
1051
}
1052
void setDefaultCegqiBvLinearize(Options& opts, bool value)
1053
{
1054
    if (!opts.quantifiers.cegqiBvLinearizeWasSetByUser) opts.quantifiers.cegqiBvLinearize = value;
1055
}
1056
void setDefaultCegqiBvRmExtract(Options& opts, bool value)
1057
{
1058
    if (!opts.quantifiers.cegqiBvRmExtractWasSetByUser) opts.quantifiers.cegqiBvRmExtract = value;
1059
}
1060
void setDefaultCegqiBvSolveNl(Options& opts, bool value)
1061
{
1062
    if (!opts.quantifiers.cegqiBvSolveNlWasSetByUser) opts.quantifiers.cegqiBvSolveNl = value;
1063
}
1064
void setDefaultCegqiFullEffort(Options& opts, bool value)
1065
{
1066
    if (!opts.quantifiers.cegqiFullEffortWasSetByUser) opts.quantifiers.cegqiFullEffort = value;
1067
}
1068
void setDefaultCegqiInnermost(Options& opts, bool value)
1069
{
1070
    if (!opts.quantifiers.cegqiInnermostWasSetByUser) opts.quantifiers.cegqiInnermost = value;
1071
}
1072
void setDefaultCegqiMidpoint(Options& opts, bool value)
1073
{
1074
    if (!opts.quantifiers.cegqiMidpointWasSetByUser) opts.quantifiers.cegqiMidpoint = value;
1075
}
1076
void setDefaultCegqiMinBounds(Options& opts, bool value)
1077
{
1078
    if (!opts.quantifiers.cegqiMinBoundsWasSetByUser) opts.quantifiers.cegqiMinBounds = value;
1079
}
1080
void setDefaultCegqiModel(Options& opts, bool value)
1081
{
1082
    if (!opts.quantifiers.cegqiModelWasSetByUser) opts.quantifiers.cegqiModel = value;
1083
}
1084
void setDefaultCegqiMultiInst(Options& opts, bool value)
1085
{
1086
    if (!opts.quantifiers.cegqiMultiInstWasSetByUser) opts.quantifiers.cegqiMultiInst = value;
1087
}
1088
void setDefaultCegqiNestedQE(Options& opts, bool value)
1089
{
1090
    if (!opts.quantifiers.cegqiNestedQEWasSetByUser) opts.quantifiers.cegqiNestedQE = value;
1091
}
1092
void setDefaultCegqiNopt(Options& opts, bool value)
1093
{
1094
    if (!opts.quantifiers.cegqiNoptWasSetByUser) opts.quantifiers.cegqiNopt = value;
1095
}
1096
void setDefaultCegqiRepeatLit(Options& opts, bool value)
1097
{
1098
    if (!opts.quantifiers.cegqiRepeatLitWasSetByUser) opts.quantifiers.cegqiRepeatLit = value;
1099
}
1100
void setDefaultCegqiRoundUpLowerLia(Options& opts, bool value)
1101
{
1102
    if (!opts.quantifiers.cegqiRoundUpLowerLiaWasSetByUser) opts.quantifiers.cegqiRoundUpLowerLia = value;
1103
}
1104
void setDefaultCegqiSat(Options& opts, bool value)
1105
{
1106
    if (!opts.quantifiers.cegqiSatWasSetByUser) opts.quantifiers.cegqiSat = value;
1107
}
1108
void setDefaultCegqiUseInfInt(Options& opts, bool value)
1109
{
1110
    if (!opts.quantifiers.cegqiUseInfIntWasSetByUser) opts.quantifiers.cegqiUseInfInt = value;
1111
}
1112
void setDefaultCegqiUseInfReal(Options& opts, bool value)
1113
{
1114
    if (!opts.quantifiers.cegqiUseInfRealWasSetByUser) opts.quantifiers.cegqiUseInfReal = value;
1115
}
1116
void setDefaultCondVarSplitQuantAgg(Options& opts, bool value)
1117
{
1118
    if (!opts.quantifiers.condVarSplitQuantAggWasSetByUser) opts.quantifiers.condVarSplitQuantAgg = value;
1119
}
1120
void setDefaultCondVarSplitQuant(Options& opts, bool value)
1121
{
1122
    if (!opts.quantifiers.condVarSplitQuantWasSetByUser) opts.quantifiers.condVarSplitQuant = value;
1123
}
1124
void setDefaultConjectureFilterActiveTerms(Options& opts, bool value)
1125
{
1126
    if (!opts.quantifiers.conjectureFilterActiveTermsWasSetByUser) opts.quantifiers.conjectureFilterActiveTerms = value;
1127
}
1128
void setDefaultConjectureFilterCanonical(Options& opts, bool value)
1129
{
1130
    if (!opts.quantifiers.conjectureFilterCanonicalWasSetByUser) opts.quantifiers.conjectureFilterCanonical = value;
1131
}
1132
void setDefaultConjectureFilterModel(Options& opts, bool value)
1133
{
1134
    if (!opts.quantifiers.conjectureFilterModelWasSetByUser) opts.quantifiers.conjectureFilterModel = value;
1135
}
1136
void setDefaultConjectureGen(Options& opts, bool value)
1137
{
1138
    if (!opts.quantifiers.conjectureGenWasSetByUser) opts.quantifiers.conjectureGen = value;
1139
}
1140
void setDefaultConjectureGenGtEnum(Options& opts, int64_t value)
1141
{
1142
    if (!opts.quantifiers.conjectureGenGtEnumWasSetByUser) opts.quantifiers.conjectureGenGtEnum = value;
1143
}
1144
void setDefaultConjectureGenMaxDepth(Options& opts, int64_t value)
1145
{
1146
    if (!opts.quantifiers.conjectureGenMaxDepthWasSetByUser) opts.quantifiers.conjectureGenMaxDepth = value;
1147
}
1148
void setDefaultConjectureGenPerRound(Options& opts, int64_t value)
1149
{
1150
    if (!opts.quantifiers.conjectureGenPerRoundWasSetByUser) opts.quantifiers.conjectureGenPerRound = value;
1151
}
1152
void setDefaultConjectureUeeIntro(Options& opts, bool value)
1153
{
1154
    if (!opts.quantifiers.conjectureUeeIntroWasSetByUser) opts.quantifiers.conjectureUeeIntro = value;
1155
}
1156
void setDefaultConjectureNoFilter(Options& opts, bool value)
1157
{
1158
    if (!opts.quantifiers.conjectureNoFilterWasSetByUser) opts.quantifiers.conjectureNoFilter = value;
1159
}
1160
void setDefaultDtStcInduction(Options& opts, bool value)
1161
{
1162
    if (!opts.quantifiers.dtStcInductionWasSetByUser) opts.quantifiers.dtStcInduction = value;
1163
}
1164
void setDefaultDtVarExpandQuant(Options& opts, bool value)
1165
{
1166
    if (!opts.quantifiers.dtVarExpandQuantWasSetByUser) opts.quantifiers.dtVarExpandQuant = value;
1167
}
1168
void setDefaultEMatching(Options& opts, bool value)
1169
{
1170
    if (!opts.quantifiers.eMatchingWasSetByUser) opts.quantifiers.eMatching = value;
1171
}
1172
void setDefaultElimTautQuant(Options& opts, bool value)
1173
{
1174
    if (!opts.quantifiers.elimTautQuantWasSetByUser) opts.quantifiers.elimTautQuant = value;
1175
}
1176
void setDefaultExtRewriteQuant(Options& opts, bool value)
1177
{
1178
    if (!opts.quantifiers.extRewriteQuantWasSetByUser) opts.quantifiers.extRewriteQuant = value;
1179
}
1180
void setDefaultFiniteModelFind(Options& opts, bool value)
1181
{
1182
    if (!opts.quantifiers.finiteModelFindWasSetByUser) opts.quantifiers.finiteModelFind = value;
1183
}
1184
void setDefaultFmfBound(Options& opts, bool value)
1185
{
1186
    if (!opts.quantifiers.fmfBoundWasSetByUser) opts.quantifiers.fmfBound = value;
1187
}
1188
void setDefaultFmfBoundInt(Options& opts, bool value)
1189
{
1190
    if (!opts.quantifiers.fmfBoundIntWasSetByUser) opts.quantifiers.fmfBoundInt = value;
1191
}
1192
void setDefaultFmfBoundLazy(Options& opts, bool value)
1193
{
1194
    if (!opts.quantifiers.fmfBoundLazyWasSetByUser) opts.quantifiers.fmfBoundLazy = value;
1195
}
1196
void setDefaultFmfFmcSimple(Options& opts, bool value)
1197
{
1198
    if (!opts.quantifiers.fmfFmcSimpleWasSetByUser) opts.quantifiers.fmfFmcSimple = value;
1199
}
1200
void setDefaultFmfFreshDistConst(Options& opts, bool value)
1201
{
1202
    if (!opts.quantifiers.fmfFreshDistConstWasSetByUser) opts.quantifiers.fmfFreshDistConst = value;
1203
}
1204
void setDefaultFmfFunWellDefined(Options& opts, bool value)
1205
{
1206
    if (!opts.quantifiers.fmfFunWellDefinedWasSetByUser) opts.quantifiers.fmfFunWellDefined = value;
1207
}
1208
void setDefaultFmfFunWellDefinedRelevant(Options& opts, bool value)
1209
{
1210
    if (!opts.quantifiers.fmfFunWellDefinedRelevantWasSetByUser) opts.quantifiers.fmfFunWellDefinedRelevant = value;
1211
}
1212
void setDefaultFmfInstEngine(Options& opts, bool value)
1213
{
1214
    if (!opts.quantifiers.fmfInstEngineWasSetByUser) opts.quantifiers.fmfInstEngine = value;
1215
}
1216
void setDefaultFmfTypeCompletionThresh(Options& opts, int64_t value)
1217
{
1218
    if (!opts.quantifiers.fmfTypeCompletionThreshWasSetByUser) opts.quantifiers.fmfTypeCompletionThresh = value;
1219
}
1220
void setDefaultFullSaturateInterleave(Options& opts, bool value)
1221
{
1222
    if (!opts.quantifiers.fullSaturateInterleaveWasSetByUser) opts.quantifiers.fullSaturateInterleave = value;
1223
}
1224
void setDefaultFullSaturateStratify(Options& opts, bool value)
1225
{
1226
    if (!opts.quantifiers.fullSaturateStratifyWasSetByUser) opts.quantifiers.fullSaturateStratify = value;
1227
}
1228
void setDefaultFullSaturateSum(Options& opts, bool value)
1229
{
1230
    if (!opts.quantifiers.fullSaturateSumWasSetByUser) opts.quantifiers.fullSaturateSum = value;
1231
}
1232
void setDefaultFullSaturateQuant(Options& opts, bool value)
1233
{
1234
    if (!opts.quantifiers.fullSaturateQuantWasSetByUser) opts.quantifiers.fullSaturateQuant = value;
1235
}
1236
void setDefaultFullSaturateLimit(Options& opts, int64_t value)
1237
{
1238
    if (!opts.quantifiers.fullSaturateLimitWasSetByUser) opts.quantifiers.fullSaturateLimit = value;
1239
}
1240
void setDefaultFullSaturateQuantRd(Options& opts, bool value)
1241
{
1242
    if (!opts.quantifiers.fullSaturateQuantRdWasSetByUser) opts.quantifiers.fullSaturateQuantRd = value;
1243
}
1244
void setDefaultGlobalNegate(Options& opts, bool value)
1245
{
1246
    if (!opts.quantifiers.globalNegateWasSetByUser) opts.quantifiers.globalNegate = value;
1247
}
1248
void setDefaultHoElim(Options& opts, bool value)
1249
{
1250
    if (!opts.quantifiers.hoElimWasSetByUser) opts.quantifiers.hoElim = value;
1251
}
1252
void setDefaultHoElimStoreAx(Options& opts, bool value)
1253
{
1254
    if (!opts.quantifiers.hoElimStoreAxWasSetByUser) opts.quantifiers.hoElimStoreAx = value;
1255
}
1256
void setDefaultHoMatching(Options& opts, bool value)
1257
{
1258
    if (!opts.quantifiers.hoMatchingWasSetByUser) opts.quantifiers.hoMatching = value;
1259
}
1260
void setDefaultHoMatchingVarArgPriority(Options& opts, bool value)
1261
{
1262
    if (!opts.quantifiers.hoMatchingVarArgPriorityWasSetByUser) opts.quantifiers.hoMatchingVarArgPriority = value;
1263
}
1264
void setDefaultHoMergeTermDb(Options& opts, bool value)
1265
{
1266
    if (!opts.quantifiers.hoMergeTermDbWasSetByUser) opts.quantifiers.hoMergeTermDb = value;
1267
}
1268
void setDefaultIncrementTriggers(Options& opts, bool value)
1269
{
1270
    if (!opts.quantifiers.incrementTriggersWasSetByUser) opts.quantifiers.incrementTriggers = value;
1271
}
1272
void setDefaultInstLevelInputOnly(Options& opts, bool value)
1273
{
1274
    if (!opts.quantifiers.instLevelInputOnlyWasSetByUser) opts.quantifiers.instLevelInputOnly = value;
1275
}
1276
void setDefaultInstMaxLevel(Options& opts, int64_t value)
1277
{
1278
    if (!opts.quantifiers.instMaxLevelWasSetByUser) opts.quantifiers.instMaxLevel = value;
1279
}
1280
void setDefaultInstMaxRounds(Options& opts, int64_t value)
1281
{
1282
    if (!opts.quantifiers.instMaxRoundsWasSetByUser) opts.quantifiers.instMaxRounds = value;
1283
}
1284
void setDefaultInstNoEntail(Options& opts, bool value)
1285
{
1286
    if (!opts.quantifiers.instNoEntailWasSetByUser) opts.quantifiers.instNoEntail = value;
1287
}
1288
void setDefaultInstWhenMode(Options& opts, InstWhenMode value)
1289
{
1290
    if (!opts.quantifiers.instWhenModeWasSetByUser) opts.quantifiers.instWhenMode = value;
1291
}
1292
void setDefaultInstWhenPhase(Options& opts, int64_t value)
1293
{
1294
    if (!opts.quantifiers.instWhenPhaseWasSetByUser) opts.quantifiers.instWhenPhase = value;
1295
}
1296
void setDefaultInstWhenStrictInterleave(Options& opts, bool value)
1297
{
1298
    if (!opts.quantifiers.instWhenStrictInterleaveWasSetByUser) opts.quantifiers.instWhenStrictInterleave = value;
1299
}
1300
void setDefaultInstWhenTcFirst(Options& opts, bool value)
1301
{
1302
    if (!opts.quantifiers.instWhenTcFirstWasSetByUser) opts.quantifiers.instWhenTcFirst = value;
1303
}
1304
void setDefaultIntWfInduction(Options& opts, bool value)
1305
{
1306
    if (!opts.quantifiers.intWfInductionWasSetByUser) opts.quantifiers.intWfInduction = value;
1307
}
1308
void setDefaultIteDtTesterSplitQuant(Options& opts, bool value)
1309
{
1310
    if (!opts.quantifiers.iteDtTesterSplitQuantWasSetByUser) opts.quantifiers.iteDtTesterSplitQuant = value;
1311
}
1312
void setDefaultIteLiftQuant(Options& opts, IteLiftQuantMode value)
1313
{
1314
    if (!opts.quantifiers.iteLiftQuantWasSetByUser) opts.quantifiers.iteLiftQuant = value;
1315
}
1316
void setDefaultLiteralMatchMode(Options& opts, LiteralMatchMode value)
1317
{
1318
    if (!opts.quantifiers.literalMatchModeWasSetByUser) opts.quantifiers.literalMatchMode = value;
1319
}
1320
void setDefaultMacrosQuant(Options& opts, bool value)
1321
{
1322
    if (!opts.quantifiers.macrosQuantWasSetByUser) opts.quantifiers.macrosQuant = value;
1323
}
1324
void setDefaultMacrosQuantMode(Options& opts, MacrosQuantMode value)
1325
{
1326
    if (!opts.quantifiers.macrosQuantModeWasSetByUser) opts.quantifiers.macrosQuantMode = value;
1327
}
1328
void setDefaultMbqiMode(Options& opts, MbqiMode value)
1329
{
1330
    if (!opts.quantifiers.mbqiModeWasSetByUser) opts.quantifiers.mbqiMode = value;
1331
}
1332
void setDefaultMbqiInterleave(Options& opts, bool value)
1333
{
1334
    if (!opts.quantifiers.mbqiInterleaveWasSetByUser) opts.quantifiers.mbqiInterleave = value;
1335
}
1336
void setDefaultFmfOneInstPerRound(Options& opts, bool value)
1337
{
1338
    if (!opts.quantifiers.fmfOneInstPerRoundWasSetByUser) opts.quantifiers.fmfOneInstPerRound = value;
1339
}
1340
void setDefaultMiniscopeQuant(Options& opts, bool value)
1341
{
1342
    if (!opts.quantifiers.miniscopeQuantWasSetByUser) opts.quantifiers.miniscopeQuant = value;
1343
}
1344
void setDefaultMiniscopeQuantFreeVar(Options& opts, bool value)
1345
{
1346
    if (!opts.quantifiers.miniscopeQuantFreeVarWasSetByUser) opts.quantifiers.miniscopeQuantFreeVar = value;
1347
}
1348
void setDefaultMultiTriggerCache(Options& opts, bool value)
1349
{
1350
    if (!opts.quantifiers.multiTriggerCacheWasSetByUser) opts.quantifiers.multiTriggerCache = value;
1351
}
1352
void setDefaultMultiTriggerLinear(Options& opts, bool value)
1353
{
1354
    if (!opts.quantifiers.multiTriggerLinearWasSetByUser) opts.quantifiers.multiTriggerLinear = value;
1355
}
1356
void setDefaultMultiTriggerPriority(Options& opts, bool value)
1357
{
1358
    if (!opts.quantifiers.multiTriggerPriorityWasSetByUser) opts.quantifiers.multiTriggerPriority = value;
1359
}
1360
void setDefaultMultiTriggerWhenSingle(Options& opts, bool value)
1361
{
1362
    if (!opts.quantifiers.multiTriggerWhenSingleWasSetByUser) opts.quantifiers.multiTriggerWhenSingle = value;
1363
}
1364
void setDefaultPartialTriggers(Options& opts, bool value)
1365
{
1366
    if (!opts.quantifiers.partialTriggersWasSetByUser) opts.quantifiers.partialTriggers = value;
1367
}
1368
void setDefaultPoolInst(Options& opts, bool value)
1369
{
1370
    if (!opts.quantifiers.poolInstWasSetByUser) opts.quantifiers.poolInst = value;
1371
}
1372
void setDefaultPreSkolemQuant(Options& opts, bool value)
1373
{
1374
    if (!opts.quantifiers.preSkolemQuantWasSetByUser) opts.quantifiers.preSkolemQuant = value;
1375
}
1376
void setDefaultPreSkolemQuantAgg(Options& opts, bool value)
1377
{
1378
    if (!opts.quantifiers.preSkolemQuantAggWasSetByUser) opts.quantifiers.preSkolemQuantAgg = value;
1379
}
1380
void setDefaultPreSkolemQuantNested(Options& opts, bool value)
1381
{
1382
    if (!opts.quantifiers.preSkolemQuantNestedWasSetByUser) opts.quantifiers.preSkolemQuantNested = value;
1383
}
1384
void setDefaultPrenexQuant(Options& opts, PrenexQuantMode value)
1385
{
1386
    if (!opts.quantifiers.prenexQuantWasSetByUser) opts.quantifiers.prenexQuant = value;
1387
}
1388
void setDefaultPrenexQuantUser(Options& opts, bool value)
1389
{
1390
    if (!opts.quantifiers.prenexQuantUserWasSetByUser) opts.quantifiers.prenexQuantUser = value;
1391
}
1392
void setDefaultPurifyTriggers(Options& opts, bool value)
1393
{
1394
    if (!opts.quantifiers.purifyTriggersWasSetByUser) opts.quantifiers.purifyTriggers = value;
1395
}
1396
void setDefaultQcfAllConflict(Options& opts, bool value)
1397
{
1398
    if (!opts.quantifiers.qcfAllConflictWasSetByUser) opts.quantifiers.qcfAllConflict = value;
1399
}
1400
void setDefaultQcfEagerCheckRd(Options& opts, bool value)
1401
{
1402
    if (!opts.quantifiers.qcfEagerCheckRdWasSetByUser) opts.quantifiers.qcfEagerCheckRd = value;
1403
}
1404
void setDefaultQcfEagerTest(Options& opts, bool value)
1405
{
1406
    if (!opts.quantifiers.qcfEagerTestWasSetByUser) opts.quantifiers.qcfEagerTest = value;
1407
}
1408
void setDefaultQcfNestedConflict(Options& opts, bool value)
1409
{
1410
    if (!opts.quantifiers.qcfNestedConflictWasSetByUser) opts.quantifiers.qcfNestedConflict = value;
1411
}
1412
void setDefaultQcfSkipRd(Options& opts, bool value)
1413
{
1414
    if (!opts.quantifiers.qcfSkipRdWasSetByUser) opts.quantifiers.qcfSkipRd = value;
1415
}
1416
void setDefaultQcfTConstraint(Options& opts, bool value)
1417
{
1418
    if (!opts.quantifiers.qcfTConstraintWasSetByUser) opts.quantifiers.qcfTConstraint = value;
1419
}
1420
void setDefaultQcfVoExp(Options& opts, bool value)
1421
{
1422
    if (!opts.quantifiers.qcfVoExpWasSetByUser) opts.quantifiers.qcfVoExp = value;
1423
}
1424
void setDefaultQuantAlphaEquiv(Options& opts, bool value)
1425
{
1426
    if (!opts.quantifiers.quantAlphaEquivWasSetByUser) opts.quantifiers.quantAlphaEquiv = value;
1427
}
1428
void setDefaultQuantConflictFind(Options& opts, bool value)
1429
{
1430
    if (!opts.quantifiers.quantConflictFindWasSetByUser) opts.quantifiers.quantConflictFind = value;
1431
}
1432
void setDefaultQcfMode(Options& opts, QcfMode value)
1433
{
1434
    if (!opts.quantifiers.qcfModeWasSetByUser) opts.quantifiers.qcfMode = value;
1435
}
1436
void setDefaultQcfWhenMode(Options& opts, QcfWhenMode value)
1437
{
1438
    if (!opts.quantifiers.qcfWhenModeWasSetByUser) opts.quantifiers.qcfWhenMode = value;
1439
}
1440
void setDefaultQuantDynamicSplit(Options& opts, QuantDSplitMode value)
1441
{
1442
    if (!opts.quantifiers.quantDynamicSplitWasSetByUser) opts.quantifiers.quantDynamicSplit = value;
1443
}
1444
void setDefaultQuantFunWellDefined(Options& opts, bool value)
1445
{
1446
    if (!opts.quantifiers.quantFunWellDefinedWasSetByUser) opts.quantifiers.quantFunWellDefined = value;
1447
}
1448
void setDefaultQuantInduction(Options& opts, bool value)
1449
{
1450
    if (!opts.quantifiers.quantInductionWasSetByUser) opts.quantifiers.quantInduction = value;
1451
}
1452
void setDefaultQuantRepMode(Options& opts, QuantRepMode value)
1453
{
1454
    if (!opts.quantifiers.quantRepModeWasSetByUser) opts.quantifiers.quantRepMode = value;
1455
}
1456
void setDefaultQuantSplit(Options& opts, bool value)
1457
{
1458
    if (!opts.quantifiers.quantSplitWasSetByUser) opts.quantifiers.quantSplit = value;
1459
}
1460
void setDefaultRegisterQuantBodyTerms(Options& opts, bool value)
1461
{
1462
    if (!opts.quantifiers.registerQuantBodyTermsWasSetByUser) opts.quantifiers.registerQuantBodyTerms = value;
1463
}
1464
void setDefaultRelationalTriggers(Options& opts, bool value)
1465
{
1466
    if (!opts.quantifiers.relationalTriggersWasSetByUser) opts.quantifiers.relationalTriggers = value;
1467
}
1468
void setDefaultRelevantTriggers(Options& opts, bool value)
1469
{
1470
    if (!opts.quantifiers.relevantTriggersWasSetByUser) opts.quantifiers.relevantTriggers = value;
1471
}
1472
void setDefaultSygus(Options& opts, bool value)
1473
{
1474
    if (!opts.quantifiers.sygusWasSetByUser) opts.quantifiers.sygus = value;
1475
}
1476
void setDefaultSygusActiveGenMode(Options& opts, SygusActiveGenMode value)
1477
{
1478
    if (!opts.quantifiers.sygusActiveGenModeWasSetByUser) opts.quantifiers.sygusActiveGenMode = value;
1479
}
1480
void setDefaultSygusActiveGenEnumConsts(Options& opts, uint64_t value)
1481
{
1482
    if (!opts.quantifiers.sygusActiveGenEnumConstsWasSetByUser) opts.quantifiers.sygusActiveGenEnumConsts = value;
1483
}
1484
void setDefaultSygusAddConstGrammar(Options& opts, bool value)
1485
{
1486
    if (!opts.quantifiers.sygusAddConstGrammarWasSetByUser) opts.quantifiers.sygusAddConstGrammar = value;
1487
}
1488
void setDefaultSygusArgRelevant(Options& opts, bool value)
1489
{
1490
    if (!opts.quantifiers.sygusArgRelevantWasSetByUser) opts.quantifiers.sygusArgRelevant = value;
1491
}
1492
void setDefaultSygusInvAutoUnfold(Options& opts, bool value)
1493
{
1494
    if (!opts.quantifiers.sygusInvAutoUnfoldWasSetByUser) opts.quantifiers.sygusInvAutoUnfold = value;
1495
}
1496
void setDefaultSygusBoolIteReturnConst(Options& opts, bool value)
1497
{
1498
    if (!opts.quantifiers.sygusBoolIteReturnConstWasSetByUser) opts.quantifiers.sygusBoolIteReturnConst = value;
1499
}
1500
void setDefaultSygusCoreConnective(Options& opts, bool value)
1501
{
1502
    if (!opts.quantifiers.sygusCoreConnectiveWasSetByUser) opts.quantifiers.sygusCoreConnective = value;
1503
}
1504
void setDefaultSygusConstRepairAbort(Options& opts, bool value)
1505
{
1506
    if (!opts.quantifiers.sygusConstRepairAbortWasSetByUser) opts.quantifiers.sygusConstRepairAbort = value;
1507
}
1508
void setDefaultSygusEvalOpt(Options& opts, bool value)
1509
{
1510
    if (!opts.quantifiers.sygusEvalOptWasSetByUser) opts.quantifiers.sygusEvalOpt = value;
1511
}
1512
void setDefaultSygusEvalUnfold(Options& opts, bool value)
1513
{
1514
    if (!opts.quantifiers.sygusEvalUnfoldWasSetByUser) opts.quantifiers.sygusEvalUnfold = value;
1515
}
1516
void setDefaultSygusEvalUnfoldBool(Options& opts, bool value)
1517
{
1518
    if (!opts.quantifiers.sygusEvalUnfoldBoolWasSetByUser) opts.quantifiers.sygusEvalUnfoldBool = value;
1519
}
1520
void setDefaultSygusExprMinerCheckTimeout(Options& opts, uint64_t value)
1521
{
1522
    if (!opts.quantifiers.sygusExprMinerCheckTimeoutWasSetByUser) opts.quantifiers.sygusExprMinerCheckTimeout = value;
1523
}
1524
void setDefaultSygusExtRew(Options& opts, bool value)
1525
{
1526
    if (!opts.quantifiers.sygusExtRewWasSetByUser) opts.quantifiers.sygusExtRew = value;
1527
}
1528
void setDefaultSygusFilterSolMode(Options& opts, SygusFilterSolMode value)
1529
{
1530
    if (!opts.quantifiers.sygusFilterSolModeWasSetByUser) opts.quantifiers.sygusFilterSolMode = value;
1531
}
1532
void setDefaultSygusFilterSolRevSubsume(Options& opts, bool value)
1533
{
1534
    if (!opts.quantifiers.sygusFilterSolRevSubsumeWasSetByUser) opts.quantifiers.sygusFilterSolRevSubsume = value;
1535
}
1536
void setDefaultSygusGrammarConsMode(Options& opts, SygusGrammarConsMode value)
1537
{
1538
    if (!opts.quantifiers.sygusGrammarConsModeWasSetByUser) opts.quantifiers.sygusGrammarConsMode = value;
1539
}
1540
void setDefaultSygusGrammarNorm(Options& opts, bool value)
1541
{
1542
    if (!opts.quantifiers.sygusGrammarNormWasSetByUser) opts.quantifiers.sygusGrammarNorm = value;
1543
}
1544
void setDefaultSygusInference(Options& opts, bool value)
1545
{
1546
    if (!opts.quantifiers.sygusInferenceWasSetByUser) opts.quantifiers.sygusInference = value;
1547
}
1548
void setDefaultSygusInst(Options& opts, bool value)
1549
{
1550
    if (!opts.quantifiers.sygusInstWasSetByUser) opts.quantifiers.sygusInst = value;
1551
}
1552
void setDefaultSygusInstMode(Options& opts, SygusInstMode value)
1553
{
1554
    if (!opts.quantifiers.sygusInstModeWasSetByUser) opts.quantifiers.sygusInstMode = value;
1555
}
1556
void setDefaultSygusInstScope(Options& opts, SygusInstScope value)
1557
{
1558
    if (!opts.quantifiers.sygusInstScopeWasSetByUser) opts.quantifiers.sygusInstScope = value;
1559
}
1560
void setDefaultSygusInstTermSel(Options& opts, SygusInstTermSelMode value)
1561
{
1562
    if (!opts.quantifiers.sygusInstTermSelWasSetByUser) opts.quantifiers.sygusInstTermSel = value;
1563
}
1564
void setDefaultSygusInvTemplMode(Options& opts, SygusInvTemplMode value)
1565
{
1566
    if (!opts.quantifiers.sygusInvTemplModeWasSetByUser) opts.quantifiers.sygusInvTemplMode = value;
1567
}
1568
void setDefaultSygusInvTemplWhenSyntax(Options& opts, bool value)
1569
{
1570
    if (!opts.quantifiers.sygusInvTemplWhenSyntaxWasSetByUser) opts.quantifiers.sygusInvTemplWhenSyntax = value;
1571
}
1572
void setDefaultSygusMinGrammar(Options& opts, bool value)
1573
{
1574
    if (!opts.quantifiers.sygusMinGrammarWasSetByUser) opts.quantifiers.sygusMinGrammar = value;
1575
}
1576
void setDefaultSygusUnifPbe(Options& opts, bool value)
1577
{
1578
    if (!opts.quantifiers.sygusUnifPbeWasSetByUser) opts.quantifiers.sygusUnifPbe = value;
1579
}
1580
void setDefaultSygusPbeMultiFair(Options& opts, bool value)
1581
{
1582
    if (!opts.quantifiers.sygusPbeMultiFairWasSetByUser) opts.quantifiers.sygusPbeMultiFair = value;
1583
}
1584
void setDefaultSygusPbeMultiFairDiff(Options& opts, int64_t value)
1585
{
1586
    if (!opts.quantifiers.sygusPbeMultiFairDiffWasSetByUser) opts.quantifiers.sygusPbeMultiFairDiff = value;
1587
}
1588
void setDefaultSygusQePreproc(Options& opts, bool value)
1589
{
1590
    if (!opts.quantifiers.sygusQePreprocWasSetByUser) opts.quantifiers.sygusQePreproc = value;
1591
}
1592
void setDefaultSygusQueryGen(Options& opts, bool value)
1593
{
1594
    if (!opts.quantifiers.sygusQueryGenWasSetByUser) opts.quantifiers.sygusQueryGen = value;
1595
}
1596
void setDefaultSygusQueryGenCheck(Options& opts, bool value)
1597
{
1598
    if (!opts.quantifiers.sygusQueryGenCheckWasSetByUser) opts.quantifiers.sygusQueryGenCheck = value;
1599
}
1600
void setDefaultSygusQueryGenDumpFiles(Options& opts, SygusQueryDumpFilesMode value)
1601
{
1602
    if (!opts.quantifiers.sygusQueryGenDumpFilesWasSetByUser) opts.quantifiers.sygusQueryGenDumpFiles = value;
1603
}
1604
void setDefaultSygusQueryGenThresh(Options& opts, uint64_t value)
1605
{
1606
    if (!opts.quantifiers.sygusQueryGenThreshWasSetByUser) opts.quantifiers.sygusQueryGenThresh = value;
1607
}
1608
void setDefaultSygusRecFun(Options& opts, bool value)
1609
{
1610
    if (!opts.quantifiers.sygusRecFunWasSetByUser) opts.quantifiers.sygusRecFun = value;
1611
}
1612
void setDefaultSygusRecFunEvalLimit(Options& opts, uint64_t value)
1613
{
1614
    if (!opts.quantifiers.sygusRecFunEvalLimitWasSetByUser) opts.quantifiers.sygusRecFunEvalLimit = value;
1615
}
1616
void setDefaultSygusRepairConst(Options& opts, bool value)
1617
{
1618
    if (!opts.quantifiers.sygusRepairConstWasSetByUser) opts.quantifiers.sygusRepairConst = value;
1619
}
1620
void setDefaultSygusRepairConstTimeout(Options& opts, uint64_t value)
1621
{
1622
    if (!opts.quantifiers.sygusRepairConstTimeoutWasSetByUser) opts.quantifiers.sygusRepairConstTimeout = value;
1623
}
1624
void setDefaultSygusRew(Options& opts, bool value)
1625
{
1626
    if (!opts.quantifiers.sygusRewWasSetByUser) opts.quantifiers.sygusRew = value;
1627
}
1628
void setDefaultSygusRewSynth(Options& opts, bool value)
1629
{
1630
    if (!opts.quantifiers.sygusRewSynthWasSetByUser) opts.quantifiers.sygusRewSynth = value;
1631
}
1632
void setDefaultSygusRewSynthAccel(Options& opts, bool value)
1633
{
1634
    if (!opts.quantifiers.sygusRewSynthAccelWasSetByUser) opts.quantifiers.sygusRewSynthAccel = value;
1635
}
1636
void setDefaultSygusRewSynthCheck(Options& opts, bool value)
1637
{
1638
    if (!opts.quantifiers.sygusRewSynthCheckWasSetByUser) opts.quantifiers.sygusRewSynthCheck = value;
1639
}
1640
void setDefaultSygusRewSynthFilterCong(Options& opts, bool value)
1641
{
1642
    if (!opts.quantifiers.sygusRewSynthFilterCongWasSetByUser) opts.quantifiers.sygusRewSynthFilterCong = value;
1643
}
1644
void setDefaultSygusRewSynthFilterMatch(Options& opts, bool value)
1645
{
1646
    if (!opts.quantifiers.sygusRewSynthFilterMatchWasSetByUser) opts.quantifiers.sygusRewSynthFilterMatch = value;
1647
}
1648
void setDefaultSygusRewSynthFilterNonLinear(Options& opts, bool value)
1649
{
1650
    if (!opts.quantifiers.sygusRewSynthFilterNonLinearWasSetByUser) opts.quantifiers.sygusRewSynthFilterNonLinear = value;
1651
}
1652
void setDefaultSygusRewSynthFilterOrder(Options& opts, bool value)
1653
{
1654
    if (!opts.quantifiers.sygusRewSynthFilterOrderWasSetByUser) opts.quantifiers.sygusRewSynthFilterOrder = value;
1655
}
1656
void setDefaultSygusRewSynthInput(Options& opts, bool value)
1657
{
1658
    if (!opts.quantifiers.sygusRewSynthInputWasSetByUser) opts.quantifiers.sygusRewSynthInput = value;
1659
}
1660
void setDefaultSygusRewSynthInputNVars(Options& opts, int64_t value)
1661
{
1662
    if (!opts.quantifiers.sygusRewSynthInputNVarsWasSetByUser) opts.quantifiers.sygusRewSynthInputNVars = value;
1663
}
1664
void setDefaultSygusRewSynthInputUseBool(Options& opts, bool value)
1665
{
1666
    if (!opts.quantifiers.sygusRewSynthInputUseBoolWasSetByUser) opts.quantifiers.sygusRewSynthInputUseBool = value;
1667
}
1668
void setDefaultSygusRewSynthRec(Options& opts, bool value)
1669
{
1670
    if (!opts.quantifiers.sygusRewSynthRecWasSetByUser) opts.quantifiers.sygusRewSynthRec = value;
1671
}
1672
void setDefaultSygusRewVerify(Options& opts, bool value)
1673
{
1674
    if (!opts.quantifiers.sygusRewVerifyWasSetByUser) opts.quantifiers.sygusRewVerify = value;
1675
}
1676
void setDefaultSygusRewVerifyAbort(Options& opts, bool value)
1677
{
1678
    if (!opts.quantifiers.sygusRewVerifyAbortWasSetByUser) opts.quantifiers.sygusRewVerifyAbort = value;
1679
}
1680
void setDefaultSygusSampleFpUniform(Options& opts, bool value)
1681
{
1682
    if (!opts.quantifiers.sygusSampleFpUniformWasSetByUser) opts.quantifiers.sygusSampleFpUniform = value;
1683
}
1684
void setDefaultSygusSampleGrammar(Options& opts, bool value)
1685
{
1686
    if (!opts.quantifiers.sygusSampleGrammarWasSetByUser) opts.quantifiers.sygusSampleGrammar = value;
1687
}
1688
void setDefaultSygusSamples(Options& opts, int64_t value)
1689
{
1690
    if (!opts.quantifiers.sygusSamplesWasSetByUser) opts.quantifiers.sygusSamples = value;
1691
}
1692
void setDefaultCegqiSingleInvMode(Options& opts, CegqiSingleInvMode value)
1693
{
1694
    if (!opts.quantifiers.cegqiSingleInvModeWasSetByUser) opts.quantifiers.cegqiSingleInvMode = value;
1695
}
1696
void setDefaultCegqiSingleInvAbort(Options& opts, bool value)
1697
{
1698
    if (!opts.quantifiers.cegqiSingleInvAbortWasSetByUser) opts.quantifiers.cegqiSingleInvAbort = value;
1699
}
1700
void setDefaultCegqiSingleInvReconstruct(Options& opts, CegqiSingleInvRconsMode value)
1701
{
1702
    if (!opts.quantifiers.cegqiSingleInvReconstructWasSetByUser) opts.quantifiers.cegqiSingleInvReconstruct = value;
1703
}
1704
void setDefaultCegqiSingleInvReconstructLimit(Options& opts, int64_t value)
1705
{
1706
    if (!opts.quantifiers.cegqiSingleInvReconstructLimitWasSetByUser) opts.quantifiers.cegqiSingleInvReconstructLimit = value;
1707
}
1708
void setDefaultSygusStream(Options& opts, bool value)
1709
{
1710
    if (!opts.quantifiers.sygusStreamWasSetByUser) opts.quantifiers.sygusStream = value;
1711
}
1712
void setDefaultSygusTemplEmbedGrammar(Options& opts, bool value)
1713
{
1714
    if (!opts.quantifiers.sygusTemplEmbedGrammarWasSetByUser) opts.quantifiers.sygusTemplEmbedGrammar = value;
1715
}
1716
void setDefaultSygusUnifCondIndNoRepeatSol(Options& opts, bool value)
1717
{
1718
    if (!opts.quantifiers.sygusUnifCondIndNoRepeatSolWasSetByUser) opts.quantifiers.sygusUnifCondIndNoRepeatSol = value;
1719
}
1720
void setDefaultSygusUnifPi(Options& opts, SygusUnifPiMode value)
1721
{
1722
    if (!opts.quantifiers.sygusUnifPiWasSetByUser) opts.quantifiers.sygusUnifPi = value;
1723
}
1724
void setDefaultSygusUnifShuffleCond(Options& opts, bool value)
1725
{
1726
    if (!opts.quantifiers.sygusUnifShuffleCondWasSetByUser) opts.quantifiers.sygusUnifShuffleCond = value;
1727
}
1728
void setDefaultSygusVerifyInstMaxRounds(Options& opts, int64_t value)
1729
{
1730
    if (!opts.quantifiers.sygusVerifyInstMaxRoundsWasSetByUser) opts.quantifiers.sygusVerifyInstMaxRounds = value;
1731
}
1732
void setDefaultTermDbCd(Options& opts, bool value)
1733
{
1734
    if (!opts.quantifiers.termDbCdWasSetByUser) opts.quantifiers.termDbCd = value;
1735
}
1736
void setDefaultTermDbMode(Options& opts, TermDbMode value)
1737
{
1738
    if (!opts.quantifiers.termDbModeWasSetByUser) opts.quantifiers.termDbMode = value;
1739
}
1740
void setDefaultTriggerActiveSelMode(Options& opts, TriggerActiveSelMode value)
1741
{
1742
    if (!opts.quantifiers.triggerActiveSelModeWasSetByUser) opts.quantifiers.triggerActiveSelMode = value;
1743
}
1744
void setDefaultTriggerSelMode(Options& opts, TriggerSelMode value)
1745
{
1746
    if (!opts.quantifiers.triggerSelModeWasSetByUser) opts.quantifiers.triggerSelMode = value;
1747
}
1748
void setDefaultUserPatternsQuant(Options& opts, UserPatMode value)
1749
{
1750
    if (!opts.quantifiers.userPatternsQuantWasSetByUser) opts.quantifiers.userPatternsQuant = value;
1751
}
1752
void setDefaultVarElimQuant(Options& opts, bool value)
1753
{
1754
    if (!opts.quantifiers.varElimQuantWasSetByUser) opts.quantifiers.varElimQuant = value;
1755
}
1756
void setDefaultVarIneqElimQuant(Options& opts, bool value)
1757
{
1758
    if (!opts.quantifiers.varIneqElimQuantWasSetByUser) opts.quantifiers.varIneqElimQuant = value;
1759
}
1760
// clang-format on
1761
}
1762
1763
29577
}  // namespace cvc5::options