mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Remove unused solving state.
This commit is contained in:
parent
0f4cc05667
commit
3cc853c2a0
@ -77,6 +77,7 @@ string toString(rational const& _x)
|
|||||||
return ::toString(_x.numerator()) + "/" + ::toString(_x.denominator());
|
return ::toString(_x.numerator()) + "/" + ::toString(_x.denominator());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
string reasonToString(ReasonSet const& _reasons, size_t _minSize)
|
string reasonToString(ReasonSet const& _reasons, size_t _minSize)
|
||||||
{
|
{
|
||||||
auto reasonsAsStrings = _reasons | ranges::views::transform([](size_t _r) { return to_string(_r); });
|
auto reasonsAsStrings = _reasons | ranges::views::transform([](size_t _r) { return to_string(_r); });
|
||||||
@ -85,6 +86,7 @@ string reasonToString(ReasonSet const& _reasons, size_t _minSize)
|
|||||||
result.resize(_minSize, ' ');
|
result.resize(_minSize, ' ');
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -131,73 +133,6 @@ string RationalWithDelta::toString() const
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool SolvingState::Compare::operator()(SolvingState const& _a, SolvingState const& _b) const
|
|
||||||
{
|
|
||||||
if (!considerVariableNames || _a.variableNames == _b.variableNames)
|
|
||||||
{
|
|
||||||
if (_a.bounds == _b.bounds)
|
|
||||||
return _a.constraints < _b.constraints;
|
|
||||||
else
|
|
||||||
return _a.bounds < _b.bounds;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
return _a.variableNames < _b.variableNames;
|
|
||||||
}
|
|
||||||
|
|
||||||
set<size_t> SolvingState::reasons() const
|
|
||||||
{
|
|
||||||
set<size_t> ret;
|
|
||||||
for (Bounds const& b: bounds)
|
|
||||||
ret += b.lowerReasons + b.upperReasons;
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
string SolvingState::toString() const
|
|
||||||
{
|
|
||||||
size_t const reasonLength = 10;
|
|
||||||
string result;
|
|
||||||
for (Constraint const& constraint: constraints)
|
|
||||||
{
|
|
||||||
vector<string> line;
|
|
||||||
for (auto&& [index, multiplier]: constraint.data.enumerate())
|
|
||||||
if (index > 0 && multiplier != 0)
|
|
||||||
{
|
|
||||||
string mult =
|
|
||||||
multiplier == -1 ?
|
|
||||||
"-" :
|
|
||||||
multiplier == 1 ?
|
|
||||||
"" :
|
|
||||||
::toString(multiplier) + " ";
|
|
||||||
line.emplace_back(mult + variableNames.at(index));
|
|
||||||
}
|
|
||||||
result +=
|
|
||||||
joinHumanReadable(line, " + ") +
|
|
||||||
(
|
|
||||||
constraint.kind == Constraint::EQUAL ? " = " :
|
|
||||||
constraint.kind == Constraint::LESS_OR_EQUAL ? " <= " :
|
|
||||||
" < "
|
|
||||||
) +
|
|
||||||
::toString(constraint.data.front()) +
|
|
||||||
"\n";
|
|
||||||
}
|
|
||||||
result += "Bounds:\n";
|
|
||||||
for (auto&& [index, bounds]: bounds | ranges::views::enumerate)
|
|
||||||
{
|
|
||||||
if (!bounds.lower && !bounds.upper)
|
|
||||||
continue;
|
|
||||||
if (bounds.lower)
|
|
||||||
result +=
|
|
||||||
reasonToString(bounds.lowerReasons, reasonLength) +
|
|
||||||
bounds.lower->toString() + " <= ";
|
|
||||||
result += variableNames.at(index);
|
|
||||||
if (bounds.upper)
|
|
||||||
result += " <= "s + bounds.upper->toString() + " " + reasonToString(bounds.upperReasons, 0);
|
|
||||||
result += "\n";
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void LPSolver::addConstraint(Constraint const& _constraint, optional<size_t> _reason)
|
void LPSolver::addConstraint(Constraint const& _constraint, optional<size_t> _reason)
|
||||||
{
|
{
|
||||||
// TODO at this point, we could also determine if it is a fixed variable.
|
// TODO at this point, we could also determine if it is a fixed variable.
|
||||||
|
@ -137,50 +137,6 @@ struct RationalWithDelta
|
|||||||
rational m_delta;
|
rational m_delta;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
|
||||||
* State used when solving an LP problem.
|
|
||||||
*/
|
|
||||||
struct SolvingState
|
|
||||||
{
|
|
||||||
/// Names of variables. The index zero should be left empty
|
|
||||||
/// because zero corresponds to constants.
|
|
||||||
std::vector<std::string> variableNames;
|
|
||||||
struct Bounds
|
|
||||||
{
|
|
||||||
std::optional<RationalWithDelta> lower;
|
|
||||||
std::optional<RationalWithDelta> upper;
|
|
||||||
bool operator<(Bounds const& _other) const { return make_pair(lower, upper) < make_pair(_other.lower, _other.upper); }
|
|
||||||
bool operator==(Bounds const& _other) const { return make_pair(lower, upper) == make_pair(_other.lower, _other.upper); }
|
|
||||||
|
|
||||||
// TODO this is currently not used
|
|
||||||
|
|
||||||
/// Set of literals the conjunction of which implies the lower bonud.
|
|
||||||
std::set<size_t> lowerReasons;
|
|
||||||
/// Set of literals the conjunction of which implies the upper bonud.
|
|
||||||
std::set<size_t> upperReasons;
|
|
||||||
};
|
|
||||||
/// Lower and upper bounds for variables (in the sense of >= / <=).
|
|
||||||
std::vector<Bounds> bounds;
|
|
||||||
std::vector<Constraint> constraints;
|
|
||||||
// For each bound and constraint, store an index of the literal
|
|
||||||
// that implies it.
|
|
||||||
|
|
||||||
std::set<size_t> reasons() const;
|
|
||||||
|
|
||||||
struct Compare
|
|
||||||
{
|
|
||||||
explicit Compare(bool _considerVariableNames = false): considerVariableNames(_considerVariableNames) {}
|
|
||||||
bool operator()(SolvingState const& _a, SolvingState const& _b) const;
|
|
||||||
bool considerVariableNames;
|
|
||||||
};
|
|
||||||
|
|
||||||
bool operator==(SolvingState const& _other) const noexcept {
|
|
||||||
return bounds == _other.bounds && constraints == _other.constraints;
|
|
||||||
}
|
|
||||||
|
|
||||||
std::string toString() const;
|
|
||||||
};
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class T>
|
template <class T>
|
||||||
@ -210,18 +166,6 @@ struct std::hash<solidity::util::RationalWithDelta>
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
template<>
|
|
||||||
struct std::hash<solidity::util::SolvingState::Bounds>
|
|
||||||
{
|
|
||||||
std::size_t operator()(solidity::util::SolvingState::Bounds const& _bounds) const noexcept
|
|
||||||
{
|
|
||||||
std::size_t result = 0;
|
|
||||||
hashCombine(result, _bounds.lower);
|
|
||||||
hashCombine(result, _bounds.upper);
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template<>
|
template<>
|
||||||
struct std::hash<solidity::util::LinearExpression>
|
struct std::hash<solidity::util::LinearExpression>
|
||||||
{
|
{
|
||||||
@ -247,18 +191,6 @@ struct std::hash<solidity::util::Constraint>
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
template<>
|
|
||||||
struct std::hash<solidity::util::SolvingState>
|
|
||||||
{
|
|
||||||
std::size_t operator()(solidity::util::SolvingState const& _solvingState) const noexcept
|
|
||||||
{
|
|
||||||
std::size_t result = 0;
|
|
||||||
hashCombineVector(result, _solvingState.bounds);
|
|
||||||
hashCombineVector(result, _solvingState.constraints);
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
namespace solidity::util
|
namespace solidity::util
|
||||||
{
|
{
|
||||||
|
@ -218,7 +218,7 @@ int main(int argc, char** argv)
|
|||||||
{
|
{
|
||||||
if (argc != 2)
|
if (argc != 2)
|
||||||
{
|
{
|
||||||
cout << "Usage: solsmt <smtlib2 fil>" << endl;
|
cout << "Usage: solsmt <smtlib2 file>" << endl;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user