@@ -161,11 +161,9 @@ class degree_shift_tactic : public tactic {
161
161
162
162
void display_candidates (std::ostream & out) {
163
163
out << " candidates:\n " ;
164
- for (auto const & kv : m_var2degree) {
165
- if (!kv.m_value .is_one ()) {
166
- out << " POWER: " << kv.m_value << " \n " << mk_ismt2_pp (kv.m_key , m) << " \n " ;
167
- }
168
- }
164
+ for (auto const & [k, v] : m_var2degree)
165
+ if (!v.is_one ())
166
+ out << " POWER: " << v << " \n " << mk_ismt2_pp (k, m) << " \n " ;
169
167
}
170
168
171
169
void collect (goal const & g) {
@@ -182,12 +180,11 @@ class degree_shift_tactic : public tactic {
182
180
void discard_non_candidates () {
183
181
m_pinned.reset ();
184
182
ptr_vector<app> to_delete;
185
- for (auto const & kv : m_var2degree) {
186
- if (kv. m_value .is_one ())
187
- to_delete.push_back (kv. m_key );
183
+ for (auto const & [k, v] : m_var2degree)
184
+ if (v .is_one ())
185
+ to_delete.push_back (k );
188
186
else
189
- m_pinned.push_back (kv.m_key ); // make sure it is not deleted during simplifications
190
- }
187
+ m_pinned.push_back (k); // make sure it is not deleted during simplifications
191
188
for (app* a : to_delete)
192
189
m_var2degree.erase (a);
193
190
}
@@ -199,23 +196,23 @@ class degree_shift_tactic : public tactic {
199
196
xmc = alloc (generic_model_converter, m, " degree_shift" );
200
197
mc = xmc;
201
198
}
202
- for (auto const & kv : m_var2degree) {
203
- SASSERT (kv. m_value .is_int ());
204
- SASSERT (kv. m_value >= rational (2 ));
205
- app * fresh = m.mk_fresh_const (nullptr , kv. m_key ->get_decl ()->get_range ());
199
+ for (auto const & [k, v] : m_var2degree) {
200
+ SASSERT (v .is_int ());
201
+ SASSERT (v >= rational (2 ));
202
+ app * fresh = m.mk_fresh_const (nullptr , k ->get_decl ()->get_range ());
206
203
m_pinned.push_back (fresh);
207
- m_var2var.insert (kv. m_key , fresh);
204
+ m_var2var.insert (k , fresh);
208
205
if (m_produce_models) {
209
206
xmc->hide (fresh->get_decl ());
210
- xmc->add (kv. m_key ->get_decl (), mk_power (fresh, rational (1 )/kv. m_value ));
207
+ xmc->add (k ->get_decl (), mk_power (fresh, rational (1 )/v ));
211
208
}
212
209
if (m_produce_proofs) {
213
- expr * s = mk_power (kv. m_key , kv. m_value );
210
+ expr * s = mk_power (k, v );
214
211
expr * eq = m.mk_eq (fresh, s);
215
212
proof * pr1 = m.mk_def_intro (eq);
216
213
proof * result_pr = m.mk_apply_def (fresh, s, pr1);
217
214
m_pinned.push_back (result_pr);
218
- m_var2pr.insert (kv. m_key , result_pr);
215
+ m_var2pr.insert (k , result_pr);
219
216
}
220
217
}
221
218
}
@@ -235,28 +232,24 @@ class degree_shift_tactic : public tactic {
235
232
// substitute
236
233
expr_ref new_curr (m);
237
234
proof_ref new_pr (m);
238
- unsigned size = g-> size () ;
239
- for (unsigned idx = 0 ; idx < size; idx++ ) {
235
+ unsigned idx = 0 ;
236
+ for (auto [curr, dep, pr] : *g ) {
240
237
checkpoint ();
241
- expr * curr = g->form (idx);
242
238
(*m_rw)(curr, new_curr, new_pr);
243
- if (m_produce_proofs) {
244
- proof * pr = g->pr (idx);
245
- new_pr = m.mk_modus_ponens (pr, new_pr);
246
- }
247
- g->update (idx, new_curr, new_pr, g->dep (idx));
239
+ new_pr = m.mk_modus_ponens (pr, new_pr);
240
+ g->update (idx++, new_curr, new_pr, dep);
248
241
}
249
242
250
243
// add >= 0 constraints for variables with even degree
251
- for (auto const & kv : m_var2degree) {
252
- SASSERT (kv. m_value .is_int ());
253
- SASSERT (kv. m_value >= rational (2 ));
254
- if (kv. m_value .is_even ()) {
255
- app * new_var = m_var2var.find (kv. m_key );
244
+ for (auto const & [k,v] : m_var2degree) {
245
+ SASSERT (v .is_int ());
246
+ SASSERT (v >= rational (2 ));
247
+ if (v .is_even ()) {
248
+ app * new_var = m_var2var.find (k );
256
249
app * new_c = m_autil.mk_ge (new_var, m_autil.mk_numeral (rational (0 ), false ));
257
250
proof * new_pr = nullptr ;
258
251
if (m_produce_proofs) {
259
- proof * pr = m_var2pr.find (kv. m_key );
252
+ proof * pr = m_var2pr.find (k );
260
253
new_pr = m.mk_th_lemma (m_autil.get_family_id (), new_c, 1 , &pr);
261
254
}
262
255
g->assert_expr (new_c, new_pr, nullptr );
0 commit comments