Skip to content

Commit adc5b55

Browse files
authored
Towards Proof Minimization (#889)
1 parent def5714 commit adc5b55

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

45 files changed

+837
-589
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
- Implemented forward-backward abstract interpretation, symbolic bound tightening, interval arithmetic and simulations for all activation functions.
88
- Added the BaBSR heuristic as a new branching strategy for ReLU Splitting
99
- Support Sub of two variables, "Mul" of two constants, Slice, and ConstantOfShape in the python onnx parser
10+
- Renamed SmtCore module to SearchTreeHandler
1011

1112
## Version 2.0.0
1213

maraboupy/MarabouCore.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -833,8 +833,8 @@ PYBIND11_MODULE( MarabouCore, m )
833833
.value( "NUM_POPS", Statistics::StatisticsUnsignedAttribute::NUM_POPS )
834834
.value( "CURRENT_DECISION_LEVEL",
835835
Statistics::StatisticsUnsignedAttribute::CURRENT_DECISION_LEVEL )
836-
.value( "NUM_PL_SMT_ORIGINATED_SPLITS",
837-
Statistics::StatisticsUnsignedAttribute::NUM_PL_SMT_ORIGINATED_SPLITS )
836+
.value( "NUM_PL_SEARCH_TREE_ORIGINATED_SPLITS",
837+
Statistics::StatisticsUnsignedAttribute::NUM_PL_SEARCH_TREE_ORIGINATED_SPLITS )
838838
.value( "NUM_VISITED_TREE_STATES",
839839
Statistics::StatisticsUnsignedAttribute::NUM_VISITED_TREE_STATES )
840840
.value( "PP_NUM_TIGHTENING_ITERATIONS",
@@ -862,8 +862,8 @@ PYBIND11_MODULE( MarabouCore, m )
862862
py::enum_<Statistics::StatisticsLongAttribute>( m, "StatisticsLongAttribute" )
863863
.value( "NUM_TIGHTENINGS_FROM_EXPLICIT_BASIS",
864864
Statistics::StatisticsLongAttribute::NUM_TIGHTENINGS_FROM_EXPLICIT_BASIS )
865-
.value( "TOTAL_TIME_SMT_CORE_MICRO",
866-
Statistics::StatisticsLongAttribute::TOTAL_TIME_SMT_CORE_MICRO )
865+
.value( "TOTAL_TIME_SEARCH_TREE_HANDLER_MICRO",
866+
Statistics::StatisticsLongAttribute::TOTAL_TIME_SEARCH_TREE_HANDLER_MICRO )
867867
.value( "TOTAL_TIME_PERFORMING_VALID_CASE_SPLITS_MICRO",
868868
Statistics::StatisticsLongAttribute::TOTAL_TIME_PERFORMING_VALID_CASE_SPLITS_MICRO )
869869
.value( "PREPROCESSING_TIME_MICRO",

src/common/Pair.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,11 @@ template <class L, class R> class Pair
3333
{
3434
}
3535

36+
Pair( const Pair<L, R> &other )
37+
: _container( other._container )
38+
{
39+
}
40+
3641
L &first()
3742
{
3843
return _container.first;

src/common/Statistics.cpp

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ Statistics::Statistics()
2424
_unsignedAttributes[NUM_PL_CONSTRAINTS] = 0;
2525
_unsignedAttributes[NUM_ACTIVE_PL_CONSTRAINTS] = 0;
2626
_unsignedAttributes[NUM_PL_VALID_SPLITS] = 0;
27-
_unsignedAttributes[NUM_PL_SMT_ORIGINATED_SPLITS] = 0;
27+
_unsignedAttributes[NUM_PL_SEARCH_TREE_ORIGINATED_SPLITS] = 0;
2828
_unsignedAttributes[NUM_PRECISION_RESTORATIONS] = 0;
2929
_unsignedAttributes[CURRENT_DECISION_LEVEL] = 0;
3030
_unsignedAttributes[MAX_DECISION_LEVEL] = 0;
@@ -43,6 +43,7 @@ Statistics::Statistics()
4343
_unsignedAttributes[NUM_CERTIFIED_LEAVES] = 0;
4444
_unsignedAttributes[NUM_DELEGATED_LEAVES] = 0;
4545
_unsignedAttributes[NUM_LEMMAS] = 0;
46+
_unsignedAttributes[NUM_LEMMAS_USED] = 0;
4647
_unsignedAttributes[CERTIFIED_UNSAT] = 0;
4748

4849
_longAttributes[NUM_MAIN_LOOP_ITERATIONS] = 0;
@@ -82,7 +83,7 @@ Statistics::Statistics()
8283
_longAttributes[TOTAL_TIME_PRECISION_RESTORATION] = 0;
8384
_longAttributes[TOTAL_TIME_CONSTRAINT_MATRIX_BOUND_TIGHTENING_MICRO] = 0;
8485
_longAttributes[TOTAL_TIME_APPLYING_STORED_TIGHTENINGS_MICRO] = 0;
85-
_longAttributes[TOTAL_TIME_SMT_CORE_MICRO] = 0;
86+
_longAttributes[TOTAL_TIME_SEARCH_TREE_HANDLER_MICRO] = 0;
8687
_longAttributes[TOTAL_TIME_UPDATING_SOI_PHASE_PATTERN_MICRO] = 0;
8788
_longAttributes[NUM_PROPOSED_PHASE_PATTERN_UPDATE] = 0;
8889
_longAttributes[NUM_ACCEPTED_PHASE_PATTERN_UPDATE] = 0;
@@ -208,11 +209,11 @@ void Statistics::print()
208209
printf( "\t\t[%.2lf%%] Applying stored bound-tightening: %llu milli\n",
209210
printPercents( totalTimeApplyingStoredTighteningsMicro, timeMainLoopMicro ),
210211
totalTimeApplyingStoredTighteningsMicro / 1000 );
211-
unsigned long long totalTimeSmtCoreMicro =
212-
getLongAttribute( Statistics::TOTAL_TIME_SMT_CORE_MICRO );
213-
printf( "\t\t[%.2lf%%] SMT core: %llu milli\n",
214-
printPercents( totalTimeSmtCoreMicro, timeMainLoopMicro ),
215-
totalTimeSmtCoreMicro / 1000 );
212+
unsigned long long totalTimeSearchTreeMicro =
213+
getLongAttribute( Statistics::TOTAL_TIME_SEARCH_TREE_HANDLER_MICRO );
214+
printf( "\t\t[%.2lf%%] Search Tree Handler : %llu milli\n",
215+
printPercents( totalTimeSearchTreeMicro, timeMainLoopMicro ),
216+
totalTimeSearchTreeMicro / 1000 );
216217
unsigned long long totalTimePerformingSymbolicBoundTightening =
217218
getLongAttribute( Statistics::TOTAL_TIME_PERFORMING_SYMBOLIC_BOUND_TIGHTENING );
218219
printf( "\t\t[%.2lf%%] Symbolic Bound Tightening: %llu milli\n",
@@ -234,7 +235,7 @@ void Statistics::print()
234235
totalTimePerformingValidCaseSplitsMicro + totalTimeHandlingStatisticsMicro +
235236
totalTimeExplicitBasisBoundTighteningMicro + totalTimeDegradationChecking +
236237
totalTimePrecisionRestoration + totalTimeConstraintMatrixBoundTighteningMicro +
237-
totalTimeApplyingStoredTighteningsMicro + totalTimeSmtCoreMicro +
238+
totalTimeApplyingStoredTighteningsMicro + totalTimeSearchTreeMicro +
238239
totalTimePerformingSymbolicBoundTightening;
239240

240241
printf( "\t\t[%.2lf%%] Unaccounted for: %llu milli\n",
@@ -270,11 +271,11 @@ void Statistics::print()
270271
printAverage( timeConstraintFixingStepsMicro / 1000, numConstraintFixingSteps ) );
271272
printf( "\tNumber of active piecewise-linear constraints: %u / %u\n"
272273
"\t\tConstraints disabled by valid splits: %u. "
273-
"By SMT-originated splits: %u\n",
274+
"By Search-Tree--originated splits: %u\n",
274275
getUnsignedAttribute( Statistics::NUM_ACTIVE_PL_CONSTRAINTS ),
275276
getUnsignedAttribute( Statistics::NUM_PL_CONSTRAINTS ),
276277
getUnsignedAttribute( Statistics::NUM_PL_VALID_SPLITS ),
277-
getUnsignedAttribute( Statistics::NUM_PL_SMT_ORIGINATED_SPLITS ) );
278+
getUnsignedAttribute( Statistics::NUM_PL_SEARCH_TREE_ORIGINATED_SPLITS ) );
278279
printf( "\tLast reported degradation: %.10lf. Max degradation so far: %.10lf. "
279280
"Restorations so far: %u\n",
280281
getDoubleAttribute( Statistics::CURRENT_DEGRADATION ),
@@ -314,7 +315,7 @@ void Statistics::print()
314315
getUnsignedAttribute( Statistics::CURRENT_TABLEAU_M ),
315316
getUnsignedAttribute( Statistics::CURRENT_TABLEAU_N ) );
316317

317-
printf( "\t--- SMT Core Statistics ---\n" );
318+
printf( "\t--- Search Tree Handler Statistics ---\n" );
318319
printf(
319320
"\tTotal depth is %u. Total visited states: %u. Number of splits: %u. Number of pops: %u\n",
320321
getUnsignedAttribute( Statistics::CURRENT_DECISION_LEVEL ),
@@ -428,6 +429,8 @@ void Statistics::print()
428429
printf( "\tNumber of leaves to delegate: %u\n",
429430
getUnsignedAttribute( Statistics::NUM_DELEGATED_LEAVES ) );
430431
printf( "\tNumber of lemmas: %u\n", getUnsignedAttribute( Statistics::NUM_LEMMAS ) );
432+
printf( "\tNumber of lemmas used in proof minimization: %u\n",
433+
getUnsignedAttribute( Statistics::NUM_LEMMAS_USED ) );
431434
}
432435

433436
unsigned long long Statistics::getTotalTimeInMicro() const

src/common/Statistics.h

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,12 +31,12 @@ class Statistics
3131
NUM_PL_CONSTRAINTS,
3232
NUM_ACTIVE_PL_CONSTRAINTS,
3333
NUM_PL_VALID_SPLITS,
34-
NUM_PL_SMT_ORIGINATED_SPLITS,
34+
NUM_PL_SEARCH_TREE_ORIGINATED_SPLITS,
3535

3636
// Precision restoration
3737
NUM_PRECISION_RESTORATIONS,
3838

39-
// Current and max stack depth in the SMT core
39+
// Current and max stack depth in the Search Tree Handler
4040
CURRENT_DECISION_LEVEL,
4141
MAX_DECISION_LEVEL,
4242

@@ -71,6 +71,7 @@ class Statistics
7171
NUM_CERTIFIED_LEAVES,
7272
NUM_DELEGATED_LEAVES,
7373
NUM_LEMMAS,
74+
NUM_LEMMAS_USED,
7475

7576
// 1 if returned UNSAT and proof was certified by proof checker, 0 otherwise.
7677
CERTIFIED_UNSAT,
@@ -188,8 +189,8 @@ class Statistics
188189
// Total amount of time spent applying previously stored bound tightenings
189190
TOTAL_TIME_APPLYING_STORED_TIGHTENINGS_MICRO,
190191

191-
// Total amount of time spent within the SMT core
192-
TOTAL_TIME_SMT_CORE_MICRO,
192+
// Total amount of time spent within the search tree core
193+
TOTAL_TIME_SEARCH_TREE_HANDLER_MICRO,
193194

194195
// Total time heuristically updating the SoI phase pattern
195196
TOTAL_TIME_UPDATING_SOI_PHASE_PATTERN_MICRO,

src/configuration/GlobalConfiguration.cpp

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ const unsigned GlobalConfiguration::MAX_SIMPLEX_PIVOT_SEARCH_ITERATIONS = 5;
6262
const DivideStrategy GlobalConfiguration::SPLITTING_HEURISTICS = DivideStrategy::ReLUViolation;
6363
const unsigned GlobalConfiguration::INTERVAL_SPLITTING_FREQUENCY = 10;
6464
const unsigned GlobalConfiguration::INTERVAL_SPLITTING_THRESHOLD = 10;
65-
const unsigned GlobalConfiguration::BOUND_TIGHTING_ON_CONSTRAINT_MATRIX_FREQUENCY = 100;
65+
const unsigned GlobalConfiguration::BOUND_TIGHTENING_ON_CONSTRAINT_MATRIX_FREQUENCY = 100;
6666
const unsigned GlobalConfiguration::ROW_BOUND_TIGHTENER_SATURATION_ITERATIONS = 20;
6767
const double GlobalConfiguration::COST_FUNCTION_ERROR_THRESHOLD = 0.0000000001;
6868

@@ -119,6 +119,9 @@ const bool GlobalConfiguration::WRITE_JSON_PROOF = false;
119119
const unsigned GlobalConfiguration::BACKWARD_BOUND_PROPAGATION_DEPTH = 3;
120120
const unsigned GlobalConfiguration::MAX_ROUNDS_OF_BACKWARD_ANALYSIS = 10;
121121

122+
const bool GlobalConfiguration::ANALYZE_PROOF_DEPENDENCIES = false;
123+
const bool GlobalConfiguration::MINIMIZE_PROOF_DEPENDENCIES = false;
124+
122125
#ifdef ENABLE_GUROBI
123126
const unsigned GlobalConfiguration::GUROBI_NUMBER_OF_THREADS = 1;
124127
const bool GlobalConfiguration::GUROBI_LOGGING = false;
@@ -128,7 +131,7 @@ const bool GlobalConfiguration::GUROBI_LOGGING = false;
128131
const bool GlobalConfiguration::DNC_MANAGER_LOGGING = false;
129132
const bool GlobalConfiguration::ENGINE_LOGGING = false;
130133
const bool GlobalConfiguration::TABLEAU_LOGGING = false;
131-
const bool GlobalConfiguration::SMT_CORE_LOGGING = false;
134+
const bool GlobalConfiguration::SEARCH_TREE_HANDLER_LOGGING = false;
132135
const bool GlobalConfiguration::DANTZIGS_RULE_LOGGING = false;
133136
const bool GlobalConfiguration::BASIS_FACTORIZATION_LOGGING = false;
134137
const bool GlobalConfiguration::PREPROCESSOR_LOGGING = false;
@@ -174,8 +177,8 @@ void GlobalConfiguration::print()
174177
printf( " GAUSSIAN_ELIMINATION_PIVOT_SCALE_THRESHOLD: %.15lf\n",
175178
GAUSSIAN_ELIMINATION_PIVOT_SCALE_THRESHOLD );
176179
printf( " MAX_SIMPLEX_PIVOT_SEARCH_ITERATIONS: %u\n", MAX_SIMPLEX_PIVOT_SEARCH_ITERATIONS );
177-
printf( " BOUND_TIGHTING_ON_CONSTRAINT_MATRIX_FREQUENCY: %u\n",
178-
BOUND_TIGHTING_ON_CONSTRAINT_MATRIX_FREQUENCY );
180+
printf( " BOUND_TIGHTENING_ON_CONSTRAINT_MATRIX_FREQUENCY: %u\n",
181+
BOUND_TIGHTENING_ON_CONSTRAINT_MATRIX_FREQUENCY );
179182
printf( " COST_FUNCTION_ERROR_THRESHOLD: %.15lf\n", COST_FUNCTION_ERROR_THRESHOLD );
180183
printf( " USE_HARRIS_RATIO_TEST: %s\n", USE_HARRIS_RATIO_TEST ? "Yes" : "No" );
181184

src/configuration/GlobalConfiguration.h

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@ class GlobalConfiguration
139139
static const unsigned INTERVAL_SPLITTING_THRESHOLD;
140140

141141
// How often should we perform full bound tightening, on the entire contraints matrix A.
142-
static const unsigned BOUND_TIGHTING_ON_CONSTRAINT_MATRIX_FREQUENCY;
142+
static const unsigned BOUND_TIGHTENING_ON_CONSTRAINT_MATRIX_FREQUENCY;
143143

144144
// When the row bound tightener is asked to run until saturation, it can enter an infinite loop
145145
// due to tiny increments in bounds. This number limits the number of iterations it can perform.
@@ -263,6 +263,15 @@ class GlobalConfiguration
263263
*/
264264
static const unsigned MAX_ROUNDS_OF_BACKWARD_ANALYSIS;
265265

266+
/* Analyze lemma dependencies when producing proofs
267+
*/
268+
static const bool ANALYZE_PROOF_DEPENDENCIES;
269+
270+
/* Minimize the number of lemma dependencies when producing proofs
271+
*/
272+
static const bool MINIMIZE_PROOF_DEPENDENCIES;
273+
274+
266275
#ifdef ENABLE_GUROBI
267276
/*
268277
The number of threads Gurobi spawns
@@ -277,7 +286,7 @@ class GlobalConfiguration
277286
static const bool DNC_MANAGER_LOGGING;
278287
static const bool ENGINE_LOGGING;
279288
static const bool TABLEAU_LOGGING;
280-
static const bool SMT_CORE_LOGGING;
289+
static const bool SEARCH_TREE_HANDLER_LOGGING;
281290
static const bool DANTZIGS_RULE_LOGGING;
282291
static const bool BASIS_FACTORIZATION_LOGGING;
283292
static const bool PREPROCESSOR_LOGGING;

src/engine/AbsoluteValueConstraint.cpp

Lines changed: 38 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,9 @@ void AbsoluteValueConstraint::notifyLowerBound( unsigned variable, double bound
152152
Tightening::UB,
153153
{ variable, variable },
154154
Tightening::UB,
155-
getType() );
155+
*this,
156+
false,
157+
fUpperBound );
156158
else if ( proofs && phaseFixed() )
157159
{
158160
std::shared_ptr<TableauRow> tighteningRow =
@@ -232,7 +234,9 @@ void AbsoluteValueConstraint::notifyUpperBound( unsigned variable, double bound
232234
Tightening::UB,
233235
{ variable, variable },
234236
Tightening::UB,
235-
getType() );
237+
*this,
238+
false,
239+
fUpperBound );
236240
else if ( proofs && phaseFixed() )
237241
{
238242
std::shared_ptr<TableauRow> tighteningRow =
@@ -406,7 +410,7 @@ AbsoluteValueConstraint::getSmartFixes( ITableau * /* tableau */ ) const
406410

407411
List<PiecewiseLinearCaseSplit> AbsoluteValueConstraint::getCaseSplits() const
408412
{
409-
ASSERT( _phaseStatus == PhaseStatus::PHASE_NOT_FIXED );
413+
ASSERT( getPhaseStatus() == PhaseStatus::PHASE_NOT_FIXED );
410414

411415
List<PiecewiseLinearCaseSplit> splits;
412416
splits.append( getNegativeSplit() );
@@ -476,14 +480,14 @@ PiecewiseLinearCaseSplit AbsoluteValueConstraint::getPositiveSplit() const
476480

477481
bool AbsoluteValueConstraint::phaseFixed() const
478482
{
479-
return _phaseStatus != PhaseStatus::PHASE_NOT_FIXED;
483+
return getPhaseStatus() != PhaseStatus::PHASE_NOT_FIXED;
480484
}
481485

482486
PiecewiseLinearCaseSplit AbsoluteValueConstraint::getImpliedCaseSplit() const
483487
{
484-
ASSERT( _phaseStatus != PHASE_NOT_FIXED );
488+
ASSERT( getPhaseStatus() != PHASE_NOT_FIXED );
485489

486-
if ( _phaseStatus == ABS_PHASE_POSITIVE )
490+
if ( getPhaseStatus() == ABS_PHASE_POSITIVE )
487491
return getPositiveSplit();
488492

489493
return getNegativeSplit();
@@ -512,8 +516,8 @@ void AbsoluteValueConstraint::dump( String &output ) const
512516
_f,
513517
_b,
514518
_constraintActive ? "Yes" : "No",
515-
_phaseStatus,
516-
phaseToString( _phaseStatus ).ascii() );
519+
getPhaseStatus(),
520+
phaseToString( getPhaseStatus() ).ascii() );
517521

518522
output +=
519523
Stringf( "b in [%s, %s], ",
@@ -826,7 +830,7 @@ void AbsoluteValueConstraint::fixPhaseIfNeeded()
826830
setPhaseStatus( ABS_PHASE_POSITIVE );
827831
if ( proofs )
828832
_boundManager->addLemmaExplanationAndTightenBound(
829-
_posAux, 0, Tightening::UB, { _b }, Tightening::LB, getType() );
833+
_posAux, 0, Tightening::UB, { _b }, Tightening::LB, *this, true, 0 );
830834
return;
831835
}
832836

@@ -836,7 +840,7 @@ void AbsoluteValueConstraint::fixPhaseIfNeeded()
836840
setPhaseStatus( ABS_PHASE_NEGATIVE );
837841
if ( proofs )
838842
_boundManager->addLemmaExplanationAndTightenBound(
839-
_negAux, 0, Tightening::UB, { _b }, Tightening::UB, getType() );
843+
_negAux, 0, Tightening::UB, { _b }, Tightening::UB, *this, true, 0 );
840844
return;
841845
}
842846

