#
# Option specification file for CVC4
# See src/options/base_options for a description of this file format
#

module ARITH "options/arith_options.h" Arithmetic theory

option arithUnateLemmaMode --unate-lemmas=MODE ArithUnateLemmaMode :handler stringToArithUnateLemmaMode :default ALL_PRESOLVE_LEMMAS :include "options/arith_unate_lemma_mode.h"
 determines which lemmas to add before solving (default is 'all', see --unate-lemmas=help)

option arithPropagationMode --arith-prop=MODE ArithPropagationMode :handler stringToArithPropagationMode :default BOTH_PROP :include "options/arith_propagation_mode.h"
 turns on arithmetic propagation (default is 'old', see --arith-prop=help)

# The maximum number of difference pivots to do per invocation of simplex.
# If this is negative, the number of pivots done is the number of variables.
# If this is not set by the user, different logics are free to chose different
# defaults.
option arithHeuristicPivots --heuristic-pivots=N int16_t :default 0 :read-write
 the number of times to apply the heuristic pivot rule; if N < 0, this defaults to the number of variables; if this is unset, this is tuned by the logic selection

# The maximum number of variable order pivots to do per invocation of simplex.
# If this is negative, the number of pivots done is unlimited.
# If this is not set by the user, different logics are free to chose different
# defaults.
expert-option arithStandardCheckVarOrderPivots --standard-effort-variable-order-pivots=N int16_t :default -1 :read-write
 limits the number of pivots in a single invocation of check() at a non-full effort level using Bland's pivot rule

option arithErrorSelectionRule --error-selection-rule=RULE ErrorSelectionRule :handler stringToErrorSelectionRule :default MINIMUM_AMOUNT :include "options/arith_heuristic_pivot_rule.h"
 change the pivot rule for the basic variable (default is 'min', see --pivot-rule help)

# The number of pivots before simplex rechecks every basic variable for a conflict
option arithSimplexCheckPeriod --simplex-check-period=N uint16_t :default 200
 the number of pivots to do in simplex before rechecking for a conflict on all variables

# This is the pivots per basic variable that can be done using heuristic choices
# before variable order must be used.
# If this is not set by the user, different logics are free to chose different
# defaults.
option arithPivotThreshold --pivot-threshold=N uint16_t :default 2 :read-write
 sets the number of pivots using --pivot-rule per basic variable per simplex instance before using variable order

option arithPropagateMaxLength --prop-row-length=N uint16_t :default 16
 sets the maximum row length to be used in propagation

option arithDioSolver --enable-dio-solver/--disable-dio-solver bool :default true
 turns on Linear Diophantine Equation solver (Griggio, JSAT 2012)
/turns off Linear Diophantine Equation solver (Griggio, JSAT 2012)

# Whether to split (= x y) into (and (<= x y) (>= x y)) in
# arithmetic preprocessing.
option arithRewriteEq --enable-arith-rewrite-equalities/--disable-arith-rewrite-equalities bool :default false :read-write
 turns on the preprocessing rewrite turning equalities into a conjunction of inequalities
/turns off the preprocessing rewrite turning equalities into a conjunction of inequalities


option arithMLTrick miplib-trick --enable-miplib-trick/--disable-miplib-trick bool :default false
 turns on the preprocessing step of attempting to infer bounds on miplib problems
/turns off the preprocessing step of attempting to infer bounds on miplib problems

option arithMLTrickSubstitutions miplib-trick-subs --miplib-trick-subs=N unsigned :default 1
 do substitution for miplib 'tmp' vars if defined in <= N eliminated vars

option doCutAllBounded --cut-all-bounded bool :default false :read-write
 turns on the integer solving step of periodically cutting all integer variables that have both upper and lower bounds
/turns off the integer solving step of periodically cutting all integer variables that have both upper and lower bounds

option maxCutsInContext --maxCutsInContext unsigned :default 65535
 maximum cuts in a given context before signalling a restart

option revertArithModels --revert-arith-models-on-unsat bool :default false
 revert the arithmetic model to a known safe model on unsat if one is cached

option havePenalties --fc-penalties bool :default false :read-write
 turns on degenerate pivot penalties
/turns off degenerate pivot penalties

option useFC --use-fcsimplex bool :default false :read-write
 use focusing and converging simplex (FMCAD 2013 submission)

