73 absl::Span<const Literal>
Reason(
const Trail& trail,
int trail_index,
74 int64_t conflict_id)
const final;
92 void AddSymmetry(std::unique_ptr<SparsePermutation> permutation);
100 void Permute(
int index, absl::Span<const Literal>
input,
101 std::vector<Literal>* output)
const;
105 bool PropagateNext(
Trail* trail);
109 std::vector<std::unique_ptr<SparsePermutation>> permutations_;
113 ImageInfo(
int p,
Literal i) : permutation_index(p), image(
i) {}
115 int permutation_index;
123 struct AssignedLiteralInfo {
124 AssignedLiteralInfo(Literal l, Literal
i,
int index)
125 : literal(l), image(
i), first_non_symmetric_info_index_so_far(index) {}
136 int first_non_symmetric_info_index_so_far;
138 std::vector<std::vector<AssignedLiteralInfo>> permutation_trails_;
143 bool Enqueue(
const Trail& trail, Literal literal, Literal image,
144 std::vector<AssignedLiteralInfo>* p_trail);
149 mutable util_intops::StrongVector<LiteralIndex, Literal> tmp_literal_mapping_;
153 int source_trail_index;
156 std::vector<ReasonInfo> reasons_;
158 mutable StatsGroup stats_;
159 int num_propagations_;