@@ -849,8 +853,14 @@ void AbsoluteValueConstraint::fixPhaseIfNeeded()
849853
{
850854
setPhaseStatus( ABS_PHASE_NEGATIVE );
851855
if ( proofs )
852-
_boundManager->addLemmaExplanationAndTightenBound(
853-
_negAux, 0, Tightening::UB, { _b, _f }, Tightening::UB, getType() );
856+
_boundManager->addLemmaExplanationAndTightenBound( _negAux,
857+
0,
858+
Tightening::UB,
859+
{ _b, _f },
860+
Tightening::UB,
861+
*this,
862+
true,
863+
getUpperBound( _b ) );
854864
return;
855865
}
856866

@@ -860,8 +870,14 @@ void AbsoluteValueConstraint::fixPhaseIfNeeded()
860870
{
861871
setPhaseStatus( ABS_PHASE_POSITIVE );
862872
if ( proofs )
863-
_boundManager->addLemmaExplanationAndTightenBound(
864-
_posAux, 0, Tightening::UB, { _b, _f }, Tightening::LB, getType() );
873+
_boundManager->addLemmaExplanationAndTightenBound( _posAux,
874+
0,
875+
Tightening::UB,
876+
{ _b, _f },
877+
Tightening::LB,
878+
*this,
879+
true,
880+
-getLowerBound( _b ) );
865881
return;
866882
}
867883