option useSOI --use-soi bool :default false :read-write
 use sum of infeasibility simplex (FMCAD 2013 submission)

option restrictedPivots --restrict-pivots bool :default true :read-write
 have a pivot cap for simplex at effort levels below fullEffort

option collectPivots --collect-pivot-stats bool :default false :read-write
 collect the pivot history

option useApprox --use-approx bool :default false :read-write
 attempt to use an approximate solver

option maxApproxDepth --approx-branch-depth int16_t :default 200 :read-write
 maximum branch depth the approximate solver is allowed to take

option exportDioDecompositions --dio-decomps bool :default false :read-write
 let skolem variables for integer divisibility constraints leak from the dio solver

option newProp --new-prop bool :default false :read-write
 use the new row propagation system

option arithPropAsLemmaLength --arith-prop-clauses uint16_t :default 8 :read-write
 rows shorter than this are propagated as clauses

option soiQuickExplain --soi-qe bool :default false :read-write
 use quick explain to minimize the sum of infeasibility conflicts

option rewriteDivk rewrite-divk --rewrite-divk bool :default false :read-write
 rewrite division and mod when by a constant into linear terms

option trySolveIntStandardEffort --se-solve-int bool :default false
 attempt to use the approximate solve integer method on standard effort

option replayFailureLemma --lemmas-on-replay-failure bool :default false
 attempt to use external lemmas if approximate solve integer failed

option dioSolverTurns --dio-turns int :default 10
 turns in a row dio solver cutting gets

option rrTurns --rr-turns int :default 3
 round robin turn

option dioRepeat --dio-repeat bool :default false
 handle dio solver constraints in mass or one at a time

option replayEarlyCloseDepths --replay-early-close-depth int :default 1
 multiples of the depths to try to close the approx log eagerly

option replayFailurePenalty --replay-failure-penalty int :default 100
 number of solve integer attempts to skips after a numeric failure

option replayNumericFailurePenalty --replay-num-err-penalty int :default 4194304
 number of solve integer attempts to skips after a numeric failure

option replayRejectCutSize --replay-reject-cut unsigned :default 25500
 maximum complexity of any coefficient while replaying cuts

option lemmaRejectCutSize --replay-lemma-reject-cut unsigned :default 25500
 maximum complexity of any coefficient while outputting replaying cut lemmas

option soiApproxMajorFailure --replay-soi-major-threshold double :default .01
 threshold for a major tolerance failure by the approximate solver

option soiApproxMajorFailurePen --replay-soi-major-threshold-pen int :default 50
 threshold for a major tolerance failure by the approximate solver

option soiApproxMinorFailure --replay-soi-minor-threshold double :default .0001
 threshold for a minor tolerance failure by the approximate solver

option soiApproxMinorFailurePen --replay-soi-minor-threshold-pen int :default 10
 threshold for a minor tolerance failure by the approximate solver

option ppAssertMaxSubSize --pp-assert-max-sub-size unsigned :default 2
 threshold for substituting an equality in ppAssert

option maxReplayTree --max-replay-tree int :default 512
 threshold for attempting to replay a tree


option pbRewrites --pb-rewrites bool :default false
 apply pseudo boolean rewrites

option pbRewriteThreshold --pb-rewrite-threshold int :default 256
 threshold of number of pseudoboolean variables to have before doing rewrites

option sNormInferEq --snorm-infer-eq bool :default false
 infer equalities based on Shostak normalization

option nlExt --nl-ext bool :default true
 extended approach to non-linear
 
option nlExtResBound --nl-ext-rbound bool :default false
 use resolution-style inference for inferring new bounds

option nlExtTangentPlanes --nl-ext-tplanes bool :default false
 use non-terminating tangent plane strategy for non-linear

option nlExtEntailConflicts --nl-ext-ent-conf bool :default false
 check for entailed conflicts in non-linear solver
 
option nlExtRewrites --nl-ext-rewrite bool :default true
 do rewrites in non-linear solver
 
option nlExtSolveSubs --nl-ext-solve-subs bool :default false
 do solving for determining constant substitutions
 
option nlExtPurify --nl-ext-purify bool :default false
 purify non-linear terms at preprocess
 
option nlExtSplitZero --nl-ext-split-zero bool :default false
 intial splits on zero for all variables

endmodule
