Skip to content

Commit 7e6f8ac

Browse files
authored
Merge pull request #7248 from diffblue/chc_verbose
CHC solver: redesigned verbose output
2 parents 0e96666 + 5d2bf4e commit 7e6f8ac

File tree

6 files changed

+70
-23
lines changed

6 files changed

+70
-23
lines changed

src/cprover/axioms.cpp

+4
Original file line numberDiff line numberDiff line change
@@ -74,8 +74,10 @@ void axiomst::evaluate_fc()
7474
operands_equal,
7575
equal_exprt(
7676
*a_it, typecast_exprt::conditional_cast(*b_it, a_it->type())));
77+
#if 0
7778
if(verbose)
7879
std::cout << "EVALUATE: " << format(implication) << '\n';
80+
#endif
7981
dest << replace(implication);
8082
}
8183
}
@@ -752,11 +754,13 @@ void axiomst::emit()
752754
constraint.visit_pre([this](const exprt &src) { node(src); });
753755

754756
auto constraint_replaced = replace(constraint);
757+
#if 0
755758
if(verbose)
756759
{
757760
std::cout << "CONSTRAINT1: " << format(constraint) << "\n";
758761
std::cout << "CONSTRAINT2: " << format(constraint_replaced) << "\n";
759762
}
763+
#endif
760764
dest << constraint_replaced;
761765
}
762766

src/cprover/counterexample_found.cpp

+5-1
Original file line numberDiff line numberDiff line change
@@ -33,11 +33,13 @@ void show_assignment(const bv_pointers_widet &solver)
3333
if(expr.id() == ID_and || expr.id() == ID_or || expr.id() == ID_not)
3434
continue;
3535
auto value = solver.l_get(entry.second);
36+
# if 0
3637
std::cout << "|| " << format(expr) << " --> " << value << "\n";
38+
# endif
3739
}
3840
#endif
3941

40-
#if 1
42+
#if 0
4143
for(auto &entry : solver.get_map().get_mapping())
4244
{
4345
const auto &identifier = entry.first;
@@ -47,12 +49,14 @@ void show_assignment(const bv_pointers_widet &solver)
4749
}
4850
#endif
4951

52+
#if 0
5053
for(auto &entry : solver.get_symbols())
5154
{
5255
const auto &identifier = entry.first;
5356
auto value = solver.l_get(entry.second);
5457
std::cout << "|| " << identifier << " --> " << value << "\n";
5558
}
59+
#endif
5660
}
5761