@@ -871,6 +887,9 @@ void AbsoluteValueConstraint::fixPhaseIfNeeded()
871887
if ( existsUpperBound( _posAux ) && FloatUtils::isZero( getUpperBound( _posAux ) ) )
872888
{
873889
setPhaseStatus( ABS_PHASE_POSITIVE );
890+
if ( proofs )
891+
_boundManager->addLemmaExplanationAndTightenBound(
892+
_posAux, 0, Tightening::UB, { _posAux }, Tightening::UB, *this, true, 0 );
874893
return;
875894
}
876895

@@ -880,14 +899,17 @@ void AbsoluteValueConstraint::fixPhaseIfNeeded()
880899
setPhaseStatus( ABS_PHASE_NEGATIVE );
881900
if ( proofs )
882901
_boundManager->addLemmaExplanationAndTightenBound(
883-
_negAux, 0, Tightening::UB, { _posAux }, Tightening::LB, getType() );
902+
_negAux, 0, Tightening::UB, { _posAux }, Tightening::LB, *this, true, 0 );
884903
return;
885904
}
886905

887906
// Option 7: negAux has become zero, phase is negative
888907
if ( existsUpperBound( _negAux ) && FloatUtils::isZero( getUpperBound( _negAux ) ) )
889908
{
890909
setPhaseStatus( ABS_PHASE_NEGATIVE );
910+
if ( proofs )
911+
_boundManager->addLemmaExplanationAndTightenBound(
912+
_negAux, 0, Tightening::UB, { _negAux }, Tightening::UB, *this, true, 0 );
891913
return;
892914
}
893915

@@ -897,7 +919,7 @@ void AbsoluteValueConstraint::fixPhaseIfNeeded()
897919
setPhaseStatus( ABS_PHASE_POSITIVE );
898920
if ( proofs )
899921
_boundManager->addLemmaExplanationAndTightenBound(
900-
_posAux, 0, Tightening::UB, { _negAux }, Tightening::LB, getType() );
922+
_posAux, 0, Tightening::UB, { _negAux }, Tightening::LB, *this, true, 0 );
901923
return;
902924
}
903925
}

0 commit comments

Comments
 (0)