ABC: A System for Sequential Synthesis and Verification
 
Loading...
Searching...
No Matches
weaken.c
Go to the documentation of this file.
1#include "weaken.h"
2#include "inline.h"
3
5
6static void push_witness_literal (kissat *solver, unsigned ilit) {
7 KISSAT_assert (!VALUE (ilit));
8 int elit = kissat_export_literal (solver, ilit);
9 KISSAT_assert (elit);
10 LOG2 ("pushing external witness literal %d on extension stack", elit);
11 const extension ext = kissat_extension (true, elit);
12 PUSH_STACK (solver->extend, ext);
13}
14
15static void push_clause_literal (kissat *solver, unsigned ilit) {
16 const value value = VALUE (ilit);
17 KISSAT_assert (value <= 0);
18 if (value < 0)
19 LOG ("not pushing internal falsified clause literal %s "
20 "on extension stack",
21 LOGLIT (ilit));
22 else {
23 int elit = kissat_export_literal (solver, ilit);
24 KISSAT_assert (elit);
25 LOG2 ("pushing external clause literal %d on extension stack", elit);
26 const extension ext = kissat_extension (false, elit);
27 PUSH_STACK (solver->extend, ext);
28 }
29}
30
31#define LOGPUSHED(SIZE) \
32 do { \
33 LOGEXT ((SIZE), END_STACK (solver->extend) - (SIZE), \
34 "pushed size %zu witness labelled clause at", \
35 (size_t) (SIZE)); \
36 } while (0)
37
39 INC (weakened);
40 LOGCLS (c, "blocking on %s and weakening", LOGLIT (lit));
41 push_witness_literal (solver, lit);
42 for (all_literals_in_clause (other, c))
43 if (lit != other)
44 push_clause_literal (solver, other);
45 LOGPUSHED (c->size);
46}
47
48void kissat_weaken_binary (kissat *solver, unsigned lit, unsigned other) {
49 INC (weakened);
50 LOGBINARY (lit, other, "blocking on %s and weakening", LOGLIT (lit));
51 push_witness_literal (solver, lit);
52 push_clause_literal (solver, other);
53 LOGPUSHED (2);
54}
55
57 INC (weakened);
58 LOG ("blocking and weakening unit %s", LOGLIT (lit));
59 push_witness_literal (solver, lit);
60 LOGEXT (1, END_STACK (solver->extend) - 1,
61 "pushed witness labelled unit clause at");
62}
63
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
#define PUSH_STACK(S, E)
Definition stack.h:39
#define END_STACK(S)
Definition stack.h:48
#define INC(NAME)
#define LOG(...)
ABC_NAMESPACE_IMPL_START typedef signed char value
#define all_literals_in_clause(LIT, C)
Definition clause.h:47
#define KISSAT_assert(ignore)
Definition global.h:13
#define solver
Definition kitten.c:211
#define LOGBINARY(...)
Definition logging.h:442
#define LOGEXT(...)
Definition logging.h:388
#define LOGCLS(...)
Definition logging.h:415
#define LOG2(...)
Definition logging.h:352
#define LOGLIT(...)
Definition logging.hpp:99
int lit
Definition satVec.h:130
unsigned size
Definition clause.h:37
#define VALUE(LIT)
Definition value.h:10
void kissat_weaken_binary(kissat *solver, unsigned lit, unsigned other)
Definition weaken.c:48
void kissat_weaken_clause(kissat *solver, unsigned lit, clause *c)
Definition weaken.c:38
void kissat_weaken_unit(kissat *solver, unsigned lit)
Definition weaken.c:56
#define LOGPUSHED(SIZE)
Definition weaken.c:31