5862
static exprt evaluator_rec(

src/cprover/propagate.cpp

+13-8
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,11 @@ Author: Daniel Kroening, [email protected]
1414
#include <util/format_expr.h>
1515
#include <util/simplify_expr.h>
1616

17+
#include "console.h"
1718
#include "simplify_state_expr.h"
1819
#include "state.h"
1920

21+
#include <iomanip>
2022
#include <iostream>
2123

2224
void propagate(
@@ -28,16 +30,17 @@ void propagate(
2830
const std::function<void(const symbol_exprt &, exprt, const workt::patht &)>
2931
&propagator)
3032
{
33+
auto &f = frames[work.frame.index];
34+
3135
if(verbose)
3236
{
33-
std::cout << "PROP";
34-
for(const auto &p : work.path)
35-
std::cout << ' ' << p.index;
36-
std::cout << ": " << format(work.invariant) << '\n';
37+
std::cout << '\n';
38+
std::cout << consolet::faint;
39+
std::cout << ' ' << std::setw(2) << work.frame.index << ' ';
40+
std::cout << consolet::reset << consolet::cyan << format(work.invariant);
41+
std::cout << consolet::reset << '\n';
3742
}
3843

39-
auto &f = frames[work.frame.index];
40-
4144
for(const auto &implication : f.implications)
4245
{
4346
auto &next_state = implication.rhs.arguments().front();
@@ -52,6 +55,7 @@ void propagate(
5255
std::cout << "SIMPa: " << format(simplified1a) << "\n";
5356
abort();
5457
}
58+
5559
auto simplified2 = simplify_expr(simplified1, ns);
5660

5761
if(implication.lhs.id() == ID_function_application)
@@ -69,8 +73,9 @@ void propagate(
6973
auto &function_application =
7074
to_function_application_expr(to_and_expr(implication.lhs).op0());
7175
auto &state = to_symbol_expr(function_application.function());
72-
auto cond = to_and_expr(implication.lhs).op1();
73-
propagator(state, implies_exprt(cond, simplified2), work.path);
76+
auto cond1 = to_and_expr(implication.lhs).op1();
77+
auto cond2 = implies_exprt(cond1, simplified2);
78+
propagator(state, cond2, work.path);
7479
}
7580
}
7681
}

src/cprover/solver.cpp

+41-14
Original file line numberDiff line numberDiff line change
@@ -220,7 +220,11 @@ bool is_subsumed(
220220
return true; // b is subsumed by a conjunct in a
221221

222222
cout_message_handlert message_handler;
223+
#if 0
223224
message_handler.set_verbosity(verbose ? 10 : 1);
225+
#else
226+
message_handler.set_verbosity(1);
227+
#endif
224228
satcheckt satcheck(message_handler);
225229
bv_pointers_widet solver(ns, satcheck, message_handler);
226230
axiomst axioms(solver, address_taken, verbose, ns);
@@ -295,7 +299,7 @@ void solver(
295299
take_time_resourcet stop_time(property.stop);
296300

297301
if(solver_options.verbose)
298-
std::cout << "\nDoing " << format(property.condition) << '\n';
302+
std::cout << "Doing " << format(property.condition) << '\n';
299303

300304
for(auto &frame : frames)
301305
frame.reset();
@@ -325,31 +329,50 @@ void solver(
325329

326330
if(solver_options.verbose)
327331
{
328-
std::cout << "F: " << format(symbol) << " <- " << format(invariant)
329-
<< '\n';
332+
// print the current invariants in the frame
333+
for(const auto &invariant : f.invariants)
334+
{
335+
std::cout << consolet::faint << consolet::blue;
336+
std::cout << 'I' << std::setw(2) << frame_ref.index << ' ';
337+
std::cout << format(invariant);
338+
std::cout << consolet::reset << '\n';
339+
}
340+
341+
std::cout << "\u2192" << consolet::faint << std::setw(2)
342+
<< frame_ref.index << consolet::reset << ' ';
330343
}
331344

332-
// check if already subsumed
333-
if(is_subsumed(
334-
f.invariants,
335-
f.auxiliaries,
336-
invariant,
337-
address_taken,
338-
solver_options.verbose,
339-
ns))
345+
// trivially true?
346+
if(invariant.is_true())
347+
{
348+
if(solver_options.verbose)
349+
std::cout << "trivial\n";
350+
}
351+
else if(is_subsumed(
352+
f.invariants,
353+
f.auxiliaries,
354+
invariant,
355+
address_taken,
356+
solver_options.verbose,
357+
ns))
340358
{
341359
if(solver_options.verbose)
342-
std::cout << "*** SUBSUMED\n";
360+
std::cout << "subsumed " << format(invariant) << '\n';
343361
}
344362
else if(count_frame(path, frame_ref) > solver_options.loop_limit)
345363
{
346364
// loop limit exceeded, drop it
347365
if(solver_options.verbose)
348-
std::cout << "*** DROPPED\n";
349-
dropped.push_back(workt(frame_ref, invariant, path));
366+
std::cout << consolet::red << "dropped" << consolet::reset << ' '
367+
<< format(invariant) << '\n';
368+
dropped.emplace_back(frame_ref, invariant, path);
350369
}
351370
else
352371
{
372+
// propagate
373+
if(solver_options.verbose)
374+
std::cout << format(invariant) << '\n';
375+
353376
auto new_path = path;
354377
new_path.push_back(frame_ref);
355378
queue.emplace_back(f.ref, std::move(invariant), std::move(new_path));
@@ -367,11 +390,13 @@ void solver(
367390

368391
frames[work.frame.index].add_invariant(work.invariant);
369392

393+
#if 0
370394
if(solver_options.verbose)
371395
{
372396
dump(frames, property, true, true);
373397
std::cout << '\n';
374398
}
399+
#endif
375400

376401
auto counterexample_found = ::counterexample_found(
377402
frames, work, address_taken, solver_options.verbose, ns);
@@ -401,11 +426,13 @@ solver_resultt solver(
401426
{
402427
const auto address_taken = ::address_taken(constraints);
403428

429+
#if 0
404430
if(solver_options.verbose)
405431
{
406432
for(auto &a : address_taken)
407433
std::cout << "address_taken: " << format(a) << '\n';
408434
}
435+
#endif
409436

410437
auto frames = setup_frames(constraints);
411438

src/cprover/solver_progress.cpp

+5
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,10 @@ void solver_progresst::operator()(size_t current)
1919
{
2020
if(verbose)
2121
{
22+
if(current != 0)
23+
std::cout << '\n';
24+
std::cout << consolet::orange << "Processing property " << (current + 1)
25+
<< '/' << total << consolet::reset << '\n';
2226
}
2327
else
2428
{
@@ -44,6 +48,7 @@ void solver_progresst::finished()
4448
{
4549
if(verbose)
4650
{
51+
std::cout << '\n';
4752
}
4853
else
4954
{

src/cprover/state_encoding.cpp

+2
Original file line numberDiff line numberDiff line change
@@ -1245,11 +1245,13 @@ solver_resultt state_encoding_solver(
12451245

12461246
equality_propagation(container.constraints);
12471247

1248+
#if 0
12481249
if(solver_options.verbose)
12491250
{
12501251
ascii_encoding_targett dest(std::cout);
12511252
dest << container;
12521253
}
1254+
#endif
12531255

12541256
return solver(container.constraints, solver_options, ns);
12551257
}

0 commit comments

Comments
 (0)