64 std::tuple<std::shared_ptr<Order>, uint_fast64_t, uint_fast64_t>
extendOrder(std::shared_ptr<Order> order,
67 std::optional<Assumption> assumption = std::nullopt);
69 void setMinMaxValues(std::shared_ptr<Order> order, std::vector<ConstantType>&& minValues, std::vector<ConstantType>&& maxValues);
70 void setMinValues(std::shared_ptr<Order> order, std::vector<ConstantType>&& minValues);
71 void setMaxValues(std::shared_ptr<Order> order, std::vector<ConstantType>&& maxValues);
75 void setUnknownStates(std::shared_ptr<Order> order, uint_fast64_t state1, uint_fast64_t state2);
77 std::pair<uint_fast64_t, uint_fast64_t>
getUnknownStates(std::shared_ptr<Order> order)
const;
78 void copyContext(std::shared_ptr<Order> orderOriginal, std::shared_ptr<Order> orderCopy);
83 bool isHope(std::shared_ptr<Order> order);
89 Order::NodeComparison addStatesBasedOnMinMax(std::shared_ptr<Order> order, uint_fast64_t state1, uint_fast64_t state2)
const;
90 std::tuple<std::shared_ptr<Order>, uint_fast64_t, uint_fast64_t>
extendOrder(std::shared_ptr<Order> order,
92 std::optional<Assumption> assumption = std::nullopt);
93 std::pair<uint_fast64_t, uint_fast64_t> extendNormal(std::shared_ptr<Order> order, uint_fast64_t currentState, std::vector<uint_fast64_t>
const& successors,
95 std::pair<uint_fast64_t, uint_fast64_t> extendByBackwardReasoning(std::shared_ptr<Order> order, uint_fast64_t currentState,
96 std::vector<uint_fast64_t>
const& successors,
bool allowMerge);
97 std::pair<uint_fast64_t, uint_fast64_t> extendByForwardReasoning(std::shared_ptr<Order> order, uint_fast64_t currentState,
98 std::vector<uint_fast64_t>
const& successors,
bool allowMerge);
99 bool extendByAssumption(std::shared_ptr<Order> order, uint_fast64_t state1, uint_fast64_t state2);
101 void handleOneSuccessor(std::shared_ptr<Order> order, uint_fast64_t currentState, uint_fast64_t successor);
102 void handleAssumption(std::shared_ptr<Order> order,
Assumption const& assumption)
const;
104 std::pair<uint_fast64_t, bool> getNextState(std::shared_ptr<Order> order, uint_fast64_t stateNumber,
bool done);
107 std::shared_ptr<Order> getBottomTopOrder();
109 std::shared_ptr<Order> bottomTopOrder =
nullptr;
116 std::vector<ConstantType> minValues;
117 std::vector<ConstantType> maxValues;
119 bool continueExtending =
true;
125 std::pair<uint_fast64_t, uint_fast64_t> unknownStates;
127 Context& context(std::shared_ptr<Order>
const& order);
128 Context
const& contextAt(std::shared_ptr<Order>
const& order)
const;
129 std::map<std::weak_ptr<Order>, Context, std::owner_less<std::weak_ptr<Order>>> contexts;
134 std::size_t nextContextPruneSize = 64;
136 boost::optional<std::vector<ConstantType>> minValuesInit;
137 boost::optional<std::vector<ConstantType>> maxValuesInit;
140 std::shared_ptr<models::sparse::Model<ValueType>> model;
142 std::map<uint_fast64_t, std::vector<uint_fast64_t>> stateMap;
146 std::shared_ptr<logic::Formula const> formula;
150 uint_fast64_t numberOfStates;
152 std::unique_ptr<analysis::AssumptionMaker<ValueType, ConstantType>> assumptionMaker;
154 boost::container::flat_set<uint_fast64_t> nonParametricStates;
156 std::map<VariableType, std::vector<uint_fast64_t>> occuringStatesAtVariable;
157 std::vector<std::set<VariableType>> occuringVariablesAtState;