53 RelationStore() =
default;
54 RelationStore(
const RelationStore&) =
default;
55 RelationStore(RelationStore&& other)
noexcept;
56 RelationStore& operator=(
const RelationStore& other);
57 RelationStore& operator=(RelationStore&& other)
noexcept;
60 std::uint64_t revision()
const noexcept {
return revision_; }
73 RelationStoreResult add_relation(
74 const SymbolicExpr& lhs,
const SymbolicExpr& rhs,
75 RelationOp op, PropertyStore& prop_store);
83 RelationStoreResult add_relation_checked(
const SymbolicExpr& lhs,
84 const SymbolicExpr& rhs,
86 PropertyStore& prop_store);
92 const std::vector<Relation>& get_relations()
const;
104 bool has_relation(
const SymbolicExpr& lhs,
const SymbolicExpr& rhs,
105 RelationOp op)
const;
113 friend class AssumptionContext;
114 using Premises = std::array<std::size_t, 2>;
115 struct RelationProofs {
116 bool declared =
false;
117 std::vector<Premises> alternatives;
119 std::vector<Relation> relations_;
120 std::vector<RelationProofs> proofs_;
121 std::vector<std::size_t> declaration_order_;
122 std::uint64_t revision_ = 0;
124 std::optional<std::size_t> find_relation(
125 const SymbolicExpr& lhs,
const SymbolicExpr& rhs, RelationOp op)
const;
128 const SymbolicExpr& lhs,
129 const SymbolicExpr& rhs,
131 PropertyStore& prop_store);
134 static constexpr int MAX_TRANSITIVE_DEDUCTIONS = 64;
136 struct TransitiveWork;
138 const Relation& deduced, Premises premises,
139 PropertyStore& prop_store, TransitiveWork& work);
151 Result<bool> compute_transitive_closure(
152 std::size_t new_relation, PropertyStore& prop_store);
Core enumerations and forward declarations for the Assumption System.
RelationOp
Stable relational operator used by public APIs.
Result< void > RelationStoreResult
SymbolicExpr lhs
Left-hand side expression
SymbolicExpr rhs
Right-hand side expression
RelationOp op
Relational operator (GT, LT, GEQ, LEQ, NEQ, EQ)
A stored relational constraint between two symbolic expressions.
符号表达式主类 SymbolicExpr 及其工厂方法,运算接口.