Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
e6b6825
NonlinWork: initial commit
BritikovKI Oct 29, 2024
5d38ae6
NonlinWork: additional fixes concerning division and nonlin
BritikovKI Oct 29, 2024
2708b6d
NonlinWork: fix of tests and code rework
BritikovKI Oct 30, 2024
18c229c
NonlinWork: PR cleanup
BritikovKI Oct 31, 2024
77221ec
NonlinWork: added PR-connected regression tests
BritikovKI Nov 3, 2024
840371b
NonlinWork: added support for mod
BritikovKI Nov 4, 2024
e56747b
NonlinWork: moved and updated the Nonlin checks, tests rework, except…
BritikovKI Nov 5, 2024
afdf97c
NonlinWork: catching exceptions, few fixes
BritikovKI Nov 6, 2024
57f0e28
NonlinWork: update to atomic Nonlin checks, propper checks in the LAS…
BritikovKI Nov 7, 2024
4fce17f
NonlinWork: fix of the print in MainSolver
BritikovKI Nov 8, 2024
c90b71d
NonlinWork: changed splitTerm
BritikovKI Nov 13, 2024
2ae9020
NonlinWork: changes in multiplication handling
BritikovKI Nov 14, 2024
c45998d
NonlinWork: single symbol for multiplication
BritikovKI Nov 18, 2024
e3379bc
NonlinWork: duplicate symbol creation
BritikovKI Nov 19, 2024
7379dc5
NonlinWork: SubSymbol notion
BritikovKI Nov 19, 2024
8a06e78
NonlinWork: added sym_Int_TIMES_LIN
BritikovKI Nov 20, 2024
eafefbd
NonlinWork: added new functions, rework of the accessible parts
BritikovKI Nov 25, 2024
6a72bae
NonlinWork: Fixes according to comments
BritikovKI Nov 28, 2024
23651e9
NonlinWork: Nonlin Real division is no longer supported
BritikovKI Nov 29, 2024
56eedb0
NonlinWork: small fixes and optimisations
BritikovKI Dec 2, 2024
469252e
NonlinWork: review fixes
BritikovKI Feb 26, 2025
11d36aa
[[WIP]] first the "internal" symbols need to be resolved within nonli…
Tomaqa Oct 24, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 12 additions & 2 deletions src/api/MainSolver.cc
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
#include "MainSolver.h"

#include <common/ApiException.h>
#include <common/NonLinException.h>
#include <itehandler/IteHandler.h>
#include <logics/ArrayTheory.h>
#include <logics/LATheory.h>
Expand Down Expand Up @@ -333,14 +334,23 @@ sstat MainSolver::check() {
StopWatch sw(query_timer);
}
if (isLastFrameUnsat()) { return s_False; }
sstat rval = simplifyFormulas();
sstat rval;
try {
rval = simplifyFormulas();
} catch (NonLinException const & error) {
reasonUnknown = error.what();
return s_Undef;
}

if (config.dump_query()) printCurrentAssertionsAsQuery();

if (rval == s_Undef) {
try {
rval = solve();
} catch (std::overflow_error const & error) { rval = s_Error; }
} catch (std::overflow_error const & error) { rval = s_Error; } catch (NonLinException const & error) {
reasonUnknown = error.what();
return s_Undef;
}
if (rval == s_False) {
assert(not smt_solver->isOK());
rememberUnsatFrame(smt_solver->getConflictFrame());
Expand Down
3 changes: 2 additions & 1 deletion src/api/MainSolver.h
Original file line number Diff line number Diff line change
Expand Up @@ -258,7 +258,7 @@ class MainSolver {
PTRef newFrameTerm(FrameId frameId) {
assert(frameId != 0);
auto name = std::string(Logic::s_framev_prefix) + std::to_string(frameId);
PTRef frameTerm = logic.mkBoolVar(name.c_str());
PTRef frameTerm = logic.mkInternalBoolVar(name.c_str());
Lit l = term_mapper->getOrCreateLit(frameTerm);
term_mapper->setFrozen(var(l));
smt_solver->addAssumptionVar(var(l));
Expand Down Expand Up @@ -310,6 +310,7 @@ class MainSolver {
vec<PTRef> frameTerms;
std::size_t firstNotSimplifiedFrame = 0;
unsigned int insertedFormulasCount = 0;
std::string reasonUnknown;
};

bool MainSolver::trackPartitions() const {
Expand Down
2 changes: 1 addition & 1 deletion src/common/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -24,5 +24,5 @@ include(numbers/CMakeLists.txt)
install(FILES
StringMap.h Timer.h inttypes.h IColor.h
TreeOps.h FlaPartitionMap.h PartitionInfo.h Partitions.h ApiException.h TypeUtils.h
NatSet.h ScopedVector.h TermNames.h
NatSet.h ScopedVector.h TermNames.h NonLinException.h
DESTINATION ${INSTALL_HEADERS_DIR}/common)
19 changes: 19 additions & 0 deletions src/common/NonLinException.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
/*
* Copyright (c) 2024, Konstantin Britikov <britikovki@gmail.com>
*
* SPDX-License-Identifier: MIT
*/

#ifndef OPENSMT_NONLINEXCEPTION_H
#define OPENSMT_NONLINEXCEPTION_H

#include <stdexcept>

namespace opensmt {
class NonLinException : public std::runtime_error {
public:
NonLinException(std::string_view const reason_) : runtime_error("Term " + std::string(reason_) + " is non-linear"){}
};
}

#endif // OPENSMT_NONLINEXCEPTION_H
Loading