| 3376 | } |
| 3377 | |
| 3378 | bool Engine::certifyInfeasibility( unsigned var ) const |
| 3379 | { |
| 3380 | ASSERT( _produceUNSATProofs ); |
| 3381 | |
| 3382 | Vector<double> contradiction = computeContradiction( var ); |
| 3383 | |
| 3384 | if ( contradiction.empty() ) |
| 3385 | return FloatUtils::isNegative( _groundBoundManager.getUpperBound( var ) - |
| 3386 | _groundBoundManager.getLowerBound( var ) ); |
| 3387 | |
| 3388 | SparseUnsortedList sparseContradiction = SparseUnsortedList(); |
| 3389 | |
| 3390 | contradiction.empty() |
| 3391 | ? sparseContradiction.initializeToEmpty() |
| 3392 | : sparseContradiction.initialize( contradiction.data(), contradiction.size() ); |
| 3393 | |
| 3394 | // In case contradiction is a vector of zeros |
| 3395 | if ( sparseContradiction.empty() ) |
| 3396 | return FloatUtils::isNegative( _groundBoundManager.getUpperBound( var ) - |
| 3397 | _groundBoundManager.getLowerBound( var ) ); |
| 3398 | |
| 3399 | double derivedBound = |
| 3400 | UNSATCertificateUtils::computeCombinationUpperBound( sparseContradiction, |
| 3401 | _tableau->getSparseA(), |
| 3402 | _groundBoundManager.getUpperBounds(), |
| 3403 | _groundBoundManager.getLowerBounds(), |
| 3404 | _tableau->getN() ); |
| 3405 | return FloatUtils::isNegative( derivedBound ); |
| 3406 | } |
| 3407 | |
| 3408 | double Engine::explainBound( unsigned var, bool isUpper ) const |
| 3409 | { |
nothing calls this directly
no test coverage detected